]>
Commit | Line | Data |
---|---|---|
b5fc8a3e | 1 | Bool_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 |