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