]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGHF/vertexingHF/charmFlow/AddTaskFlowD2HconfigurableTPC.C
Added support for dylib in test mode
[u/mrichter/AliRoot.git] / PWGHF / vertexingHF / charmFlow / AddTaskFlowD2HconfigurableTPC.C
CommitLineData
b5855a40 1class AliAnalysisDataContainer;
2class AliFlowEventCuts;
3class AliFlowEventTrackCuts;
4class AliFlowEventTrackSimpleCuts;
5class AliRDHFCutsD0toKpi;
6class AliRDHFCutsDStartoKpipi;
7
8void AddTaskFlowD2HconfigurableTPC(TString fileNameCuts, TString folderName, Int_t nDmeson, Int_t myHarmonic,
9 Bool_t bDoQC, Bool_t bDoSPTPC, Bool_t bDoSPVZERO, Bool_t bDoEPTPC, Bool_t bDoEPVZERO,
10 Int_t ptBinWidth, Double_t gapTPC,
11 Double_t etaTPC1, Double_t etaTPC2, Double_t etaTPC3, Double_t etaTPC4,
12 Double_t etaVZERO1, Double_t etaVZERO2, Double_t etaVZERO3, Double_t etaVZERO4,
13 Bool_t bOldApproach=kFALSE, Bool_t shrinkSP=kFALSE ) {
14 TFile *filecuts = TFile::Open( fileNameCuts.Data() );
15 if( (!filecuts) || ( filecuts && !filecuts->IsOpen()) ){
16 AliFatal("Could not open cuts file.");
17 }
18
19 TString fileName = AliAnalysisManager::GetCommonFileName();
20 fileName.ReplaceAll(".root","");
21
22 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
23 AliAnalysisDataContainer *cinput1 = mgr->GetCommonInputContainer();
24
25 TString thecuts = folderName;
26 TString sgn = DMesonName( nDmeson ) + Form("w%d",ptBinWidth);
27
28 //**********************************************************************
29 // FLOW TRACK CUTS
30 AliFlowTrackCuts* cutsRFPTPC = new AliFlowTrackCuts( "GlobalRFPTPC" );
31 cutsRFPTPC->SetParamType(AliFlowTrackCuts::kGlobal);
32 cutsRFPTPC->SetPtRange(0.2,5.);
33 cutsRFPTPC->SetEtaRange(etaTPC1,etaTPC4);
34 cutsRFPTPC->SetMinNClustersTPC(70);
35 cutsRFPTPC->SetMinChi2PerClusterTPC(0.2);
36 cutsRFPTPC->SetMaxChi2PerClusterTPC(4.0);
37 cutsRFPTPC->SetAcceptKinkDaughters(kFALSE);
38 cutsRFPTPC->SetMinimalTPCdedx(10.);
39 cutsRFPTPC->SetAODfilterBit(1);
40 // cutsRFPTPC->SetQA(kTRUE);
41 AliFlowTrackCuts* cutsRFPVZE = new AliFlowTrackCuts( "GlobalRFPVZE" );
9579a93f 42 cutsRFPVZE->SetParamType(AliFlowTrackCuts::kVZERO);
b5855a40 43 cutsRFPVZE->SetEtaRange(etaVZERO1,etaVZERO4);
44 cutsRFPVZE->SetPhiMin(0);
45 cutsRFPVZE->SetPhiMax(TMath::TwoPi());
46 // cutsRFPVZE->SetQA(kTRUE);
47 AliFlowTrackCuts* cutsPOI = new AliFlowTrackCuts( "GlobalPOI" );
48 cutsPOI->SetParamType(AliFlowTrackCuts::kGlobal);
49 cutsPOI->SetPtRange(0.2,-5.);
50 cutsPOI->SetEtaRange(0.8,-0.8);
51
52 //**********************************************************************
53 // POI FILTER CUTS
54 AliFlowTrackSimpleCuts *filterPOIQC[50]; // MASS BANDS
55 AliFlowTrackSimpleCuts *filterPOISP[50][2]; // MASS BANDS || ETA || SUBEVENT GAP
56 int myMassBands = MassBands( nDmeson, bOldApproach );
57 for(int mb=0; mb!=myMassBands; ++mb) {
58 filterPOISP[mb][0] = new AliFlowTrackSimpleCuts( Form("FilterPOISP_MB%d_ETANEG",mb) );
59 filterPOISP[mb][0]->SetEtaMin( etaTPC1 );
60 filterPOISP[mb][0]->SetEtaMax( etaTPC2 );
61 filterPOISP[mb][0]->SetMassMin( MassBandLowEdge(nDmeson,mb,bOldApproach) );
62 filterPOISP[mb][0]->SetMassMax( MassBandLowEdge(nDmeson,mb+1,bOldApproach) );
63 filterPOISP[mb][1] = new AliFlowTrackSimpleCuts( Form("FilterPOISP_MB%d_ETAPOS",mb) );
64 filterPOISP[mb][1]->SetEtaMin( etaTPC3 );
65 filterPOISP[mb][1]->SetEtaMax( etaTPC4 );
66 filterPOISP[mb][1]->SetMassMin( MassBandLowEdge(nDmeson,mb,bOldApproach) );
67 filterPOISP[mb][1]->SetMassMax( MassBandLowEdge(nDmeson,mb+1,bOldApproach) );
68 filterPOIQC[mb] = new AliFlowTrackSimpleCuts( Form("FilterPOIQC_MB%d",mb) );
69 filterPOIQC[mb]->SetEtaMin( etaTPC1 );
70 filterPOIQC[mb]->SetEtaMax( etaTPC4 );
71 filterPOIQC[mb]->SetMassMin( MassBandLowEdge(nDmeson,mb,bOldApproach) );
72 filterPOIQC[mb]->SetMassMax( MassBandLowEdge(nDmeson,mb+1,bOldApproach) );
73 }
74
75 // * DMESON SELECTOR *************************************************
76 AliAnalysisTaskFlowD2H *taskSel;
77 switch (nDmeson) {
78 case ( AliRDHFCuts::kD0toKpiCuts ):
79 AliRDHFCutsD0toKpi *myCutsD0 = (AliRDHFCutsD0toKpi*)filecuts->Get("D0toKpiCuts");
80 if(!myCutsD0) {
81 AliFatal("Problems reaching D0toKpiCuts");
82 }
83 taskSel = new AliAnalysisTaskFlowD2H( Form("TaskD0Selector_%s",thecuts.Data()),
84 cutsRFPTPC, cutsRFPVZE, myCutsD0, nDmeson );
85 break;
86 case ( AliRDHFCuts::kDstarCuts ):
87 AliRDHFCutsDStartoKpipi *myCutsDStar = (AliRDHFCutsDStartoKpipi*)filecuts->Get("DStartoKpipiCuts");
88 if(!myCutsDStar) {
89 AliFatal("Problems reaching DStarToKpipiCuts");
90 }
91 taskSel = new AliAnalysisTaskFlowD2H( Form("TaskDStarSelector_%s",thecuts.Data()),
92 cutsRFPTPC, cutsRFPVZE, myCutsDStar, nDmeson);
93 break;
94 case (AliRDHFCuts::kDplusCuts):
95 AliRDHFCutsDplustoKpipi *myCutsDplus = (AliRDHFCutsDplustoKpipi*)filecuts->Get("AnalysisCuts");
96 if(!myCutsDplus) {
97 AliFatal("Problems reaching AnalysisCuts");
98 }
99 taskSel = new AliAnalysisTaskFlowD2H( Form("TaskDplusSelector_%s",thecuts.Data()),
100 cutsRFPTPC, cutsRFPVZE, myCutsDplus, nDmeson );
101 break;
102 }
103 taskSel->SetCommonConstants( MassBins(nDmeson), MinMass(nDmeson), MaxMass(nDmeson), ptBinWidth );
104
105 //taskSel->SelectCollisionCandidates(trigger);
106 //taskSel->SetDebug();
107 AliAnalysisDataContainer *coutHist = mgr->CreateContainer( Form("%sSelector_%s",sgn.Data(),thecuts.Data()),
108 TList::Class(),AliAnalysisManager::kOutputContainer,
109 Form("%s.root:FlowD2H_%s",fileName.Data(),thecuts.Data()) );
110 AliAnalysisDataContainer *exc_TPC = mgr->CreateContainer( Form("TPCEventWithCandidates_%s_%s",sgn.Data(),thecuts.Data()),
111 AliFlowEventSimple::Class(),
112 AliAnalysisManager::kExchangeContainer );
113 AliAnalysisDataContainer *exc_VZE = mgr->CreateContainer( Form("VZEEventWithCandidates_%s_%s",sgn.Data(),thecuts.Data()),
114 AliFlowEventSimple::Class(),
115 AliAnalysisManager::kExchangeContainer );
116 mgr->AddTask(taskSel);
117 mgr->ConnectOutput(taskSel,1,coutHist);
118 mgr->ConnectOutput(taskSel,2,exc_TPC);
119 mgr->ConnectOutput(taskSel,3,exc_VZE);
120 mgr->ConnectInput (taskSel,0,cinput1);
121
122 // * HANGING ANALYSIS TASKS ********************************************
123 int harm = myHarmonic;
124 for(int mb=0; mb!=myMassBands; ++mb) {
125 if(bDoQC) {
126 AddQCmethod( Form("%sQCTPCMB%d",sgn.Data(),mb), fileName.Data(), thecuts.Data(), harm, exc_TPC, filterPOIQC[mb]);
127 }
128 if(bDoSPVZERO) {
129 AddSPmethod( Form("%sSPVZEMB%d",sgn.Data(),mb), fileName.Data(), thecuts.Data(), etaVZERO1, etaVZERO2, etaVZERO3, etaVZERO4,
130 "Qa", harm, exc_VZE, 0, filterPOIQC[mb], NULL, false, shrinkSP );
131 AddSPmethod( Form("%sSPVZEMB%d",sgn.Data(),mb), fileName.Data(), thecuts.Data(), etaVZERO1, etaVZERO2, etaVZERO3, etaVZERO4,
132 "Qb", harm, exc_VZE, 0, filterPOIQC[mb], NULL, false, shrinkSP );
133 }
134 if(bDoEPVZERO) {
135 AddSPmethod( Form("%sEPVZEMB%d",sgn.Data(),mb), fileName.Data(), thecuts.Data(), etaVZERO1, etaVZERO2, etaVZERO3, etaVZERO4,
136 "QaQb", harm, exc_VZE, 0, filterPOIQC[mb], NULL, true, shrinkSP );
137 }
138 if(bDoSPTPC) {
139 for(int eg=0; eg!=2; ++eg) {
140 AddSPmethod( Form("%sSPTPCMB%d",sgn.Data(),mb), fileName.Data(), thecuts.Data(), etaTPC1, etaTPC2-gapTPC*eg, etaTPC3+gapTPC*eg, etaTPC4,
141 "Qa", harm, exc_TPC, eg, filterPOISP[mb][1], NULL, false, shrinkSP );
142 AddSPmethod( Form("%sSPTPCMB%d",sgn.Data(),mb), fileName.Data(), thecuts.Data(), etaTPC1, etaTPC2-gapTPC*eg, etaTPC3+gapTPC*eg, etaTPC4,
143 "Qb", harm, exc_TPC, eg, filterPOISP[mb][0], NULL, false, shrinkSP );
144 }
145 }
146 if(bDoEPTPC) {
147 AddSPmethod( Form("%sEPTPCMB%d",sgn.Data(),mb), fileName.Data(), thecuts.Data(), etaTPC1, etaTPC2, etaTPC3, etaTPC4,
148 "QaQb", harm, exc_TPC, 0, filterPOIQC[mb], NULL, true, shrinkSP );
149 }
150 }
151}
152
153void AddSPmethod(char *name, char *fileName, char *thecuts,
154 double minEtaA, double maxEtaA, double minEtaB, double maxEtaB,
155 char *Qvector, int harmonic, AliAnalysisDataContainer *flowEvent, int eg,
156 AliFlowTrackSimpleCuts *cutsPOI=NULL, AliFlowTrackSimpleCuts *cutsRFP=NULL,
157 bool bEP, bool shrink=false ) {
158 TString myFolder = Form("v%d_%s",harmonic,thecuts);
159 TString myNameSP = Form("%sSPv%d%sGAP%d_%s",name,harmonic,Qvector,eg,thecuts);
160 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
161 AliAnalysisDataContainer *flowEvent2 = mgr->CreateContainer( Form("Filter_%s", myNameSP.Data()),
162 AliFlowEventSimple::Class(),
163 AliAnalysisManager::kExchangeContainer );
164 AliAnalysisTaskFilterFE *tskFilter = new AliAnalysisTaskFilterFE( Form("TaskFilter_%s",myNameSP.Data()),
165 cutsRFP, cutsPOI);
166 tskFilter->SetSubeventEtaRange( minEtaA, maxEtaA, minEtaB, maxEtaB );
167 mgr->AddTask(tskFilter);
168 mgr->ConnectInput( tskFilter,0,flowEvent);
169 mgr->ConnectOutput(tskFilter,1,flowEvent2);
170 AliAnalysisDataContainer *outSP = mgr->CreateContainer( myNameSP.Data(),
171 TList::Class(),AliAnalysisManager::kOutputContainer,
172 Form("%s.root:FlowD2H_SP_%s",fileName,myFolder.Data()) );
173 AliAnalysisTaskScalarProduct *tskSP = new AliAnalysisTaskScalarProduct( Form("TaskScalarProduct_%s",
174 myNameSP.Data()),kFALSE);
175 tskSP->SetApplyCorrectionForNUA(kTRUE);
176 tskSP->SetHarmonic(harmonic);
177 tskSP->SetTotalQvector(Qvector);
178 if(bEP) tskSP->SetBehaveAsEP();
179 if(shrink) tskSP->SetBookOnlyBasicCCH(kTRUE);
180 mgr->AddTask(tskSP);
181 mgr->ConnectInput( tskSP,0,flowEvent2);
182 mgr->ConnectOutput(tskSP,1,outSP);
183}
184
185void AddQCmethod(char *name, char *fileName, char *thecuts,
186 int harmonic, AliAnalysisDataContainer *flowEvent,
187 AliFlowTrackSimpleCuts *cutsPOI=NULL, AliFlowTrackSimpleCuts *cutsRFP=NULL) {
188 TString myFolder = Form("v%d_%s",harmonic,thecuts);
189 TString myName = Form("%sv%d_%s",name,harmonic,thecuts);
190 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
191 AliAnalysisDataContainer *flowEvent2 = mgr->CreateContainer( Form("Filter_%s", myName.Data()),
192 AliFlowEventSimple::Class(),
193 AliAnalysisManager::kExchangeContainer );
194 AliAnalysisTaskFilterFE *tskFilter = new AliAnalysisTaskFilterFE( Form("TaskFilter_%s",myName.Data()),
195 cutsRFP, cutsPOI);
196 mgr->AddTask(tskFilter);
197 mgr->ConnectInput( tskFilter,0,flowEvent);
198 mgr->ConnectOutput(tskFilter,1,flowEvent2);
199 AliAnalysisDataContainer *outQC = mgr->CreateContainer( myName.Data(),
200 TList::Class(),AliAnalysisManager::kOutputContainer,
201 Form("%s.root:FlowD2H_QC_%s",fileName,myFolder.Data()) );
202 AliAnalysisTaskQCumulants *tskQC = new AliAnalysisTaskQCumulants( Form("TaskQCumulants_%s",
203 myName.Data()),kFALSE);
204 tskQC->SetApplyCorrectionForNUA(kTRUE);
205 tskQC->SetHarmonic(harmonic);
206 tskQC->SetBookOnlyBasicCCH(kTRUE);
207 mgr->AddTask(tskQC);
208 mgr->ConnectInput( tskQC,0,flowEvent2);
209 mgr->ConnectOutput(tskQC,1,outQC);
210}
211
212int MassBands( int nDmeson, bool bOldApproach=false ) {
213 switch (nDmeson) {
214 case ( AliRDHFCuts::kDplusCuts ):
215 case ( AliRDHFCuts::kD0toKpiCuts ):
216 if(bOldApproach) return 5;
217 else return 26;
218 case ( AliRDHFCuts::kDstarCuts ):
219 return 20;
220 }
221}
222
223double MassBandLowEdge( int nDmeson, int mb, bool bOldApproach=false ) {
224 switch (nDmeson) {
225 case ( AliRDHFCuts::kDplusCuts ):
226 case ( AliRDHFCuts::kD0toKpiCuts ): // 2 + 20 + 4
227 double lowEdgeMinimal[5+1] = {1.75,1.80,1.83,1.90,1.93,2.03};
228 double lowEdge[26+1] = { 1.66, 1.71, 1.76, 1.77, 1.78, 1.79, 1.80, 1.81, 1.82, 1.83,
229 1.84, 1.85, 1.86, 1.87, 1.88, 1.89, 1.90, 1.91, 1.92, 1.93,
230 1.94, 1.95, 1.96, 2.01, 2.06, 2.11, 2.16 };
231 if(bOldApproach) return lowEdgeMinimal[mb];
232 else return lowEdge[mb];
233 case ( AliRDHFCuts::kDstarCuts ): // 2 + 10 + 3
234 double lowEdge[20+1] = {0.1380, 0.1396, 0.1412, 0.1420, 0.1428, 0.1436, 0.1444, 0.1452, 0.1460, 0.1468, 0.1476, 0.1484, 0.1492, 0.1500,
235 0.1508, 0.1516, 0.1524, 0.1532, 0.1548, 0.1564, 0.1580};
236 return lowEdge[mb];
237 }
238}
239
240double MinMass( int nDmeson ) {
241 switch (nDmeson) {
242 case ( AliRDHFCuts::kDplusCuts ):
243 case ( AliRDHFCuts::kD0toKpiCuts ):
244 return 1.66;
245 case ( AliRDHFCuts::kDstarCuts ):
246 return 0.138;
247 }
248}
249
250double MaxMass( int nDmeson ) {
251 switch (nDmeson) {
252 case ( AliRDHFCuts::kDplusCuts ):
253 case ( AliRDHFCuts::kD0toKpiCuts ):
254 return 2.16;
255 case ( AliRDHFCuts::kDstarCuts ):
256 return 0.158;
257 }
258}
259
260int MassBins( int nDmeson ) {
261 switch (nDmeson) {
262 case ( AliRDHFCuts::kDplusCuts ):
263 case ( AliRDHFCuts::kD0toKpiCuts ):
264 return 50;
265 case ( AliRDHFCuts::kDstarCuts ):
266 return 25;
267 }
268}
269
270TString DMesonName( int nDmeson ) {
271 TString toReturn;
272 switch (nDmeson) {
273 case ( AliRDHFCuts::kDplusCuts ):
274 toReturn = "DPlus"; break;
275 case ( AliRDHFCuts::kD0toKpiCuts ):
276 toReturn = "D0"; break;
277 case ( AliRDHFCuts::kDstarCuts ):
278 toReturn = "DStar"; break;
279 }
280 return toReturn;
281}