3 #include <AliRDHFCutsLctopKpi.h>
4 #include <AliAODPidHF.h>
5 #include <TClonesArray.h>
6 #include <TParameter.h>
10 //Set hard coded commentet with //set this!!
11 // root[] .L makeInput...C++
12 // root[] makeInputAliAnalysisTaskSE...()
13 //similar macros for the other D mesons
15 //Author: Rosa Romita, r.romita@gsi.de
18 //macro to make a .root file which contains an AliRDHFCutsLctopKpi for AliAnalysisTaskSELambdac task
20 void makeInputAliAnalysisTaskSELctopKpi(){
22 AliRDHFCutsLctopKpi* RDHFLctopKpiProd=new AliRDHFCutsLctopKpi();
23 RDHFLctopKpiProd->SetName("LctopKpiProdCuts");
24 RDHFLctopKpiProd->SetTitle("Production cuts for Lc analysis");
26 AliRDHFCutsLctopKpi* RDHFLctopKpiAn=new AliRDHFCutsLctopKpi();
27 RDHFLctopKpiAn->SetName("LctopKpiAnalysisCuts");
28 RDHFLctopKpiAn->SetTitle("Analysis cuts for Lc analysis");
30 AliESDtrackCuts* esdTrackCuts=new AliESDtrackCuts();
31 esdTrackCuts->SetRequireSigmaToVertex(kFALSE);
33 esdTrackCuts->SetRequireTPCRefit(kTRUE);
34 esdTrackCuts->SetRequireITSRefit(kTRUE);
35 esdTrackCuts->SetMinNClustersITS(4); // default is 5
36 esdTrackCuts->SetMinNClustersTPC(70);
37 esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,
38 AliESDtrackCuts::kAny);
39 // default is kBoth, otherwise kAny
40 esdTrackCuts->SetMinDCAToVertexXY(0.);
41 esdTrackCuts->SetPtRange(0.3,1.e10);
44 RDHFLctopKpiProd->AddTrackCuts(esdTrackCuts);
45 RDHFLctopKpiAn->AddTrackCuts(esdTrackCuts);
49 const Int_t nptbins=4;
51 ptbins=new Float_t[nptbins+1];
59 Float_t** prodcutsval;
60 prodcutsval=new Float_t*[nvars];
61 for(Int_t iv=0;iv<nvars;iv++){
62 prodcutsval[iv]=new Float_t[nptbins];
68 // d0K [cm] lower limit!
69 // d0Pi [cm] lower limit!
73 // pM=Max{pT1,pT2,pT3} (GeV/c)
77 for(Int_t ipt=0;ipt<nptbins;ipt++){
78 prodcutsval[0][ipt]=0.18;
79 prodcutsval[1][ipt]=0.4;
80 prodcutsval[2][ipt]=0.5;
81 prodcutsval[3][ipt]=0.;
82 prodcutsval[4][ipt]=0.;
83 prodcutsval[5][ipt]=0.01;
84 prodcutsval[6][ipt]=0.06;
85 prodcutsval[7][ipt]=0.005;
86 prodcutsval[8][ipt]=0.7;
87 prodcutsval[9][ipt]=0.;
88 prodcutsval[10][ipt]=0.;
89 prodcutsval[11][ipt]=0.05;
90 prodcutsval[12][ipt]=0.4;
93 RDHFLctopKpiProd->SetPtBins(nptbins+1,ptbins);
94 RDHFLctopKpiProd->SetCuts(nvars,nptbins,prodcutsval);
97 anacutsval=new Float_t*[nvars];
98 for(Int_t ic=0;ic<nvars;ic++){anacutsval[ic]=new Float_t[nptbins];}
99 for(Int_t ipt2=0;ipt2<nptbins;ipt2++){
100 anacutsval[0][ipt2]=0.18;
101 anacutsval[1][ipt2]=0.4;
102 anacutsval[2][ipt2]=0.5;
103 anacutsval[3][ipt2]=0.;
104 anacutsval[4][ipt2]=0.;
105 anacutsval[5][ipt2]=0.01;
106 anacutsval[6][ipt2]=0.06;
107 anacutsval[7][ipt2]=0.005;
108 anacutsval[8][ipt2]=0.7;
109 anacutsval[9][ipt2]=0.;
110 anacutsval[10][ipt2]=0.;
111 anacutsval[11][ipt2]=0.05;
112 anacutsval[12][ipt2]=0.4;
116 anacutsval[1][0]=0.5;
117 anacutsval[1][1]=0.85;
118 anacutsval[1][2]=0.9;
119 anacutsval[1][3]=0.4;
121 anacutsval[2][0]=0.5;
122 anacutsval[2][1]=0.6;
123 anacutsval[2][2]=0.9;
124 anacutsval[2][3]=0.9;
127 anacutsval[12][0]=0.475;
128 anacutsval[12][1]=0.75;
129 anacutsval[12][2]=0.75;
130 anacutsval[12][3]=0.7;
132 anacutsval[5][0]=0.02;
133 anacutsval[5][1]=0.025;
134 anacutsval[5][2]=0.02;
135 anacutsval[5][3]=0.01;
137 anacutsval[7][0]=0.00625;
138 anacutsval[7][1]=0.0125;
139 anacutsval[7][2]=0.005;
140 anacutsval[7][3]=0.007;
142 anacutsval[9][0]=0.5;
143 anacutsval[9][1]=0.2;
144 anacutsval[9][2]=0.6;
147 anacutsval[10][0]=0.00125;
149 RDHFLctopKpiAn->SetPtBins(nptbins+1,ptbins);
150 RDHFLctopKpiAn->SetCuts(nvars,nptbins,anacutsval);
152 // RDHFLc->SetRecoKF(); //set this if you want to recompute the secondary vertex with the KF package
154 //1. kaon: default one
155 AliAODPidHF* pidObjK=new AliAODPidHF();
156 Double_t sigmasK[5]={3.,1.,1.,3.,2.};
157 pidObjK->SetSigma(sigmasK);
158 pidObjK->SetAsym(kTRUE);
159 pidObjK->SetMatch(1);
160 pidObjK->SetTPC(kTRUE);
161 pidObjK->SetTOF(kTRUE);
162 pidObjK->SetITS(kTRUE);
163 Double_t plimK[2]={0.5,0.8};
164 pidObjK->SetPLimit(plimK,2);
165 pidObjK->SetTOFdecide(kTRUE);
167 RDHFLctopKpiProd->SetPidHF(pidObjK);
168 RDHFLctopKpiAn->SetPidHF(pidObjK);
171 AliAODPidHF* pidObjpi=new AliAODPidHF();
172 pidObjpi->SetTPC(kTRUE);
173 Double_t sigmaspi[5]={3.,0.,0.,0.,0.};
174 pidObjpi->SetSigma(sigmaspi);
175 // pidObjpi->SetTOFdecide(kTRUE);
177 RDHFLctopKpiProd->SetPidpion(pidObjpi);
178 RDHFLctopKpiAn->SetPidpion(pidObjpi);
181 AliAODPidHF* pidObjp=new AliAODPidHF();
182 Double_t sigmasp[5]={3.,1.,1.,3.,2.};
183 pidObjp->SetSigma(sigmasp);
184 pidObjp->SetAsym(kTRUE);
185 pidObjp->SetMatch(1);
186 pidObjp->SetTPC(kTRUE);
187 pidObjp->SetTOF(kTRUE);
188 pidObjp->SetITS(kTRUE);
189 Double_t plimp[2]={1.,2.};
190 pidObjp->SetPLimit(plimp,2);
191 pidObjp->SetTOFdecide(kTRUE);
193 RDHFLctopKpiProd->SetPidprot(pidObjp);
194 RDHFLctopKpiAn->SetPidprot(pidObjp);
196 Bool_t pidflag=kTRUE;
197 RDHFLctopKpiAn->SetUsePID(pidflag);
198 RDHFLctopKpiProd->SetUsePID(pidflag);
199 if(pidflag) cout<<"PID is used"<<endl;
200 else cout<<"PID is not used"<<endl;
202 cout<<"This is the object I'm going to save:"<<endl;
203 RDHFLctopKpiProd->PrintAll();
204 RDHFLctopKpiAn->PrintAll();
205 TFile* fout=new TFile("cuts4LctopKpi.root","RECREATE");
207 RDHFLctopKpiProd->Write();
208 RDHFLctopKpiAn->Write();
214 delete RDHFLctopKpiProd;
215 delete RDHFLctopKpiAn;
220 //macro to make a .root file (for significance maximization) which contains an AliRDHFCutsLctopKpi with loose set of cuts and TParameter with the tighest value of these cuts
222 void makeInputAliAnalysisTaskSESignificanceMaximization(){
224 AliRDHFCutsLctopKpi* RDHFLctopKpi=new AliRDHFCutsLctopKpi();
225 RDHFLctopKpi->SetName("loosercuts");
226 RDHFLctopKpi->SetTitle("Cuts for significance maximization");
228 AliESDtrackCuts* esdTrackCuts=new AliESDtrackCuts();
229 esdTrackCuts->SetRequireSigmaToVertex(kFALSE);
231 esdTrackCuts->SetRequireTPCRefit(kTRUE);
232 esdTrackCuts->SetMinNClustersTPC(70);
233 esdTrackCuts->SetRequireITSRefit(kTRUE);
234 esdTrackCuts->SetMinNClustersITS(4);
236 esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kAny);
237 esdTrackCuts->SetMinDCAToVertexXY(0.);
238 esdTrackCuts->SetEtaRange(-0.8,0.8);
239 esdTrackCuts->SetPtRange(0.3,1.e10);
241 RDHFLctopKpi->AddTrackCuts(esdTrackCuts);
243 const Int_t nvars=13;
245 const Int_t nptbins=4; //change this when adding pt bins!
246 Float_t ptbins[nptbins+1];
253 RDHFLctopKpi->SetPtBins(nptbins+1,ptbins);
255 Float_t** rdcutsvalmine;
256 rdcutsvalmine=new Float_t*[nvars];
257 for(Int_t iv=0;iv<nvars;iv++){
258 rdcutsvalmine[iv]=new Float_t[nptbins];
261 //setting my cut values
265 // d0K [cm] lower limit!
266 // d0Pi [cm] lower limit!
269 // dist prim-sec (cm)
270 // pM=Max{pT1,pT2,pT3} (GeV/c)
275 Float_t cutsMatrixLctopKpiStand[nptbins][nvars]=
276 {{0.18,0.4,0.5,0.,0.,0.01,0.06,0.005,0.7,0.,0.,0.05,0.4},
277 {0.18,0.4,0.5,0.,0.,0.01,0.06,0.005,0.7,0.,0.,0.05,0.4},
278 {0.18,0.4,0.5,0.,0.,0.01,0.06,0.005,0.7,0.,0.,0.05,0.4},
279 {0.18,0.4,0.5,0.,0.,0.01,0.06,0.005,0.7,0.,0.,0.05,0.4}};
281 //CREATE TRANSPOSE MATRIX...REVERSE INDICES as required by AliRDHFCuts
282 Float_t **cutsMatrixTransposeStand=new Float_t*[nvars];
283 for(Int_t iv=0;iv<nvars;iv++)cutsMatrixTransposeStand[iv]=new Float_t[nptbins];
284 for (Int_t ibin=0;ibin<nptbins;ibin++){
285 for (Int_t ivar = 0; ivar<nvars; ivar++){
286 cutsMatrixTransposeStand[ivar][ibin]=cutsMatrixLctopKpiStand[ibin][ivar];
289 RDHFLctopKpi->SetCuts(nvars,nptbins,cutsMatrixTransposeStand);
292 Int_t nvarsforopt=RDHFLctopKpi->GetNVarsForOpt();
293 Int_t dim=4; //set this!!
295 boolforopt=new Bool_t[nvars];
297 cout<<"Number of variables for optimization has probably changed, check and edit accordingly"<<endl;
300 if(dim==nvarsforopt){
301 boolforopt=RDHFLctopKpi->GetVarsForOpt();
304 names=new TString[nvars];
307 names=RDHFLctopKpi->GetVarNames();
308 for(Int_t i=0;i<nvars;i++){
309 cout<<names[i]<<" for opt? (y/n)"<<endl;
315 else boolforopt[i]=kFALSE;
317 if (checktrue!=dim) {
318 cout<<"Error! You set "<<checktrue<<" kTRUE instead of "<<dim<<endl;
321 RDHFLctopKpi->SetVarsForOpt(dim,boolforopt);
326 Float_t tighterval[dim][nptbins];
327 // 5 dist12 (cm) <---
328 // 7 dist prim-sec (cm) <---
329 // 9 cosThetaPoint <---
330 // 10 Sum d0^2 (cm^2) <---
332 // {0.18,0.4,0.5,0.,0.,0.01 <--- ,0.06,0.005 <--- ,0.7,0. <--- ,0. <--- ,0.05 }
334 //number of steps for each variable is set in the AddTask arguments (default=8)
336 for(Int_t ipt=0;ipt<nptbins;ipt++){
337 tighterval[0][ipt]=0.03;
338 tighterval[1][ipt]=0.02;
339 tighterval[2][ipt]=1.;
340 tighterval[3][ipt]=0.01;
346 Int_t arrdim=dim*nptbins;
347 cout<<"Will save "<<arrdim<<" TParameter<float>"<<endl;
348 TClonesArray max("TParameter<float>",arrdim);
349 for(Int_t ival=0;ival<dim;ival++){
350 for(Int_t jpt=0;jpt<nptbins;jpt++){
351 name=Form("par%dptbin%d",ival,jpt);
352 cout<<"Setting "<<name.Data()<<" to "<<tighterval[ival][jpt]<<endl;
353 new(max[jpt*dim+ival])TParameter<float>(name.Data(),tighterval[ival][jpt]);
357 Bool_t flagPID=kFALSE;
358 RDHFLctopKpi->SetUsePID(flagPID);
360 RDHFLctopKpi->PrintAll();
361 printf("Use PID? %s\n",flagPID ? "yes" : "no");
364 //1. kaon: default one
365 AliAODPidHF* pidObjK=new AliAODPidHF();
366 Double_t sigmasK[5]={3.,1.,1.,3.,2.};
367 pidObjK->SetSigma(sigmasK);
368 pidObjK->SetAsym(kTRUE);
369 pidObjK->SetMatch(1);
370 pidObjK->SetTPC(kTRUE);
371 pidObjK->SetTOF(kTRUE);
372 pidObjK->SetITS(kTRUE);
373 Double_t plimK[2]={0.5,0.8};
374 pidObjK->SetPLimit(plimK,2);
375 pidObjK->SetTOFdecide(kTRUE);
377 RDHFLctopKpi->SetPidHF(pidObjK);
380 AliAODPidHF* pidObjpi=new AliAODPidHF();
381 pidObjpi->SetTPC(kTRUE);
382 Double_t sigmaspi[5]={3.,0.,0.,0.,0.};
383 pidObjpi->SetSigma(sigmaspi);
384 pidObjpi->SetTOFdecide(kTRUE);
386 RDHFLctopKpi->SetPidpion(pidObjpi);
389 AliAODPidHF* pidObjp=new AliAODPidHF();
390 Double_t sigmasp[5]={3.,1.,1.,3.,2.};
391 pidObjp->SetSigma(sigmasp);
392 pidObjp->SetAsym(kTRUE);
393 pidObjp->SetMatch(1);
394 pidObjp->SetTPC(kTRUE);
395 pidObjp->SetTOF(kTRUE);
396 pidObjp->SetITS(kTRUE);
397 Double_t plimp[2]={1.,2.};
398 pidObjp->SetPLimit(plimp,2);
399 pidObjp->SetTOFdecide(kTRUE);
401 RDHFLctopKpi->SetPidprot(pidObjp);
403 //activate pileup rejection (for pp)
404 //RDHFLctopKpi->SetOptPileup(AliRDHFCuts::kRejectPileupEvent);
406 //Do not recalculate the vertex
407 RDHFLctopKpi->SetRemoveDaughtersFromPrim(kFALSE); //activate for pp
410 //centrality selection (Pb-Pb)
411 Float_t minc=20,maxc=80;
412 RDHFLctopKpi->SetMinCentrality(minc);
413 RDHFLctopKpi->SetMaxCentrality(maxc);
414 cent=Form("%.0f%.0f",minc,maxc);
415 // RDHFLctopKpi->SetUseCentrality(AliRDHFCuts::kCentV0M); //kCentOff,kCentV0M,kCentTRK,kCentTKL,kCentCL1,kCentInvalid
416 RDHFLctopKpi->SetUseCentrality(AliRDHFCuts::kCentOff); //kCentOff,kCentV0M,kCentTRK,kCentTKL,kCentCL1,kCentInvalid
419 // RDHFLctopKpi->SetFixRefs();
421 TFile* fout=new TFile(Form("cuts4SignifMaxim%s%s%sRecVtx%sPileupRej.root", RDHFLctopKpi->GetUseCentrality()==0 ? "pp" : "PbPb",cent.Data(),RDHFLctopKpi->GetIsPrimaryWithoutDaughters() ? "" : "No",RDHFLctopKpi->GetOptPileUp() ? "" : "No"),"recreate"); //set this!!
424 RDHFLctopKpi->Write();