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