3 #include <AliRDHFCutsD0toKpi.h>
4 #include <TClonesArray.h>
5 #include <TParameter.h>
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
15 //Author: Chiara Bianchin, cbianchi@pd.infn.it
18 //macro to make a .root file which contains an AliRDHFCutsD0toKpi for AliAnalysisTaskSED0Mass task
20 void makeInputAliAnalysisTaskSED0Mass(){
22 AliRDHFCutsD0toKpi* RDHFD0toKpi=new AliRDHFCutsD0toKpi();
23 RDHFD0toKpi->SetName("D0toKpiCuts");
24 RDHFD0toKpi->SetTitle("Cuts for D0 analysis");
26 AliESDtrackCuts* esdTrackCuts=new AliESDtrackCuts();
27 esdTrackCuts->SetRequireSigmaToVertex(kFALSE);
29 esdTrackCuts->SetRequireTPCRefit(kTRUE);
30 esdTrackCuts->SetRequireITSRefit(kTRUE);
31 esdTrackCuts->SetMinNClustersITS(4); // default is 5
32 //esdTrackCuts->SetMinNClustersTPC(70);
33 esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,
34 AliESDtrackCuts::kAny);
35 // default is kBoth, otherwise kAny
36 esdTrackCuts->SetMinDCAToVertexXY(0.);
37 esdTrackCuts->SetPtRange(0.3,1.e10);
40 RDHFD0toKpi->AddTrackCuts(esdTrackCuts);
44 const Int_t nptbins=11;
46 ptbins=new Float_t[nptbins+1];
61 RDHFD0toKpi->SetPtBins(nptbins+1,ptbins);
64 Float_t** rdcutsvalmine;
65 rdcutsvalmine=new Float_t*[nvars];
66 for(Int_t iv=0;iv<nvars;iv++){
67 rdcutsvalmine[iv]=new Float_t[nptbins];
70 //setting my cut values
72 // printf(" |M-MD0| [GeV] < %f\n",fD0toKpiCuts[0]);
73 // printf(" dca [cm] < %f\n",fD0toKpiCuts[1]);
74 // printf(" cosThetaStar < %f\n",fD0toKpiCuts[2]);
75 // printf(" pTK [GeV/c] > %f\n",fD0toKpiCuts[3]);
76 // printf(" pTpi [GeV/c] > %f\n",fD0toKpiCuts[4]);
77 // printf(" |d0K| [cm] < %f\n",fD0toKpiCuts[5]);
78 // printf(" |d0pi| [cm] < %f\n",fD0toKpiCuts[6]);
79 // printf(" d0d0 [cm^2] < %f\n",fD0toKpiCuts[7]);
80 // printf(" cosThetaPoint > %f\n",fD0toKpiCuts[8]);
83 //setting PPR cut values
84 rdcutsvalPPR[0][0]=0.7;
85 rdcutsvalPPR[1][0]=0.04;
86 rdcutsvalPPR[2][0]=0.8;
87 rdcutsvalPPR[3][0]=0.5;
88 rdcutsvalPPR[4][0]=0.5;
89 rdcutsvalPPR[5][0]=0.05;
90 rdcutsvalPPR[6][0]=0.05;
91 rdcutsvalPPR[7][0]=-0.0002;
92 rdcutsvalPPR[8][0]=0.5;
94 rdcutsvalPPR[0][1]=rdcutsvalPPR[0][2]=0.7;
95 rdcutsvalPPR[1][1]=rdcutsvalPPR[1][2]=0.02;
96 rdcutsvalPPR[2][1]=rdcutsvalPPR[2][2]=0.8;
97 rdcutsvalPPR[3][1]=rdcutsvalPPR[3][2]=0.7;
98 rdcutsvalPPR[4][1]=rdcutsvalPPR[4][2]=0.7;
99 rdcutsvalPPR[5][1]=rdcutsvalPPR[5][2]=0.05;
100 rdcutsvalPPR[6][1]=rdcutsvalPPR[6][2]=0.05;
101 rdcutsvalPPR[7][1]=rdcutsvalPPR[7][2]=-0.0002;
102 rdcutsvalPPR[8][1]=rdcutsvalPPR[8][2]=0.6;
104 rdcutsvalPPR[0][3]=0.7;
105 rdcutsvalPPR[1][3]=0.02;
106 rdcutsvalPPR[2][3]=0.8;
107 rdcutsvalPPR[3][3]=0.7;
108 rdcutsvalPPR[4][3]=0.7;
109 rdcutsvalPPR[5][3]=0.05;
110 rdcutsvalPPR[6][3]=0.05;
111 rdcutsvalPPR[7][3]=-0.0001;
112 rdcutsvalPPR[8][3]=0.8;
114 rdcutsvalPPR[0][4]=0.7;
115 rdcutsvalPPR[1][4]=0.02;
116 rdcutsvalPPR[2][4]=0.8;
117 rdcutsvalPPR[3][4]=0.7;
118 rdcutsvalPPR[4][4]=0.7;
119 rdcutsvalPPR[5][4]=0.05;
120 rdcutsvalPPR[6][4]=0.05;
121 rdcutsvalPPR[7][4]=-0.00005;
122 rdcutsvalPPR[8][4]=0.8;
124 Double_t arrcuts[9]={0.2,0.03,0.8,0.3,0.3,0.1,0.1,-0.0004,0.7};
126 //setting my cut values
129 rdcutsvalmine[0][0]=arrcuts[0];
130 rdcutsvalmine[1][0]=arrcuts[1];
131 rdcutsvalmine[2][0]=arrcuts[2];
132 rdcutsvalmine[3][0]=arrcuts[3];
133 rdcutsvalmine[4][0]=arrcuts[4];
134 rdcutsvalmine[5][0]=arrcuts[5];
135 rdcutsvalmine[6][0]=arrcuts[6];
136 rdcutsvalmine[7][0]=arrcuts[7];
137 rdcutsvalmine[8][0]=arrcuts[8];
140 arrcuts[1]=0.02; arrcuts[3]=arrcuts[4]=0.4; arrcuts[7]=-0.00032; arrcuts[8]=0.8;
141 rdcutsvalmine[0][1]=arrcuts[0];
142 rdcutsvalmine[1][1]=arrcuts[1];
143 rdcutsvalmine[2][1]=arrcuts[2];
144 rdcutsvalmine[3][1]=arrcuts[3];
145 rdcutsvalmine[4][1]=arrcuts[4];
146 rdcutsvalmine[5][1]=arrcuts[5];
147 rdcutsvalmine[6][1]=arrcuts[6];
148 rdcutsvalmine[7][1]=arrcuts[7];
149 rdcutsvalmine[8][1]=arrcuts[8];
152 arrcuts[3]=arrcuts[4]=0.7; arrcuts[7]=-0.00026;
153 rdcutsvalmine[0][2]=arrcuts[0];
154 rdcutsvalmine[1][2]=arrcuts[1];
155 rdcutsvalmine[2][2]=arrcuts[2];
156 rdcutsvalmine[3][2]=arrcuts[3];
157 rdcutsvalmine[4][2]=arrcuts[4];
158 rdcutsvalmine[5][2]=arrcuts[5];
159 rdcutsvalmine[6][2]=arrcuts[6];
160 rdcutsvalmine[7][2]=arrcuts[7];
161 rdcutsvalmine[8][2]=arrcuts[8];
166 rdcutsvalmine[0][3]=rdcutsvalmine[0][4]=arrcuts[0];
167 rdcutsvalmine[1][3]=rdcutsvalmine[1][4]=arrcuts[1];
168 rdcutsvalmine[2][3]=rdcutsvalmine[2][4]=arrcuts[2];
169 rdcutsvalmine[3][3]=rdcutsvalmine[3][4]=arrcuts[3];
170 rdcutsvalmine[4][3]=rdcutsvalmine[4][4]=arrcuts[4];
171 rdcutsvalmine[5][3]=rdcutsvalmine[5][4]=arrcuts[5];
172 rdcutsvalmine[6][3]=rdcutsvalmine[6][4]=arrcuts[6];
173 rdcutsvalmine[7][3]=rdcutsvalmine[7][4]=arrcuts[7];
174 rdcutsvalmine[8][3]=rdcutsvalmine[8][4]=arrcuts[8];
177 //5-6 GeV - 6-8 GeV - 8-12 GeV - 12-16 GeV
178 arrcuts[2]=0.015; arrcuts[7]=-0.0001;
180 rdcutsvalmine[0][5]=rdcutsvalmine[0][6]=rdcutsvalmine[0][7]=rdcutsvalmine[0][8]=arrcuts[0];
181 rdcutsvalmine[1][5]=rdcutsvalmine[1][6]=rdcutsvalmine[1][7]=rdcutsvalmine[1][8]=arrcuts[1];
182 rdcutsvalmine[2][5]=rdcutsvalmine[2][6]=rdcutsvalmine[2][7]=rdcutsvalmine[2][8]=arrcuts[2];
183 rdcutsvalmine[3][5]=rdcutsvalmine[3][6]=rdcutsvalmine[3][7]=rdcutsvalmine[3][8]=arrcuts[3];
184 rdcutsvalmine[4][5]=rdcutsvalmine[4][6]=rdcutsvalmine[4][7]=rdcutsvalmine[4][8]=arrcuts[4];
185 rdcutsvalmine[5][5]=rdcutsvalmine[5][6]=rdcutsvalmine[5][7]=rdcutsvalmine[5][8]=arrcuts[5];
186 rdcutsvalmine[6][5]=rdcutsvalmine[6][6]=rdcutsvalmine[6][7]=rdcutsvalmine[6][8]=arrcuts[6];
187 rdcutsvalmine[7][5]=rdcutsvalmine[7][6]=rdcutsvalmine[7][7]=rdcutsvalmine[7][8]=arrcuts[7];
188 rdcutsvalmine[8][5]=rdcutsvalmine[8][6]=rdcutsvalmine[8][7]=rdcutsvalmine[8][8]=arrcuts[8];
190 //16-20 GeV - 20-24 GeV --to be optimized
191 arrcuts[7]=0.0001; arrcuts[8]=0.7;
192 rdcutsvalmine[0][9]=rdcutsvalmine[0][10]=arrcuts[0];
193 rdcutsvalmine[1][9]=rdcutsvalmine[1][10]=arrcuts[1];
194 rdcutsvalmine[2][9]=rdcutsvalmine[2][10]=arrcuts[2];
195 rdcutsvalmine[3][9]=rdcutsvalmine[3][10]=arrcuts[3];
196 rdcutsvalmine[4][9]=rdcutsvalmine[4][10]=arrcuts[4];
197 rdcutsvalmine[5][9]=rdcutsvalmine[5][10]=arrcuts[5];
198 rdcutsvalmine[6][9]=rdcutsvalmine[6][10]=arrcuts[6];
199 rdcutsvalmine[7][9]=rdcutsvalmine[7][10]=arrcuts[7];
200 rdcutsvalmine[8][9]=rdcutsvalmine[8][10]=arrcuts[8];
202 RDHFD0toKpi->SetCuts(nvars,nptbins,rdcutsvalmine);
204 Bool_t pidflag=kTRUE;
205 RDHFD0toKpi->SetUsePID(pidflag);
206 if(pidflag) cout<<"PID is used"<<endl;
207 else cout<<"PID is not used"<<endl;
210 AliAODPidHF* pidObj=new AliAODPidHF();
211 //pidObj->SetName("pid4D0");
214 Double_t plims[nlims]={0.6,0.8}; //TPC limits in momentum [GeV/c]
215 Bool_t compat=kTRUE; //effective only for this mode
217 Double_t sigmas[5]={2.,1.,0.,3.,0.}; //to be checked and to be modified with new implementation of setters by Rossella
218 pidObj->SetAsym(asym);// if you want to use the asymmetric bands in TPC
219 pidObj->SetMatch(mode);
220 pidObj->SetPLimit(plims,nlims);
221 pidObj->SetSigma(sigmas);
222 pidObj->SetCompat(compat);
223 pidObj->SetTPC(kTRUE);
224 pidObj->SetTOF(kTRUE);
225 RDHFD0toKpi->SetPidHF(pidObj);
227 RDHFD0toKpi->SetUseDefaultPID(kFALSE); //to use the AliAODPidHF
229 cout<<"This is the odject I'm going to save:"<<endl;
230 RDHFD0toKpi->PrintAll();
231 TFile* fout=new TFile("D0toKpiCuts.root","recreate"); //set this!!
233 RDHFD0toKpi->Write();
238 //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
240 void makeInputAliAnalysisTaskSESignificanceMaximization(){
242 AliRDHFCutsD0toKpi* RDHFD0toKpi=new AliRDHFCutsD0toKpi();
243 RDHFD0toKpi->SetName("loosercuts");
244 RDHFD0toKpi->SetTitle("Cuts for significance maximization");
246 AliESDtrackCuts* esdTrackCuts=new AliESDtrackCuts();
247 esdTrackCuts->SetRequireSigmaToVertex(kFALSE);
249 esdTrackCuts->SetRequireTPCRefit(kTRUE);
250 esdTrackCuts->SetRequireITSRefit(kTRUE);
251 esdTrackCuts->SetMinNClustersITS(4);
253 esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kAny);
254 esdTrackCuts->SetMinDCAToVertexXY(0.);
255 esdTrackCuts->SetEtaRange(-0.9,0.9);
256 esdTrackCuts->SetPtRange(0.1,1.e10);
258 RDHFD0toKpi->AddTrackCuts(esdTrackCuts);
262 const Int_t nptbins=11;
263 Float_t ptbins[nptbins+1];
277 RDHFD0toKpi->SetPtBins(nptbins+1,ptbins);
280 Float_t** rdcutsvalmine;
281 rdcutsvalmine=new Float_t*[nvars];
282 for(Int_t iv=0;iv<nvars;iv++){
283 rdcutsvalmine[iv]=new Float_t[nptbins];
286 //setting my cut values
288 // printf(" |M-MD0| [GeV] < %f\n",fD0toKpiCuts[0]);
289 // printf(" dca [cm] < %f\n",fD0toKpiCuts[1]);
290 // printf(" cosThetaStar < %f\n",fD0toKpiCuts[2]);
291 // printf(" pTK [GeV/c] > %f\n",fD0toKpiCuts[3]);
292 // printf(" pTpi [GeV/c] > %f\n",fD0toKpiCuts[4]);
293 // printf(" |d0K| [cm] < %f\n",fD0toKpiCuts[5]);
294 // printf(" |d0pi| [cm] < %f\n",fD0toKpiCuts[6]);
295 // printf(" d0d0 [cm^2] < %f\n",fD0toKpiCuts[7]);
296 // printf(" cosThetaPoint > %f\n",fD0toKpiCuts[8]);
298 Float_t cutsMatrixD0toKpiStand[nptbins][nvars]={{0.2,300.*1E-4,0.8,0.3,0.3,1000.*1E-4,1000.*1E-4,-0.00005,0.7},/* pt<0.5*/
299 {0.2,300.*1E-4,0.8,0.3,0.3,1000.*1E-4,1000.*1E-4,-0.00005,0.7},/* 0.5<pt<1*/
300 {0.2,200.*1E-4,0.8,0.4,0.4,1000.*1E-4,1000.*1E-4,-0.00005,0.7},/* 1<pt<2 */
301 {0.2,200.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-0.00005,0.7},/* 2<pt<3 */
302 {0.2,200.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-0.00005,0.7},/* 3<pt<4 */
303 {0.2,200.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-0.00005,0.7},/* 4<pt<5 */
304 {0.2,150.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-0.00005,0.7},/* 5<pt<6 */
305 {0.2,150.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-0.00005,0.7},/* 6<pt<8 */
306 {0.2,150.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-0.00005,0.7},/* 8<pt<12 */
307 {0.2,150.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-0.00005,0.7},/*12<pt<16 */
308 {0.2,150.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-0.00005,0.7}};/*pt>16 */
310 //CREATE TRANSPOSE MATRIX...REVERSE INDICES as required by AliRDHFCuts
311 for (Int_t ibin=0;ibin<nptbins;ibin++){
312 for (Int_t ivar = 0; ivar<nvars; ivar++){
313 rdcutsvalmine[ivar][ibin]=cutsMatrixD0toKpiStand[ibin][ivar];
317 RDHFD0toKpi->SetCuts(nvars,nptbins,rdcutsvalmine);
319 Int_t nvarsforopt=RDHFD0toKpi->GetNVarsForOpt();
320 Int_t dim=2; //set this!!
322 boolforopt=new Bool_t[nvars];
324 cout<<"Number of variables for optimization has probably changed, check and edit accordingly"<<endl;
327 if(dim==nvarsforopt){
328 boolforopt=RDHFD0toKpi->GetVarsForOpt();
331 names=new TString[nvars];
334 names=RDHFD0toKpi->GetVarNames();
335 for(Int_t i=0;i<nvars;i++){
336 cout<<names[i]<<" for opt? (y/n)"<<endl;
342 else boolforopt[i]=kFALSE;
344 if (checktrue!=dim) {
345 cout<<"Error! You set "<<checktrue<<" kTRUE instead of "<<dim<<endl;
348 RDHFD0toKpi->SetVarsForOpt(dim,boolforopt);
353 Float_t tighterval[dim][nptbins];
357 //costhetapoint <-this
360 //number of steps for each variable is 4 now (set in the AddTask)
362 // tighterval[0][0]=0.01;
363 // tighterval[1][0]=0.8;
364 tighterval[0][0]=-0.0006;
365 tighterval[1][0]=0.95;
367 // tighterval[0][1]=0.01;
368 // tighterval[1][1]=0.8;
369 tighterval[0][1]=-0.0006;
370 tighterval[1][1]=0.95;
372 // tighterval[0][2]=0.01;
373 // tighterval[1][2]=0.8;
374 tighterval[0][2]=-0.0006;
375 tighterval[1][2]=0.95;
377 // tighterval[0][3]=0.01;
378 // tighterval[1][3]=0.8;
379 tighterval[0][3]=-0.0006;
380 tighterval[1][3]=0.95;
382 // tighterval[0][4]=0.01;
383 // tighterval[1][4]=0.8;
384 tighterval[0][4]=-0.0006;
385 tighterval[1][4]=0.95;
387 // tighterval[0][5]=0.01;
388 // tighterval[1][5]=0.8;
389 tighterval[0][5]=-0.0006;
390 tighterval[1][5]=0.95;
392 // tighterval[0][6]=0.01;
393 // tighterval[1][6]=0.8;
394 tighterval[0][6]=-0.0006;
395 tighterval[1][6]=0.95;
397 // tighterval[0][6]=0.01;
398 // tighterval[1][6]=0.8;
399 tighterval[0][7]=-0.0006;
400 tighterval[1][7]=0.95;
402 // tighterval[0][6]=0.01;
403 // tighterval[1][6]=0.8;
404 tighterval[0][8]=-0.0006;
405 tighterval[1][8]=0.95;
407 // tighterval[0][6]=0.01;
408 // tighterval[1][6]=0.8;
409 tighterval[0][9]=-0.0006;
410 tighterval[1][9]=0.95;
412 // tighterval[0][6]=0.01;
413 // tighterval[1][6]=0.8;
414 tighterval[0][10]=-0.0006;
415 tighterval[1][10]=0.95;
419 Int_t arrdim=dim*nptbins;
420 cout<<"Will save "<<arrdim<<" TParameter<float>"<<endl;
421 TClonesArray max("TParameter<float>",arrdim);
422 for(Int_t ival=0;ival<dim;ival++){
423 for(Int_t jpt=0;jpt<nptbins;jpt++){
424 name=Form("par%dptbin%d",ival,jpt);
425 cout<<"Setting "<<name.Data()<<" to "<<tighterval[ival][jpt]<<endl;
426 new(max[jpt*dim+ival])TParameter<float>(name.Data(),tighterval[ival][jpt]);
429 cout<<"Looser cuts are: "<<endl;
430 RDHFD0toKpi->PrintAll();
432 Bool_t flagPID=kTRUE;
433 RDHFD0toKpi->SetUsePID(flagPID);
434 printf("Use PID? %s\n",flagPID ? "yes" : "no");
437 AliAODPidHF* pidObj=new AliAODPidHF();
438 //pidObj->SetName("pid4D0");
441 Double_t plims[nlims]={0.6,0.8}; //TPC limits in momentum [GeV/c]
442 Bool_t compat=kTRUE; //effective only for this mode
444 Double_t sigmas[5]={2.,1.,0.,3.,0.}; //to be checked and to be modified with new implementation of setters by Rossella
445 pidObj->SetAsym(asym);// if you want to use the asymmetric bands in TPC
446 pidObj->SetMatch(mode);
447 pidObj->SetPLimit(plims,nlims);
448 pidObj->SetSigma(sigmas);
449 pidObj->SetCompat(compat);
450 pidObj->SetTPC(kTRUE);
451 pidObj->SetTOF(kTRUE);
452 RDHFD0toKpi->SetPidHF(pidObj);
456 RDHFD0toKpi->SetUseDefaultPID(kFALSE); //to use the AliAODPidHF
458 TFile* fout=new TFile("cuts4SignifMaxim.root","recreate"); //set this!!
460 RDHFD0toKpi->Write();