1 ///////////////////////////////////////////////////////////////////
\r
3 // AddTaskFlowTPCTOFQCSP 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 AliAnalysisTaskFlowTPCTOFQCSP* AddTaskFlowTPCTOFQCSP(
\r
16 TString uniqueID = "",
\r
19 Double_t InvmassCut,
\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
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
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
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
56 if(debug) cout << " Fatal error: no analysis manager found! " << endl;
\r
59 if (!mgr->GetInputEventHandler()) {
\r
60 if(debug) cout << " Fatal error: no imput event handler found!" << endl;
\r
65 AliAnalysisTaskFlowTPCTOFQCSP *taskHFE = ConfigHFEStandardCuts(minTPCCluster, pixel); //kTRUE if MC
\r
67 if(debug) cout << " === AliAnalysisTaskFlowTPCTOFQCSP === " << taskHFE << endl;
\r
69 if(debug) cout << " --> Unexpected error occurred: NO TASK WAS CREATED! (could be a library problem!) " << endl;
\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
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
88 //set RP cuts for flow package analysis
\r
89 cutsRP = new AliFlowTrackCuts(Form("RFPcuts%s",uniqueID));
\r
91 if(debug) cout << " Fatal error: no RP cuts found, could be a library problem! " << endl;
\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
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
115 if(debug) cout << " --> VZERO RP's " << cutsRP << endl;
\r
118 AliFlowTrackSimpleCuts *POIfilterLeft = new AliFlowTrackSimpleCuts();
\r
119 AliFlowTrackSimpleCuts *POIfilterRight = new AliFlowTrackSimpleCuts();
\r
121 POIfilterLeft->SetEtaMin(-0.8);
\r
122 POIfilterLeft->SetEtaMax(0.0);
\r
123 POIfilterLeft->SetMassMin(263731); POIfilterLeft->SetMassMax(263733);
\r
125 POIfilterRight->SetEtaMin(0.0);
\r
126 POIfilterRight->SetEtaMax(0.8);
\r
127 POIfilterRight->SetMassMin(263731); POIfilterRight->SetMassMax(263733);
\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
140 taskHFE->SetRPCuts(cutsRP);
\r
143 AliAnalysisDataContainer *coutput3 = mgr->CreateContainer(Form("ccontainer0_%s",uniqueID.Data()),TList::Class(),AliAnalysisManager::kOutputContainer,fileName);
\r
145 mgr->ConnectInput(taskHFE,0,mgr->GetCommonInputContainer());
\r
146 mgr->ConnectOutput(taskHFE,1,coutput3);
\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
155 mgr->AddTask(taskHFE);
\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
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
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
180 //_____________________________________________________________________________
\r
181 //_____________________________________________________________________________
\r
183 AliAnalysisTaskFlowTPCTOFQCSP* ConfigHFEStandardCuts(Int_t minTPCCulster,AliHFEextraCuts::ITSPixel_t pixel){
\r
185 // HFE standard task configuration
\r
188 Bool_t kAnalyseTaggedTracks = kTRUE;
\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
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
212 AliAnalysisTaskFlowTPCTOFQCSP *task = new AliAnalysisTaskFlowTPCTOFQCSP("HFE_Flow_TPCTOF");
\r
213 printf("*************************************************************");
\r
214 printf("task -------------------------------------------- %p\n ", task);
\r
215 printf("*************************************************************\n");
\r
218 task->SetHFECuts(hfecuts);
\r
220 // task->SetInvariantMassCut(0.05);
\r
221 // task->SetRejectKinkMother(kTRUE);
\r
222 // task->SetRemovePileUp(kTRUE);
\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
230 // printf("*************************************\n");
\r
231 // printf("Configuring standard Task:\n");
\r
232 // task->PrintStatus();
\r
233 // pid->PrintStatus();
\r
234 // printf("*************************************\n");
\r
240 //_____________________________________________________________________________
\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
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
251 // fileName+="_SUBEVENTS";
\r
252 // if(debug) cout << " --> Setting up subevent analysis <-- " << endl;
\r
254 if(debug) cout << " --> fileName " << fileName << endl;
\r
255 TString myFolder = fileName;
\r
256 if(debug) cout << " --> myFolder " << myFolder << endl;
\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
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
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
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
309 //_____________________________________________________________________________
\r