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