ROOT logo
/**
 * @file   AddTaskFMDELoss.C
 * @author Christian Holm Christensen <cholm@dalsgaard.hehi.nbi.dk>
 * @date   Wed Mar 23 12:14:03 2011
 * 
 * @brief  
 * 
 * 
 * @ingroup pwglf_forward_scripts_tasks
 */
/**
 * @defgroup pwglf_forward_eloss Energy Loss Fits
 *
 * Fitting the energy loss @f$\Delta/\Delta_{mip}@f$ spectra 
 *
 * @ingroup pwglf_forward_topical
 */

/**
 * This is the macro to include the FMD energy fitter in a train.  
 * 
 * @param useTuple  If true, create NTuple of hits
 * @param debug     Debug level
 *
 * @return Newly created task 
 *
 * @ingroup pwglf_forward_eloss
 */
AliAnalysisTask*
AddTaskFMDMCHit(Bool_t useTuple=false, 
		Int_t  debug=0)
{
  // --- Load libraries ----------------------------------------------
  gROOT->LoadClass("AliFMDDigit",             "FMDbase");
  gROOT->LoadClass("AliFMDHit",               "FMDsim");
  gROOT->LoadClass("AliAODForwardMult",       "PWGLFforward2");
  gROOT->LoadClass("AliFMDMCHitEnergyFitter", "PWGLFforwardhit");

  // --- Get analysis manager ----------------------------------------
  AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
  if (!mgr) {
    Error("AddTaskFMDELoss", "No analysis manager to connect to.");
    return NULL;
  }   

  // --- Make the task and add it to the manager ---------------------
  AliFMDMCHitEnergyFitterTask* task = 
    new AliFMDMCHitEnergyFitterTask("ForwardHitELoss", 
				    useTuple);
  // --- Set parameters on the algorithms ----------------------------
  // Set the number of SPD tracklets for which we consider the event a
  // low flux event
  task->GetEventInspector().SetLowFluxCut(1000); 
  // Set the maximum error on v_z [cm]
  task->GetEventInspector().SetMaxVzErr(0.2);
  // Set the eta axis to use - note, this overrides whatever is used
  // by the rest of the algorithms - but only for the energy fitter
  // algorithm. 
  task->GetEnergyFitter().SetEtaAxis(100, -4, 6);
  // Set maximum energy loss to consider 
  task->GetEnergyFitter().SetMaxE(15); 
  // Set number of energy loss bins 
  task->GetEnergyFitter().SetNEbins(500);
  // Set whether to use increasing bin sizes 
  task->GetEnergyFitter().SetUseIncreasingBins(true);
  // Set whether to do fit the energy distributions 
  task->GetEnergyFitter().SetDoFits(kTRUE);
  // Set whether to make the correction object 
  // task->GetEnergyFitter().SetDoMakeObject(kTRUE);
  // Set the low cut used for energy
  task->GetEnergyFitter().SetLowCut(0.05);
  // Set the number of bins to subtract from maximum of distributions
  // to get the lower bound of the fit range
  task->GetEnergyFitter().SetFitRangeBinWidth(4);
  // Set the maximum number of landaus to try to fit (max 5)
  task->GetEnergyFitter().SetNParticles(1);
  // Set the minimum number of entries in the distribution before
  // trying to fit to the data - 10K seems the absolute minimum
  task->GetEnergyFitter().SetMinEntries(3000 /*10000*/);
  // If set, only collect statistics for MB.  This is to prevent a
  // bias when looping over data where the MB trigger is downscaled.
  // task->SetOnlyMB(onlyMB);
  // Debug
  task->SetDebug(debug);

  // --- Set limits on fits the energy -------------------------------
  // DO NOT CHANGE THESE UNLESS YOU KNOW WHAT YOU ARE DOING
  // Maximum relative error on parameters 
  // AliFMDCorrELossFit::ELossFit::fgMaxRelError = .12;
  // Least weight to use 
  // AliFMDCorrELossFit::ELossFit::fgLeastWeight = 1e-5;
  // Maximum value of reduced chi^2 
  // AliFMDCorrELossFit::ELossFit::fgMaxChi2nu   = 20;
  
  // --- Make the output container and connect it --------------------
  task->Connect(0,0);
  if (useTuple) { 
    AliAnalysisDataContainer* tuple = 
      mgr->CreateContainer("tuple", TNtuple::Class(), 
			   AliAnalysisManager::kOutputContainer,
			   "forward_tuple.root"
			   /*AliAnalysisManager::GetCommonFileName()*/);
    mgr->ConnectOutput(task, 3, tuple);
  }

  Printf("Returning task %p", task);
  return task;
}
//
// EOF
//
 AddTaskFMDMCHit.C:1
 AddTaskFMDMCHit.C:2
 AddTaskFMDMCHit.C:3
 AddTaskFMDMCHit.C:4
 AddTaskFMDMCHit.C:5
 AddTaskFMDMCHit.C:6
 AddTaskFMDMCHit.C:7
 AddTaskFMDMCHit.C:8
 AddTaskFMDMCHit.C:9
 AddTaskFMDMCHit.C:10
 AddTaskFMDMCHit.C:11
 AddTaskFMDMCHit.C:12
 AddTaskFMDMCHit.C:13
 AddTaskFMDMCHit.C:14
 AddTaskFMDMCHit.C:15
 AddTaskFMDMCHit.C:16
 AddTaskFMDMCHit.C:17
 AddTaskFMDMCHit.C:18
 AddTaskFMDMCHit.C:19
 AddTaskFMDMCHit.C:20
 AddTaskFMDMCHit.C:21
 AddTaskFMDMCHit.C:22
 AddTaskFMDMCHit.C:23
 AddTaskFMDMCHit.C:24
 AddTaskFMDMCHit.C:25
 AddTaskFMDMCHit.C:26
 AddTaskFMDMCHit.C:27
 AddTaskFMDMCHit.C:28
 AddTaskFMDMCHit.C:29
 AddTaskFMDMCHit.C:30
 AddTaskFMDMCHit.C:31
 AddTaskFMDMCHit.C:32
 AddTaskFMDMCHit.C:33
 AddTaskFMDMCHit.C:34
 AddTaskFMDMCHit.C:35
 AddTaskFMDMCHit.C:36
 AddTaskFMDMCHit.C:37
 AddTaskFMDMCHit.C:38
 AddTaskFMDMCHit.C:39
 AddTaskFMDMCHit.C:40
 AddTaskFMDMCHit.C:41
 AddTaskFMDMCHit.C:42
 AddTaskFMDMCHit.C:43
 AddTaskFMDMCHit.C:44
 AddTaskFMDMCHit.C:45
 AddTaskFMDMCHit.C:46
 AddTaskFMDMCHit.C:47
 AddTaskFMDMCHit.C:48
 AddTaskFMDMCHit.C:49
 AddTaskFMDMCHit.C:50
 AddTaskFMDMCHit.C:51
 AddTaskFMDMCHit.C:52
 AddTaskFMDMCHit.C:53
 AddTaskFMDMCHit.C:54
 AddTaskFMDMCHit.C:55
 AddTaskFMDMCHit.C:56
 AddTaskFMDMCHit.C:57
 AddTaskFMDMCHit.C:58
 AddTaskFMDMCHit.C:59
 AddTaskFMDMCHit.C:60
 AddTaskFMDMCHit.C:61
 AddTaskFMDMCHit.C:62
 AddTaskFMDMCHit.C:63
 AddTaskFMDMCHit.C:64
 AddTaskFMDMCHit.C:65
 AddTaskFMDMCHit.C:66
 AddTaskFMDMCHit.C:67
 AddTaskFMDMCHit.C:68
 AddTaskFMDMCHit.C:69
 AddTaskFMDMCHit.C:70
 AddTaskFMDMCHit.C:71
 AddTaskFMDMCHit.C:72
 AddTaskFMDMCHit.C:73
 AddTaskFMDMCHit.C:74
 AddTaskFMDMCHit.C:75
 AddTaskFMDMCHit.C:76
 AddTaskFMDMCHit.C:77
 AddTaskFMDMCHit.C:78
 AddTaskFMDMCHit.C:79
 AddTaskFMDMCHit.C:80
 AddTaskFMDMCHit.C:81
 AddTaskFMDMCHit.C:82
 AddTaskFMDMCHit.C:83
 AddTaskFMDMCHit.C:84
 AddTaskFMDMCHit.C:85
 AddTaskFMDMCHit.C:86
 AddTaskFMDMCHit.C:87
 AddTaskFMDMCHit.C:88
 AddTaskFMDMCHit.C:89
 AddTaskFMDMCHit.C:90
 AddTaskFMDMCHit.C:91
 AddTaskFMDMCHit.C:92
 AddTaskFMDMCHit.C:93
 AddTaskFMDMCHit.C:94
 AddTaskFMDMCHit.C:95
 AddTaskFMDMCHit.C:96
 AddTaskFMDMCHit.C:97
 AddTaskFMDMCHit.C:98
 AddTaskFMDMCHit.C:99
 AddTaskFMDMCHit.C:100
 AddTaskFMDMCHit.C:101
 AddTaskFMDMCHit.C:102
 AddTaskFMDMCHit.C:103
 AddTaskFMDMCHit.C:104
 AddTaskFMDMCHit.C:105
 AddTaskFMDMCHit.C:106
 AddTaskFMDMCHit.C:107
 AddTaskFMDMCHit.C:108
 AddTaskFMDMCHit.C:109
 AddTaskFMDMCHit.C:110
 AddTaskFMDMCHit.C:111
 AddTaskFMDMCHit.C:112