Various changes and fixes
[u/mrichter/AliRoot.git] / PWG2 / FORWARD / analysis2 / AddTaskFMDELoss.C
1 /** 
2  * @defgroup pwg2_forward_scripts Scripts used in the analysis
3  *
4  * @ingroup pwg2_forward
5  */
6 /**
7  * @file 
8  * @ingroup pwg2_forward_scripts
9  * 
10  */
11 /**
12  * This is the macro to include the FMD energy fitter in a train.  
13  * 
14  * @ingroup pwg2_forward_scripts
15  */
16 AliAnalysisTask*
17 AddTaskFMDELoss(Bool_t mc, Float_t blow=0, Float_t bhigh=100)
18 {
19   gSystem->Load("libPWG2forward2");
20
21   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
22   if (!mgr) {
23     Error("AddTaskFMD", "No analysis manager to connect to.");
24     return NULL;
25   }   
26   
27   // --- Make the task and add it to the manager ---------------------
28   AliFMDEnergyFitterTask* task = new AliFMDEnergyFitterTask("fmdEnergyFitter");
29   task->SetBLow(blow);
30   task->SetBLow(bhigh);
31   mgr->AddTask(task);
32   
33   // --- Set parameters on the algorithms ----------------------------
34   // Set the number of SPD tracklets for which we consider the event a
35   // low flux event
36   task->GetEventInspector().SetLowFluxCut(1000); 
37   // Set the maximum error on v_z [cm]
38   task->GetEventInspector().SetMaxVzErr(0.2);
39   // Set the eta axis to use - note, this overrides whatever is used
40   // by the rest of the algorithms - but only for the energy fitter
41   // algorithm. 
42   task->GetEnergyFitter().SetEtaAxis(200, -4, 6);
43   // Set maximum energy loss to consider 
44   task->GetEnergyFitter().SetMaxE(15); 
45   // Set number of energy loss bins 
46   task->GetEnergyFitter().SetNEbins(450);
47   // Set whether to use increasing bin sizes 
48   task->GetEnergyFitter().SetUseIncreasingBins(true);
49   // Set whether to do fit the energy distributions 
50   task->GetEnergyFitter().SetDoFits(kTRUE);
51   // Set whether to make the correction object 
52   task->GetEnergyFitter().SetDoMakeObject(kTRUE);
53   // Set the low cut used for energy
54   task->GetEnergyFitter().SetLowCut(0.4);
55   // Set the number of bins to subtract from maximum of distributions
56   // to get the lower bound of the fit range
57   task->GetEnergyFitter().SetFitRangeBinWidth(4);
58   // Set the maximum number of landaus to try to fit (max 5)
59   task->GetEnergyFitter().SetNParticles(5);
60   // Set the minimum number of entries in the distribution before
61   // trying to fit to the data
62   task->GetEnergyFitter().SetMinEntries(1000);
63   task->GetEnergyFitter().SetMaxRelativeParameterError(0.12);
64   task->GetEnergyFitter().SetMaxChi2PerNDF(10);
65   task->GetEnergyFitter().SetMinWeight(1e-5);
66   // --- Set limits on fits the energy -------------------------------
67   // Maximum relative error on parameters 
68   AliFMDCorrELossFit::ELossFit::fgMaxRelError = .12;
69   // Least weight to use 
70   AliFMDCorrELossFit::ELossFit::fgLeastWeight = 1e-5;
71   // Maximum value of reduced chi^2 
72   AliFMDCorrELossFit::ELossFit::fgMaxChi2nu   = 5;
73     
74   // --- Make the output container and connect it --------------------
75   TString outputfile = AliAnalysisManager::GetCommonFileName();
76   // outputfile += ":PWG2forwardDnDeta"; 
77   // Form(":%s",pars->GetDndetaAnalysisName());
78   AliAnalysisDataContainer* histOut = 
79     mgr->CreateContainer("Forward", TList::Class(), 
80                          AliAnalysisManager::kOutputContainer,outputfile);
81   mgr->ConnectInput(task, 0, mgr->GetCommonInputContainer());
82   mgr->ConnectOutput(task, 1, histOut);
83
84   return task;
85 }