]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGHF/vertexingHF/macros/makeTFile4CutsD0toKpi.C
Updates to run with deltas (L. Cunqueiro)
[u/mrichter/AliRoot.git] / PWGHF / vertexingHF / macros / makeTFile4CutsD0toKpi.C
1 #include <Riostream.h>
2 #include <TFile.h>
3 #include <AliRDHFCutsD0toKpi.h>
4 #include <TClonesArray.h>
5 #include <TParameter.h>
6
7
8 //Use:
9 //Set hard coded commentet with //set this!!
10 // root[] .L makeInputD0tasks.C++
11 // root[] makeInputAliAnalysisTaskSED0Mass()
12 // root[] makeInputAliAnalysisTaskSESignificanceMaximization()
13 //similar macros for the other D mesons
14
15 //Author: Chiara Bianchin, cbianchi@pd.infn.it
16
17
18 //macro to make a .root file which contains an AliRDHFCutsD0toKpi for AliAnalysisTaskSED0Mass task
19
20 void makeInputAliAnalysisTaskSED0Mass(){
21
22   AliRDHFCutsD0toKpi* RDHFD0toKpi=new AliRDHFCutsD0toKpi();
23   RDHFD0toKpi->SetName("D0toKpiCuts");
24   RDHFD0toKpi->SetTitle("Cuts for D0 analysis");
25
26   AliESDtrackCuts* esdTrackCuts=new AliESDtrackCuts();
27   esdTrackCuts->SetRequireSigmaToVertex(kFALSE);
28   //default
29   esdTrackCuts->SetRequireTPCRefit(kTRUE);
30   esdTrackCuts->SetRequireITSRefit(kTRUE);
31   esdTrackCuts->SetEtaRange(-0.8,0.8);
32   //esdTrackCuts->SetMinNClustersITS(4); // default is 5
33   //esdTrackCuts->SetMinNClustersTPC(120);
34   esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,
35                                          AliESDtrackCuts::kAny); 
36  // default is kBoth, otherwise kAny
37   esdTrackCuts->SetMinDCAToVertexXY(0.);
38   esdTrackCuts->SetPtRange(0.8,1.e10);
39
40
41   RDHFD0toKpi->AddTrackCuts(esdTrackCuts);
42
43   const Int_t nvars=11;
44
45   const Int_t nptbins=13;
46   Float_t* ptbins;
47   ptbins=new Float_t[nptbins+1];
48   ptbins[0]=0.;
49   ptbins[1]=0.5;
50   ptbins[2]=1.;
51   ptbins[3]=2.;
52   ptbins[4]=3.;
53   ptbins[5]=4.;
54   ptbins[6]=5.;
55   ptbins[7]=6.;
56   ptbins[8]=8.;
57   ptbins[9]=12.;
58   ptbins[10]=16.;
59   ptbins[11]=20.;
60   ptbins[12]=24.;
61   ptbins[13]=9999.;
62
63   RDHFD0toKpi->SetPtBins(nptbins+1,ptbins);
64   
65
66   Float_t** rdcutsvalmine;
67   rdcutsvalmine=new Float_t*[nvars];
68   for(Int_t iv=0;iv<nvars;iv++){
69     rdcutsvalmine[iv]=new Float_t[nptbins];
70   }
71
72   //setting my cut values
73     //cuts order
74     //       printf("    |M-MD0| [GeV]    < %f\n",fD0toKpiCuts[0]);
75     //     printf("    dca    [cm]  < %f\n",fD0toKpiCuts[1]);
76     //     printf("    cosThetaStar     < %f\n",fD0toKpiCuts[2]);
77     //     printf("    pTK     [GeV/c]    > %f\n",fD0toKpiCuts[3]);
78     //     printf("    pTpi    [GeV/c]    > %f\n",fD0toKpiCuts[4]);
79     //     printf("    |d0K|  [cm]  < %f\n",fD0toKpiCuts[5]);
80     //     printf("    |d0pi| [cm]  < %f\n",fD0toKpiCuts[6]);
81     //     printf("    d0d0  [cm^2] < %f\n",fD0toKpiCuts[7]);
82     //     printf("    cosThetaPoint    > %f\n",fD0toKpiCuts[8]);
83     //     printf("    |cosThetaPointXY| < %f\n",fD0toKpiCuts[9]);
84     //     printf("    NormDecayLenghtXY    > %f\n",fD0toKpiCuts[10]);
85
86
87   Double_t arrcuts[11]={0.3,0.03,0.8,0.8,0.8,0.1,0.1,-0.0004,0.9,0.998,5.}; //put the last 2 values at 0. for pp
88
89   //setting my cut values
90   //0-0.5 GeV
91   for(Int_t ic=0;ic<nvars;ic++) rdcutsvalmine[ic][0]=arrcuts[ic];
92
93   //0.5-1 GeV/c
94   for(Int_t ic=0;ic<nvars;ic++) rdcutsvalmine[ic][1]=arrcuts[ic];
95
96   //1-2 GeV 
97   arrcuts[1]=0.025;  arrcuts[7]=-0.0003;
98   for(Int_t ic=0;ic<nvars;ic++) rdcutsvalmine[ic][2]=arrcuts[ic];
99
100   //2-3 GeV
101   arrcuts[7]=-0.00026;
102   arrcuts[9]=0.998;
103   for(Int_t ic=0;ic<nvars;ic++) rdcutsvalmine[ic][3]=arrcuts[ic];
104
105   //3-4 GeV
106   arrcuts[7]=-0.00015; arrcuts[8]=0.85;
107   for(Int_t ic=0;ic<nvars;ic++) rdcutsvalmine[ic][4]=arrcuts[ic];
108
109   //4-5 GeV 
110   for(Int_t ic=0;ic<nvars;ic++) rdcutsvalmine[ic][5]=arrcuts[ic];
111
112   //5-6 GeV
113   arrcuts[7]=-0.0001; arrcuts[8]=0.85;
114   for(Int_t ic=0;ic<nvars;ic++) rdcutsvalmine[ic][6]=arrcuts[ic];
115
116   //6-8 GeV
117   arrcuts[2]=1.;
118   for(Int_t ic=0;ic<nvars;ic++) rdcutsvalmine[ic][7]=arrcuts[ic];
119
120   //8-12 GeV
121   arrcuts[8]=0.8;
122   for(Int_t ic=0;ic<nvars;ic++) rdcutsvalmine[ic][8]=arrcuts[ic];
123
124   //12-16 GeV
125   arrcuts[1]=0.03;
126   for(Int_t ic=0;ic<nvars;ic++) rdcutsvalmine[ic][9]=arrcuts[ic];
127
128   //16-20 GeV
129   arrcuts[1]=0.035;
130   for(Int_t ic=0;ic<nvars;ic++) rdcutsvalmine[ic][10]=arrcuts[ic];
131
132   //20-24 GeV
133   for(Int_t ic=0;ic<nvars;ic++) rdcutsvalmine[ic][11]=arrcuts[ic];
134
135   //24-9999 GeV
136   for(Int_t ic=0;ic<nvars;ic++) rdcutsvalmine[ic][12]=arrcuts[ic];
137
138   RDHFD0toKpi->SetCuts(nvars,nptbins,rdcutsvalmine);
139
140   Bool_t pidflag=kTRUE;
141   RDHFD0toKpi->SetUsePID(pidflag);
142   if(pidflag) cout<<"PID is used"<<endl;
143   else cout<<"PID is not used"<<endl;
144
145     //pid settings
146   AliAODPidHF* pidObj=new AliAODPidHF();
147   //pidObj->SetName("pid4D0");
148   Int_t mode=1;
149   const Int_t nlims=2;
150   Double_t plims[nlims]={0.6,0.8}; //TPC limits in momentum [GeV/c]
151   Bool_t compat=kTRUE; //effective only for this mode
152   Bool_t asym=kTRUE;
153   Double_t sigmas[5]={2.,1.,0.,3.,0.}; //to be checked and to be modified with new implementation of setters by Rossella
154   pidObj->SetAsym(asym);// if you want to use the asymmetric bands in TPC
155   pidObj->SetMatch(mode);
156   pidObj->SetPLimit(plims,nlims);
157   pidObj->SetSigma(sigmas);
158   pidObj->SetCompat(compat);
159   pidObj->SetTPC(kTRUE);
160   pidObj->SetTOF(kTRUE);
161   RDHFD0toKpi->SetPidHF(pidObj);
162
163   RDHFD0toKpi->SetUseDefaultPID(kFALSE); //to use the AliAODPidHF
164
165   //activate pileup rejection (for pp)
166   //RDHFD0toKpi->SetOptPileup(AliRDHFCuts::kRejectPileupEvent);
167
168   //Do not recalculate the vertex
169   RDHFD0toKpi->SetRemoveDaughtersFromPrim(kFALSE); //activate for pp
170
171   TString cent="";
172   //centrality selection (Pb-Pb)
173   Float_t minc=20,maxc=80;
174   RDHFD0toKpi->SetMinCentrality(minc);
175   RDHFD0toKpi->SetMaxCentrality(maxc);
176   cent=Form("%.0f%.0f",minc,maxc);
177   RDHFD0toKpi->SetUseCentrality(AliRDHFCuts::kCentV0M); //kCentOff,kCentV0M,kCentTRK,kCentTKL,kCentCL1,kCentInvalid
178
179   //temporary
180   //RDHFD0toKpi->SetFixRefs();
181
182   cout<<"This is the odject I'm going to save:"<<endl;
183   RDHFD0toKpi->PrintAll();
184   TFile* fout=new TFile(Form("D0toKpiCuts%s%s%sRecVtx%sPileupRej.root", RDHFD0toKpi->GetUseCentrality()==0 ? "pp" : "PbPb",cent.Data(),RDHFD0toKpi->GetIsPrimaryWithoutDaughters() ? "" : "No",RDHFD0toKpi->GetOptPileUp() ? "" : "No"),"recreate");   //set this!! 
185
186   fout->cd();
187   RDHFD0toKpi->Write();
188   fout->Close();
189
190 }
191  
192 //macro to make a .root file (for significance maximization) which contains an AliRDHFCutsD0toKpi with loose set of cuts  and TParameter with the tighest value of these cuts
193
194 void makeInputAliAnalysisTaskSESignificanceMaximization(){
195
196   AliRDHFCutsD0toKpi* RDHFD0toKpi=new AliRDHFCutsD0toKpi();
197   RDHFD0toKpi->SetName("loosercuts");
198   RDHFD0toKpi->SetTitle("Cuts for significance maximization");
199
200   AliESDtrackCuts* esdTrackCuts=new AliESDtrackCuts();
201   esdTrackCuts->SetRequireSigmaToVertex(kFALSE);
202   //default
203   esdTrackCuts->SetRequireTPCRefit(kTRUE);
204   esdTrackCuts->SetRequireITSRefit(kTRUE);
205   //esdTrackCuts->SetMinNClustersITS(4);
206   //esdTrackCuts->SetMinNClustersTPC(120);
207
208   esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kAny);
209   esdTrackCuts->SetMinDCAToVertexXY(0.);
210   esdTrackCuts->SetEtaRange(-0.8,0.8);
211   esdTrackCuts->SetPtRange(0.8,1.e10);
212   
213   RDHFD0toKpi->AddTrackCuts(esdTrackCuts);
214
215   const Int_t nvars=11;
216
217   const Int_t nptbins=14; //change this when adding pt bins!
218   Float_t ptbins[nptbins+1];
219   ptbins[0]=0.;
220   ptbins[1]=0.5;
221   ptbins[2]=1.;
222   ptbins[3]=2.;
223   ptbins[4]=3.;
224   ptbins[5]=4.;
225   ptbins[6]=5.;
226   ptbins[7]=6.;
227   ptbins[8]=8.;
228   ptbins[9]=10.;
229   ptbins[10]=12.;
230   ptbins[11]=16.;
231   ptbins[12]=20.;
232   ptbins[13]=24.;
233   ptbins[14]=9999.;
234
235   RDHFD0toKpi->SetPtBins(nptbins+1,ptbins);
236
237   Float_t** rdcutsvalmine;
238   rdcutsvalmine=new Float_t*[nvars];
239   for(Int_t iv=0;iv<nvars;iv++){
240     rdcutsvalmine[iv]=new Float_t[nptbins];
241   }
242
243   //setting my cut values
244     //cuts order
245     //       printf("    |M-MD0| [GeV]    < %f\n",fD0toKpiCuts[0]);
246     //     printf("    dca    [cm]  < %f\n",fD0toKpiCuts[1]);
247     //     printf("    cosThetaStar     < %f\n",fD0toKpiCuts[2]);
248     //     printf("    pTK     [GeV/c]    > %f\n",fD0toKpiCuts[3]);
249     //     printf("    pTpi    [GeV/c]    > %f\n",fD0toKpiCuts[4]);
250     //     printf("    |d0K|  [cm]  < %f\n",fD0toKpiCuts[5]);
251     //     printf("    |d0pi| [cm]  < %f\n",fD0toKpiCuts[6]);
252     //     printf("    d0d0  [cm^2] < %f\n",fD0toKpiCuts[7]);
253     //     printf("    cosThetaPoint    > %f\n",fD0toKpiCuts[8]);
254     //     printf("    |cosThetaPointXY| < %f\n",fD0toKpiCuts[9]);
255     //     printf("    NormDecayLenghtXY    > %f\n",fD0toKpiCuts[10]);
256
257
258     Float_t cutsMatrixD0toKpiStand[nptbins][nvars]={{0.400,400.*1E-4,0.8,0.3,0.3,1000.*1E-4,1000.*1E-4,-40000.*1E-8,0.75,0.,2.},/* pt<0.5*/
259                                                   {0.400,400.*1E-4,0.8,0.3,0.3,1000.*1E-4,1000.*1E-4,-40000.*1E-8,0.75,0.,2.},/* 0.5<pt<1*/
260                                                   {0.400,400.*1E-4,0.8,0.4,0.4,1000.*1E-4,1000.*1E-4,-33000.*1E-8,0.75,0.,2.},/* 1<pt<2 */
261                                                   {0.400,250.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-30000.*1E-8,0.85,0.994,2.},/* 2<pt<3 */
262                                                   {0.400,250.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-26000.*1E-8,0.85,0.994,2.},/* 3<pt<4 */
263                                                   {0.400,250.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-15000.*1E-8,0.85,0.994,2.},/* 4<pt<5 */
264                                                   {0.400,250.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-11000.*1E-8,0.82,0.994,2.},/* 5<pt<6 */
265                                                   {0.400,270.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-10000.*1E-8,0.78,0.994,2.},/* 6<pt<8 */
266                                                   {0.400,300.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-1000.*1E-8,0.7,0.994,2.},/* 8<pt<10 */
267                                                   {0.400,300.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-1000.*1E-8,0.7,0.994,2.},/* 10<pt<12 */
268                                                   {0.400,350.*1E-4,1.0,0.7,0.7,1000.*1E-4,1000.*1E-4,-500.*1E-8,0.7,0.994,2.},/* 12<pt<16 */
269                                                   {0.400,400.*1E-4,1.0,0.7,0.7,1000.*1E-4,1000.*1E-4,-500.*1E-8,0.7,0.994,2.},/* 16<pt<20 */
270                                                   {0.400,400.*1E-4,1.0,0.7,0.7,1000.*1E-4,1000.*1E-4,-500.*1E-8,0.7,0.994,2.},/* 20<pt<24 */
271                                                   {0.400,400.*1E-4,1.0,0.7,0.7,1000.*1E-4,1000.*1E-4,-500.*1E-8,0.7,0.994,2.}};/* pt>24 */
272
273   //CREATE TRANSPOSE MATRIX...REVERSE INDICES as required by AliRDHFCuts
274   Float_t **cutsMatrixTransposeStand=new Float_t*[nvars];
275   for(Int_t iv=0;iv<nvars;iv++)cutsMatrixTransposeStand[iv]=new Float_t[nptbins];
276   for (Int_t ibin=0;ibin<nptbins;ibin++){
277     for (Int_t ivar = 0; ivar<nvars; ivar++){
278       cutsMatrixTransposeStand[ivar][ibin]=cutsMatrixD0toKpiStand[ibin][ivar];
279     }
280   }
281   RDHFD0toKpi->SetCuts(nvars,nptbins,cutsMatrixTransposeStand);
282
283
284   Bool_t stdvaropt=kFALSE;
285   Int_t dim=4; //set this!!
286   Bool_t *boolforopt;
287   boolforopt=new Bool_t[nvars];
288   if(stdvaropt){
289     boolforopt=RDHFD0toKpi->GetVarsForOpt();
290   }else{
291     TString *names;
292     names=new TString[nvars];
293     TString answer="";
294     Int_t checktrue=0;
295     names=RDHFD0toKpi->GetVarNames();
296     for(Int_t i=0;i<nvars;i++){
297       cout<<names[i]<<" for opt? (y/n)"<<endl;
298       cin>>answer;
299       if(answer=="y") {
300         boolforopt[i]=kTRUE;
301         checktrue++;
302       }
303       else boolforopt[i]=kFALSE;
304     }
305     if (checktrue!=dim) {
306       cout<<"Error! You set "<<checktrue<<" kTRUE instead of "<<dim<<endl;
307       return;
308     }
309     RDHFD0toKpi->SetVarsForOpt(dim,boolforopt);
310   }
311
312
313   Float_t tighterval[dim][nptbins];
314   //dca  
315   //costhetastar
316   //d0d0 <-this 
317   //costhetapoint <-this 
318   //cosThetaPointXY <-this 
319   //NormDecayLength <-this 
320   
321   //number of steps for each variable is set in the AddTask arguments (default=8)
322   //set this!!
323   //0-0.5
324   tighterval[0][0]=-0.00065;
325   tighterval[1][0]=1.;
326   tighterval[2][0]=0.4;
327   tighterval[3][0]=6.;
328
329   //0.5-1.
330   tighterval[0][1]=-0.00065;
331   tighterval[1][1]=1.;
332   tighterval[2][1]=0.4;
333   tighterval[3][1]=6.;
334
335   //1-2
336   tighterval[0][2]=-0.00065;
337   tighterval[1][2]=1.;
338   tighterval[2][2]=0.4;
339   tighterval[3][2]=6.;
340  
341   //2-3
342   tighterval[0][3]=-0.0006;
343   tighterval[1][3]=1.;
344   tighterval[2][3]=1.;
345   tighterval[3][3]=6.;
346
347   //3-4
348   tighterval[0][4]=-0.00046;
349   tighterval[1][4]=1.;
350   tighterval[2][4]=1.;
351   tighterval[3][4]=6.;
352  
353   //4-5
354   tighterval[0][5]=-0.00045;
355   tighterval[1][5]=1.;
356   tighterval[2][5]=1.;
357   tighterval[3][5]=6.;
358  
359   //5-6
360   tighterval[0][6]=-0.00031;
361   tighterval[1][6]=1.;
362   tighterval[2][6]=1.;
363   tighterval[3][6]=6.;
364
365   //6-8
366   tighterval[0][7]=-0.00021;
367   tighterval[1][7]=0.98;
368   tighterval[2][7]=1.;
369   tighterval[3][7]=6.;
370
371   //8-10
372   tighterval[0][8]=-0.0001;
373   tighterval[1][8]=0.98;
374   tighterval[2][8]=1.;
375   tighterval[3][8]=6.;
376
377   //10-12
378   tighterval[0][9]=-0.0001;
379   tighterval[1][9]=0.9;
380   tighterval[2][9]=1.;
381   tighterval[3][9]=6.;
382  
383   //12-16
384   tighterval[0][10]=-0.00005;
385   tighterval[1][10]=0.9;
386   tighterval[2][10]=1.;
387   tighterval[3][10]=6.;
388
389   //16-20
390   tighterval[0][11]=-0.00005;
391   tighterval[1][11]=0.9;
392   tighterval[2][11]=1.;
393   tighterval[3][11]=6.;
394
395   //20-24
396   tighterval[0][12]=-0.00005;
397   tighterval[1][12]=0.9;
398   tighterval[2][12]=1.;
399   tighterval[3][12]=6.;
400
401   //>24
402   tighterval[0][13]=-0.00005;
403   tighterval[1][13]=0.9;
404   tighterval[2][13]=1.;
405   tighterval[3][13]=6.;
406
407
408   TString name=""; 
409   Int_t arrdim=dim*nptbins;
410   cout<<"Will save "<<arrdim<<" TParameter<float>"<<endl;
411   TClonesArray max("TParameter<float>",arrdim);
412   for(Int_t ival=0;ival<dim;ival++){
413     for(Int_t jpt=0;jpt<nptbins;jpt++){
414       name=Form("par%dptbin%d",ival,jpt);
415       cout<<"Setting "<<name.Data()<<" to "<<tighterval[ival][jpt]<<endl;
416       new(max[jpt*dim+ival])TParameter<float>(name.Data(),tighterval[ival][jpt]);
417     }
418   }
419
420   Bool_t flagPID=kTRUE;
421   RDHFD0toKpi->SetUsePID(flagPID);
422
423   RDHFD0toKpi->PrintAll();
424   printf("Use PID? %s\n",flagPID ? "yes" : "no");
425
426   //pid settings
427   AliAODPidHF* pidObj=new AliAODPidHF();
428   //pidObj->SetName("pid4D0");
429   Int_t mode=1;
430   const Int_t nlims=2;
431   Double_t plims[nlims]={0.6,0.8}; //TPC limits in momentum [GeV/c]
432   Bool_t compat=kTRUE; //effective only for this mode
433   Bool_t asym=kTRUE;
434   Double_t sigmas[5]={2.,1.,0.,3.,0.}; //to be checked and to be modified with new implementation of setters by Rossella
435   pidObj->SetAsym(asym);// if you want to use the asymmetric bands in TPC
436   pidObj->SetMatch(mode);
437   pidObj->SetPLimit(plims,nlims);
438   pidObj->SetSigma(sigmas);
439   pidObj->SetCompat(compat);
440   pidObj->SetTPC(kTRUE);
441   pidObj->SetTOF(kTRUE);
442   RDHFD0toKpi->SetPidHF(pidObj);
443
444   RDHFD0toKpi->SetUseDefaultPID(kFALSE); //to use the AliAODPidHF
445   
446   //activate pileup rejection (for pp)
447   //RDHFD0toKpi->SetOptPileup(AliRDHFCuts::kRejectPileupEvent);
448
449   //Do not recalculate the vertex
450   RDHFD0toKpi->SetRemoveDaughtersFromPrim(kFALSE); //activate for pp
451
452   TString cent="";
453   //centrality selection (Pb-Pb)
454   Float_t minc=20,maxc=80;
455   RDHFD0toKpi->SetMinCentrality(minc);
456   RDHFD0toKpi->SetMaxCentrality(maxc);
457   cent=Form("%.0f%.0f",minc,maxc);
458   RDHFD0toKpi->SetUseCentrality(AliRDHFCuts::kCentV0M); //kCentOff,kCentV0M,kCentTRK,kCentTKL,kCentCL1,kCentInvalid
459
460   //temporary
461   RDHFD0toKpi->SetFixRefs();
462
463   TFile* fout=new TFile(Form("cuts4SignifMaxim%s%s%sRecVtx%sPileupRej.root", RDHFD0toKpi->GetUseCentrality()==0 ? "pp" : "PbPb",cent.Data(),RDHFD0toKpi->GetIsPrimaryWithoutDaughters() ? "" : "No",RDHFD0toKpi->GetOptPileUp() ? "" : "No"),"recreate");   //set this!! 
464
465   fout->cd();
466   RDHFD0toKpi->Write();
467   max.Write();
468   fout->Close();
469  
470 }
471