]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGCF/FLOW/macros/AddTaskFlowStrange.C
add a convenience script to load flow libraries
[u/mrichter/AliRoot.git] / PWGCF / FLOW / macros / AddTaskFlowStrange.C
CommitLineData
06fa848f 1// ONE PRECONF WAGON\r
8d3e02c8 2void AddTaskFlowStrange(int trigger, float centrMin, float centrMax, int set, TString folderName="myFolder", TString suffixName="mySuffix", \r
3 int specie=0, char* MULT="V0M", int harmonic=2, int matchMC=-1, bool doQC=true, bool doSPTPC=true, bool doSPVZE=true,\r
c5dd71c0 4 bool doQA=false, bool useFlowEventCuts=true,\r
5 bool runpp=false, bool runpA=false, bool doExtraQA=false, TString calibfile="alien:///alice/cern.ch/user/c/cperez/calib/calibPbPb2010.root") {\r
06fa848f 6 Double_t c[11];\r
7 switch(set) {\r
8d3e02c8 8 case(0): // Filtering cuts //\r
9 c[0]=0; c[1]=+1; c[2]=+0.500; c[3]=0; c[4]=1e+6; c[5]=0; c[6]=-1; c[7]=+1; c[8]=1e+6; c[9]=1e+6; c[10]=0;\r
06fa848f 10 break;\r
8d3e02c8 11 case(1): // Topological cuts // \r
12 c[0]=0; c[1]=+1; c[2]=+0.998; c[3]=+0.1; c[4]=0; c[5]=+0.2; c[6]=-0.8; c[7]=+0.8; c[8]=+3.0; c[9]=+3.0; c[10]=5;\r
06fa848f 13 break;\r
14 default:\r
15 return;\r
16 }\r
17 AddTaskFlowStrange(trigger, centrMin, centrMax, folderName, suffixName, specie,\r
8d3e02c8 18 c[0],c[1],c[2],c[3],c[4],c[5],c[6],c[7],c[8],c[9],c[10],\r
c5dd71c0 19 MULT, harmonic, matchMC, doQC, doSPTPC, doSPVZE, doQA, useFlowEventCuts,\r
20 runpp, runpA, doExtraQA, calibfile);\r
6d636126 21}\r
392bb597 22// ALL CENTRALITIES\r
23void AddTaskFlowStrange(int trigger, TString folderName="myFolder", TString suffix="mySuffix", int specie=0,\r
24 double cut0, double cut1, double cut2, double cut3, double cut4, double cut5, double cut6, double cut7, double cut8,\r
25 double cut9, double cut10, char* MULT="V0M", int harmonic=2, int matchMC=-1,\r
c5dd71c0 26 bool doQC=true, bool doSPTPC=true, bool doSPVZE=true, bool doQA=false, bool useFlowEventCuts=true,\r
27 bool runpp=false, bool runpA=false, bool doExtraQA=false, TString calibfile="alien:///alice/cern.ch/user/c/cperez/calib/calibPbPb2010.root") {\r
392bb597 28 int centMin[8] = {00,05,10,20,30,40,50,60};\r
29 int centMax[8] = {05,10,20,30,40,50,60,80};\r
30 TString particle="none";\r
31 if(specie==0) particle="kze";\r
32 if(specie==1) particle="lda";\r
33 if(specie==90) particle="kch";\r
34 TString name;\r
35 for(int i=0; i!=8; ++i) {\r
36 name = Form("%s%02d%02d%s",particle.Data(),centMin[i],centMax[i],suffix.Data());\r
37 AddTaskFlowStrange(trigger, centMin[i], centMax[i], folderName, name, specie,\r
38 cut0, cut1, cut2, cut3, cut4, cut5, cut6, cut7, cut8, cut9, cut10, MULT, harmonic, matchMC,\r
c5dd71c0 39 doQC, doSPTPC, doSPVZE, doQA, useFlowEventCuts,\r
40 runpp, runpA, doExtraQA, calibfile);\r
392bb597 41 }\r
42}\r
06fa848f 43// ONE WAGON\r
44void AddTaskFlowStrange(int trigger, float centrMin, float centrMax, TString folderName="myFolder", TString suffixName="mySuffix", int specie=0, \r
8d3e02c8 45 double cut0, double cut1, double cut2, double cut3, double cut4, double cut5, double cut6, double cut7, double cut8,\r
46 double cut9, double cut10, char* MULT="V0M", int harmonic=2, int matchMC=-1, \r
c5dd71c0 47 bool doQC=true, bool doSPTPC=true, bool doSPVZE=true, bool doQA=false, bool useFlowEventCuts=true, \r
48 bool runpp=false, bool runpA=false, bool doExtraQA=false, TString calibfile="alien:///alice/cern.ch/user/c/cperez/calib/calibPbPb2010.root") {\r
893d83c8 49 TString fileName = AliAnalysisManager::GetCommonFileName();\r
50 fileName.ReplaceAll(".root","");\r
51\r
52 //-E-V-E-N-T- -c-u-t-s--------------------------------------------------------\r
53 AliFlowEventCuts* cutsEvent = new AliFlowEventCuts(Form("event_cuts_%s",suffixName.Data()));\r
54 cutsEvent->SetCentralityPercentileRange(centrMin,centrMax);\r
55 if(MULT=="V0M")\r
56 cutsEvent->SetCentralityPercentileMethod(AliFlowEventCuts::kV0);\r
57 else\r
58 cutsEvent->SetCentralityPercentileMethod(AliFlowEventCuts::kTPConly);\r
59 cutsEvent->SetRefMultMethod(AliFlowEventCuts::kSPDtracklets);\r
60 cutsEvent->SetNContributorsRange(2);\r
06fa848f 61 cutsEvent->SetPrimaryVertexZrange(-10.0,+10.0);\r
c5dd71c0 62 cutsEvent->SetCutTPCmultiplicityOutliers();\r
893d83c8 63\r
64 //-R-P---c-u-t-s--------------------------------------------------------------\r
65 AliFlowTrackCuts *cutsRPTPC = AliFlowTrackCuts::GetStandardTPCStandaloneTrackCuts();\r
66 cutsRPTPC->SetParamType( AliFlowTrackCuts::kGlobal );\r
67 cutsRPTPC->SetAODfilterBit(1); // for AOD compatibility\r
68 AliFlowTrackCuts *cutsRPVZE = AliFlowTrackCuts::GetStandardVZEROOnlyTrackCuts();\r
69\r
70 //-D-A-U-G-H-T-E-R-S---c-u-t-s------------------------------------------------\r
71 AliESDtrackCuts* cutsDaughter = new AliESDtrackCuts(Form("daughter_cuts_%s",suffixName.Data()) );\r
06fa848f 72 cutsDaughter->SetPtRange(0.2,12.0);\r
893d83c8 73 cutsDaughter->SetEtaRange(-0.8, 0.8 );\r
06fa848f 74 cutsDaughter->SetMinNClustersTPC(70);\r
893d83c8 75 cutsDaughter->SetMaxChi2PerClusterTPC(4.0);\r
76 cutsDaughter->SetRequireTPCRefit(kTRUE);\r
77 cutsDaughter->SetAcceptKinkDaughters(kFALSE);\r
78\r
79 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();\r
80 AliAnalysisDataContainer *cinput1 = mgr->GetCommonInputContainer();\r
81\r
82 //-----------------STRANGE TASK----------------------------\r
83 AliAnalysisTaskFlowStrange *taskSel = new AliAnalysisTaskFlowStrange(Form("Strange_%s",suffixName.Data()),\r
84 cutsEvent, cutsRPTPC, cutsRPVZE,\r
85 cutsDaughter );\r
86 taskSel->SelectCollisionCandidates(trigger);\r
06fa848f 87 Double_t cuts[11];\r
88 cuts[0]=cut0; cuts[1]=cut1; cuts[2]=cut2; cuts[3]=cut3; cuts[4]=cut4; cuts[5]=cut5; cuts[6]=cut6; cuts[7]=cut7; cuts[8]=cut8; cuts[9]=cut9; cuts[10]=cut10;\r
89 taskSel->SetCuts(cuts);\r
8d3e02c8 90 taskSel->SetQA(doQA);\r
893d83c8 91 taskSel->SetK0L0(specie);\r
06fa848f 92 taskSel->SetMCmatch(matchMC);\r
8d3e02c8 93 taskSel->SetUseEventSelection(useFlowEventCuts);\r
06fa848f 94 taskSel->SetCommonConstants( SFT_MassBins(specie), SFT_MinMass(specie), SFT_MaxMass(specie) );\r
c5dd71c0 95 taskSel->SetExtraQA( doExtraQA );\r
96 taskSel->Setpp( runpp );\r
97 taskSel->SetpA( runpA );\r
98 TFile *filecal = TFile::Open( calibfile.Data() );\r
99 if( (!filecal) || ( filecal && !filecal->IsOpen()) ){\r
100 printf("AddTaskStrange -> no complementary calibration file needed? Very good.\n");\r
101 } else {\r
102 TList *myCalib = (TList*)filecal->Get("calibration");\r
103 if(myCalib) taskSel->SetCalib(myCalib);\r
104 }\r
893d83c8 105 AliAnalysisDataContainer *cOutHist = mgr->CreateContainer(Form("OutHistos_%s",suffixName.Data()),\r
106 TList::Class(),\r
107 AliAnalysisManager::kOutputContainer,\r
108 Form("%s.root:Selector_%s",fileName.Data(),\r
6d636126 109 folderName.Data()));\r
893d83c8 110 AliAnalysisDataContainer *exc_TPC = mgr->CreateContainer( Form("TPCEventWithCandidates_%s",suffixName.Data()),\r
111 AliFlowEventSimple::Class(),\r
112 AliAnalysisManager::kExchangeContainer );\r
113 AliAnalysisDataContainer *exc_VZE = mgr->CreateContainer( Form("VZEEventWithCandidates_%s",suffixName.Data()),\r
114 AliFlowEventSimple::Class(),\r
115 AliAnalysisManager::kExchangeContainer );\r
116 mgr->AddTask(taskSel);\r
117 mgr->ConnectInput (taskSel,0,cinput1);\r
118 mgr->ConnectOutput(taskSel,1,exc_TPC);\r
119 mgr->ConnectOutput(taskSel,2,exc_VZE);\r
120 mgr->ConnectOutput(taskSel,3,cOutHist);\r
121\r
8d3e02c8 122 if( (!doQC) && (!doSPVZE) && (!doSPVZE) ) return;\r
123\r
893d83c8 124 //-------------------FLOW TASKS----------------------------\r
06fa848f 125 AliFlowTrackSimpleCuts *filter[12], *filterhf[12][2]; // MASS BANDS\r
126 for(int mb=0; mb!=12; ++mb) {\r
893d83c8 127 filter[mb] = new AliFlowTrackSimpleCuts( Form("Filter_MB%d",mb) );\r
128 filter[mb]->SetEtaMin( -0.8 ); filter[mb]->SetEtaMax( +0.8 );\r
06fa848f 129 filter[mb]->SetMassMin( SFT_MassBandLowEdge(specie,mb) ); filter[mb]->SetMassMax( SFT_MassBandLowEdge(specie,mb+1) );\r
893d83c8 130\r
131 filterhf[mb][0] = new AliFlowTrackSimpleCuts( Form("Filterhf0_MB%d",mb) );\r
132 filterhf[mb][0]->SetEtaMin( 0.0 ); filterhf[mb][0]->SetEtaMax( +0.8 );\r
06fa848f 133 filterhf[mb][0]->SetMassMin( SFT_MassBandLowEdge(specie,mb) ); filterhf[mb][0]->SetMassMax( SFT_MassBandLowEdge(specie,mb+1) );\r
893d83c8 134\r
135 filterhf[mb][1] = new AliFlowTrackSimpleCuts( Form("Filterhf1_MB%d",mb) );\r
136 filterhf[mb][1]->SetEtaMin( -0.8 ); filterhf[mb][1]->SetEtaMax( 0.0 );\r
06fa848f 137 filterhf[mb][1]->SetMassMin( SFT_MassBandLowEdge(specie,mb) ); filterhf[mb][1]->SetMassMax( SFT_MassBandLowEdge(specie,mb+1) );\r
138\r
139 if(doQC) {\r
140 SFT_AddQCmethod( Form("QCTPCMB%d",mb), folderName.Data(), suffixName.Data(), harmonic, exc_TPC, filter[mb]); // QC TPC\r
141 }\r
142 if(doSPTPC) {\r
143 SFT_AddSPmethod( Form("SPTPCMB%d",mb), folderName.Data(), suffixName.Data(), harmonic, exc_TPC, filterhf[mb][0], "Qa" ); // SP TPC Qa\r
144 SFT_AddSPmethod( Form("SPTPCMB%d",mb), folderName.Data(), suffixName.Data(), harmonic, exc_TPC, filterhf[mb][1], "Qb" ); // SP TPC Qb\r
145 }\r
146 if(doSPVZE) {\r
147 SFT_AddSPmethod( Form("SPVZEMB%d",mb), folderName.Data(), suffixName.Data(), harmonic, exc_VZE, filter[mb], "Qa" ); // SP VZE Qa\r
148 SFT_AddSPmethod( Form("SPVZEMB%d",mb), folderName.Data(), suffixName.Data(), harmonic, exc_VZE, filter[mb], "Qb" ); // SP VZE Qa\r
149 }\r
893d83c8 150 }\r
151}\r
06fa848f 152// ADDING QC METHOD\r
153void SFT_AddQCmethod(char *name, TString myFolder, char *thecuts, int harmonic, \r
893d83c8 154 AliAnalysisDataContainer *flowEvent, AliFlowTrackSimpleCuts *cutsPOI=NULL) {\r
6d636126 155 TString fileName = AliAnalysisManager::GetCommonFileName();\r
156 myFolder.Append( Form("v%d",harmonic) );\r
893d83c8 157 TString myName = Form("%sv%d_%s",name,harmonic,thecuts);\r
158 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();\r
159 AliAnalysisDataContainer *flowEvent2 = mgr->CreateContainer( Form("Filter_%s", myName.Data()),\r
160 AliFlowEventSimple::Class(),\r
161 AliAnalysisManager::kExchangeContainer );\r
162 AliAnalysisTaskFilterFE *tskFilter = new AliAnalysisTaskFilterFE( Form("TaskFilter_%s",myName.Data()),\r
163 NULL, cutsPOI);\r
164 mgr->AddTask(tskFilter);\r
165 mgr->ConnectInput( tskFilter,0,flowEvent);\r
166 mgr->ConnectOutput(tskFilter,1,flowEvent2);\r
167 AliAnalysisDataContainer *outQC = mgr->CreateContainer( myName.Data(),TList::Class(),AliAnalysisManager::kOutputContainer,\r
6d636126 168 Form("%s:FlowStrange_QC_%s",fileName.Data(),myFolder.Data()) );\r
893d83c8 169 AliAnalysisTaskQCumulants *tskQC = new AliAnalysisTaskQCumulants( Form("TaskQCumulants_%s",myName.Data()),kFALSE );\r
170 tskQC->SetApplyCorrectionForNUA(kTRUE);\r
171 tskQC->SetHarmonic(harmonic);\r
172 tskQC->SetBookOnlyBasicCCH(kTRUE);\r
173 mgr->AddTask(tskQC);\r
174 mgr->ConnectInput( tskQC,0,flowEvent2);\r
175 mgr->ConnectOutput(tskQC,1,outQC);\r
176}\r
06fa848f 177// ADDING SP METHOD\r
178void SFT_AddSPmethod(char *name, TString myFolder, char *thecuts, int harmonic,\r
893d83c8 179 AliAnalysisDataContainer *flowEvent, AliFlowTrackSimpleCuts *cutsPOI=NULL,\r
180 char *Qvector) {\r
6d636126 181 TString fileName = AliAnalysisManager::GetCommonFileName();\r
182 myFolder.Append( Form("v%d",harmonic) );\r
893d83c8 183 TString myNameSP = Form("%sv%d%s_%s",name,harmonic,Qvector,thecuts);\r
184 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();\r
185 AliAnalysisDataContainer *flowEvent2 = mgr->CreateContainer( Form("Filter_%s", myNameSP.Data()),\r
186 AliFlowEventSimple::Class(),\r
187 AliAnalysisManager::kExchangeContainer );\r
188 AliAnalysisTaskFilterFE *tskFilter = new AliAnalysisTaskFilterFE( Form("TaskFilter_%s",myNameSP.Data()),\r
189 NULL, cutsPOI);\r
190 tskFilter->SetSubeventEtaRange( -5.0, 0.0, 0.0, +5.0 );\r
191 mgr->AddTask(tskFilter);\r
192 mgr->ConnectInput( tskFilter,0,flowEvent);\r
193 mgr->ConnectOutput(tskFilter,1,flowEvent2);\r
194 AliAnalysisDataContainer *outSP = mgr->CreateContainer( myNameSP.Data(),TList::Class(),AliAnalysisManager::kOutputContainer,\r
6d636126 195 Form("%s:FlowStrange_SP_%s",fileName.Data(),myFolder.Data()) );\r
893d83c8 196 AliAnalysisTaskScalarProduct *tskSP = new AliAnalysisTaskScalarProduct( Form("TaskScalarProduct_%s",myNameSP.Data()),kFALSE);\r
197 tskSP->SetApplyCorrectionForNUA(kTRUE);\r
198 tskSP->SetHarmonic(harmonic);\r
199 tskSP->SetTotalQvector(Qvector);\r
200 tskSP->SetBookOnlyBasicCCH(kTRUE);\r
201 mgr->AddTask(tskSP);\r
202 mgr->ConnectInput( tskSP,0,flowEvent2);\r
203 mgr->ConnectOutput(tskSP,1,outSP);\r
204}\r
06fa848f 205// MASSBAND HELPER\r
206double SFT_MassBandLowEdge( int nv0, int mb ) {\r
207 switch(nv0) {\r
208 case(0):\r
209 double lowEdge[13]={ 0.412, 0.440, 0.468, 0.484, 0.492, 0.496, 0.500, 0.504, 0.508, 0.516, 0.532, 0.560, 0.588 };\r
210 break;\r
211 case(1):\r
212 double lowEdge[13]={ 1.075, 1.090, 1.100, 1.108, 1.112, 1.114, 1.116, 1.118, 1.120, 1.124, 1.132, 1.142, 1.167 };\r
213 break;\r
214 default:\r
215 double lowEdge[13]={ 0.000, 0.100, 0.200, 0.300, 0.400, 0.500, 0.600, 0.700, 0.800, 0.840, 0.860, 0.900, 1.000 };\r
893d83c8 216 }\r
217 return lowEdge[mb];\r
218}\r
06fa848f 219// MASSBAND HELPER\r
220int SFT_MassBands( int nv0 ) {\r
221 return 12;\r
893d83c8 222}\r
06fa848f 223// MASSBAND HELPER\r
224int SFT_MassBins( int nv0 ) {\r
225 int bins=88;\r
226 switch(nv0) {\r
227 case(0):\r
228 bins=88;\r
229 break;\r
230 case(1):\r
231 bins=92;\r
232 break;\r
233 default:\r
234 bins=13;\r
235 break;\r
893d83c8 236 }\r
06fa848f 237 return bins;\r
893d83c8 238}\r
06fa848f 239// MASSBAND HELPER\r
240double SFT_MinMass( int nv0 ) {\r
241 return SFT_MassBandLowEdge( nv0, 0 );\r
893d83c8 242}\r
06fa848f 243// MASSBAND HELPER\r
244double SFT_MaxMass( int nv0 ) {\r
245 return SFT_MassBandLowEdge( nv0, SFT_MassBands(nv0) );\r
893d83c8 246}\r