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