]>
Commit | Line | Data |
---|---|---|
93329510 | 1 | ///////////////////////////////////////////////////////////////////////////////////////////// |
2 | // | |
3 | // AddTask* macro for flow analysis | |
4 | // Creates a Flow Event task and adds it to the analysis manager. | |
5 | // Sets the cuts using the correction framework (CORRFW) classes. | |
6 | // Also creates Flow Analysis tasks and connects them to the output of the flow event task. | |
7 | // | |
8 | ///////////////////////////////////////////////////////////////////////////////////////////// | |
9 | ||
7a01f4a7 | 10 | // Define the range for eta subevents (for SP method) |
a02a1889 | 11 | //-----(FMD 1.7 - 5.0)----- |
44e060e0 | 12 | //Double_t minA = -5.0; |
13 | //Double_t maxA = -1.7; | |
14 | //Double_t minB = 1.7; | |
15 | //Double_t maxB = 5.0; | |
a02a1889 | 16 | //-----(Tracklets 0.9 - 2.0)----- |
17 | //Double_t minA = -2.0; | |
18 | //Double_t maxA = -0.9; | |
19 | //Double_t minB = 0.9; | |
20 | //Double_t maxB = 2.0; | |
21 | //-----(Global 0.5 - 0.9)----- | |
22 | Double_t minA = -0.9; | |
23 | Double_t maxA = -0.5; | |
24 | Double_t minB = 0.5; | |
25 | Double_t maxB = 0.9; | |
26 | ||
93329510 | 27 | |
f6cf97c1 | 28 | // use physics selection class |
40c24aa8 | 29 | Bool_t UsePhysicsSelection = kTRUE; |
f6cf97c1 | 30 | |
93329510 | 31 | // SETTING THE CUTS |
32 | ||
c0ed6325 | 33 | //----------Event selection---------- |
34 | Bool_t UseMultCutforESD = kTRUE; | |
35 | //Bool_t UseMultCutforESD = kFALSE; | |
36 | const Int_t multminESD = 1; //used for CORRFW cuts | |
3828db44 | 37 | const Int_t multmaxESD = 1000000; //used for CORRFW cuts |
f01e9bfe | 38 | |
40ca990b | 39 | Bool_t requireVtxCuts = kTRUE; |
21f8d9b1 | 40 | const Double_t vertexXmin = -1.e99; |
41 | const Double_t vertexXmax = 1.e99; | |
42 | const Double_t vertexYmin = -1.e99; | |
43 | const Double_t vertexYmax = 1.e99; | |
44 | const Double_t vertexZmin = -1.e99; | |
45 | const Double_t vertexZmax = 1.e99; | |
46 | const Int_t vertexNContributorsmin = 1; | |
47 | const Int_t vertexNContributorsmax = 10000; | |
40ca990b | 48 | |
ea456d37 | 49 | //Bool_t UseMultCut = kFALSE; |
f6cf97c1 | 50 | Bool_t UseMultCut = kTRUE; |
22063257 | 51 | const Int_t multmin = 1; //used for AliFlowEventSimple (to set the centrality) |
29195b69 | 52 | const Int_t multmax = 10000; //used for AliFlowEventSimple (to set the centrality) |
c0ed6325 | 53 | //const Int_t multmin = 10; //used for AliFlowEventSimple (to set the centrality) |
54 | //const Int_t multmax = 1000000; //used for AliFlowEventSimple (to set the centrality) | |
47d5b28f | 55 | |
94cd9888 | 56 | |
c0ed6325 | 57 | //----------For RP selection---------- |
44e060e0 | 58 | // Use Global tracks ("Global"), or SPD tracklets ("Tracklet") |
59 | // or FMD hits ("FMD") for the RP selection | |
ef4799a7 | 60 | const TString rptype = "Global"; |
61 | //const TString rptype = "Tracklet"; | |
44e060e0 | 62 | //const TString rptype = "FMD"; |
ef4799a7 | 63 | |
c0ed6325 | 64 | //KINEMATICS (on generated and reconstructed tracks) |
65 | Bool_t UseKineforRP = kTRUE; | |
66 | const Double_t ptminRP = 0.0; | |
67 | const Double_t ptmaxRP = 10.0; | |
68 | const Double_t etaminRP = -0.9; | |
69 | const Double_t etamaxRP = 0.9; | |
70 | const Int_t chargeRP = 1; //not used | |
21f8d9b1 | 71 | const Bool_t isChargedRP = kTRUE; |
c0ed6325 | 72 | |
73 | //PID (on generated and reconstructed tracks) | |
93329510 | 74 | Bool_t UsePIDforRP = kFALSE; |
c0ed6325 | 75 | const Int_t PdgRP = 211; |
76 | ||
77 | //TRACK QUALITY (on reconstructed tracks only) | |
78 | //see /CORRFW/AliCFTrackQualityCuts class | |
79 | Bool_t UseTrackQualityforRP = kTRUE; | |
80 | const Int_t minClustersTpcRP = 80; //default = -1; | |
21f8d9b1 | 81 | const Double_t maxChi2PerClusterTpcRP = 4.0; //default = 1.e+09; |
c0ed6325 | 82 | const UShort_t minDedxClusterTpcRP = 0; |
83 | const Int_t minClustersItsRP = 2; //panos | |
84 | const Double_t maxChi2PerClusterItsRP = 1.e+09; | |
85 | const Int_t minClustersTrdRP = -1; | |
86 | const Int_t minTrackletTrdRP = -1; | |
87 | const Int_t minTrackletTrdPidRP = -1; | |
88 | const Double_t maxChi2PerClusterTrdRP = 1.e+09; | |
89 | const ULong_t statusRP = AliESDtrack::kTPCrefit; //AliESDtrack::kTPCrefit & AliESDtrack::kITSrefit | |
90 | ||
91 | //PRIMARY (on reconstructed tracks only) | |
92 | //see /CORRFW/AliCFTrackIsPrimaryCuts class | |
93 | Bool_t UsePrimariesforRP = kTRUE; | |
94 | const Bool_t spdVertexRP = kFALSE; | |
95 | const Bool_t tpcVertexRP = kFALSE; | |
96 | const Float_t minDcaToVertexXyRP = 0.; | |
97 | const Float_t minDcaToVertexZRP = 0.; | |
98 | const Float_t maxDcaToVertexXyRP = 2.4; //default = 1.e+10; //2.4; | |
99 | const Float_t maxDcaToVertexZRP = 3.2; //default = 1.e+10; //3.2; | |
100 | const Bool_t dcaToVertex2dRP = kFALSE; //default = kFALSE; | |
101 | const Bool_t absDcaToVertexRP = kTRUE; //default = kTRUE; | |
102 | const Double_t minNSigmaToVertexRP = 0.; | |
103 | const Double_t maxNSigmaToVertexRP = 1.e+10; //3.; //1.e+10 | |
104 | const Double_t maxSigmaDcaXySP = 1.e+10; | |
105 | const Double_t maxSigmaDcaZSP = 1.e+10; | |
106 | const Bool_t requireSigmaToVertexSP = kFALSE; | |
107 | const Bool_t acceptKinkDaughtersSP = kFALSE; //default = kTRUE; | |
108 | ||
109 | //ACCEPTANCE (on generated tracks only : AliMCParticle) | |
110 | //see /CORRFW/AliCFAcceptanceCuts class | |
111 | Bool_t UseAcceptanceforRP = kFALSE; | |
112 | const Int_t minTrackrefsItsRP = 0;//3; | |
113 | const Int_t minTrackrefsTpcRP = 0;//2; | |
114 | const Int_t minTrackrefsTrdRP = 0; | |
115 | const Int_t minTrackrefsTofRP = 0; | |
116 | const Int_t minTrackrefsMuonRP = 0; | |
117 | //default for all is 0 | |
118 | ||
119 | //----------For POI selection---------- | |
120 | //KINEMATICS (on generated and reconstructed tracks) | |
121 | Bool_t UseKineforPOI = kTRUE; | |
122 | const Double_t ptminPOI = 0.0; | |
123 | const Double_t ptmaxPOI = 10.0; | |
ef4799a7 | 124 | const Double_t etaminPOI = -0.5; |
125 | const Double_t etamaxPOI = 0.5; | |
c0ed6325 | 126 | const Int_t chargePOI = 1; //not used |
21f8d9b1 | 127 | const Bool_t isChargedPOI = kTRUE; |
c0ed6325 | 128 | |
129 | //PID (on generated and reconstructed tracks) | |
93329510 | 130 | Bool_t UsePIDforPOI = kFALSE; |
c0ed6325 | 131 | const Int_t PdgPOI = 321; |
93329510 | 132 | |
c0ed6325 | 133 | //TRACK QUALITY (on reconstructed tracks only) |
134 | //see /CORRFW/AliCFTrackQualityCuts class | |
135 | Bool_t UseTrackQualityforPOI = kTRUE; | |
136 | const Int_t minClustersTpcPOI = 80; | |
21f8d9b1 | 137 | const Double_t maxChi2PerClusterTpcPOI = 4.0; |
c0ed6325 | 138 | const UShort_t minDedxClusterTpcPOI = 0; |
139 | const Int_t minClustersItsPOI = 2; | |
140 | const Double_t maxChi2PerClusterItsPOI = 1.e+09; | |
141 | const Int_t minClustersTrdPOI = -1; | |
142 | const Int_t minTrackletTrdPOI = -1; | |
143 | const Int_t minTrackletTrdPidPOI = -1; | |
144 | const Double_t maxChi2PerClusterTrdPOI = 1.e+09; | |
145 | const ULong_t statusPOI = AliESDtrack::kTPCrefit; | |
146 | ||
147 | //PRIMARY (on reconstructed tracks only) | |
148 | //see /CORRFW/AliCFTrackIsPrimaryCuts class | |
149 | Bool_t UsePrimariesforPOI = kTRUE; | |
150 | const Bool_t spdVertexPOI = kFALSE; | |
151 | const Bool_t tpcVertexPOI = kFALSE; | |
152 | const Float_t minDcaToVertexXyPOI = 0.; | |
153 | const Float_t minDcaToVertexZPOI = 0.; | |
154 | const Float_t maxDcaToVertexXyPOI = 2.4; | |
155 | const Float_t maxDcaToVertexZPOI = 3.2; | |
156 | const Bool_t dcaToVertex2dPOI = kFALSE; | |
157 | const Bool_t absDcaToVertexPOI = kTRUE; | |
158 | const Double_t minNSigmaToVertexPOI = 0.; | |
159 | const Double_t maxNSigmaToVertexPOI = 1.e+10; | |
160 | const Double_t maxSigmaDcaXyPOI = 1.e+10; | |
161 | const Double_t maxSigmaDcaZPOI = 1.e+10; | |
162 | const Bool_t requireSigmaToVertexPOI = kFALSE; | |
163 | const Bool_t acceptKinkDaughtersPOI = kFALSE; | |
164 | ||
165 | //ACCEPTANCE (on generated tracks only : AliMCParticle) | |
166 | //see /CORRFW/AliCFAcceptanceCuts class | |
167 | Bool_t UseAcceptanceforPOI = kFALSE; | |
168 | const Int_t minTrackrefsItsPOI = 3; | |
169 | const Int_t minTrackrefsTpcPOI = 2; | |
170 | const Int_t minTrackrefsTrdPOI = 0; | |
171 | const Int_t minTrackrefsTofPOI = 0; | |
172 | const Int_t minTrackrefsMuonPOI = 0; | |
173 | ||
174 | ||
175 | //----------For Adding Flow to the Event---------- | |
47d5b28f | 176 | const Bool_t AddToEvent = kFALSE; |
c0ed6325 | 177 | Double_t ellipticFlow = 0.05; |
47d5b28f | 178 | |
93329510 | 179 | |
180 | AliAnalysisTaskFlowEvent* AddTaskFlow(TString type, Bool_t* METHODS, Bool_t QA, Bool_t* WEIGHTS) | |
181 | { | |
182 | //boleans for the methods | |
c741f5d0 | 183 | Bool_t SP = METHODS[0]; |
184 | Bool_t LYZ1SUM = METHODS[1]; | |
185 | Bool_t LYZ1PROD = METHODS[2]; | |
186 | Bool_t LYZ2SUM = METHODS[3]; | |
187 | Bool_t LYZ2PROD = METHODS[4]; | |
188 | Bool_t LYZEP = METHODS[5]; | |
189 | Bool_t GFC = METHODS[6]; | |
190 | Bool_t QC = METHODS[7]; | |
191 | Bool_t FQD = METHODS[8]; | |
67a6b178 | 192 | Bool_t MCEP = METHODS[9]; |
193 | Bool_t MH = METHODS[10]; | |
194 | Bool_t NL = METHODS[11]; | |
93329510 | 195 | //for using weights |
196 | Bool_t useWeights = WEIGHTS[0] || WEIGHTS[1] || WEIGHTS[2]; | |
197 | if (useWeights) cout<<"Weights are used"<<endl; | |
198 | else cout<<"Weights are not used"<<endl; | |
199 | ||
200 | ||
201 | // Get the pointer to the existing analysis manager via the static access method. | |
202 | //============================================================================== | |
203 | AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); | |
204 | if (!mgr) { | |
205 | Error("AddTaskFlowEvent", "No analysis manager to connect to."); | |
206 | return NULL; | |
207 | } | |
208 | ||
209 | // Check the analysis type using the event handlers connected to the analysis | |
210 | // manager. The availability of MC handler cann also be checked here. | |
211 | //============================================================================== | |
212 | if (!mgr->GetInputEventHandler()) { | |
213 | ::Error("AddTaskFlowEvent", "This task requires an input event handler"); | |
214 | return NULL; | |
215 | } | |
216 | ||
217 | // Open external input files | |
218 | //=========================================================================== | |
219 | //weights: | |
220 | TFile *weightsFile = NULL; | |
221 | TList *weightsList = NULL; | |
222 | ||
223 | if(useWeights) { | |
224 | //open the file with the weights: | |
225 | weightsFile = TFile::Open("weights.root","READ"); | |
226 | if(weightsFile) { | |
227 | //access the list which holds the histos with weigths: | |
228 | weightsList = (TList*)weightsFile->Get("weights"); | |
229 | } | |
230 | else { | |
231 | cout<<" WARNING: the file <weights.root> with weights from the previous run was not available."<<endl; | |
232 | break; | |
233 | } | |
234 | } | |
235 | ||
40ca990b | 236 | //LYZ2 |
237 | if (LYZ2SUM || LYZ2PROD) { | |
238 | //read the outputfile of the first run | |
239 | TString outputFileName = "AnalysisResults1.root"; | |
240 | TString pwd(gSystem->pwd()); | |
241 | pwd+="/"; | |
242 | pwd+=outputFileName.Data(); | |
243 | TFile *outputFile = NULL; | |
244 | if(gSystem->AccessPathName(pwd.Data(),kFileExists)) { | |
245 | cout<<"WARNING: You do not have an output file:"<<endl; | |
246 | cout<<" "<<pwd.Data()<<endl; | |
247 | exit(0); | |
248 | } else { | |
249 | outputFile = TFile::Open(pwd.Data(),"READ"); | |
c741f5d0 | 250 | } |
40ca990b | 251 | |
252 | if (LYZ2SUM){ | |
253 | // read the output directory from LYZ1SUM | |
254 | TString inputFileNameLYZ2SUM = "outputLYZ1SUManalysis" ; | |
255 | inputFileNameLYZ2SUM += type; | |
256 | cout<<"The input directory is "<<inputFileNameLYZ2SUM.Data()<<endl; | |
257 | TFile* fInputFileLYZ2SUM = (TFile*)outputFile->FindObjectAny(inputFileNameLYZ2SUM.Data()); | |
258 | if(!fInputFileLYZ2SUM || fInputFileLYZ2SUM->IsZombie()) { | |
259 | cerr << " ERROR: To run LYZ2SUM you need the output file from LYZ1SUM. This file is not there! Please run LYZ1SUM first." << endl ; | |
260 | break; | |
261 | } | |
262 | else { | |
263 | TList* fInputListLYZ2SUM = (TList*)fInputFileLYZ2SUM->Get("cobjLYZ1SUM"); | |
264 | if (!fInputListLYZ2SUM) {cout<<"list is NULL pointer!"<<endl;} | |
265 | } | |
266 | cout<<"LYZ2SUM input file/list read..."<<endl; | |
c0ed6325 | 267 | } |
40ca990b | 268 | |
269 | if (LYZ2PROD){ | |
270 | // read the output directory from LYZ1PROD | |
271 | TString inputFileNameLYZ2PROD = "outputLYZ1PRODanalysis" ; | |
272 | inputFileNameLYZ2PROD += type; | |
273 | cout<<"The input directory is "<<inputFileNameLYZ2PROD.Data()<<endl; | |
274 | TFile* fInputFileLYZ2PROD = (TFile*)outputFile->FindObjectAny(inputFileNameLYZ2PROD.Data()); | |
275 | if(!fInputFileLYZ2PROD || fInputFileLYZ2PROD->IsZombie()) { | |
276 | cerr << " ERROR: To run LYZ2PROD you need the output file from LYZ1PROD. This file is not there! Please run LYZ1PROD first." << endl ; | |
277 | break; | |
278 | } | |
279 | else { | |
280 | TList* fInputListLYZ2PROD = (TList*)fInputFileLYZ2PROD->Get("cobjLYZ1PROD"); | |
281 | if (!fInputListLYZ2PROD) {cout<<"list is NULL pointer!"<<endl;} | |
282 | } | |
283 | cout<<"LYZ2PROD input file/list read..."<<endl; | |
c0ed6325 | 284 | } |
93329510 | 285 | } |
40ca990b | 286 | |
287 | ||
93329510 | 288 | if (LYZEP) { |
40ca990b | 289 | //read the outputfile of the second run |
290 | TString outputFileName = "AnalysisResults2.root"; | |
291 | TString pwd(gSystem->pwd()); | |
292 | pwd+="/"; | |
293 | pwd+=outputFileName.Data(); | |
294 | TFile *outputFile = NULL; | |
295 | if(gSystem->AccessPathName(pwd.Data(),kFileExists)) { | |
296 | cout<<"WARNING: You do not have an output file:"<<endl; | |
297 | cout<<" "<<pwd.Data()<<endl; | |
298 | exit(0); | |
299 | } else { | |
300 | outputFile = TFile::Open(pwd.Data(),"READ"); | |
301 | } | |
302 | ||
c741f5d0 | 303 | // read the output file from LYZ2SUM |
304 | TString inputFileNameLYZEP = "outputLYZ2SUManalysis" ; | |
93329510 | 305 | inputFileNameLYZEP += type; |
93329510 | 306 | cout<<"The input file is "<<inputFileNameLYZEP.Data()<<endl; |
40ca990b | 307 | TFile* fInputFileLYZEP = (TFile*)outputFile->FindObjectAny(inputFileNameLYZEP.Data()); |
93329510 | 308 | if(!fInputFileLYZEP || fInputFileLYZEP->IsZombie()) { |
5b40431d | 309 | cerr << " ERROR: To run LYZEP you need the output file from LYZ2SUM. This file is not there! Please run LYZ2SUM first." << endl ; |
93329510 | 310 | break; |
311 | } | |
312 | else { | |
c741f5d0 | 313 | TList* fInputListLYZEP = (TList*)fInputFileLYZEP->Get("cobjLYZ2SUM"); |
93329510 | 314 | if (!fInputListLYZEP) {cout<<"list is NULL pointer!"<<endl;} |
315 | } | |
316 | cout<<"LYZEP input file/list read..."<<endl; | |
317 | } | |
40ca990b | 318 | |
a02a1889 | 319 | |
44e060e0 | 320 | // Create the FMD task and add it to the manager |
321 | //=========================================================================== | |
44e060e0 | 322 | if (rptype == "FMD") { |
a02a1889 | 323 | AliFMDAnalysisTaskSE *taskfmd = NULL; |
324 | if (rptype == "FMD") { | |
325 | taskfmd = new AliFMDAnalysisTaskSE("TaskFMD"); | |
326 | mgr->AddTask(taskfmd); | |
44e060e0 | 327 | |
a02a1889 | 328 | AliFMDAnaParameters* pars = AliFMDAnaParameters::Instance(); |
329 | pars->Init(); | |
330 | pars->SetProcessPrimary(kTRUE); | |
331 | pars->SetProcessHits(kFALSE); | |
332 | } | |
44e060e0 | 333 | } |
a02a1889 | 334 | |
93329510 | 335 | |
336 | // Create the task, add it to the manager. | |
337 | //=========================================================================== | |
338 | AliAnalysisTaskFlowEvent *taskFE = NULL; | |
339 | if (QA) { | |
47d5b28f | 340 | if(AddToEvent) { |
44e060e0 | 341 | taskFE = new AliAnalysisTaskFlowEvent("TaskFlowEvent",rptype,kTRUE,1); |
c0ed6325 | 342 | taskFE->SetEllipticFlowValue(ellipticFlow); } //TEST |
44e060e0 | 343 | else {taskFE = new AliAnalysisTaskFlowEvent("TaskFlowEvent",rptype,kTRUE); } |
93329510 | 344 | taskFE->SetAnalysisType(type); |
ef4799a7 | 345 | taskFE->SetRPType(rptype); //only for ESD |
c0ed6325 | 346 | if (UseMultCut) { |
347 | taskFE->SetMinMult(multmin); | |
f6cf97c1 | 348 | taskFE->SetMaxMult(multmax); |
349 | } | |
7a01f4a7 | 350 | taskFE->SetSubeventEtaRange(minA, maxA, minB, maxB); |
f6cf97c1 | 351 | if (UsePhysicsSelection) { |
352 | taskFE->SelectCollisionCandidates(); | |
353 | cout<<"Using Physics Selection"<<endl; | |
354 | } | |
93329510 | 355 | mgr->AddTask(taskFE); |
356 | } | |
357 | else { | |
f6cf97c1 | 358 | if(AddToEvent) { |
44e060e0 | 359 | taskFE = new AliAnalysisTaskFlowEvent("TaskFlowEvent",rptype,kFALSE,1); |
f6cf97c1 | 360 | taskFE->SetEllipticFlowValue(ellipticFlow); } //TEST |
44e060e0 | 361 | else {taskFE = new AliAnalysisTaskFlowEvent("TaskFlowEvent",rptype,kFALSE); } |
93329510 | 362 | taskFE->SetAnalysisType(type); |
c0ed6325 | 363 | if (UseMultCut) { |
364 | taskFE->SetMinMult(multmin); | |
f6cf97c1 | 365 | taskFE->SetMaxMult(multmax); |
366 | } | |
367 | taskFE->SetSubeventEtaRange(minA, maxA, minB, maxB); | |
368 | if (UsePhysicsSelection) { | |
369 | taskFE->SelectCollisionCandidates(); | |
370 | cout<<"Using Physics Selection"<<endl; | |
371 | } | |
93329510 | 372 | mgr->AddTask(taskFE); |
373 | } | |
374 | ||
375 | // Create cuts using the correction framework (CORRFW) | |
376 | //=========================================================================== | |
377 | if (QA){ | |
378 | //Set TList for the QA histograms | |
379 | TList* qaRP = new TList(); | |
380 | TList* qaPOI = new TList(); | |
381 | } | |
382 | ||
c0ed6325 | 383 | //----------Event cuts---------- |
94cd9888 | 384 | AliCFEventGenCuts* mcEventCuts = new AliCFEventGenCuts("mcEventCuts","MC-level event cuts"); |
f01e9bfe | 385 | mcEventCuts->SetNTracksCut(multminESD,multmaxESD); |
40ca990b | 386 | mcEventCuts->SetRequireVtxCuts(requireVtxCuts); |
387 | mcEventCuts->SetVertexXCut(vertexXmin, vertexXmax); | |
388 | mcEventCuts->SetVertexYCut(vertexYmin, vertexYmax); | |
389 | mcEventCuts->SetVertexZCut(vertexZmin, vertexZmax); | |
94cd9888 | 390 | if (QA) { |
391 | mcEventCuts->SetQAOn(qaRP); | |
392 | } | |
393 | AliCFEventRecCuts* recEventCuts = new AliCFEventRecCuts("recEventCuts","rec-level event cuts"); | |
f01e9bfe | 394 | recEventCuts->SetNTracksCut(multminESD,multmaxESD); |
40ca990b | 395 | recEventCuts->SetRequireVtxCuts(requireVtxCuts); |
396 | recEventCuts->SetVertexXCut(vertexXmin, vertexXmax); | |
397 | recEventCuts->SetVertexYCut(vertexYmin, vertexYmax); | |
398 | recEventCuts->SetVertexZCut(vertexZmin, vertexZmax); | |
21f8d9b1 | 399 | recEventCuts->SetVertexNContributors(vertexNContributorsmin,vertexNContributorsmax); |
94cd9888 | 400 | if (QA) { |
401 | recEventCuts->SetQAOn(qaRP); | |
402 | } | |
c0ed6325 | 403 | |
404 | //----------Cuts for RP---------- | |
405 | //KINEMATICS (MC and reconstructed) | |
406 | AliCFTrackKineCuts* mcKineCutsRP = new AliCFTrackKineCuts("mcKineCutsRP","MC-level kinematic cuts"); | |
407 | mcKineCutsRP->SetPtRange(ptminRP,ptmaxRP); | |
408 | mcKineCutsRP->SetEtaRange(etaminRP,etamaxRP); | |
409 | //mcKineCutsRP->SetChargeMC(chargeRP); | |
21f8d9b1 | 410 | mcKineCutsRP->SetRequireIsCharged(isChargedRP); |
93329510 | 411 | if (QA) { |
c0ed6325 | 412 | mcKineCutsRP->SetQAOn(qaRP); |
93329510 | 413 | } |
414 | ||
c0ed6325 | 415 | AliCFTrackKineCuts *recKineCutsRP = new AliCFTrackKineCuts("recKineCutsRP","rec-level kine cuts"); |
416 | recKineCutsRP->SetPtRange(ptminRP,ptmaxRP); | |
417 | recKineCutsRP->SetEtaRange(etaminRP,etamaxRP); | |
418 | //recKineCutsRP->SetChargeRec(chargeRP); | |
21f8d9b1 | 419 | recKineCutsRP->SetRequireIsCharged(isChargedRP); |
93329510 | 420 | if (QA) { |
c0ed6325 | 421 | recKineCutsRP->SetQAOn(qaRP); |
93329510 | 422 | } |
c0ed6325 | 423 | |
424 | //PID (MC and reconstructed) | |
425 | AliCFParticleGenCuts* mcGenCutsRP = new AliCFParticleGenCuts("mcGenCutsRP","MC particle generation cuts for RP"); | |
426 | mcGenCutsRP->SetRequireIsPrimary(); | |
427 | if (UsePIDforRP) {mcGenCutsRP->SetRequirePdgCode(PdgRP);} | |
93329510 | 428 | if (QA) { |
c0ed6325 | 429 | mcGenCutsRP->SetQAOn(qaRP); |
93329510 | 430 | } |
431 | ||
c0ed6325 | 432 | int n_species = AliPID::kSPECIES ; |
433 | Double_t* prior = new Double_t[n_species]; | |
434 | ||
435 | prior[0] = 0.0244519 ; | |
436 | prior[1] = 0.0143988 ; | |
437 | prior[2] = 0.805747 ; | |
438 | prior[3] = 0.0928785 ; | |
439 | prior[4] = 0.0625243 ; | |
440 | ||
441 | AliCFTrackCutPid* cutPidRP = NULL; | |
442 | if(UsePIDforRP) { | |
443 | cutPidRP = new AliCFTrackCutPid("cutPidRP","ESD_PID for RP") ; | |
444 | cutPidRP->SetPriors(prior); | |
445 | cutPidRP->SetProbabilityCut(0.0); | |
446 | cutPidRP->SetDetectors("TPC TOF"); | |
447 | switch(TMath::Abs(PDG1)) { | |
448 | case 11 : cutPidRP->SetParticleType(AliPID::kElectron, kTRUE); break; | |
449 | case 13 : cutPidRP->SetParticleType(AliPID::kMuon , kTRUE); break; | |
450 | case 211 : cutPidRP->SetParticleType(AliPID::kPion , kTRUE); break; | |
451 | case 321 : cutPidRP->SetParticleType(AliPID::kKaon , kTRUE); break; | |
452 | case 2212 : cutPidRP->SetParticleType(AliPID::kProton , kTRUE); break; | |
453 | default : printf("UNDEFINED PID\n"); break; | |
454 | } | |
455 | if (QA) { | |
456 | cutPidRP->SetQAOn(qaRP); | |
457 | } | |
93329510 | 458 | } |
459 | ||
c0ed6325 | 460 | //TRACK QUALITY |
461 | AliCFTrackQualityCuts *recQualityCutsRP = new AliCFTrackQualityCuts("recQualityCutsRP","rec-level quality cuts"); | |
462 | recQualityCutsRP->SetMinNClusterTPC(minClustersTpcRP); | |
463 | //recQualityCutsRP->SetMinFoundClusterTPC(minFoundClustersTpcRP); //only for internal TPC QA | |
464 | recQualityCutsRP->SetMaxChi2PerClusterTPC(maxChi2PerClusterTpcRP); | |
465 | recQualityCutsRP->SetMinNdEdxClusterTPC(minDedxClusterTpcRP); //to reject secondaries | |
466 | ||
467 | recQualityCutsRP->SetMinNClusterITS(minClustersItsRP); | |
468 | recQualityCutsRP->SetMaxChi2PerClusterITS(maxChi2PerClusterItsRP); | |
469 | ||
470 | recQualityCutsRP->SetMinNClusterTRD(minClustersTrdRP); | |
471 | recQualityCutsRP->SetMinNTrackletTRD(minTrackletTrdRP); | |
472 | recQualityCutsRP->SetMinNTrackletTRDpid(minTrackletTrdPidRP); | |
473 | recQualityCutsRP->SetMaxChi2PerTrackletTRD(maxChi2PerClusterTrdRP); | |
474 | recQualityCutsRP->SetStatus(statusRP); | |
93329510 | 475 | if (QA) { |
c0ed6325 | 476 | recQualityCutsRP->SetQAOn(qaRP); |
93329510 | 477 | } |
c0ed6325 | 478 | |
479 | /* | |
480 | //How to set this? | |
481 | void SetMaxCovDiagonalElements(Float_t c1=1.e+09, Float_t c2=1.e+09, Float_t c3=1.e+09, Float_t c4=1.e+09, Float_t c5=1.e+09) | |
482 | {fCovariance11Max=c1;fCovariance22Max=c2;fCovariance33Max=c3;fCovariance44Max=c4;fCovariance55Max=c5;} | |
483 | */ | |
484 | ||
485 | //PRIMARIES | |
486 | AliCFTrackIsPrimaryCuts *recIsPrimaryCutsRP = new AliCFTrackIsPrimaryCuts("recIsPrimaryCutsRP","rec-level isPrimary cuts"); | |
487 | recIsPrimaryCutsRP->UseSPDvertex(spdVertexRP); | |
488 | recIsPrimaryCutsRP->UseTPCvertex(tpcVertexRP); | |
489 | recIsPrimaryCutsRP->SetMinDCAToVertexXY(minDcaToVertexXyRP); | |
490 | recIsPrimaryCutsRP->SetMinDCAToVertexZ(minDcaToVertexZRP); | |
491 | recIsPrimaryCutsRP->SetMaxDCAToVertexXY(maxDcaToVertexXyRP); | |
492 | recIsPrimaryCutsRP->SetMaxDCAToVertexZ(maxDcaToVertexZRP); | |
493 | recIsPrimaryCutsRP->SetDCAToVertex2D(dcaToVertex2dRP); | |
494 | recIsPrimaryCutsRP->SetAbsDCAToVertex(absDcaToVertexRP); | |
495 | recIsPrimaryCutsRP->SetMinNSigmaToVertex(minNSigmaToVertexRP); | |
496 | recIsPrimaryCutsRP->SetMaxNSigmaToVertex(maxNSigmaToVertexRP); | |
497 | recIsPrimaryCutsRP->SetMaxSigmaDCAxy(maxSigmaDcaXySP); | |
498 | recIsPrimaryCutsRP->SetMaxSigmaDCAz(maxSigmaDcaZSP); | |
499 | recIsPrimaryCutsRP->SetRequireSigmaToVertex(requireSigmaToVertexSP); | |
500 | recIsPrimaryCutsRP->SetAcceptKinkDaughters(acceptKinkDaughtersSP); | |
93329510 | 501 | if (QA) { |
c0ed6325 | 502 | recIsPrimaryCutsRP->SetQAOn(qaRP); |
93329510 | 503 | } |
504 | ||
c0ed6325 | 505 | //ACCEPTANCE |
506 | AliCFAcceptanceCuts *mcAccCutsRP = new AliCFAcceptanceCuts("mcAccCutsRP","MC acceptance cuts"); | |
507 | mcAccCutsRP->SetMinNHitITS(minTrackrefsItsRP); | |
508 | mcAccCutsRP->SetMinNHitTPC(minTrackrefsTpcRP); | |
509 | mcAccCutsRP->SetMinNHitTRD(minTrackrefsTrdRP); | |
510 | mcAccCutsRP->SetMinNHitTOF(minTrackrefsTofRP); | |
511 | mcAccCutsRP->SetMinNHitMUON(minTrackrefsMuonRP); | |
93329510 | 512 | if (QA) { |
c0ed6325 | 513 | mcAccCutsRP->SetQAOn(qaRP); |
93329510 | 514 | } |
c0ed6325 | 515 | |
93329510 | 516 | |
c0ed6325 | 517 | //----------Cuts for POI---------- |
518 | //KINEMATICS (MC and reconstructed) | |
519 | AliCFTrackKineCuts* mcKineCutsPOI = new AliCFTrackKineCuts("mcKineCutsPOI","MC-level kinematic cuts"); | |
520 | mcKineCutsPOI->SetPtRange(ptminPOI,ptmaxPOI); | |
521 | mcKineCutsPOI->SetEtaRange(etaminPOI,etamaxPOI); | |
522 | //mcKineCutsPOI->SetChargeMC(chargePOI); | |
21f8d9b1 | 523 | mcKineCutsPOI->SetRequireIsCharged(isChargedPOI); |
93329510 | 524 | if (QA) { |
c0ed6325 | 525 | mcKineCutsPOI->SetQAOn(qaPOI); |
93329510 | 526 | } |
527 | ||
c0ed6325 | 528 | AliCFTrackKineCuts *recKineCutsPOI = new AliCFTrackKineCuts("recKineCutsPOI","rec-level kine cuts"); |
529 | recKineCutsPOI->SetPtRange(ptminPOI,ptmaxPOI); | |
530 | recKineCutsPOI->SetEtaRange(etaminPOI,etamaxPOI); | |
531 | //recKineCutsPOI->SetChargeRec(chargePOI); | |
21f8d9b1 | 532 | recKineCutsPOI->SetRequireIsCharged(isChargedPOI); |
93329510 | 533 | if (QA) { |
c0ed6325 | 534 | recKineCutsPOI->SetQAOn(qaPOI); |
93329510 | 535 | } |
536 | ||
c0ed6325 | 537 | //PID (MC and reconstructed) |
538 | AliCFParticleGenCuts* mcGenCutsPOI = new AliCFParticleGenCuts("mcGenCutsPOI","MC particle generation cuts for POI"); | |
539 | mcGenCutsPOI->SetRequireIsPrimary(); | |
540 | if (UsePIDforPOI) {mcGenCutsPOI->SetRequirePdgCode(PdgPOI);} | |
93329510 | 541 | if (QA) { |
c0ed6325 | 542 | mcGenCutsPOI->SetQAOn(qaPOI); |
93329510 | 543 | } |
c0ed6325 | 544 | |
545 | AliCFTrackCutPid* cutPidPOI = NULL; | |
93329510 | 546 | if (UsePIDforPOI) { |
c0ed6325 | 547 | cutPidPOI = new AliCFTrackCutPid("cutPidPOI","ESD_PID for POI") ; |
548 | cutPidPOI->SetPriors(prior); | |
549 | cutPidPOI->SetProbabilityCut(0.0); | |
550 | cutPidPOI->SetDetectors("TPC TOF"); | |
93329510 | 551 | switch(TMath::Abs(PDG2)) { |
c0ed6325 | 552 | case 11 : cutPidPOI->SetParticleType(AliPID::kElectron, kTRUE); break; |
553 | case 13 : cutPidPOI->SetParticleType(AliPID::kMuon , kTRUE); break; | |
554 | case 211 : cutPidPOI->SetParticleType(AliPID::kPion , kTRUE); break; | |
555 | case 321 : cutPidPOI->SetParticleType(AliPID::kKaon , kTRUE); break; | |
556 | case 2212 : cutPidPOI->SetParticleType(AliPID::kProton , kTRUE); break; | |
93329510 | 557 | default : printf("UNDEFINED PID\n"); break; |
558 | } | |
559 | if (QA) { | |
c0ed6325 | 560 | cutPidPOI->SetQAOn(qaPOI); |
93329510 | 561 | } |
562 | } | |
c0ed6325 | 563 | |
564 | //TRACK QUALITY | |
565 | AliCFTrackQualityCuts *recQualityCutsPOI = new AliCFTrackQualityCuts("recQualityCutsPOI","rec-level quality cuts"); | |
566 | recQualityCutsPOI->SetMinNClusterTPC(minClustersTpcPOI); | |
567 | //recQualityCutsPOI->SetMinFoundClusterTPC(minFoundClustersTpcPOI); //only for internal TPC QA | |
568 | recQualityCutsPOI->SetMaxChi2PerClusterTPC(maxChi2PerClusterTpcPOI); | |
569 | recQualityCutsPOI->SetMinNdEdxClusterTPC(minDedxClusterTpcPOI); //to reject secondaries | |
570 | ||
571 | recQualityCutsPOI->SetMinNClusterITS(minClustersItsPOI); | |
572 | recQualityCutsPOI->SetMaxChi2PerClusterITS(maxChi2PerClusterItsPOI); | |
573 | ||
574 | recQualityCutsPOI->SetMinNClusterTRD(minClustersTrdPOI); | |
575 | recQualityCutsPOI->SetMinNTrackletTRD(minTrackletTrdPOI); | |
576 | recQualityCutsPOI->SetMinNTrackletTRDpid(minTrackletTrdPidPOI); | |
577 | recQualityCutsPOI->SetMaxChi2PerTrackletTRD(maxChi2PerClusterTrdPOI); | |
578 | recQualityCutsPOI->SetStatus(statusPOI); | |
579 | if (QA) { | |
580 | recQualityCutsPOI->SetQAOn(qaPOI); | |
581 | } | |
582 | ||
583 | //PRIMARIES | |
584 | AliCFTrackIsPrimaryCuts *recIsPrimaryCutsPOI = new AliCFTrackIsPrimaryCuts("recIsPrimaryCutsPOI","rec-level isPrimary cuts"); | |
585 | recIsPrimaryCutsPOI->UseSPDvertex(spdVertexPOI); | |
586 | recIsPrimaryCutsPOI->UseTPCvertex(tpcVertexPOI); | |
587 | recIsPrimaryCutsPOI->SetMinDCAToVertexXY(minDcaToVertexXyPOI); | |
588 | recIsPrimaryCutsPOI->SetMinDCAToVertexZ(minDcaToVertexZPOI); | |
589 | recIsPrimaryCutsPOI->SetMaxDCAToVertexXY(maxDcaToVertexXyPOI); | |
590 | recIsPrimaryCutsPOI->SetMaxDCAToVertexZ(maxDcaToVertexZPOI); | |
591 | recIsPrimaryCutsPOI->SetDCAToVertex2D(dcaToVertex2dPOI); | |
592 | recIsPrimaryCutsPOI->SetAbsDCAToVertex(absDcaToVertexPOI); | |
593 | recIsPrimaryCutsPOI->SetMinNSigmaToVertex(minNSigmaToVertexPOI); | |
594 | recIsPrimaryCutsPOI->SetMaxNSigmaToVertex(maxNSigmaToVertexPOI); | |
595 | recIsPrimaryCutsPOI->SetMaxSigmaDCAxy(maxSigmaDcaXyPOI); | |
596 | recIsPrimaryCutsPOI->SetMaxSigmaDCAz(maxSigmaDcaZPOI); | |
597 | recIsPrimaryCutsPOI->SetRequireSigmaToVertex(requireSigmaToVertexPOI); | |
598 | recIsPrimaryCutsPOI->SetAcceptKinkDaughters(acceptKinkDaughtersPOI); | |
599 | if (QA) { | |
600 | recIsPrimaryCutsPOI->SetQAOn(qaPOI); | |
601 | } | |
602 | ||
603 | //ACCEPTANCE | |
604 | AliCFAcceptanceCuts *mcAccCutsPOI = new AliCFAcceptanceCuts("mcAccCutsPOI","MC acceptance cuts"); | |
605 | mcAccCutsPOI->SetMinNHitITS(minTrackrefsItsPOI); | |
606 | mcAccCutsPOI->SetMinNHitTPC(minTrackrefsTpcPOI); | |
607 | mcAccCutsPOI->SetMinNHitTRD(minTrackrefsTrdPOI); | |
608 | mcAccCutsPOI->SetMinNHitTOF(minTrackrefsTofPOI); | |
609 | mcAccCutsPOI->SetMinNHitMUON(minTrackrefsMuonPOI); | |
610 | if (QA) { | |
611 | mcAccCutsPOI->SetQAOn(qaPOI); | |
612 | } | |
613 | ||
614 | ||
93329510 | 615 | |
c0ed6325 | 616 | //----------Create Cut Lists---------- |
94cd9888 | 617 | printf("CREATE EVENT CUTS\n"); |
c0ed6325 | 618 | TObjArray* mcEventList = new TObjArray(0); |
40ca990b | 619 | if (UseMultCutforESD) mcEventList->AddLast(mcEventCuts);//cut on mult and vertex |
94cd9888 | 620 | |
621 | TObjArray* recEventList = new TObjArray(0); | |
40ca990b | 622 | if (UseMultCutforESD) recEventList->AddLast(recEventCuts);//cut on mult and vertex |
94cd9888 | 623 | |
93329510 | 624 | printf("CREATE MC KINE CUTS\n"); |
c0ed6325 | 625 | TObjArray* mcListRP = new TObjArray(0); |
626 | if (UseKineforRP) mcListRP->AddLast(mcKineCutsRP); //cut on pt/eta/phi | |
627 | mcListRP->AddLast(mcGenCutsRP); //cut on primary and if (UsePIDforRP) MC PID | |
93329510 | 628 | |
c0ed6325 | 629 | TObjArray* mcListPOI = new TObjArray(0); |
630 | if (UseKineforPOI) mcListPOI->AddLast(mcKineCutsPOI); //cut on pt/eta/phi | |
631 | mcListPOI->AddLast(mcGenCutsPOI); //cut on primary and if (UsePIDforPOI) MC PID | |
93329510 | 632 | |
c0ed6325 | 633 | printf("CREATE MC ACCEPTANCE CUTS\n"); |
634 | TObjArray* accListRP = new TObjArray(0) ; | |
635 | if (UseAcceptanceforRP) accListRP->AddLast(mcAccCutsRP); //cut on number of track references | |
93329510 | 636 | |
c0ed6325 | 637 | TObjArray* accListPOI = new TObjArray(0) ; |
638 | if (UseAcceptanceforPOI) accListPOI->AddLast(mcAccCutsPOI); //cut on number of track references | |
93329510 | 639 | |
c0ed6325 | 640 | printf("CREATE ESD RECONSTRUCTION CUTS\n"); |
641 | TObjArray* recListRP = new TObjArray(0) ; | |
21f8d9b1 | 642 | if (UseTrackQualityforRP) recListRP->AddLast(recQualityCutsRP); //track quality |
c0ed6325 | 643 | if (UsePrimariesforRP) recListRP->AddLast(recIsPrimaryCutsRP); //cut if it is a primary |
21f8d9b1 | 644 | if (UseKineforRP) recListRP->AddLast(recKineCutsRP); //cut on pt/eta/phi |
645 | ||
c0ed6325 | 646 | TObjArray* recListPOI = new TObjArray(0) ; |
21f8d9b1 | 647 | if (UseTrackQualityforPOI) recListPOI->AddLast(recQualityCutsPOI); //track quality |
c0ed6325 | 648 | if (UsePrimariesforPOI) recListPOI->AddLast(recIsPrimaryCutsPOI); //cut if it is a primary |
21f8d9b1 | 649 | if (UseKineforPOI) recListPOI->AddLast(recKineCutsPOI); //cut on pt/eta/phi |
650 | ||
c0ed6325 | 651 | printf("CREATE ESD PID CUTS\n"); |
652 | TObjArray* fPIDCutListRP = new TObjArray(0) ; | |
653 | if(UsePIDforRP) {fPIDCutListRP->AddLast(cutPidRP);} //cut on ESD PID | |
93329510 | 654 | |
c0ed6325 | 655 | TObjArray* fPIDCutListPOI = new TObjArray(0) ; |
656 | if (UsePIDforPOI) {fPIDCutListPOI->AddLast(cutPidPOI);} //cut on ESD PID | |
93329510 | 657 | |
c0ed6325 | 658 | |
659 | //----------Add Cut Lists to the CF Manager---------- | |
93329510 | 660 | printf("CREATE INTERFACE AND CUTS\n"); |
c0ed6325 | 661 | AliCFManager* cfmgrRP = new AliCFManager(); |
662 | cfmgrRP->SetNStepEvent(3); | |
663 | cfmgrRP->SetEventCutsList(AliCFManager::kEvtGenCuts,mcEventList); | |
664 | cfmgrRP->SetEventCutsList(AliCFManager::kEvtRecCuts,recEventList); | |
665 | cfmgrRP->SetNStepParticle(4); | |
666 | cfmgrRP->SetParticleCutsList(AliCFManager::kPartGenCuts,mcListRP); | |
667 | cfmgrRP->SetParticleCutsList(AliCFManager::kPartAccCuts,accListRP); | |
668 | cfmgrRP->SetParticleCutsList(AliCFManager::kPartRecCuts,recListRP); | |
669 | cfmgrRP->SetParticleCutsList(AliCFManager::kPartSelCuts,fPIDCutListRP); | |
93329510 | 670 | |
c0ed6325 | 671 | AliCFManager* cfmgrPOI = new AliCFManager(); |
672 | cfmgrPOI->SetNStepEvent(3); | |
673 | cfmgrPOI->SetEventCutsList(AliCFManager::kEvtGenCuts,mcEventList); | |
674 | cfmgrPOI->SetEventCutsList(AliCFManager::kEvtRecCuts,recEventList); | |
675 | cfmgrPOI->SetNStepParticle(4); | |
676 | cfmgrPOI->SetParticleCutsList(AliCFManager::kPartGenCuts,mcListPOI); | |
677 | cfmgrPOI->SetParticleCutsList(AliCFManager::kPartAccCuts,accListPOI); | |
678 | cfmgrPOI->SetParticleCutsList(AliCFManager::kPartRecCuts,recListPOI); | |
679 | cfmgrPOI->SetParticleCutsList(AliCFManager::kPartSelCuts,fPIDCutListPOI); | |
93329510 | 680 | |
681 | if (QA) { | |
682 | taskFE->SetQAList1(qaRP); | |
683 | taskFE->SetQAList2(qaPOI); | |
684 | } | |
c0ed6325 | 685 | taskFE->SetCFManager1(cfmgrRP); |
686 | taskFE->SetCFManager2(cfmgrPOI); | |
93329510 | 687 | |
688 | ||
689 | ||
690 | // Create the analysis tasks, add them to the manager. | |
691 | //=========================================================================== | |
692 | if (SP){ | |
29195b69 | 693 | AliAnalysisTaskScalarProduct *taskSP = new AliAnalysisTaskScalarProduct("TaskScalarProduct",WEIGHTS[0]); |
a02a1889 | 694 | taskSP->SetRelDiffMsub(1.0); |
3c5d5752 | 695 | taskSP->SetApplyCorrectionForNUA(kFALSE); |
93329510 | 696 | mgr->AddTask(taskSP); |
697 | } | |
c741f5d0 | 698 | if (LYZ1SUM){ |
699 | AliAnalysisTaskLeeYangZeros *taskLYZ1SUM = new AliAnalysisTaskLeeYangZeros("TaskLeeYangZerosSUM",kTRUE); | |
700 | taskLYZ1SUM->SetFirstRunLYZ(kTRUE); | |
701 | taskLYZ1SUM->SetUseSumLYZ(kTRUE); | |
702 | mgr->AddTask(taskLYZ1SUM); | |
703 | } | |
704 | if (LYZ1PROD){ | |
705 | AliAnalysisTaskLeeYangZeros *taskLYZ1PROD = new AliAnalysisTaskLeeYangZeros("TaskLeeYangZerosPROD",kTRUE); | |
706 | taskLYZ1PROD->SetFirstRunLYZ(kTRUE); | |
707 | taskLYZ1PROD->SetUseSumLYZ(kFALSE); | |
708 | mgr->AddTask(taskLYZ1PROD); | |
709 | } | |
710 | if (LYZ2SUM){ | |
711 | AliAnalysisTaskLeeYangZeros *taskLYZ2SUM = new AliAnalysisTaskLeeYangZeros("TaskLeeYangZerosSUM",kFALSE); | |
712 | taskLYZ2SUM->SetFirstRunLYZ(kFALSE); | |
713 | taskLYZ2SUM->SetUseSumLYZ(kTRUE); | |
714 | mgr->AddTask(taskLYZ2SUM); | |
715 | } | |
716 | if (LYZ2PROD){ | |
717 | AliAnalysisTaskLeeYangZeros *taskLYZ2PROD = new AliAnalysisTaskLeeYangZeros("TaskLeeYangZerosPROD",kFALSE); | |
718 | taskLYZ2PROD->SetFirstRunLYZ(kFALSE); | |
719 | taskLYZ2PROD->SetUseSumLYZ(kFALSE); | |
720 | mgr->AddTask(taskLYZ2PROD); | |
93329510 | 721 | } |
722 | if (LYZEP){ | |
723 | AliAnalysisTaskLYZEventPlane *taskLYZEP = new AliAnalysisTaskLYZEventPlane("TaskLYZEventPlane"); | |
724 | mgr->AddTask(taskLYZEP); | |
725 | } | |
726 | if (GFC){ | |
727 | AliAnalysisTaskCumulants *taskGFC = new AliAnalysisTaskCumulants("TaskCumulants",useWeights); | |
728 | taskGFC->SetUsePhiWeights(WEIGHTS[0]); | |
729 | taskGFC->SetUsePtWeights(WEIGHTS[1]); | |
730 | taskGFC->SetUseEtaWeights(WEIGHTS[2]); | |
731 | mgr->AddTask(taskGFC); | |
732 | } | |
733 | if (QC){ | |
734 | AliAnalysisTaskQCumulants *taskQC = new AliAnalysisTaskQCumulants("TaskQCumulants",useWeights); | |
735 | taskQC->SetUsePhiWeights(WEIGHTS[0]); | |
736 | taskQC->SetUsePtWeights(WEIGHTS[1]); | |
737 | taskQC->SetUseEtaWeights(WEIGHTS[2]); | |
067e9bc8 | 738 | taskQC->SetnBinsMult(10000); |
739 | taskQC->SetMinMult(0.); | |
740 | taskQC->SetMaxMult(10000.); | |
93329510 | 741 | mgr->AddTask(taskQC); |
742 | } | |
743 | if (FQD){ | |
744 | AliAnalysisTaskFittingQDistribution *taskFQD = new AliAnalysisTaskFittingQDistribution("TaskFittingQDistribution",kFALSE); | |
745 | taskFQD->SetUsePhiWeights(WEIGHTS[0]); | |
f0e0fbcd | 746 | taskFQD->SetqMin(0.); |
747 | taskFQD->SetqMax(1000.); | |
748 | taskFQD->SetqNbins(10000); | |
93329510 | 749 | mgr->AddTask(taskFQD); |
750 | } | |
751 | if (MCEP){ | |
752 | AliAnalysisTaskMCEventPlane *taskMCEP = new AliAnalysisTaskMCEventPlane("TaskMCEventPlane"); | |
753 | mgr->AddTask(taskMCEP); | |
754 | } | |
67a6b178 | 755 | if (MH){ |
756 | AliAnalysisTaskMixedHarmonics *taskMH = new AliAnalysisTaskMixedHarmonics("TaskMixedHarmonics",useWeights); | |
757 | taskMH->SetCorrelatorInteger(1); | |
758 | taskMH->SetNoOfMultipicityBins(10); | |
759 | taskMH->SetMultipicityBinWidth(2); | |
760 | taskMH->SetMinMultiplicity(3); | |
761 | taskMH->SetCorrectForDetectorEffects(kTRUE); | |
762 | //taskMH->SetUsePhiWeights(WEIGHTS[0]); | |
763 | //taskMH->SetUsePtWeights(WEIGHTS[1]); | |
764 | //taskMH->SetUseEtaWeights(WEIGHTS[2]); | |
765 | mgr->AddTask(taskMH); | |
766 | } | |
767 | if (NL){ | |
768 | AliAnalysisTaskNestedLoops *taskNL = new AliAnalysisTaskNestedLoops("TaskNestedLoops",useWeights); | |
769 | //taskNL->SetUsePhiWeights(WEIGHTS[0]); | |
770 | //taskNL->SetUsePtWeights(WEIGHTS[1]); | |
771 | //taskNL->SetUseEtaWeights(WEIGHTS[2]); | |
772 | mgr->AddTask(taskNL); | |
773 | } | |
774 | ||
93329510 | 775 | // Create the output container for the data produced by the task |
776 | // Connect to the input and output containers | |
777 | //=========================================================================== | |
778 | AliAnalysisDataContainer *cinput1 = mgr->GetCommonInputContainer(); | |
44e060e0 | 779 | |
780 | if (rptype == "FMD") { | |
781 | AliAnalysisDataContainer *coutputFMD = | |
782 | mgr->CreateContainer("BackgroundCorrected", TList::Class(), AliAnalysisManager::kExchangeContainer); | |
783 | //input and output taskFMD | |
784 | mgr->ConnectInput(taskfmd, 0, cinput1); | |
785 | mgr->ConnectOutput(taskfmd, 1, coutputFMD); | |
786 | //input into taskFE | |
787 | mgr->ConnectInput(taskFE,1,coutputFMD); | |
788 | } | |
a02a1889 | 789 | |
44e060e0 | 790 | AliAnalysisDataContainer *coutputFE = |
791 | mgr->CreateContainer("cobjFlowEventSimple", AliFlowEventSimple::Class(),AliAnalysisManager::kExchangeContainer); | |
93329510 | 792 | mgr->ConnectInput(taskFE,0,cinput1); |
f6cf97c1 | 793 | mgr->ConnectOutput(taskFE,1,coutputFE); |
93329510 | 794 | |
795 | if (QA) { | |
47d5b28f | 796 | TString qaNameRPFE = AliAnalysisManager::GetCommonFileName(); |
797 | qaNameRPFE += ":QAforRP_FE_"; | |
93329510 | 798 | qaNameRPFE += type; |
47d5b28f | 799 | |
800 | AliAnalysisDataContainer *coutputQA1FE = | |
801 | mgr->CreateContainer("QARPFE", TList::Class(),AliAnalysisManager::kOutputContainer,qaNameRPFE); | |
93329510 | 802 | |
47d5b28f | 803 | TString qaNamePOIFE = AliAnalysisManager::GetCommonFileName(); |
804 | qaNamePOIFE += ":QAforPOI_FE_"; | |
93329510 | 805 | qaNamePOIFE += type; |
47d5b28f | 806 | |
807 | AliAnalysisDataContainer *coutputQA2FE = | |
808 | mgr->CreateContainer("QAPOIFE", TList::Class(),AliAnalysisManager::kOutputContainer,qaNamePOIFE); | |
809 | ||
f6cf97c1 | 810 | mgr->ConnectOutput(taskFE,2,coutputQA1FE); |
811 | mgr->ConnectOutput(taskFE,3,coutputQA2FE); | |
93329510 | 812 | } |
813 | ||
814 | // Create the output containers for the data produced by the analysis tasks | |
815 | // Connect to the input and output containers | |
816 | //=========================================================================== | |
817 | if (useWeights) { | |
818 | AliAnalysisDataContainer *cinputWeights = mgr->CreateContainer("cobjWeights",TList::Class(),AliAnalysisManager::kInputContainer); | |
819 | } | |
820 | ||
821 | if(SP) { | |
47d5b28f | 822 | TString outputSP = AliAnalysisManager::GetCommonFileName(); |
823 | outputSP += ":outputSPanalysis"; | |
93329510 | 824 | outputSP+= type; |
47d5b28f | 825 | |
826 | AliAnalysisDataContainer *coutputSP = mgr->CreateContainer("cobjSP", TList::Class(),AliAnalysisManager::kOutputContainer,outputSP); | |
93329510 | 827 | mgr->ConnectInput(taskSP,0,coutputFE); |
ea456d37 | 828 | mgr->ConnectOutput(taskSP,1,coutputSP); |
29195b69 | 829 | if (WEIGHTS[0]) { |
830 | mgr->ConnectInput(taskSP,1,cinputWeights); | |
831 | cinputWeights->SetData(weightsList); | |
832 | } | |
93329510 | 833 | } |
c741f5d0 | 834 | if(LYZ1SUM) { |
47d5b28f | 835 | TString outputLYZ1SUM = AliAnalysisManager::GetCommonFileName(); |
836 | outputLYZ1SUM += ":outputLYZ1SUManalysis"; | |
c741f5d0 | 837 | outputLYZ1SUM+= type; |
47d5b28f | 838 | |
839 | AliAnalysisDataContainer *coutputLYZ1SUM = mgr->CreateContainer("cobjLYZ1SUM", TList::Class(),AliAnalysisManager::kOutputContainer,outputLYZ1SUM); | |
c741f5d0 | 840 | mgr->ConnectInput(taskLYZ1SUM,0,coutputFE); |
22063257 | 841 | mgr->ConnectOutput(taskLYZ1SUM,1,coutputLYZ1SUM); |
c741f5d0 | 842 | } |
843 | if(LYZ1PROD) { | |
47d5b28f | 844 | TString outputLYZ1PROD = AliAnalysisManager::GetCommonFileName(); |
845 | outputLYZ1PROD += ":outputLYZ1PRODanalysis"; | |
c741f5d0 | 846 | outputLYZ1PROD+= type; |
47d5b28f | 847 | |
848 | AliAnalysisDataContainer *coutputLYZ1PROD = mgr->CreateContainer("cobjLYZ1PROD", TList::Class(),AliAnalysisManager::kOutputContainer,outputLYZ1PROD); | |
c741f5d0 | 849 | mgr->ConnectInput(taskLYZ1PROD,0,coutputFE); |
22063257 | 850 | mgr->ConnectOutput(taskLYZ1PROD,1,coutputLYZ1PROD); |
c741f5d0 | 851 | } |
852 | if(LYZ2SUM) { | |
853 | AliAnalysisDataContainer *cinputLYZ2SUM = mgr->CreateContainer("cobjLYZ2SUMin",TList::Class(),AliAnalysisManager::kInputContainer); | |
47d5b28f | 854 | TString outputLYZ2SUM = AliAnalysisManager::GetCommonFileName(); |
855 | outputLYZ2SUM += ":outputLYZ2SUManalysis"; | |
c741f5d0 | 856 | outputLYZ2SUM+= type; |
47d5b28f | 857 | |
858 | AliAnalysisDataContainer *coutputLYZ2SUM = mgr->CreateContainer("cobjLYZ2SUM", TList::Class(),AliAnalysisManager::kOutputContainer,outputLYZ2SUM); | |
c741f5d0 | 859 | mgr->ConnectInput(taskLYZ2SUM,0,coutputFE); |
860 | mgr->ConnectInput(taskLYZ2SUM,1,cinputLYZ2SUM); | |
22063257 | 861 | mgr->ConnectOutput(taskLYZ2SUM,1,coutputLYZ2SUM); |
c741f5d0 | 862 | cinputLYZ2SUM->SetData(fInputListLYZ2SUM); |
863 | } | |
864 | if(LYZ2PROD) { | |
865 | AliAnalysisDataContainer *cinputLYZ2PROD = mgr->CreateContainer("cobjLYZ2PRODin",TList::Class(),AliAnalysisManager::kInputContainer); | |
47d5b28f | 866 | TString outputLYZ2PROD = AliAnalysisManager::GetCommonFileName(); |
867 | outputLYZ2PROD += ":outputLYZ2PRODanalysis"; | |
c741f5d0 | 868 | outputLYZ2PROD+= type; |
47d5b28f | 869 | |
870 | AliAnalysisDataContainer *coutputLYZ2PROD = mgr->CreateContainer("cobjLYZ2PROD", TList::Class(),AliAnalysisManager::kOutputContainer,outputLYZ2PROD); | |
c741f5d0 | 871 | mgr->ConnectInput(taskLYZ2PROD,0,coutputFE); |
872 | mgr->ConnectInput(taskLYZ2PROD,1,cinputLYZ2PROD); | |
22063257 | 873 | mgr->ConnectOutput(taskLYZ2PROD,1,coutputLYZ2PROD); |
c741f5d0 | 874 | cinputLYZ2PROD->SetData(fInputListLYZ2PROD); |
93329510 | 875 | } |
876 | if(LYZEP) { | |
877 | AliAnalysisDataContainer *cinputLYZEP = mgr->CreateContainer("cobjLYZEPin",TList::Class(),AliAnalysisManager::kInputContainer); | |
47d5b28f | 878 | TString outputLYZEP = AliAnalysisManager::GetCommonFileName(); |
879 | outputLYZEP += ":outputLYZEPanalysis"; | |
93329510 | 880 | outputLYZEP+= type; |
47d5b28f | 881 | |
882 | AliAnalysisDataContainer *coutputLYZEP = mgr->CreateContainer("cobjLYZEP", TList::Class(),AliAnalysisManager::kOutputContainer,outputLYZEP); | |
93329510 | 883 | mgr->ConnectInput(taskLYZEP,0,coutputFE); |
884 | mgr->ConnectInput(taskLYZEP,1,cinputLYZEP); | |
22063257 | 885 | mgr->ConnectOutput(taskLYZEP,1,coutputLYZEP); |
93329510 | 886 | cinputLYZEP->SetData(fInputListLYZEP); |
887 | } | |
888 | if(GFC) { | |
47d5b28f | 889 | TString outputGFC = AliAnalysisManager::GetCommonFileName(); |
890 | outputGFC += ":outputGFCanalysis"; | |
93329510 | 891 | outputGFC+= type; |
47d5b28f | 892 | |
893 | AliAnalysisDataContainer *coutputGFC = mgr->CreateContainer("cobjGFC", TList::Class(),AliAnalysisManager::kOutputContainer,outputGFC); | |
93329510 | 894 | mgr->ConnectInput(taskGFC,0,coutputFE); |
2ed70edf | 895 | mgr->ConnectOutput(taskGFC,1,coutputGFC); |
93329510 | 896 | if (useWeights) { |
897 | mgr->ConnectInput(taskGFC,1,cinputWeights); | |
898 | cinputWeights->SetData(weightsList); | |
899 | } | |
900 | } | |
901 | if(QC) { | |
47d5b28f | 902 | TString outputQC = AliAnalysisManager::GetCommonFileName(); |
903 | outputQC += ":outputQCanalysis"; | |
93329510 | 904 | outputQC+= type; |
47d5b28f | 905 | |
906 | AliAnalysisDataContainer *coutputQC = mgr->CreateContainer("cobjQC", TList::Class(),AliAnalysisManager::kOutputContainer,outputQC); | |
93329510 | 907 | mgr->ConnectInput(taskQC,0,coutputFE); |
2ed70edf | 908 | mgr->ConnectOutput(taskQC,1,coutputQC); |
93329510 | 909 | if (useWeights) { |
910 | mgr->ConnectInput(taskQC,1,cinputWeights); | |
911 | cinputWeights->SetData(weightsList); | |
2ed70edf | 912 | } |
93329510 | 913 | } |
914 | if(FQD) { | |
47d5b28f | 915 | TString outputFQD = AliAnalysisManager::GetCommonFileName(); |
916 | outputFQD += ":outputFQDanalysis"; | |
93329510 | 917 | outputFQD+= type; |
47d5b28f | 918 | |
919 | AliAnalysisDataContainer *coutputFQD = mgr->CreateContainer("cobjFQD", TList::Class(),AliAnalysisManager::kOutputContainer,outputFQD); | |
93329510 | 920 | mgr->ConnectInput(taskFQD,0,coutputFE); |
2ed70edf | 921 | mgr->ConnectOutput(taskFQD,1,coutputFQD); |
93329510 | 922 | if(useWeights) { |
923 | mgr->ConnectInput(taskFQD,1,cinputWeights); | |
924 | cinputWeights->SetData(weightsList); | |
925 | } | |
926 | } | |
927 | if(MCEP) { | |
47d5b28f | 928 | TString outputMCEP = AliAnalysisManager::GetCommonFileName(); |
929 | outputMCEP += ":outputMCEPanalysis"; | |
93329510 | 930 | outputMCEP+= type; |
47d5b28f | 931 | |
932 | AliAnalysisDataContainer *coutputMCEP = mgr->CreateContainer("cobjMCEP", TList::Class(),AliAnalysisManager::kOutputContainer,outputMCEP); | |
93329510 | 933 | mgr->ConnectInput(taskMCEP,0,coutputFE); |
22063257 | 934 | mgr->ConnectOutput(taskMCEP,1,coutputMCEP); |
93329510 | 935 | } |
67a6b178 | 936 | if(MH) { |
937 | TString outputMH = AliAnalysisManager::GetCommonFileName(); | |
938 | outputMH += ":outputMHanalysis"; | |
939 | outputMH += type; | |
940 | ||
941 | AliAnalysisDataContainer *coutputMH = mgr->CreateContainer("cobjMH", TList::Class(),AliAnalysisManager::kOutputContainer,outputMH); | |
942 | mgr->ConnectInput(taskMH,0,coutputFE); | |
943 | mgr->ConnectOutput(taskMH,1,coutputMH); | |
944 | //if (useWeights) { | |
945 | // mgr->ConnectInput(taskMH,1,cinputWeights); | |
946 | // cinputWeights->SetData(weightsList); | |
947 | //} | |
948 | } | |
949 | if(NL) { | |
950 | TString outputNL = AliAnalysisManager::GetCommonFileName(); | |
951 | outputNL += ":outputNLanalysis"; | |
952 | outputNL += type; | |
953 | ||
954 | AliAnalysisDataContainer *coutputNL = mgr->CreateContainer("cobjNL", TList::Class(),AliAnalysisManager::kOutputContainer,outputNL); | |
955 | mgr->ConnectInput(taskNL,0,coutputFE); | |
956 | mgr->ConnectOutput(taskNL,1,coutputNL); | |
957 | //if (useWeights) { | |
958 | // mgr->ConnectInput(taskNL,1,cinputWeights); | |
959 | // cinputWeights->SetData(weightsList); | |
960 | //} | |
961 | } | |
93329510 | 962 | |
963 | // Return analysis task | |
964 | //=========================================================================== | |
965 | return taskFE; | |
966 | ||
967 | ||
968 | ||
969 | } | |
970 | ||
971 | ||
972 | ||
973 | ||
974 |