]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG2/runProtonCorrection.C
Set default directory of histogram to 0 (Marian)
[u/mrichter/AliRoot.git] / PWG2 / runProtonCorrection.C
CommitLineData
b5fc8a3e 1Bool_t runProtonCorrection(Int_t stats = 0, const char* dataset = 0x0) {
2 //macro used to extract the correction maps
3 //using the official correction framework of ALICE
4 //for protons and antiprotons
5 //Author: Panos.Christakoglou@cern.ch
6
7 //________________________________________//
8 //Connect to proof
9 //TProof::Reset("proof://lxb6046.cern.ch");
10 TProof::Open("proof://lxb6046.cern.ch");
11
12 // Enable the STEERBase Package
13 gProof->UploadPackage("STEERBase.par");
14 gProof->EnablePackage("STEERBase");
15 // Enable the ESD Package
16 gProof->UploadPackage("ESD.par");
17 gProof->EnablePackage("ESD");
18 // Enable the AOD Package
19 gProof->UploadPackage("AOD.par");
20 gProof->EnablePackage("AOD");
21 // Enable the Analysis Package
22 gProof->UploadPackage("ANALYSIS.par");
23 gProof->EnablePackage("ANALYSIS");
24 gProof->UploadPackage("ANALYSISalice.par");
25 gProof->EnablePackage("ANALYSISalice");
26 // Enable the CORRFW Package
27 gProof->UploadPackage("CORRFW.par");
28 gProof->EnablePackage("CORRFW");
29
30 gProof->Load("./AliProtonCorrectionTask.cxx+g");
31
32 //________________________________________//
33 //Container definition
34 //Variables of the GRID
35 //For the time being: y-pT
36 //Next step: add Vz
37 //Setting up the container grid...
340705b3 38 //===============//
39 //Global tracking//
40 //===============//
b5fc8a3e 41 const Double_t ymin = -1.0;
42 const Double_t ymax = 1.0;
340705b3 43 const Int_t nbin1 = 20; //bins in y
b5fc8a3e 44 const Double_t ptmin = 0.4;
45 const Double_t ptmax = 3.1;
340705b3 46 const Int_t nbin2 = 27; //bins in pT
47 //===============//
48 // TPC tracking //
49 //===============//
50 /*const Double_t ymin = -0.5;
51 const Double_t ymax = 0.5;
52 const Int_t nbin1 = 10; //bins in y
53 const Double_t ptmin = 0.4;
54 const Double_t ptmax = 0.9;
55 const Int_t nbin2 = 15;*/ //bins in pT
56
b5fc8a3e 57 //Setting up the container grid...
58 UInt_t nstep = 4; //number of selection steps MC
340705b3 59 UInt_t iy = 0;
60 UInt_t ipT = 1;
b5fc8a3e 61 const Int_t nvar = 2; //number of variables on the grid:y-pT
340705b3 62 //arrays for the number of bins in each dimension
b5fc8a3e 63 Int_t iBin[nvar];
64 iBin[0]=nbin1;
65 iBin[1]=nbin2;
66 //arrays for lower bounds :
67 Double_t *binLim1=new Double_t[nbin1+1];
68 Double_t *binLim2=new Double_t[nbin2+1];
69 //values for bin lower bounds
70 for(Int_t i=0; i<=nbin1; i++) binLim1[i]=(Double_t)ymin + (ymax-ymin) /nbin1*(Double_t)i;
71 for(Int_t i=0; i<=nbin2; i++) binLim2[i]=(Double_t)ptmin + (ptmax-ptmin)/nbin2*(Double_t)i;
72 //one "container" for MC
73 AliCFContainer* container = new AliCFContainer("container","container for tracks",nstep,nvar,iBin);
74 //setting the bin limits
75 container -> SetBinLimits(iy,binLim1);
76 container -> SetBinLimits(ipT,binLim2);
77
78 //________________________________________//
79 // SET TLIST FOR QA HISTOS
80 TList* qaList = new TList();
81 //Cuts
82 const Int_t mintrackrefsTPC = 2;
83 const Int_t mintrackrefsITS = 3;
84 const Int_t charge = 1;
85 const Int_t PDG = 2212;
340705b3 86
b5fc8a3e 87 const Int_t minclustersTPC = 50;
340705b3 88 const Float_t maxChi2PerTPCCluster = 3.5;
89 const Float_t maxCov11 = 2.0;
90 const Float_t maxCov22 = 2.0;
91 const Float_t maxCov33 = 0.5;
92 const Float_t maxCov44 = 0.5;
93 const Float_t maxCov55 = 2.0;
94 const Float_t maxSigmaToVertexTPC = 2.5;
95
96 const Int_t minclustersITS = 5;
97 const Float_t maxSigmaToVertex = 2.5;
98
b5fc8a3e 99 // Gen-Level kinematic cuts
100 AliCFTrackKineCuts *mcKineCuts = new AliCFTrackKineCuts("mcKineCuts","MC-level kinematic cuts");
101 mcKineCuts->SetPtRange(ptmin,ptmax);
102 mcKineCuts->SetRapidityRange(ymin,ymax);
103 mcKineCuts->SetChargeMC(charge);
104 mcKineCuts->SetQAOn(qaList);
105
106 //Particle-Level cuts:
107 AliCFParticleGenCuts* mcGenCuts = new AliCFParticleGenCuts("mcGenCuts","MC particle generation cuts");
108 mcGenCuts->SetRequireIsPrimary();
109 mcGenCuts->SetRequirePdgCode(PDG);
110 mcGenCuts->SetQAOn(qaList);
111
112 //Acceptance Cuts
113 AliCFAcceptanceCuts *mcAccCuts = new AliCFAcceptanceCuts("mcAccCuts","MC acceptance cuts");
114 mcAccCuts->SetMinNHitITS(mintrackrefsITS);
115 mcAccCuts->SetMinNHitTPC(mintrackrefsTPC);
116 mcAccCuts->SetQAOn(qaList);
117
118 // Rec-Level kinematic cuts
119 AliCFTrackKineCuts *recKineCuts = new AliCFTrackKineCuts("recKineCuts","rec-level kine cuts");
120 recKineCuts->SetPtRange(ptmin,ptmax);
121 recKineCuts->SetRapidityRange(ymin,ymax);
122 recKineCuts->SetChargeRec(charge);
123 recKineCuts->SetQAOn(qaList);
124
125 AliCFTrackQualityCuts *recQualityCuts = new AliCFTrackQualityCuts("recQualityCuts","rec-level quality cuts");
126 recQualityCuts->SetMinNClusterTPC(minclustersTPC);
340705b3 127 recQualityCuts->SetMaxChi2PerClusterTPC(maxChi2PerTPCCluster);
128 recQualityCuts->SetMaxCovDiagonalElements(maxCov11,maxCov22,maxCov33,maxCov44,maxCov55);
129 recQualityCuts->SetRequireTPCRefit(kTRUE);
130
131 //recQualityCuts->SetRequireITSRefit(kTRUE);
b5fc8a3e 132 recQualityCuts->SetQAOn(qaList);
133
134 AliCFTrackIsPrimaryCuts *recIsPrimaryCuts = new AliCFTrackIsPrimaryCuts("recIsPrimaryCuts","rec-level isPrimary cuts");
340705b3 135 recIsPrimaryCuts->SetMaxNSigmaToVertex(maxSigmaToVertex);
b5fc8a3e 136 recIsPrimaryCuts->SetQAOn(qaList);
137
138 AliCFTrackCutPid* cutPID = new AliCFTrackCutPid("cutPID","ESD_PID");
139 int n_species = AliPID::kSPECIES;
140 Double_t* prior = new Double_t[n_species];
141
142 prior[0] = 0.0244519;
143 prior[1] = 0.0143988;
144 prior[2] = 0.805747 ;
145 prior[3] = 0.0928785;
146 prior[4] = 0.0625243;
147
148 cutPID->SetPriors(prior);
149 cutPID->SetProbabilityCut(0.0);
150 cutPID->SetDetectors("ITS TPC TOF");
340705b3 151 cutPID->SetParticleType(AliPID::kProton , kTRUE);
b5fc8a3e 152 cutPID->SetQAOn(qaList);
153
154 //________________________________________//
155 TObjArray* mcList = new TObjArray(0);
156 mcList->AddLast(mcKineCuts);
157 mcList->AddLast(mcGenCuts);
158
159 printf("CREATE ACCEPTANCE CUTS\n");
160 TObjArray* accList = new TObjArray(0);
161 accList->AddLast(mcAccCuts);
162
163 printf("CREATE RECONSTRUCTION CUTS\n");
164 TObjArray* recList = new TObjArray(0);
165 recList->AddLast(recKineCuts);
166 recList->AddLast(recQualityCuts);
167 recList->AddLast(recIsPrimaryCuts);
168
169 printf("CREATE PID CUTS\n");
170 TObjArray* fPIDCutList = new TObjArray(0);
171 fPIDCutList->AddLast(cutPID);
172
173 //________________________________________//
174 //CREATE THE INTERFACE TO CORRECTION FRAMEWORK USED IN THE TASK
175 AliCFManager* man = new AliCFManager();
176 man->SetParticleContainer(container);
177 man->SetParticleCutsList(AliCFManager::kPartGenCuts,mcList);
178 man->SetParticleCutsList(AliCFManager::kPartAccCuts,accList);
179 man->SetParticleCutsList(AliCFManager::kPartRecCuts,recList);
180 man->SetParticleCutsList(AliCFManager::kPartSelCuts,fPIDCutList);
181
182 //________________________________________//
183 //CREATE THE TASK
184 AliProtonCorrectionTask *task = new AliProtonCorrectionTask("AliProtonCorrectionTask");
185 task->SetCFManager(man); //here is set the CF manager
186 task->SetQAList(qaList);
187
188 //SETUP THE ANALYSIS MANAGER TO READ INPUT CHAIN AND WRITE DESIRED OUTPUTS
189 printf("CREATE ANALYSIS MANAGER\n");
190 // Make the analysis manager
191 AliAnalysisManager *mgr = new AliAnalysisManager("TestManager");
192
193 AliMCEventHandler* mcHandler = new AliMCEventHandler();
194 AliESDInputHandler* esdHandler = new AliESDInputHandler();
195 mgr->SetMCtruthEventHandler(mcHandler);
196 mgr->SetInputEventHandler(esdHandler);
197
198 //------ input data ------
199 AliAnalysisDataContainer *cinput0 = mgr->CreateContainer("cchain0",TChain::Class(),AliAnalysisManager::kInputContainer);
200
201 // ----- output data -----
202 //slot 0 : default output tree (by default handled by AliAnalysisTaskSE)
203 AliAnalysisDataContainer *coutput0 = mgr->CreateContainer("ctree0", TTree::Class(),AliAnalysisManager::kOutputContainer,"output.root");
204 // output TH1I for event counting
205 AliAnalysisDataContainer *coutput1 = mgr->CreateContainer("chist0", TH1I::Class(),AliAnalysisManager::kOutputContainer,"output.root");
206 // output Correction Framework Container (for acceptance & efficiency calculations)
207 AliAnalysisDataContainer *coutput2 = mgr->CreateContainer("ccontainer0", AliCFContainer::Class(),AliAnalysisManager::kOutputContainer,"output.root");
208 // output QA histograms
209 AliAnalysisDataContainer *coutput3 = mgr->CreateContainer("clist0", TList::Class(),AliAnalysisManager::kOutputContainer,"output.root");
210
211 mgr->AddTask(task);
212 mgr->ConnectInput(task,0,cinput0);
213 mgr->ConnectOutput(task,0,coutput0);
214 mgr->ConnectOutput(task,1,coutput1);
215 mgr->ConnectOutput(task,2,coutput2);
216 mgr->ConnectOutput(task,3,coutput3);
217
218 //________________________________________//
219 if (mgr->InitAnalysis()) {
220 if(dataset)
221 mgr->StartAnalysis("proof",dataset,stats);
222 else {
223 // You should get this macro and the txt file from:
224 // http://aliceinfo.cern.ch/Offline/Analysis/CAF/
225 gROOT->LoadMacro("CreateESDChain.C");
226 TChain* chain = 0x0;
227 chain = CreateESDChain("ESD82XX_30K.txt",stats);
228 chain->SetBranchStatus("*Calo*",0);
229
230 mgr->StartAnalysis("proof",chain);
231 }
232 }
233
234 return kTRUE;
235}
236