]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGHF/hfe/macros/AddTaskFlowTPCEMCalQCSP.C
added pile up protection
[u/mrichter/AliRoot.git] / PWGHF / hfe / macros / AddTaskFlowTPCEMCalQCSP.C
CommitLineData
a70c9e97 1///////////////////////////////////////////////////////////////////\r
96387d94 2// //\r
3// AddTaskFlowTPCEMCalQCSP macro //\r
a70c9e97 4// Author: Andrea Dubla, Utrecht University, 2012 //\r
5// //\r
6///////////////////////////////////////////////////////////////////\r
7class AliAnalysisDataContainer;\r
8class AliFlowTrackCuts;\r
9class AliFlowTrackSimpleCuts;\r
10class AliFlowEventCuts;\r
11class AliFlowEventSimpleCuts;\r
12class AliAnalysisDataContainer;\r
13class AliHFEextraCuts;\r
14\r
9d63a2f6 15AliAnalysisTaskFlowTPCEMCalQCSP* AddTaskFlowTPCEMCalQCSP(\r
96387d94 16 TString uniqueID = "",\r
17 Float_t centrMin ,\r
18 Float_t centrMax ,\r
19 Double_t InvmassCut,\r
20 Double_t pTCut,\r
21 Int_t Trigger,\r
ff36a82c 22 Bool_t multCorrcut,\r
96387d94 23 Double_t minTPC,\r
24 Double_t maxTPC,\r
25 Double_t minEovP,\r
26 Double_t maxEovP,\r
27 Double_t minM20,\r
28 Double_t maxM20,\r
29 Double_t minM02,\r
30 Double_t maxM02,\r
31 Double_t Dispersion,\r
32 Int_t minTPCCluster,\r
33 AliHFEextraCuts::ITSPixel_t pixel,\r
ff36a82c 34 Bool_t PhotonicElectronDCA = kFALSE,\r
96387d94 35 Int_t TPCClusterforAsso = 80,\r
36 Bool_t AssoITSref = kTRUE,\r
37 Bool_t purity = kTRUE,\r
38 Bool_t SideBandsFlow = kFALSE,\r
39 Bool_t Phi_minus_psi = kFALSE,\r
40 const char *Cent = "V0M",\r
41 Bool_t QC = kTRUE, // use qc2 and qc4\r
42 Bool_t SP_TPC = kTRUE, //use tpc sp method\r
43 Bool_t VZERO_SP = kFALSE, // use vzero sp method\r
44 Int_t harmonic = 2,\r
45 Bool_t shrinkSP = kTRUE,\r
46 Bool_t debug = kFALSE,\r
47 Int_t RPFilterBit = 1,\r
48 Bool_t op_ang = kFALSE,\r
49 Double_t op_angle_cut=3.\r
50 )\r
a70c9e97 51\r
52{\r
96387d94 53 \r
54 \r
55 \r
56 if(debug) cout << " === Adding Task ElectFlow === " << endl;\r
a70c9e97 57 TString fileName = AliAnalysisManager::GetCommonFileName();\r
58 fileName += ":ElectroID_";\r
59 fileName += uniqueID;\r
60 if(debug) cout << " --> Reconstruction data container: " << fileName << endl;\r
61 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();\r
62 if (!mgr) {\r
63 if(debug) cout << " Fatal error: no analysis manager found! " << endl;\r
64 return 0x0;\r
65 }\r
66 if (!mgr->GetInputEventHandler()) {\r
67 if(debug) cout << " Fatal error: no imput event handler found!" << endl;\r
68 return 0x0;\r
69 }\r
a70c9e97 70 \r
96387d94 71 //create a task\r
72 AliAnalysisTaskFlowTPCEMCalQCSP *taskHFE = ConfigHFEemcalMod(kFALSE, minTPCCluster, pixel); //kTRUE if MC\r
73 \r
74 if(debug) cout << " === AliAnalysisElectronFlow === " << taskHFE << endl;\r
75 if(!taskHFE) {\r
a70c9e97 76 if(debug) cout << " --> Unexpected error occurred: NO TASK WAS CREATED! (could be a library problem!) " << endl;\r
77 return 0x0;\r
78 }\r
79 \r
96387d94 80 // Set centrality percentiles and method V0M, FMD, TRK, TKL, CL0, CL1, V0MvsFMD, TKLvsV0M, ZEMvsZDC\r
81 taskHFE->SetCentralityParameters(centrMin, centrMax, Cent);\r
82 taskHFE->SetInvariantMassCut(InvmassCut);\r
83 taskHFE->SetTrigger(Trigger);\r
84 taskHFE->SetIDCuts(minTPC, maxTPC, minEovP, maxEovP, minM20, maxM20, minM02, maxM02, Dispersion);\r
85 taskHFE->SetFlowSideBands(SideBandsFlow);\r
86 taskHFE->Setphiminuspsi(Phi_minus_psi);\r
87 taskHFE->SetPurity(purity);\r
88 taskHFE->SetpTCuttrack(pTCut);\r
89 taskHFE->SelectPhotonicElectronMethod(PhotonicElectronDCA);\r
90 taskHFE->SetOpeningAngleflag(op_ang);\r
91 taskHFE->SetOpeningAngleCut(op_angle_cut);\r
92 taskHFE->SetAssoTPCCluster(TPCClusterforAsso);\r
93 taskHFE->SetAssoITSRefit(AssoITSref);\r
ff36a82c 94 taskHFE->SetMultCorrelationCut(multCorrcut);\r
96387d94 95 //set RP cuts for flow package analysis\r
96 cutsRP = new AliFlowTrackCuts(Form("RFPcuts%s",uniqueID));\r
a70c9e97 97 if(!cutsRP) {\r
98 if(debug) cout << " Fatal error: no RP cuts found, could be a library problem! " << endl;\r
99 return 0x0;\r
100 }\r
96387d94 101 \r
a70c9e97 102 if(!VZERO_SP) {\r
103 AliFlowTrackCuts::trackParameterType rptype = AliFlowTrackCuts::kGlobal;\r
104 cutsRP->SetParamType(rptype);\r
105 cutsRP->SetAODfilterBit(RPFilterBit);\r
106 cutsRP->SetPtRange(0.2, 5.0);\r
107 cutsRP->SetEtaRange(-0.7, 0.7);\r
108 cutsRP->SetMinNClustersTPC(70);\r
109 cutsRP->SetMinChi2PerClusterTPC(0.1);\r
110 cutsRP->SetMaxChi2PerClusterTPC(4.0);\r
111 cutsRP->SetRequireTPCRefit(kTRUE);\r
112 cutsRP->SetMaxDCAToVertexXY(0.3);\r
113 cutsRP->SetMaxDCAToVertexZ(0.3);\r
114 cutsRP->SetAcceptKinkDaughters(kFALSE);\r
115 cutsRP->SetMinimalTPCdedx(10.);\r
116 if(debug) cout << " --> kGlobal RP's " << cutsRP << endl;\r
117 }\r
118 if(VZERO_SP) { // use vzero sub analysis\r
119 cutsRP = cutsRP->GetStandardVZEROOnlyTrackCuts(); // select vzero tracks\r
120 SP_TPC = kFALSE; // disable other methods\r
121 QC = kFALSE;\r
122 if(debug) cout << " --> VZERO RP's " << cutsRP << endl;\r
123 }\r
96387d94 124 \r
a70c9e97 125 AliFlowTrackSimpleCuts *POIfilterLeft = new AliFlowTrackSimpleCuts();\r
126 AliFlowTrackSimpleCuts *POIfilterRight = new AliFlowTrackSimpleCuts();\r
96387d94 127 if(VZERO_SP || SP_TPC){\r
a70c9e97 128 POIfilterLeft->SetEtaMin(-0.7);\r
129 POIfilterLeft->SetEtaMax(0.0);\r
130 POIfilterLeft->SetMassMin(263731); POIfilterLeft->SetMassMax(263733);\r
96387d94 131 \r
a70c9e97 132 POIfilterRight->SetEtaMin(0.0);\r
133 POIfilterRight->SetEtaMax(0.7);\r
134 POIfilterRight->SetMassMin(263731); POIfilterRight->SetMassMax(263733);\r
135 }\r
a70c9e97 136 \r
96387d94 137 \r
138 AliFlowTrackSimpleCuts *POIfilterQC = new AliFlowTrackSimpleCuts();\r
139 if(QC){\r
140 POIfilterQC->SetEtaMin(-0.7);\r
141 POIfilterQC->SetEtaMax(0.7);\r
142 POIfilterQC->SetMassMin(263731); POIfilterQC->SetMassMax(263733);\r
143 \r
9d63a2f6 144 }\r
96387d94 145 \r
9d63a2f6 146 if(SideBandsFlow){\r
9d63a2f6 147 \r
96387d94 148 AliFlowTrackSimpleCuts *POIfilterLeftH = new AliFlowTrackSimpleCuts();\r
149 AliFlowTrackSimpleCuts *POIfilterRightH = new AliFlowTrackSimpleCuts();\r
150 if(SP_TPC){\r
151 POIfilterLeftH->SetEtaMin(-0.7);\r
152 POIfilterLeftH->SetEtaMax(0.0);\r
153 POIfilterLeftH->SetMassMin(2636); POIfilterLeftH->SetMassMax(2638);\r
154 \r
155 POIfilterRightH->SetEtaMin(0.0);\r
156 POIfilterRightH->SetEtaMax(0.7);\r
157 POIfilterRightH->SetMassMin(2636); POIfilterRightH->SetMassMax(2638);\r
158 }\r
159 \r
160 \r
161 AliFlowTrackSimpleCuts *POIfilterQCH = new AliFlowTrackSimpleCuts();\r
162 if(QC){\r
163 POIfilterQCH->SetEtaMin(-0.7);\r
164 POIfilterQCH->SetEtaMax(0.7);\r
165 POIfilterQCH->SetMassMin(2636); POIfilterQCH->SetMassMax(2638);\r
166 \r
167 }\r
168 \r
9d63a2f6 169 }\r
170 \r
96387d94 171 taskHFE->SetRPCuts(cutsRP);\r
9d63a2f6 172 \r
9d63a2f6 173 \r
96387d94 174 AliAnalysisDataContainer *coutput3 = mgr->CreateContainer(Form("ccontainer0_%s",uniqueID.Data()),TList::Class(),AliAnalysisManager::kOutputContainer,fileName);\r
175 \r
176 mgr->ConnectInput(taskHFE,0,mgr->GetCommonInputContainer());\r
177 mgr->ConnectOutput(taskHFE,1,coutput3);\r
178 \r
9d63a2f6 179 \r
a70c9e97 180 if(debug) cout << " === RECEIVED REQUEST FOR FLOW ANALYSIS === " << endl;\r
181 AliAnalysisDataContainer *flowEvent = mgr->CreateContainer(Form("FlowContainer_%s",uniqueID.Data()), AliFlowEventSimple::Class(), AliAnalysisManager::kExchangeContainer);\r
182 mgr->ConnectOutput(taskHFE, 2, flowEvent);\r
96387d94 183 if(debug) cout << " --> Created IO containers " << flowEvent << endl;\r
a70c9e97 184 \r
96387d94 185 if(SideBandsFlow){\r
186 if(debug) cout << " === RECEIVED REQUEST FOR FLOW ANALYSIS === " << endl;\r
187 AliAnalysisDataContainer *flowEventCont = mgr->CreateContainer(Form("FlowContainer_Cont_%s",uniqueID.Data()), AliFlowEventSimple::Class(), AliAnalysisManager::kExchangeContainer);\r
188 mgr->ConnectOutput(taskHFE, 3, flowEventCont);\r
189 if(debug) cout << " --> Created IO containers " << flowEventCont << endl;\r
9d63a2f6 190 }\r
191 \r
a70c9e97 192 \r
96387d94 193 mgr->AddTask(taskHFE);\r
a70c9e97 194 \r
195 if (QC) { // add qc tasks\r
96387d94 196 AddQCmethod(Form("QCTPCin_%s",uniqueID.Data()), harmonic, flowEvent, debug ,uniqueID, -0.7, -0.0, 0.0, 0.7,false,POIfilterQC);\r
a70c9e97 197 if(debug) cout << " --> Hanging QC task ...succes! "<< endl;\r
96387d94 198 }\r
a70c9e97 199 if (SP_TPC) { // add sp subevent tasks\r
200 AddSPmethod(Form("SPTPCQa_in_%s", uniqueID.Data()), -0.7, -.0, .0, +0.7, "Qa", harmonic, flowEvent, false, shrinkSP, debug,uniqueID, false, POIfilterRight);\r
201 if(debug) cout << " --> Hanging SP Qa task ... succes!" << endl;\r
202 AddSPmethod(Form("SPTPCQb_in_%s", uniqueID.Data()), -0.7, -.0, .0, +0.7, "Qb", harmonic, flowEvent, false, shrinkSP, debug,uniqueID, false, POIfilterLeft);\r
203 if(debug) cout << " --> Hanging SP Qb task ... succes!"<< endl;\r
204 }\r
205 if (VZERO_SP) { // add sp subevent tasks\r
96387d94 206 AddSPmethod(Form("SPVZEROQa_in_%s", uniqueID.Data()), -0.7, -.0, .0, +0.7, "Qa", harmonic, flowEvent, false, shrinkSP, debug,uniqueID, true, POIfilterRight);\r
a70c9e97 207 if(debug) cout << " --> Hanging SP Qa task ... succes!" << endl;\r
96387d94 208 AddSPmethod(Form("SPVZEROQb_in_%s", uniqueID.Data()), -0.7, -.0, .0, +0.7, "Qb", harmonic, flowEvent, false, shrinkSP, debug,uniqueID, true, POIfilterLeft);\r
a70c9e97 209 if(debug) cout << " --> Hanging SP Qb task ... succes!"<< endl;\r
210 }\r
96387d94 211 \r
9d63a2f6 212 //=========================================Flow event for elctronContamination==============================================================================================\r
213 if(SideBandsFlow){\r
96387d94 214 if (QC) { // add qc tasks\r
215 AddQCmethod(Form("QCTPCCont_%s",uniqueID.Data()), harmonic, flowEventCont, debug ,uniqueID, -0.7, -0.0, 0.0, 0.7,false,POIfilterQCH);\r
216 if(debug) cout << " --> Hanging QC task ...succes! "<< endl;\r
217 }\r
218 if (SP_TPC) { // add sp subevent tasks\r
219 AddSPmethod(Form("SPTPCQa_Cont_%s", uniqueID.Data()), -0.7, -.0, .0, +0.7, "Qa", harmonic, flowEventCont, false, shrinkSP, debug,uniqueID, false, POIfilterRightH);\r
220 if(debug) cout << " --> Hanging SP Qa task ... succes!" << endl;\r
221 AddSPmethod(Form("SPTPCQb_Cont_%s", uniqueID.Data()), -0.7, -.0, .0, +0.7, "Qb", harmonic, flowEventCont, false, shrinkSP, debug,uniqueID, false, POIfilterLeftH);\r
222 if(debug) cout << " --> Hanging SP Qb task ... succes!"<< endl;\r
223 }\r
9d63a2f6 224 }\r
225 //==========================================================================================================================================================================\r
a70c9e97 226 \r
227 \r
96387d94 228 return taskHFE;\r
229 \r
a70c9e97 230}\r
231\r
232//_____________________________________________________________________________\r
233\r
234\r
235//_____________________________________________________________________________\r
236void AddSPmethod(char *name, double minEtaA, double maxEtaA, double minEtaB, double maxEtaB, char *Qvector, int harmonic, AliAnalysisDataContainer *flowEvent, bool bEP, bool shrink = false, bool debug, TString uniqueID,Bool_t VZERO_SP = kFALSE, AliFlowTrackSimpleCuts* POIfilter)\r
96387d94 237{\r
238 // add sp task and invm filter tasks\r
239 if(debug) (bEP) ? cout << " ****** Reveived request for EP task ****** " << endl : cout << " ******* Switching to SP task ******* " << endl;\r
240 TString fileName = AliAnalysisManager::GetCommonFileName();\r
241 (bEP) ? fileName+=":EP" : fileName+=":SP";\r
242 // if(etagap) {\r
a70c9e97 243 // fileName+="_SUBEVENTS";\r
96387d94 244 // if(debug) cout << " --> Setting up subevent analysis <-- " << endl;\r
245 // }\r
246 if(debug) cout << " --> fileName " << fileName << endl;\r
247 TString myFolder = fileName;\r
248 if(debug) cout << " --> myFolder " << myFolder << endl;\r
249 TString myNameSP;\r
250 (bEP) ? myNameSP = Form("%sEPv%d%s", name, harmonic, Qvector): myNameSP = Form("%sSPv%d%s", name, harmonic, Qvector);\r
251 if(debug) cout << " myNameSP " << myNameSP << endl;\r
252 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();\r
253 AliAnalysisDataContainer *flowEventOut = mgr->CreateContainer(Form("Filter_%s",myNameSP.Data()),AliFlowEventSimple::Class(),AliAnalysisManager::kExchangeContainer);\r
254 AliAnalysisTaskFilterFE *tskFilter = new AliAnalysisTaskFilterFE(Form("TaskFilter_%s", myNameSP.Data()), NULL, POIfilter);\r
255 tskFilter->SetSubeventEtaRange(minEtaA, maxEtaA, minEtaB, maxEtaB);\r
256 if(VZERO_SP) tskFilter->SetSubeventEtaRange(-10, 0, 0, 10);\r
257 mgr->AddTask(tskFilter);\r
258 mgr->ConnectInput(tskFilter, 0, flowEvent);\r
259 mgr->ConnectOutput(tskFilter, 1, flowEventOut);\r
260 AliAnalysisDataContainer *outSP = mgr->CreateContainer(myNameSP.Data(), TList::Class(), AliAnalysisManager::kOutputContainer, fileName);\r
261 AliAnalysisTaskScalarProduct *tskSP = new AliAnalysisTaskScalarProduct(Form("TaskScalarProduct_%s", myNameSP.Data()), kFALSE);\r
262 tskSP->SetApplyCorrectionForNUA(kTRUE);\r
263 tskSP->SetHarmonic(harmonic);\r
264 tskSP->SetTotalQvector(Qvector);\r
265 if (bEP) tskSP->SetBehaveAsEP();\r
266 if (shrink) tskSP->SetBookOnlyBasicCCH(kTRUE);\r
267 mgr->AddTask(tskSP);\r
268 mgr->ConnectInput(tskSP, 0, flowEventOut);\r
269 mgr->ConnectOutput(tskSP, 1, outSP);\r
270}\r
a70c9e97 271//_____________________________________________________________________________\r
272void AddQCmethod(char *name, int harmonic, AliAnalysisDataContainer *flowEvent, Bool_t debug, TString uniqueID,double minEtaA, double maxEtaA, double minEtaB, double maxEtaB,Bool_t VZERO_SP = kFALSE, AliFlowTrackSimpleCuts* POIfilter)\r
96387d94 273{\r
274 // add qc task and invm filter tasks\r
275 if(debug) cout << " ****** Received request for QC v" << harmonic << " task " << name << ", IO ****** " << flowEvent << endl;\r
276 TString fileName = AliAnalysisManager::GetCommonFileName();\r
277 fileName+=":QC";\r
278 if(debug) cout << " --> Common filename: " << fileName << endl;\r
279 TString myFolder = Form("v%d", harmonic);\r
280 if(debug) cout << " --> myFolder: " << myFolder << endl;\r
281 TString myName = Form("%s", name);\r
282 if(debug) cout << " --> myName: " << myName << endl;\r
283 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();\r
284 AliAnalysisDataContainer *flowEventOut = mgr->CreateContainer(Form("Filter_%s", myName.Data()), AliFlowEventSimple::Class(),AliAnalysisManager::kExchangeContainer);\r
285 AliAnalysisTaskFilterFE *tskFilter = new AliAnalysisTaskFilterFE(Form("TaskFilter_%s", myName.Data()), NULL, POIfilter);\r
286 tskFilter->SetSubeventEtaRange(minEtaA, maxEtaA, minEtaB, maxEtaB);\r
287 // if(VZERO_SP) tskFilter->SetSubeventEtaRange(-10, 0, 0, 10);\r
288 mgr->AddTask(tskFilter);\r
289 mgr->ConnectInput(tskFilter, 0, flowEvent);\r
290 mgr->ConnectOutput(tskFilter, 1, flowEventOut);\r
291 \r
292 AliAnalysisDataContainer *outQC = mgr->CreateContainer(myName.Data(), TList::Class(), AliAnalysisManager::kOutputContainer, fileName);\r
293 AliAnalysisTaskQCumulants *tskQC = new AliAnalysisTaskQCumulants(Form("TaskQCumulants_%s", myName.Data()), kFALSE);\r
294 tskQC->SetApplyCorrectionForNUA(kTRUE);\r
295 tskQC->SetHarmonic(harmonic);\r
296 tskQC->SetBookOnlyBasicCCH(kTRUE);\r
297 mgr->AddTask(tskQC);\r
298 mgr->ConnectInput(tskQC, 0, flowEventOut);\r
299 mgr->ConnectOutput(tskQC, 1, outQC);\r
300}\r
a70c9e97 301//_____________________________________________________________________________\r
302\r
303\r
304//_____________________________________________________________________________\r
96387d94 305\r
a70c9e97 306AliAnalysisTaskFlowTPCEMCalQCSP* ConfigHFEemcalMod(Bool_t useMC,Int_t minTPCCulster,AliHFEextraCuts::ITSPixel_t pixel){\r
307 //\r
308 // HFE standard task configuration\r
309 //\r
310 \r
311 Bool_t kAnalyseTaggedTracks = kTRUE;\r
312 \r
313 AliHFEcuts *hfecuts = new AliHFEcuts("hfeCutsEMCAL","HFE Standard Cuts"); //TODO....change the cuts values to PbPb\r
314 // hfecuts->CreateStandardCuts();\r
315 hfecuts->SetMinNClustersTPC(minTPCCulster);\r
316 hfecuts->SetMinNClustersITS(3);\r
317 hfecuts->SetMinNTrackletsTRD(0);\r
318 hfecuts->SetMinRatioTPCclusters(0.6);\r
319 \r
320 // hfecuts->SetEtaRange(-0.9,0.9);\r
321 // hfecuts->SetTPCmodes(AliHFEextraCuts::kFound, AliHFEextraCuts::kFoundOverFindable);\r
322 hfecuts->SetRequireITSPixel();\r
323 hfecuts->SetCutITSpixel(pixel);//kAny\r
324 hfecuts->SetMaxChi2perClusterITS(-1);\r
325 hfecuts->SetMaxChi2perClusterTPC(3.5);\r
326 hfecuts->SetCheckITSLayerStatus(kFALSE); // shud be put back\r
327 // hfecuts->UnsetVertexRequirement();\r
328 hfecuts->SetVertexRange(10.);\r
329 hfecuts->SetRequireSigmaToVertex();\r
330 //hfecuts->SetSigmaToVertex(10);\r
331 hfecuts->SetTOFPIDStep(kFALSE);\r
332 // hfecuts->SetQAOn();\r
333 hfecuts->SetPtRange(0, 30);\r
334 \r
9d63a2f6 335 AliAnalysisTaskFlowTPCEMCalQCSP *task = new AliAnalysisTaskFlowTPCEMCalQCSP("HFE_Flow_TPCEMCal");\r
a70c9e97 336 printf("task ------------------------ %p\n ", task);\r
337 \r
338 \r
339 task->SetHFECuts(hfecuts);\r
340 \r
341 // task->SetInvariantMassCut(0.05);\r
342 // task->SetRejectKinkMother(kTRUE);\r
343 // task->SetRemovePileUp(kTRUE);\r
344 \r
345 // Define PID\r
346 AliHFEpid *pid = task->GetPID();\r
347 if(useMC) pid->SetHasMCData(kTRUE);\r
348 pid->AddDetector("TPC", 0);\r
349 pid->AddDetector("EMCAL", 1);\r
350 \r
351 printf("*************************************\n");\r
352 printf("Configuring standard Task:\n");\r
353 // task->PrintStatus();\r
354 pid->PrintStatus();\r
355 printf("*************************************\n");\r
356 return task;\r
357 \r
358 \r
359}\r
360\r
96387d94 361//_____________________________________________________________________________