]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGCF/FLOW/macros/AddTaskFlowStrange.C
Merge branch 'master' of https://git.cern.ch/reps/AliRoot
[u/mrichter/AliRoot.git] / PWGCF / FLOW / macros / AddTaskFlowStrange.C
1 UInt_t SFT_gbTrigger;
2 Bool_t SFT_gbReadESD;
3 Bool_t SFT_gbReadMC;
4 Int_t SFT_gbMatchMC;
5 Bool_t SFT_gbAvoidExec;
6 Bool_t SFT_gbSkipCentrality;
7 Bool_t SFT_gbExtraEventCut;
8 TString SFT_gbCentMethod;
9 Int_t SFT_gbCentPerMin,SFT_gbCentPerMax;
10 Bool_t SFT_gbRunPP;
11 Bool_t SFT_gbRunPA;
12 Int_t SFT_gbSpecie;
13 Bool_t SFT_gbHomemade;
14 Bool_t SFT_gbOnline;
15 Int_t SFT_gbMinNClsTPC;
16 Int_t SFT_gbMinNClsITS;
17 Int_t SFT_gbMinXRows;
18 Double_t SFT_gbMaxChi2PerNClsTPC;
19 Double_t SFT_gbMinXRowsOverNClsFTPC;
20 Double_t SFT_gbMinEta;
21 Double_t SFT_gbMaxEta;
22 Double_t SFT_gbMinPt;
23 Double_t SFT_gbMinImpactParameterXY;
24 Double_t SFT_gbMaxNSigmaPID;
25 Double_t SFT_gbMaxRapidity;
26 Double_t SFT_gbMaxDCAdaughters;
27 Double_t SFT_gbMinCosinePointingAngleXY;
28 Double_t SFT_gbPIDPt;
29 Double_t SFT_gbMinQt;
30 Bool_t   SFT_gbQtPie;
31 Double_t SFT_gbMinRadXY;
32 Double_t SFT_gbMaxDecayLength;
33 Double_t SFT_gbMaxProductIPXY;
34 Int_t SFT_gbDebug;
35 Int_t SFT_gbQA;
36 TString SFT_gbFolder;
37 TString SFT_gbSuffix;
38 TString SFT_gbStamp;
39 Int_t SFT_gbRFPFilterBit;
40 Double_t SFT_gbRFPminPt;
41 Double_t SFT_gbRFPmaxPt;
42 Double_t SFT_gbRFPAminEta;
43 Double_t SFT_gbRFPAmaxEta;
44 Double_t SFT_gbRFPCminEta;
45 Double_t SFT_gbRFPCmaxEta;
46 Double_t SFT_gbRFPTPCsignal;
47 Double_t SFT_gbRFPmaxIPxy;
48 Double_t SFT_gbRFPmaxIPz;
49 Int_t SFT_gbRFPTPCncls;
50 Bool_t SFT_gbAddPitoMCRP;
51 Bool_t SFT_gbAllCC;
52 Bool_t SFT_gbSkipSelection;
53 Bool_t SFT_gbSkipVn;
54 Int_t SFT_gbWhichPsi;
55 Bool_t SFT_gbFlowPackage;
56 Bool_t SFT_gbShrinkFP;
57 Bool_t SFT_gbSPVZE;
58 Bool_t SFT_gbSPTPC;
59 Bool_t SFT_gbSPVZEhalf;
60 Bool_t SFT_gbQCTPC;
61 Bool_t SFT_gbMCEP;
62 Int_t SFT_gbHarmonic;
63 TString SFT_gbVZEload;
64 Bool_t SFT_gbVZEsave;
65 Bool_t SFT_gbVZEmb;
66 Bool_t SFT_gbVZEpdisk;
67 Int_t SFT_gbV0CRingMin;
68 Int_t SFT_gbV0CRingMax;
69 Int_t SFT_gbV0ARingMin;
70 Int_t SFT_gbV0ARingMax;
71 Int_t SFT_gbDauITS0On;
72 Int_t SFT_gbDauITS1On;
73 Int_t SFT_gbDauITS2On;
74 Int_t SFT_gbDauITS3On;
75 Int_t SFT_gbDauITS4On;
76 Int_t SFT_gbDauITS5On;
77 Bool_t SFT_gbDauSPDany;
78 Bool_t SFT_gbDauITSrefit;
79
80 Bool_t SFT_gbUntagDaughter;
81 Int_t SFT_gbPostMatched;
82 Double_t SFT_gbVertexZcut;
83
84 void AddTaskFlowStrange(TString configFile, TString alienaddress, Bool_t skipTerminate=kFALSE) {
85   Int_t ret = gSystem->Exec( Form("alien_cp %s/%s .",alienaddress.Data(),configFile.Data()) );
86   printf("FlowStrange copying from grid %d\n",ret);
87   AddTaskFlowStrange(configFile,skipTerminate);
88 }
89 void AddTaskFlowStrange(TString configFile, Bool_t skipTerminate=kFALSE) {
90   SFT_ReadConfig(configFile);
91   if(SFT_gbAllCC) {
92     int centMin[8] = {00,05,10,20,30,40,50,60};
93     int ncent=7;
94     if(SFT_gbRunPP) {
95       ncent=3;
96       centMin[0]=00;
97       centMin[1]=20;
98       centMin[2]=40;
99       centMin[3]=60;
100     } else if(SFT_gbRunPA) {
101       ncent=3;
102       centMin[0]=00;
103       centMin[1]=20;
104       centMin[2]=40;
105       centMin[3]=60;
106     }
107     TString antSuffix = SFT_gbSuffix;
108     for(int cc=0; cc!=ncent; ++cc) {
109       SFT_gbCentPerMin = centMin[cc];
110       SFT_gbCentPerMax = centMin[cc+1];
111       SFT_gbSuffix = Form("%s%02d%02d",antSuffix.Data(),SFT_gbCentPerMin,SFT_gbCentPerMax);
112       AddTaskFlowStrange(skipTerminate);
113     }
114   } else {
115     AddTaskFlowStrange(skipTerminate);
116   }
117 }
118 void AddTaskFlowStrange(Bool_t skipTerminate) {
119   SFT_PrintConfig();
120
121   TString fileName = AliAnalysisManager::GetCommonFileName();
122   fileName.ReplaceAll(".root","");
123   SFT_gbStamp = SFT_gbFolder + SFT_gbSuffix;
124
125   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
126   AliAnalysisDataContainer *cinput1 = mgr->GetCommonInputContainer();
127
128   //-----------------STRANGE TASK----------------------------
129   AliAnalysisTaskFlowStrange *taskSel = new AliAnalysisTaskFlowStrange(Form("FS_%s",SFT_gbStamp.Data()) );
130   taskSel->SelectCollisionCandidates(SFT_gbTrigger);
131   taskSel->SetReadESD(SFT_gbReadESD);
132   taskSel->SetPostMatched(SFT_gbPostMatched);
133   taskSel->SetReadMC(SFT_gbReadMC);
134   taskSel->SetAvoidExec(SFT_gbAvoidExec);
135   taskSel->SetSkipCentralitySelection(SFT_gbSkipCentrality);
136   taskSel->SetSkipSelection(SFT_gbSkipSelection);
137   taskSel->SetSkipVn(SFT_gbSkipVn);
138   taskSel->SetExtraEventRejection(SFT_gbExtraEventCut);
139   taskSel->SetCentralityRange(SFT_gbCentMethod,SFT_gbCentPerMin,SFT_gbCentPerMax);
140   taskSel->SetSkipTerminate(skipTerminate);
141   taskSel->SetHarmonic(SFT_gbHarmonic);
142   Int_t npt = 24;
143   Double_t ptbin[25] = { 0.0, 0.2, 0.4, 0.6, 0.8, 1.0, 1.2, 1.4, 1.6, 1.8,
144                          2.0, 2.2, 2.4, 2.8, 3.2, 3.6, 4.0, 4.5, 5.0, 6.0,
145                          8.0, 10., 12., 16., 20.};
146   taskSel->SetPtEdges(npt,ptbin);
147   if(SFT_gbRunPP) taskSel->Setpp();
148   if(SFT_gbRunPA) taskSel->SetpA();
149   taskSel->SetDebug(SFT_gbDebug);
150   taskSel->SetK0L0(SFT_gbSpecie);
151   taskSel->SetOnline( SFT_gbOnline );
152   taskSel->SetMass( SFT_MassBins(SFT_gbSpecie),
153                     SFT_MinMass(SFT_gbSpecie),
154                     SFT_MaxMass(SFT_gbSpecie) );
155
156   taskSel->SetWhichPsi(SFT_gbWhichPsi);
157   taskSel->SetRFPFilterBit(SFT_gbRFPFilterBit);
158   taskSel->SetRFPMinPt(SFT_gbRFPminPt);
159   taskSel->SetRFPMaxPt(SFT_gbRFPmaxPt);
160   taskSel->SetRFPAMinEta(SFT_gbRFPAminEta);
161   taskSel->SetRFPAMaxEta(SFT_gbRFPAmaxEta);
162   taskSel->SetRFPCMinEta(SFT_gbRFPCminEta);
163   taskSel->SetRFPCMaxEta(SFT_gbRFPCmaxEta);
164   taskSel->SetRFPTPCSignal(SFT_gbRFPTPCsignal);
165   taskSel->SetRFPMaxIPxy(SFT_gbRFPmaxIPxy);
166   taskSel->SetRFPMaxIPz(SFT_gbRFPmaxIPz);
167   taskSel->SetRFPMinTPCCls(SFT_gbRFPTPCncls);
168
169   taskSel->SetAddPiToMCReactionPlane(SFT_gbAddPitoMCRP);
170   taskSel->SetDauUnTagProcedure(SFT_gbUntagDaughter);
171   taskSel->SetVertexZcut(SFT_gbVertexZcut);
172
173   taskSel->SetDauMinNClsTPC(SFT_gbMinNClsTPC);
174   taskSel->SetDauMinNClsITS(SFT_gbMinNClsITS);
175   taskSel->SetDauMinXRows(SFT_gbMinXRows);
176   taskSel->SetDauMaxChi2PerNClsTPC(SFT_gbMaxChi2PerNClsTPC);
177   taskSel->SetDauMinXRowsOverNClsFTPC(SFT_gbMinXRowsOverNClsFTPC);
178   taskSel->SetDauMinEta(SFT_gbMinEta);
179   taskSel->SetDauMaxEta(SFT_gbMaxEta);
180   taskSel->SetDauMinPt(SFT_gbMinPt);
181   taskSel->SetDauMinImpactParameterXY(SFT_gbMinImpactParameterXY);
182   taskSel->SetDauMaxNSigmaPID(SFT_gbMaxNSigmaPID);
183   taskSel->SetDauITSLayer(0,SFT_gbDauITS0On);
184   taskSel->SetDauITSLayer(1,SFT_gbDauITS1On);
185   taskSel->SetDauITSLayer(2,SFT_gbDauITS2On);
186   taskSel->SetDauITSLayer(3,SFT_gbDauITS3On);
187   taskSel->SetDauITSLayer(4,SFT_gbDauITS4On);
188   taskSel->SetDauITSLayer(5,SFT_gbDauITS5On);
189   taskSel->SetDauSPDRequireAny(SFT_gbDauSPDany);
190   taskSel->SetDauITSrefit(SFT_gbDauITSrefit);
191
192   taskSel->SetMaxRapidity(SFT_gbMaxRapidity);
193   taskSel->SetMaxDCAdaughters(SFT_gbMaxDCAdaughters);
194   taskSel->SetMinCosinePointingAngleXY(SFT_gbMinCosinePointingAngleXY);
195   taskSel->SetMinQt(SFT_gbMinQt,SFT_gbQtPie);
196   taskSel->SetStopPIDAtPt(SFT_gbPIDPt);
197   taskSel->SetMinRadXY(SFT_gbMinRadXY);
198   taskSel->SetMaxDecayLength(SFT_gbMaxDecayLength);
199   taskSel->SetMaxProductIPXY(SFT_gbMaxProductIPXY);
200   taskSel->SetMinEta(SFT_gbMinEta);
201   taskSel->SetMaxEta(SFT_gbMaxEta);
202   taskSel->SetMinPt(SFT_gbMinPt);
203   taskSel->SetUseFlowPackage(SFT_gbFlowPackage);
204
205   taskSel->SetQAlevel(SFT_gbQA);
206   if(SFT_gbVZEload.Length()>4) {
207     TFile *ocalib = TFile::Open(SFT_gbVZEload);
208     if(ocalib->IsOpen()) {
209       TList *vzero = ocalib->Get("VZECALIB");
210       taskSel->LoadVZEResponse(vzero,SFT_gbVZEmb,SFT_gbVZEpdisk);
211     } else {
212       printf("ADDTASKFLOWSTRANGE COULD NOT OPEN %s. NO VZE CALIBRATION LOADED!\n",SFT_gbVZEload.Data());
213     }
214   }
215   printf("Loading %d %d %d %d as VZE configuration\n",SFT_gbV0CRingMin, SFT_gbV0CRingMax, SFT_gbV0ARingMin, SFT_gbV0ARingMax);
216   taskSel->SetRFPVZERingRange( SFT_gbV0CRingMin, SFT_gbV0CRingMax, SFT_gbV0ARingMin, SFT_gbV0ARingMax );
217   taskSel->SetStoreVZEResponse(SFT_gbVZEsave);
218
219   AliAnalysisDataContainer *cOutHist = mgr->CreateContainer(Form("FS_OH_%s",SFT_gbStamp.Data()),
220                                                             TList::Class(),
221                                                             AliAnalysisManager::kOutputContainer,
222                                                             Form("%s.root:Selector_%s",fileName.Data(),
223                                                                  SFT_gbFolder.Data()));
224   AliAnalysisDataContainer *exc_TPC = mgr->CreateContainer( Form("FS_TPC_%s",SFT_gbStamp.Data()),
225                                                             AliFlowEventSimple::Class(),
226                                                             AliAnalysisManager::kExchangeContainer );
227   AliAnalysisDataContainer *exc_VZE = mgr->CreateContainer( Form("FS_VZE_%s",SFT_gbStamp.Data()),
228                                                             AliFlowEventSimple::Class(),
229                                                             AliAnalysisManager::kExchangeContainer );
230   mgr->AddTask(taskSel);
231   mgr->ConnectInput (taskSel,0,cinput1);
232   mgr->ConnectOutput(taskSel,1,cOutHist);
233   mgr->ConnectOutput(taskSel,2,exc_TPC);
234   mgr->ConnectOutput(taskSel,3,exc_VZE);
235
236   if(!SFT_gbFlowPackage) return;
237   if( (!SFT_gbQCTPC) && (!SFT_gbSPVZE) && (!SFT_gbSPTPC) ) return;
238   //-------------------FLOWPACKAGE TASKS----------------------------
239   AliFlowTrackSimpleCuts *filter[20], *filterhf[20][2]; // MASS BANDS
240   int mbs = SFT_MassBands(SFT_gbSpecie);
241   if(SFT_gbPostMatched) mbs = 1;
242   for(int mb=0; mb!=mbs; ++mb) {
243     filter[mb] = new AliFlowTrackSimpleCuts( Form("Filter_MB%d",mb) );
244     filter[mb]->SetEtaMin( -0.8 ); filter[mb]->SetEtaMax( +0.8 );
245     Double_t minmass = SFT_MassBandLowEdge(SFT_gbSpecie,mb);
246     Double_t maxmass = SFT_MassBandLowEdge(SFT_gbSpecie,mb+1);
247     if(SFT_gbPostMatched) maxmass = SFT_MassBandLowEdge(SFT_gbSpecie,SFT_MassBands(SFT_gbSpecie));
248     filter[mb]->SetMassMin( minmass ); filter[mb]->SetMassMax( maxmass );
249     //half window for POIs
250     filterhf[mb][0] = new AliFlowTrackSimpleCuts( Form("Filterhf0_MB%d",mb) );
251     filterhf[mb][0]->SetEtaMin( +0.0 ); filterhf[mb][0]->SetEtaMax( +0.8 );
252     filterhf[mb][0]->SetMassMin( minmass ); filterhf[mb][0]->SetMassMax( maxmass );
253     filterhf[mb][1] = new AliFlowTrackSimpleCuts( Form("Filterhf1_MB%d",mb) );
254     filterhf[mb][1]->SetEtaMin( -0.8 ); filterhf[mb][1]->SetEtaMax( -0.0 );
255     filterhf[mb][1]->SetMassMin( minmass ); filterhf[mb][1]->SetMassMax( maxmass );
256     if(SFT_gbQCTPC) {
257       SFT_AddQCmethod( Form("QCTPCMB%d",mb), exc_TPC, filter[mb]); // QC TPC
258     }
259     if(SFT_gbSPTPC) {
260       SFT_AddSPmethod( Form("SPTPCMB%d",mb), exc_TPC, filterhf[mb][0], "Qa" ); // SP TPC Qa
261       SFT_AddSPmethod( Form("SPTPCMB%d",mb), exc_TPC, filterhf[mb][1], "Qb" ); // SP TPC Qb
262       SFT_AddSPmethod( Form("SPTPC2MB%d",mb), exc_TPC, filterhf[mb][0], "Qa", 0.2 ); // SP TPC Qa
263       SFT_AddSPmethod( Form("SPTPC2MB%d",mb), exc_TPC, filterhf[mb][1], "Qb", 0.2 ); // SP TPC Qb
264       SFT_AddSPmethod( Form("SPTPC4MB%d",mb), exc_TPC, filterhf[mb][0], "Qa", 0.4 ); // SP TPC Qa
265       SFT_AddSPmethod( Form("SPTPC4MB%d",mb), exc_TPC, filterhf[mb][1], "Qb", 0.4 ); // SP TPC Qb
266     }
267     if(SFT_gbMCEP) {
268       SFT_AddMCEPmethod( Form("MCEPMB%d",mb), exc_TPC, filter[mb]); // MCEP TPC
269     }
270     if(SFT_gbSPVZE) {
271       if(SFT_gbSPVZEhalf) {
272         SFT_AddSPmethod( Form("SPVZEMB%d",mb), exc_VZE, filterhf[mb][0], "Qa", 1.0 ); // SP VZE Qa
273         SFT_AddSPmethod( Form("SPVZEMB%d",mb), exc_VZE, filterhf[mb][1], "Qb", 1.0 ); // SP VZE Qa
274       } else {
275         SFT_AddSPmethod( Form("SPVZEMB%d",mb), exc_VZE, filter[mb], "Qa", 1.0 ); // SP VZE Qa
276         SFT_AddSPmethod( Form("SPVZEMB%d",mb), exc_VZE, filter[mb], "Qb", 1.0 ); // SP VZE Qa
277       }
278     }
279   }
280 }
281 void SFT_AddMCEPmethod(char *name, AliAnalysisDataContainer *flowEvent, AliFlowTrackSimpleCuts *cutsPOI=NULL) {
282   TString fileName = AliAnalysisManager::GetCommonFileName();
283   TString myFolder = Form("%sv%d",SFT_gbFolder.Data(),SFT_gbHarmonic);
284   TString myName = Form("%sv%d_%s",name,SFT_gbHarmonic,SFT_gbSuffix.Data());
285   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
286   AliAnalysisDataContainer *flowEvent2 = mgr->CreateContainer( Form("Filter_%s", myName.Data()),
287                                                                AliFlowEventSimple::Class(),
288                                                                AliAnalysisManager::kExchangeContainer );
289   AliAnalysisTaskFilterFE *tskFilter = new AliAnalysisTaskFilterFE( Form("TaskFilter_%s",myName.Data()),
290                                                                     NULL, cutsPOI);
291   mgr->AddTask(tskFilter);
292   mgr->ConnectInput( tskFilter,0,flowEvent);
293   mgr->ConnectOutput(tskFilter,1,flowEvent2);
294   AliAnalysisDataContainer *outQC = mgr->CreateContainer( myName.Data(),TList::Class(),AliAnalysisManager::kOutputContainer,
295                                                           Form("%s:FlowStrange_MCEP_%s",fileName.Data(),myFolder.Data()) );
296   AliAnalysisTaskMCEventPlane *tskQC = new AliAnalysisTaskMCEventPlane( Form("TaskMCEP_%s",myName.Data()) );
297   tskQC->SetHarmonic(SFT_gbHarmonic);
298   mgr->AddTask(tskQC);
299   mgr->ConnectInput( tskQC,0,flowEvent2);
300   mgr->ConnectOutput(tskQC,1,outQC);
301 }
302 void SFT_AddQCmethod(char *name, AliAnalysisDataContainer *flowEvent, AliFlowTrackSimpleCuts *cutsPOI=NULL) {
303   TString fileName = AliAnalysisManager::GetCommonFileName();
304   TString myFolder = Form("%sv%d",SFT_gbFolder.Data(),SFT_gbHarmonic);
305   TString myName = Form("%sv%d_%s",name,SFT_gbHarmonic,SFT_gbSuffix.Data());
306   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
307   AliAnalysisDataContainer *flowEvent2 = mgr->CreateContainer( Form("Filter_%s", myName.Data()),
308                                                                AliFlowEventSimple::Class(),
309                                                                AliAnalysisManager::kExchangeContainer );
310   AliAnalysisTaskFilterFE *tskFilter = new AliAnalysisTaskFilterFE( Form("TaskFilter_%s",myName.Data()),
311                                                                     NULL, cutsPOI);
312   mgr->AddTask(tskFilter);
313   mgr->ConnectInput( tskFilter,0,flowEvent);
314   mgr->ConnectOutput(tskFilter,1,flowEvent2);
315   AliAnalysisDataContainer *outQC = mgr->CreateContainer( myName.Data(),TList::Class(),AliAnalysisManager::kOutputContainer,
316                                                           Form("%s:FlowStrange_QC_%s",fileName.Data(),myFolder.Data()) );
317   AliAnalysisTaskQCumulants *tskQC = new AliAnalysisTaskQCumulants( Form("TaskQCumulants_%s",myName.Data()),kFALSE );
318   tskQC->SetApplyCorrectionForNUA(kTRUE);
319   tskQC->SetHarmonic(SFT_gbHarmonic);
320   tskQC->SetBookOnlyBasicCCH(SFT_gbShrinkFP);
321   mgr->AddTask(tskQC);
322   mgr->ConnectInput( tskQC,0,flowEvent2);
323   mgr->ConnectOutput(tskQC,1,outQC);
324 }
325 void SFT_AddSPmethod(char *name, AliAnalysisDataContainer *flowEvent, AliFlowTrackSimpleCuts *cutsPOI=NULL, char *Qvector, Double_t gap=0.0) {
326   TString fileName = AliAnalysisManager::GetCommonFileName();
327   TString myFolder = Form("%sv%d",SFT_gbFolder.Data(),SFT_gbHarmonic);
328   TString myNameSP = Form("%sv%d%s_%s",name,SFT_gbHarmonic,Qvector,SFT_gbSuffix.Data());
329   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
330   AliAnalysisDataContainer *flowEvent2 = mgr->CreateContainer( Form("Filter_%s", myNameSP.Data()),
331                                                                AliFlowEventSimple::Class(),
332                                                                AliAnalysisManager::kExchangeContainer );
333   AliAnalysisTaskFilterFE *tskFilter = new AliAnalysisTaskFilterFE( Form("TaskFilter_%s",myNameSP.Data()),
334                                                                     NULL, cutsPOI);
335   tskFilter->SetSubeventEtaRange( -5.0, -gap, +gap, +5.0 );
336   mgr->AddTask(tskFilter);
337   mgr->ConnectInput( tskFilter,0,flowEvent);
338   mgr->ConnectOutput(tskFilter,1,flowEvent2);
339   AliAnalysisDataContainer *outSP = mgr->CreateContainer( myNameSP.Data(),TList::Class(),AliAnalysisManager::kOutputContainer,
340                                                           Form("%s:FlowStrange_SP_%s",fileName.Data(),myFolder.Data()) );
341   AliAnalysisTaskScalarProduct *tskSP = new AliAnalysisTaskScalarProduct( Form("TaskScalarProduct_%s",myNameSP.Data()),kFALSE);
342   tskSP->SetApplyCorrectionForNUA(kTRUE);
343   tskSP->SetHarmonic(SFT_gbHarmonic);
344   tskSP->SetTotalQvector(Qvector);
345   tskSP->SetBookOnlyBasicCCH(SFT_gbShrinkFP);
346   mgr->AddTask(tskSP);
347   mgr->ConnectInput( tskSP,0,flowEvent2);
348   mgr->ConnectOutput(tskSP,1,outSP);
349 }
350 double SFT_MassBandLowEdge( int nv0, int mb ) {
351   if(nv0>10&&mb==0) return -5;
352   if(nv0>10&&mb==1) return +5;
353   switch(nv0) {
354   case(0):
355     double lowEdge[14]={0.398, 0.420, 0.444, 0.468, 0.486,
356                          0.490, 0.494, 0.498, 0.502, 0.506, 
357                          0.524, 0.548, 0.572, 0.598};
358     break;
359   default:
360     double lowEdge[13]={1.084, 1.094, 1.104, 1.110, 1.114,
361                         1.116, 1.118, 1.122, 1.128, 1.138,
362                         1.148, 1.158, 1.168};
363     break;
364   }
365   return lowEdge[mb];
366 }
367 int SFT_MassBands( int nv0 ) {
368   int bands=1;
369   switch(nv0) {
370   case(0):
371     bands = 13;
372     break;
373   default:
374     bands = 12;
375   }
376   if(nv0>10) bands=1;
377   return bands;
378 }
379 int SFT_MassBins( int nv0 ) {
380   int bins=100;
381   switch(nv0) {
382   case(0)://kZERO
383     bins=100;
384     break;
385   default://LAMBDA
386     bins=84;
387     break;
388   }
389   if(nv0>10) bins=100;//CHARGED
390   return bins;
391 }
392 double SFT_MinMass( int nv0 ) {
393   return SFT_MassBandLowEdge( nv0, 0 );
394 }
395 double SFT_MaxMass( int nv0 ) {
396   return SFT_MassBandLowEdge( nv0, SFT_MassBands(nv0) );
397 }
398 void SFT_PrintConfig() {
399   printf("***********************************\n");
400   printf("* STRANGE FLOW TASK CONFIGURATION *\n");
401   printf("* SUFFIX  %s *\n", SFT_gbSuffix.Data() );
402   printf("* TRIGGER  %d *\n", SFT_gbTrigger );
403   printf("* RUNPP  %d *\n", SFT_gbRunPP );
404   printf("* RUNPA  %d *\n", SFT_gbRunPA );
405   printf("* AVOIDEXEC  %d *\n", SFT_gbAvoidExec );
406   printf("* SKIPCENTRALITY  %d *\n", SFT_gbSkipCentrality );
407   printf("* ESD  %d *\n", SFT_gbReadESD );
408   printf("* MC  %d *\n", SFT_gbReadMC );
409   printf("* HARMONIC  %d *\n", SFT_gbHarmonic );
410   printf("* ADDPITOMCEP  %d *\n", SFT_gbAddPitoMCRP );
411   printf("* POSTMATCHED  %d *\n", SFT_gbPostMatched );
412   printf("* EXTRAEVENTCUT  %d *\n", SFT_gbExtraEventCut );
413   printf("* CENTMETHOD  %s *\n", SFT_gbCentMethod.Data() );
414   printf("* CENTPERMIN  %d *\n", SFT_gbCentPerMin );
415   printf("* CENTPERMAX  %d *\n", SFT_gbCentPerMax );
416   printf("* VERTEXZ  %f *\n", SFT_gbVertexZcut );
417   printf("* SPECIE  %d *\n", SFT_gbSpecie );
418   printf("* HOMEMADE  %d *\n", SFT_gbHomemade );
419   printf("* ONLINE  %d *\n", SFT_gbOnline );
420   printf("* MINNCLSTTPC  %d *\n", SFT_gbMinNClsTPC );
421   printf("* MINNCLSITS  %d *\n", SFT_gbMinNClsITS );
422   printf("* MINXROWS  %d *\n", SFT_gbMinXRows );
423   printf("* MAXCHI2NCLSTPC  %f *\n", SFT_gbMaxChi2PerNClsTPC );
424   printf("* MINXROWSNFCLSTPC  %f *\n", SFT_gbMinXRowsOverNClsFTPC );
425   printf("* MINETA  %f *\n", SFT_gbMinEta );
426   printf("* MAXETA  %f *\n", SFT_gbMaxEta );
427   printf("* MINPT  %f *\n", SFT_gbMinPt );
428   printf("* UNTAG  %f *\n", SFT_gbUntagDaughter );
429   printf("* MIND0XY  %f *\n", SFT_gbMinImpactParameterXY );
430   printf("* MAXSIGMAPID  %f *\n", SFT_gbMaxNSigmaPID );
431   printf("* MAXY  %f *\n", SFT_gbMaxRapidity );
432   printf("* MAXDCA  %f *\n", SFT_gbMaxDCAdaughters );
433   printf("* MINCTP  %f *\n", SFT_gbMinCosinePointingAngleXY );
434   printf("* MINQT  %f *\n", SFT_gbMinQt );
435   printf("* QTPIE  %f *\n", SFT_gbQtPie );
436   printf("* STOPPID  %f *\n", SFT_gbPIDPt );
437   printf("* MINRADXY  %f *\n", SFT_gbMinRadXY );
438   printf("* MAXDL  %f *\n", SFT_gbMaxDecayLength );
439   printf("* D0D0XY  %f *\n", SFT_gbMaxProductIPXY );
440   printf("* DEBUG  %d *\n", SFT_gbDebug );
441   printf("* QA  %d *\n", SFT_gbQA );
442   printf("* SKIPSELECTION  %d *\n", SFT_gbSkipSelection );
443   printf("* SKIPVN  %d *\n", SFT_gbSkipVn );
444   printf("* USEFP  %d *\n", SFT_gbFlowPackage );
445   printf("* SPVZE  %d *\n", SFT_gbSPVZE );
446   printf("* SPVZEHALF  %d *\n", SFT_gbSPVZEhalf );
447   printf("* SPTPC  %d *\n", SFT_gbSPTPC );
448   printf("* QCTPC  %d *\n", SFT_gbQCTPC );
449   printf("* MCEP  %d *\n", SFT_gbMCEP );
450   printf("* SHRINKFP  %d *\n", SFT_gbShrinkFP );
451   printf("* RFFILTERBIT  %d *\n", SFT_gbRFPFilterBit );
452   printf("* RFMINPT  %f *\n", SFT_gbRFPminPt );
453   printf("* RFMAXPT  %f *\n", SFT_gbRFPmaxPt );
454   printf("* RFCMINETA  %f *\n", SFT_gbRFPCminEta );
455   printf("* RFCMAXETA  %f *\n", SFT_gbRFPCmaxEta );
456   printf("* RFAMINETA  %f *\n", SFT_gbRFPAminEta );
457   printf("* RFAMAXETA  %f *\n", SFT_gbRFPAmaxEta );
458   printf("* RFTPCSIGNAL  %f *\n", SFT_gbRFPTPCsignal );
459   printf("* RFMAXIPXY  %f *\n", SFT_gbRFPmaxIPxy );
460   printf("* RFMAXIPZ  %f *\n", SFT_gbRFPmaxIPz );
461   printf("* RFTPCNCLS  %d *\n", SFT_gbRFPTPCncls );
462   printf("* RFVZEC_RingMin  %d *\n", SFT_gbV0CRingMin );
463   printf("* RFVZEC_RingMax  %d *\n", SFT_gbV0CRingMax );
464   printf("* RFVZEA_RingMin  %d *\n", SFT_gbV0ARingMin );
465   printf("* RFVZEA_RingMax  %d *\n", SFT_gbV0ARingMax );
466   printf("* WHICHPSI  %d *\n", SFT_gbWhichPsi );
467   printf("* VZELOAD  %s *\n", SFT_gbVZEload.Data() );
468   printf("* VZELINEAR  %d *\n", SFT_gbVZEmb );
469   printf("* VZEPERDISK  %d *\n", SFT_gbVZEpdisk );
470   printf("* VZESAVE  %d *\n", SFT_gbVZEsave );
471   printf("* DAUITS0  %d *\n", SFT_gbDauITS0On );
472   printf("* DAUITS1  %d *\n", SFT_gbDauITS1On );
473   printf("* DAUITS2  %d *\n", SFT_gbDauITS2On );
474   printf("* DAUITS3  %d *\n", SFT_gbDauITS3On );
475   printf("* DAUITS4  %d *\n", SFT_gbDauITS4On );
476   printf("* DAUITS5  %d *\n", SFT_gbDauITS5On );
477   printf("* DAUSPDANY  %d *\n", SFT_gbDauSPDany );
478   printf("* DAUITSrefit  %d *\n", SFT_gbDauITSrefit );
479   printf("***********************************\n");
480 }
481 void SFT_ReadConfig(TString ipf) {
482   SFT_ResetVars();
483   printf("Reading %s\n",ipf.Data());
484   ifstream input(ipf.Data());
485   TString varname;
486   Double_t vardouble;
487   Int_t varint;
488   UInt_t varuint;
489   Bool_t varbool;
490   for(;input.good();) {
491     input >> varname;
492     if(!input.good()) {
493       break;
494     } else if(!varname.CompareTo("SUFFIX")) {
495       input >> SFT_gbSuffix;
496     } else if(!varname.CompareTo("TRIGGER")) {
497       input >> SFT_gbTrigger;
498     } else if(!varname.CompareTo("RUNPP")) {
499       input >> SFT_gbRunPP;
500     } else if(!varname.CompareTo("RUNPA")) {
501       input >> SFT_gbRunPA;
502     } else if(!varname.CompareTo("AVOIDEXEC")) {
503       input >> SFT_gbAvoidExec;
504     } else if(!varname.CompareTo("SKIPCENTRALITY")) {
505       input >> SFT_gbSkipCentrality;
506     } else if(!varname.CompareTo("ESD")) {
507       input >> SFT_gbReadESD;
508     } else if(!varname.CompareTo("MC")) {
509       input >> SFT_gbReadMC;
510     } else if(!varname.CompareTo("EXTRAEVENTCUT")) {
511       input >> SFT_gbExtraEventCut;
512     } else if(!varname.CompareTo("CENTMETHOD")) {
513       input >> SFT_gbCentMethod;
514     } else if(!varname.CompareTo("CENTPERMIN")) {
515       input >> SFT_gbCentPerMin;
516     } else if(!varname.CompareTo("CENTPERMAX")) {
517       input >> SFT_gbCentPerMax;
518     } else if(!varname.CompareTo("SPECIE")) {
519       input >> SFT_gbSpecie;
520     } else if(!varname.CompareTo("HOMEMADE")) {
521       input >> SFT_gbHomemade;
522     } else if(!varname.CompareTo("ONLINE")) {
523       input >> SFT_gbOnline;
524     } else if(!varname.CompareTo("MINNCLSTTPC")) {
525       input >> SFT_gbMinNClsTPC;
526     } else if(!varname.CompareTo("MINNCLSITS")) {
527       input >> SFT_gbMinNClsITS;
528     } else if(!varname.CompareTo("MINXROWS")) {
529       input >> SFT_gbMinXRows;
530     } else if(!varname.CompareTo("MAXCHI2NCLSTPC")) {
531       input >> SFT_gbMaxChi2PerNClsTPC;
532     } else if(!varname.CompareTo("MINXROWSNFCLSTPC")) {
533       input >> SFT_gbMinXRowsOverNClsFTPC;
534     } else if(!varname.CompareTo("MINETA")) {
535       input >> SFT_gbMinEta;
536     } else if(!varname.CompareTo("MAXETA")) {
537       input >> SFT_gbMaxEta;
538     } else if(!varname.CompareTo("MINPT")) {
539       input >> SFT_gbMinPt;
540     } else if(!varname.CompareTo("MIND0XY")) {
541       input >> SFT_gbMinImpactParameterXY;
542     } else if(!varname.CompareTo("MAXSIGMAPID")) {
543       input >> SFT_gbMaxNSigmaPID;
544     } else if(!varname.CompareTo("MAXY")) {
545       input >> SFT_gbMaxRapidity;
546     } else if(!varname.CompareTo("MAXDCA")) {
547       input >> SFT_gbMaxDCAdaughters;
548     } else if(!varname.CompareTo("MINCTP")) {
549       input >> SFT_gbMinCosinePointingAngleXY;
550     } else if(!varname.CompareTo("MINQT")) {
551       input >> SFT_gbMinQt;
552     } else if(!varname.CompareTo("QTPIE")) {
553       input >> SFT_gbQtPie;
554     } else if(!varname.CompareTo("STOPPID")) {
555       input >> SFT_gbPIDPt;
556     } else if(!varname.CompareTo("MINRADXY")) {
557       input >> SFT_gbMinRadXY;
558     } else if(!varname.CompareTo("MAXDL")) {
559       input >> SFT_gbMaxDecayLength;
560     } else if(!varname.CompareTo("D0D0XY")) {
561       input >> SFT_gbMaxProductIPXY;
562     } else if(!varname.CompareTo("DEBUG")) {
563       input >> SFT_gbDebug;
564     } else if(!varname.CompareTo("QA")) {
565       input >> SFT_gbQA;
566     } else if(!varname.CompareTo("SKIPSELECTION")) {
567       input >> SFT_gbSkipSelection;
568     } else if(!varname.CompareTo("SKIPVN")) {
569       input >> SFT_gbSkipVn;
570     } else if(!varname.CompareTo("USEFP")) {
571       input >> SFT_gbFlowPackage;
572     } else if(!varname.CompareTo("SPVZE")) {
573       input >> SFT_gbSPVZE;
574     } else if(!varname.CompareTo("SPTPC")) {
575       input >> SFT_gbSPTPC;
576     } else if(!varname.CompareTo("SPVZEHALF")) {      
577       input >> SFT_gbSPVZEhalf;
578     } else if(!varname.CompareTo("QCTPC")) {
579       input >> SFT_gbQCTPC;
580     } else if(!varname.CompareTo("MCEP")) {
581       input >> SFT_gbMCEP;
582     } else if(!varname.CompareTo("ADDPITOMCEP")) {
583       input >> SFT_gbAddPitoMCRP;
584     } else if(!varname.CompareTo("SHRINKFP")) {
585       input >> SFT_gbShrinkFP;
586     } else if(!varname.CompareTo("RFFILTERBIT")) {
587       input >> SFT_gbRFPFilterBit;
588     } else if(!varname.CompareTo("RFMINPT")) {
589       input >> SFT_gbRFPminPt;
590     } else if(!varname.CompareTo("RFMAXPT")) {
591       input >> SFT_gbRFPmaxPt;
592     } else if(!varname.CompareTo("RFCMINETA")) {
593       input >> SFT_gbRFPCminEta;
594     } else if(!varname.CompareTo("RFCMAXETA")) {
595       input >> SFT_gbRFPCmaxEta;
596     } else if(!varname.CompareTo("RFAMINETA")) {
597       input >> SFT_gbRFPAminEta;
598     } else if(!varname.CompareTo("RFAMAXETA")) {
599       input >> SFT_gbRFPAmaxEta;
600     } else if(!varname.CompareTo("RFTPCSIGNAL")) {
601       input >> SFT_gbRFPTPCsignal;
602     } else if(!varname.CompareTo("RFMAXIPXY")) {
603       input >> SFT_gbRFPmaxIPxy;
604     } else if(!varname.CompareTo("RFMAXIPZ")) {
605       input >> SFT_gbRFPmaxIPz;
606     } else if(!varname.CompareTo("RFTPCNCLS")) {
607       input >> SFT_gbRFPTPCncls;
608     } else if(!varname.CompareTo("VZELOAD")) {
609       input >> SFT_gbVZEload;
610     } else if(!varname.CompareTo("VZELINEAR")) {
611       input >> SFT_gbVZEmb;
612     } else if(!varname.CompareTo("VZEPERDISK")) {
613       input >> SFT_gbVZEpdisk;
614     } else if(!varname.CompareTo("VZESAVE")) {
615       input >> SFT_gbVZEsave;
616     } else if(!varname.CompareTo("ALLCC")) {
617       input >> SFT_gbAllCC;
618     } else if(!varname.CompareTo("UNTAG")) {
619       input >> SFT_gbUntagDaughter;
620     } else if(!varname.CompareTo("POSTMATCHED")) {
621       input >> SFT_gbPostMatched;
622     } else if(!varname.CompareTo("VERTEXZ")) {
623       input >> SFT_gbVertexZcut;
624     } else if(!varname.CompareTo("WHICHPSI")) {
625       input >> SFT_gbWhichPsi;
626     } else if(!varname.CompareTo("DAUITS0")) {
627       input >> SFT_gbDauITS0On;
628     } else if(!varname.CompareTo("DAUITS1")) {
629       input >> SFT_gbDauITS1On;
630     } else if(!varname.CompareTo("DAUITS2")) {
631       input >> SFT_gbDauITS2On;
632     } else if(!varname.CompareTo("DAUITS3")) {
633       input >> SFT_gbDauITS3On;
634     } else if(!varname.CompareTo("DAUITS4")) {
635       input >> SFT_gbDauITS4On;
636     } else if(!varname.CompareTo("DAUITS5")) {
637       input >> SFT_gbDauITS5On;
638     } else if(!varname.CompareTo("DAUSPDANY")) {
639       input >> SFT_gbDauSPDany;
640     } else if(!varname.CompareTo("DAUITSREFIT")) {
641       input >> SFT_gbDauITSrefit;
642     } else if(!varname.CompareTo("RFVZEC_RingMin")) {
643       input >> SFT_gbV0CRingMin;
644     } else if(!varname.CompareTo("RFVZEC_RingMax")) {
645       input >> SFT_gbV0CRingMax;
646     } else if(!varname.CompareTo("RFVZEA_RingMin")) {
647       input >> SFT_gbV0ARingMin;
648     } else if(!varname.CompareTo("RFVZEA_RingMax")) {
649       input >> SFT_gbV0ARingMax;
650     } else if(!varname.CompareTo("HARMONIC")) {
651       input >> SFT_gbHarmonic;
652     } else {
653       printf("I dont understand %s\n",varname.Data());
654     }
655   }
656 }
657 void SFT_ResetVars() {
658   SFT_gbTrigger=1;
659   SFT_gbReadESD=0;
660   SFT_gbReadMC=0;
661   SFT_gbMatchMC=0;
662   SFT_gbAvoidExec=0;
663   SFT_gbExtraEventCut=0;
664   SFT_gbCentMethod="V0MTRK";
665   SFT_gbCentPerMin=0;
666   SFT_gbCentPerMax=100;
667   SFT_gbRunPP=0;
668   SFT_gbRunPA=0;
669   SFT_gbSpecie=0;
670   SFT_gbHomemade=0;
671   SFT_gbOnline=0;
672   SFT_gbMinNClsTPC=70;
673   SFT_gbMinNClsITS=-1;
674   SFT_gbMinXRows=70;
675   SFT_gbMaxChi2PerNClsTPC=4.0;
676   SFT_gbMinXRowsOverNClsFTPC=0.8;
677   SFT_gbMinEta=-0.8;
678   SFT_gbMaxEta=+0.8;
679   SFT_gbMinPt=0.1;
680   SFT_gbMinImpactParameterXY=0.1;
681   SFT_gbMaxNSigmaPID=3.0;
682   SFT_gbMaxRapidity=0.5;
683   SFT_gbMaxDCAdaughters=1.0;
684   SFT_gbMinCosinePointingAngleXY=0.998;
685   SFT_gbMinQt=0.2;
686   SFT_gbQtPie=kTRUE;
687   SFT_gbPIDPt=3.0;
688   SFT_gbMinRadXY=5.0;
689   SFT_gbMaxDecayLength=3.0;
690   SFT_gbMaxProductIPXY=0.0;
691   SFT_gbDebug=0;
692   SFT_gbQA=0;
693   SFT_gbFolder="FlowStrange";
694   SFT_gbSuffix="NOTFOUND";
695   SFT_gbRFPFilterBit=1;
696   SFT_gbRFPminPt=0.2;
697   SFT_gbRFPmaxPt=5.0;
698   SFT_gbRFPCminEta=-0.8;
699   SFT_gbRFPCmaxEta=0.0;
700   SFT_gbRFPAminEta=0.0;
701   SFT_gbRFPAmaxEta=+0.8;
702   SFT_gbRFPTPCsignal=10;
703   SFT_gbRFPmaxIPxy=2.4;
704   SFT_gbRFPmaxIPz=3.2;
705   SFT_gbRFPTPCncls=70;
706   SFT_gbV0CRingMin=0;
707   SFT_gbV0CRingMax=3;
708   SFT_gbV0ARingMin=0;
709   SFT_gbV0ARingMax=3;
710   SFT_gbAllCC=0;
711   SFT_gbSkipSelection=0;
712   SFT_gbSkipVn=0;
713   SFT_gbWhichPsi=1;
714   SFT_gbFlowPackage=0;
715   SFT_gbSPVZE=0;
716   SFT_gbSPVZEhalf=kFALSE;
717   SFT_gbSPTPC=0;
718   SFT_gbQCTPC=0;
719   SFT_gbMCEP=0;
720   SFT_gbHarmonic=2;
721   SFT_gbVZEload="no";
722   SFT_gbVZEsave=0;
723   SFT_gbVZEmb=0;
724   SFT_gbVZEpdisk=0;
725   SFT_gbUntagDaughter=kTRUE;
726   SFT_gbPostMatched=kFALSE;
727   SFT_gbShrinkFP=kTRUE;
728   SFT_gbVertexZcut=10.0;
729   SFT_gbDauITS0On=-1;
730   SFT_gbDauITS1On=-1;
731   SFT_gbDauITS2On=-1;
732   SFT_gbDauITS3On=-1;
733   SFT_gbDauITS4On=-1;
734   SFT_gbDauITS5On=-1;
735   SFT_gbSkipCentrality=kFALSE;
736   SFT_gbAddPitoMCRP=kFALSE;
737   SFT_gbDauSPDany=kFALSE;
738   SFT_gbDauITSrefit=kFALSE;
739 }