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