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->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);
41 RDHFD0toKpi->AddTrackCuts(esdTrackCuts);
45 const Int_t nptbins=13;
47 ptbins=new Float_t[nptbins+1];
63 RDHFD0toKpi->SetPtBins(nptbins+1,ptbins);
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];
72 //setting my cut values
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]);
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
89 //setting my cut values
91 for(Int_t ic=0;ic<nvars;ic++) rdcutsvalmine[ic][0]=arrcuts[ic];
94 for(Int_t ic=0;ic<nvars;ic++) rdcutsvalmine[ic][1]=arrcuts[ic];
97 arrcuts[1]=0.025; arrcuts[7]=-0.0003;
98 for(Int_t ic=0;ic<nvars;ic++) rdcutsvalmine[ic][2]=arrcuts[ic];
103 for(Int_t ic=0;ic<nvars;ic++) rdcutsvalmine[ic][3]=arrcuts[ic];
106 arrcuts[7]=-0.00015; arrcuts[8]=0.85;
107 for(Int_t ic=0;ic<nvars;ic++) rdcutsvalmine[ic][4]=arrcuts[ic];
110 for(Int_t ic=0;ic<nvars;ic++) rdcutsvalmine[ic][5]=arrcuts[ic];
113 arrcuts[7]=-0.0001; arrcuts[8]=0.85;
114 for(Int_t ic=0;ic<nvars;ic++) rdcutsvalmine[ic][6]=arrcuts[ic];
118 for(Int_t ic=0;ic<nvars;ic++) rdcutsvalmine[ic][7]=arrcuts[ic];
122 for(Int_t ic=0;ic<nvars;ic++) rdcutsvalmine[ic][8]=arrcuts[ic];
126 for(Int_t ic=0;ic<nvars;ic++) rdcutsvalmine[ic][9]=arrcuts[ic];
130 for(Int_t ic=0;ic<nvars;ic++) rdcutsvalmine[ic][10]=arrcuts[ic];
133 for(Int_t ic=0;ic<nvars;ic++) rdcutsvalmine[ic][11]=arrcuts[ic];
136 for(Int_t ic=0;ic<nvars;ic++) rdcutsvalmine[ic][12]=arrcuts[ic];
138 RDHFD0toKpi->SetCuts(nvars,nptbins,rdcutsvalmine);
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;
146 AliAODPidHF* pidObj=new AliAODPidHF();
147 //pidObj->SetName("pid4D0");
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
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);
163 RDHFD0toKpi->SetUseDefaultPID(kFALSE); //to use the AliAODPidHF
165 //activate pileup rejection (for pp)
166 //RDHFD0toKpi->SetOptPileup(AliRDHFCuts::kRejectPileupEvent);
168 //Do not recalculate the vertex
169 RDHFD0toKpi->SetRemoveDaughtersFromPrim(kFALSE); //activate for pp
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
180 //RDHFD0toKpi->SetFixRefs();
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!!
187 RDHFD0toKpi->Write();
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
194 void makeInputAliAnalysisTaskSESignificanceMaximization(){
196 AliRDHFCutsD0toKpi* RDHFD0toKpi=new AliRDHFCutsD0toKpi();
197 RDHFD0toKpi->SetName("loosercuts");
198 RDHFD0toKpi->SetTitle("Cuts for significance maximization");
200 AliESDtrackCuts* esdTrackCuts=new AliESDtrackCuts();
201 esdTrackCuts->SetRequireSigmaToVertex(kFALSE);
203 esdTrackCuts->SetRequireTPCRefit(kTRUE);
204 esdTrackCuts->SetRequireITSRefit(kTRUE);
205 //esdTrackCuts->SetMinNClustersITS(4);
206 //esdTrackCuts->SetMinNClustersTPC(120);
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);
213 RDHFD0toKpi->AddTrackCuts(esdTrackCuts);
215 const Int_t nvars=11;
217 const Int_t nptbins=14; //change this when adding pt bins!
218 Float_t ptbins[nptbins+1];
235 RDHFD0toKpi->SetPtBins(nptbins+1,ptbins);
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];
243 //setting my cut values
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]);
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 */
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];
281 RDHFD0toKpi->SetCuts(nvars,nptbins,cutsMatrixTransposeStand);
284 Bool_t stdvaropt=kFALSE;
285 Int_t dim=4; //set this!!
287 boolforopt=new Bool_t[nvars];
289 boolforopt=RDHFD0toKpi->GetVarsForOpt();
292 names=new TString[nvars];
295 names=RDHFD0toKpi->GetVarNames();
296 for(Int_t i=0;i<nvars;i++){
297 cout<<names[i]<<" for opt? (y/n)"<<endl;
303 else boolforopt[i]=kFALSE;
305 if (checktrue!=dim) {
306 cout<<"Error! You set "<<checktrue<<" kTRUE instead of "<<dim<<endl;
309 RDHFD0toKpi->SetVarsForOpt(dim,boolforopt);
313 Float_t tighterval[dim][nptbins];
317 //costhetapoint <-this
318 //cosThetaPointXY <-this
319 //NormDecayLength <-this
321 //number of steps for each variable is set in the AddTask arguments (default=8)
324 tighterval[0][0]=-0.00065;
326 tighterval[2][0]=0.4;
330 tighterval[0][1]=-0.00065;
332 tighterval[2][1]=0.4;
336 tighterval[0][2]=-0.00065;
338 tighterval[2][2]=0.4;
342 tighterval[0][3]=-0.0006;
348 tighterval[0][4]=-0.00046;
354 tighterval[0][5]=-0.00045;
360 tighterval[0][6]=-0.00031;
366 tighterval[0][7]=-0.00021;
367 tighterval[1][7]=0.98;
372 tighterval[0][8]=-0.0001;
373 tighterval[1][8]=0.98;
378 tighterval[0][9]=-0.0001;
379 tighterval[1][9]=0.9;
384 tighterval[0][10]=-0.00005;
385 tighterval[1][10]=0.9;
386 tighterval[2][10]=1.;
387 tighterval[3][10]=6.;
390 tighterval[0][11]=-0.00005;
391 tighterval[1][11]=0.9;
392 tighterval[2][11]=1.;
393 tighterval[3][11]=6.;
396 tighterval[0][12]=-0.00005;
397 tighterval[1][12]=0.9;
398 tighterval[2][12]=1.;
399 tighterval[3][12]=6.;
402 tighterval[0][13]=-0.00005;
403 tighterval[1][13]=0.9;
404 tighterval[2][13]=1.;
405 tighterval[3][13]=6.;
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]);
420 Bool_t flagPID=kTRUE;
421 RDHFD0toKpi->SetUsePID(flagPID);
423 RDHFD0toKpi->PrintAll();
424 printf("Use PID? %s\n",flagPID ? "yes" : "no");
427 AliAODPidHF* pidObj=new AliAODPidHF();
428 //pidObj->SetName("pid4D0");
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
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);
444 RDHFD0toKpi->SetUseDefaultPID(kFALSE); //to use the AliAODPidHF
446 //activate pileup rejection (for pp)
447 //RDHFD0toKpi->SetOptPileup(AliRDHFCuts::kRejectPileupEvent);
449 //Do not recalculate the vertex
450 RDHFD0toKpi->SetRemoveDaughtersFromPrim(kFALSE); //activate for pp
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
461 RDHFD0toKpi->SetFixRefs();
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!!
466 RDHFD0toKpi->Write();