1 ///////////////////////////////////////////////////////////////////
\r
3 // AddTaskFlowTPCEMCalQCSP macro //
\r
4 // Author: Andrea Dubla, Utrecht University, 2012 //
\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
15 AliAnalysisTaskFlowTPCEMCalQCSP* AddTaskFlowTPCEMCalQCSP(
\r
16 TString uniqueID = "",
\r
19 Double_t InvmassCut,
\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
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
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
62 if(debug) cout << " Fatal error: no analysis manager found! " << endl;
\r
65 if (!mgr->GetInputEventHandler()) {
\r
66 if(debug) cout << " Fatal error: no imput event handler found!" << endl;
\r
71 AliAnalysisTaskFlowTPCEMCalQCSP *taskHFE = ConfigHFEemcalMod(kFALSE, minTPCCluster, pixel); //kTRUE if MC
\r
73 if(debug) cout << " === AliAnalysisElectronFlow === " << taskHFE << endl;
\r
75 if(debug) cout << " --> Unexpected error occurred: NO TASK WAS CREATED! (could be a library problem!) " << endl;
\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
94 //set RP cuts for flow package analysis
\r
95 cutsRP = new AliFlowTrackCuts(Form("RFPcuts%s",uniqueID));
\r
97 if(debug) cout << " Fatal error: no RP cuts found, could be a library problem! " << endl;
\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
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
121 if(debug) cout << " --> VZERO RP's " << cutsRP << endl;
\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
131 POIfilterRight->SetEtaMin(0.0);
\r
132 POIfilterRight->SetEtaMax(0.7);
\r
133 POIfilterRight->SetMassMin(263731); POIfilterRight->SetMassMax(263733);
\r
137 AliFlowTrackSimpleCuts *POIfilterQC = new AliFlowTrackSimpleCuts();
\r
139 POIfilterQC->SetEtaMin(-0.7);
\r
140 POIfilterQC->SetEtaMax(0.7);
\r
141 POIfilterQC->SetMassMin(263731); POIfilterQC->SetMassMax(263733);
\r
147 AliFlowTrackSimpleCuts *POIfilterLeftH = new AliFlowTrackSimpleCuts();
\r
148 AliFlowTrackSimpleCuts *POIfilterRightH = new AliFlowTrackSimpleCuts();
\r
150 POIfilterLeftH->SetEtaMin(-0.7);
\r
151 POIfilterLeftH->SetEtaMax(0.0);
\r
152 POIfilterLeftH->SetMassMin(2636); POIfilterLeftH->SetMassMax(2638);
\r
154 POIfilterRightH->SetEtaMin(0.0);
\r
155 POIfilterRightH->SetEtaMax(0.7);
\r
156 POIfilterRightH->SetMassMin(2636); POIfilterRightH->SetMassMax(2638);
\r
160 AliFlowTrackSimpleCuts *POIfilterQCH = new AliFlowTrackSimpleCuts();
\r
162 POIfilterQCH->SetEtaMin(-0.7);
\r
163 POIfilterQCH->SetEtaMax(0.7);
\r
164 POIfilterQCH->SetMassMin(2636); POIfilterQCH->SetMassMax(2638);
\r
170 taskHFE->SetRPCuts(cutsRP);
\r
173 AliAnalysisDataContainer *coutput3 = mgr->CreateContainer(Form("ccontainer0_%s",uniqueID.Data()),TList::Class(),AliAnalysisManager::kOutputContainer,fileName);
\r
175 mgr->ConnectInput(taskHFE,0,mgr->GetCommonInputContainer());
\r
176 mgr->ConnectOutput(taskHFE,1,coutput3);
\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
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
192 mgr->AddTask(taskHFE);
\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
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
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
211 //=========================================Flow event for elctronContamination==============================================================================================
\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
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
224 //==========================================================================================================================================================================
\r
231 //_____________________________________________________________________________
\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
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
242 // fileName+="_SUBEVENTS";
\r
243 // if(debug) cout << " --> Setting up subevent analysis <-- " << endl;
\r
245 if(debug) cout << " --> fileName " << fileName << endl;
\r
246 TString myFolder = fileName;
\r
247 if(debug) cout << " --> myFolder " << myFolder << endl;
\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
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
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
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
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
300 //_____________________________________________________________________________
\r
303 //_____________________________________________________________________________
\r
305 AliAnalysisTaskFlowTPCEMCalQCSP* ConfigHFEemcalMod(Bool_t useMC,Int_t minTPCCulster,AliHFEextraCuts::ITSPixel_t pixel){
\r
307 // HFE standard task configuration
\r
310 Bool_t kAnalyseTaggedTracks = kTRUE;
\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
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
334 AliAnalysisTaskFlowTPCEMCalQCSP *task = new AliAnalysisTaskFlowTPCEMCalQCSP("HFE_Flow_TPCEMCal");
\r
335 printf("task ------------------------ %p\n ", task);
\r
338 task->SetHFECuts(hfecuts);
\r
340 // task->SetInvariantMassCut(0.05);
\r
341 // task->SetRejectKinkMother(kTRUE);
\r
342 // task->SetRemovePileUp(kTRUE);
\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
350 printf("*************************************\n");
\r
351 printf("Configuring standard Task:\n");
\r
352 // task->PrintStatus();
\r
353 pid->PrintStatus();
\r
354 printf("*************************************\n");
\r
360 //_____________________________________________________________________________