3 //#include <AliRDHFCutsDstoKKpi.h>
4 #include <TClonesArray.h>
5 #include <TParameter.h>
7 //macro to make a .root file which contains an AliRDHFCutsDstoKKpi with loose set of cuts (for significance maximization) and TParameter with the tighest value of these cuts
8 //Needed for AliAnalysisTaskSEDs, AliCFTaskVertexingHF3Prong, AliAnalysisTaskSESignificance
11 //Set hard coded commented with //set this!!
13 //.L makeTFile4CutsDstoKKpi.C
14 // makeInputAliAnalysisTaskSEDs()
15 // makeInputAliAnalysisTaskSESignificanceMaximization()
17 //similar macros for the other D mesons
19 //Author: Chiara Bianchin, cbianchi@pd.infn.it
20 // Giacomo Ortona, ortona@to.infn.it
21 // Renu Bala [Dplus Analysis and CF]
23 //Modified for Ds meson: G.M. Innocenti, innocent@to.infn.it
25 void makeInputAliAnalysisTaskSEDsPP(){
27 // gSystem->SetIncludePath("-I. -I$ROOTSYS/include -I$ALICE_ROOT -I$ALICE_ROOT/include -I$ALICE_ROOT/ITS -I$ALICE_ROOT/TPC -I$ALICE_ROOT/CONTAINERS -I$ALICE_ROOT/STEER -I$ALICE_ROOT/TRD -I$ALICE_ROOT/macros -I$ALICE_ROOT/ANALYSIS -I$ALICE_ROOT/PWG3 -I$ALICE_ROOT/PWG3/vertexingHF -I$ALICE_ROOT/PWG3/vertexingH/macros -g");
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 const Int_t nptbins=4;
46 ptbins=new Float_t[nptbins+1];
57 anacutsval=new Float_t*[nvars];
59 for(Int_t ic=0;ic<nvars;ic++){anacutsval[ic]=new Float_t[nptbins];}
60 for(Int_t ipt=0;ipt<nptbins;ipt++){
62 anacutsval[0][ipt]=0.35;
63 anacutsval[1][ipt]=0.3;
64 anacutsval[2][ipt]=0.3;
65 anacutsval[3][ipt]=0.;
66 anacutsval[4][ipt]=0.;
67 anacutsval[5][ipt]=0.005;
68 anacutsval[6][ipt]=0.06;
69 anacutsval[7][ipt]=0.0;
70 anacutsval[8][ipt]=0.;
71 anacutsval[9][ipt]=0.9;
72 anacutsval[10][ipt]=0.;
73 anacutsval[11][ipt]=1000.0;
74 anacutsval[12][ipt]=0.015;
75 anacutsval[13][ipt]=0.1;
76 anacutsval[14][ipt]=0.;
77 anacutsval[15][ipt]=1.;
78 anacutsval[16][ipt]=0.;
79 anacutsval[17][ipt]=0.;
80 anacutsval[18][ipt]=0.;
81 anacutsval[19][ipt]=-1.;
91 Cut list rejection condition
92 0 "inv. mass [GeV]", invmassDS-massDspdg>fCutsRD
93 1 "pTK [GeV/c]", pTK<fCutsRd
94 2 "pTPi [GeV/c]", pTPi<fCutsRd
95 3 "d0K [cm]", d0K<fCutsRd
96 4 "d0Pi [cm]", d0Pi<fCutsRd
97 5 "dist12 [cm]", dist12<fCutsRd
98 6 "sigmavert [cm]", sigmavert>fCutsRd
99 7 "decLen [cm]", decLen<fCutsRD
100 8 "ptMax [GeV/c]", ptMax<fCutsRD
101 9 "cosThetaPoint", CosThetaPoint<fCutsRD
102 10 "Sum d0^2 (cm^2)", sumd0<fCutsRD
103 11 "dca [cm]", dca(i)>fCutsRD
104 12 "inv. mass (Mphi-MKK) [GeV]", invmass-pdg>fCutsRD
105 13 "inv. mass (MKo*-MKpi) [GeV]"}; invmass-pdg>fCutsRD
106 14 "Abs(CosineKpiPhiRFrame)^3",
107 15 "CosPiDsLabFrame"};
111 AliRDHFCutsDstoKKpi* analysiscuts=new AliRDHFCutsDstoKKpi();
112 analysiscuts->SetName("AnalysisCuts");
113 analysiscuts->SetTitle("Cuts for Ds Analysis and CF");
114 analysiscuts->SetPtBins(nptbins+1,ptbins);
115 analysiscuts->SetCuts(nvars,nptbins,anacutsval);
116 analysiscuts->AddTrackCuts(esdTrackCuts);
117 analysiscuts->SetUsePID(kTRUE);
118 analysiscuts->SetPidOption(1);
119 analysiscuts->SetOptPileup(kTRUE);
120 analysiscuts->SetRemoveDaughtersFromPrim(kTRUE);
122 // To be set only in case of strong pid
123 //analysiscuts->SetMaxPtStrongPid(9999.);
124 //analysiscuts->SetMaxPStrongPidK(1.5);
125 //analysiscuts->SetMaxPStrongPidpi(1.5);
126 cout<<"This is the odject I'm going to save:"<<nptbins<<endl;
128 analysiscuts->PrintAll();
129 TFile* fout=new TFile("DstoKKpiCuts.root","recreate");
131 analysiscuts->Write();
138 void makeInputAliAnalysisTaskSEDsPbPb(){
140 // gSystem->SetIncludePath("-I. -I$ROOTSYS/include -I$ALICE_ROOT -I$ALICE_ROOT/include -I$ALICE_ROOT/ITS -I$ALICE_ROOT/TPC -I$ALICE_ROOT/CONTAINERS -I$ALICE_ROOT/STEER -I$ALICE_ROOT/TRD -I$ALICE_ROOT/macros -I$ALICE_ROOT/ANALYSIS -I$ALICE_ROOT/PWG3 -I$ALICE_ROOT/PWG3/vertexingHF -I$ALICE_ROOT/PWG3/vertexingH/macros -g");
143 AliESDtrackCuts* esdTrackCuts=new AliESDtrackCuts();
144 esdTrackCuts->SetRequireSigmaToVertex(kFALSE);
146 esdTrackCuts->SetRequireTPCRefit(kTRUE);
147 esdTrackCuts->SetRequireITSRefit(kTRUE);
148 //esdTrackCuts->SetMinNClustersITS(4); // default is 5
149 esdTrackCuts->SetMinNClustersTPC(70);
150 esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,
151 AliESDtrackCuts::kAny);
152 // default is kBoth, otherwise kAny
153 esdTrackCuts->SetMinDCAToVertexXY(0.);
154 esdTrackCuts->SetPtRange(0.7,1.e10);
157 const Int_t nptbins=4;
159 ptbins=new Float_t[nptbins+1];
167 const Int_t nvars=20;
169 Float_t** anacutsval;
170 anacutsval=new Float_t*[nvars];
172 for(Int_t ic=0;ic<nvars;ic++){anacutsval[ic]=new Float_t[nptbins];}
173 for(Int_t ipt=0;ipt<nptbins;ipt++){
175 anacutsval[0][ipt]=0.35;
176 anacutsval[1][ipt]=0.3;
177 anacutsval[2][ipt]=0.3;
178 anacutsval[3][ipt]=0.;
179 anacutsval[4][ipt]=0.;
180 anacutsval[5][ipt]=0.005;
181 anacutsval[6][ipt]=0.06;
182 anacutsval[7][ipt]=0.0;
183 anacutsval[8][ipt]=0.;
184 anacutsval[9][ipt]=0.7;
185 anacutsval[10][ipt]=0.;
186 anacutsval[11][ipt]=1000.0;
187 anacutsval[12][ipt]=0.1;
188 anacutsval[13][ipt]=0.1;
189 anacutsval[14][ipt]=0.;
190 anacutsval[15][ipt]=1.;
191 anacutsval[16][ipt]=0.;
192 anacutsval[17][ipt]=0.;
193 anacutsval[18][ipt]=0.;
194 anacutsval[19][ipt]=-1.;
203 Cut list rejection condition
204 0 "inv. mass [GeV]", invmassDS-massDspdg>fCutsRD
205 1 "pTK [GeV/c]", pTK<fCutsRd
206 2 "pTPi [GeV/c]", pTPi<fCutsRd
207 3 "d0K [cm]", d0K<fCutsRd
208 4 "d0Pi [cm]", d0Pi<fCutsRd
209 5 "dist12 [cm]", dist12<fCutsRd
210 6 "sigmavert [cm]", sigmavert>fCutsRd
211 7 "decLen [cm]", decLen<fCutsRD
212 8 "ptMax [GeV/c]", ptMax<fCutsRD
213 9 "cosThetaPoint", CosThetaPoint<fCutsRD
214 10 "Sum d0^2 (cm^2)", sumd0<fCutsRD
215 11 "dca [cm]", dca(i)>fCutsRD
216 12 "inv. mass (Mphi-MKK) [GeV]", invmass-pdg>fCutsRD
217 13 "inv. mass (MKo*-MKpi) [GeV]"}; invmass-pdg>fCutsRD
218 14 "Abs(CosineKpiPhiRFrame)^3",
219 15 "CosPiDsLabFrame"};
222 AliRDHFCutsDstoKKpi* analysiscuts=new AliRDHFCutsDstoKKpi();
223 analysiscuts->SetName("AnalysisCuts");
224 analysiscuts->SetTitle("Cuts for Ds Analysis and CF");
225 analysiscuts->SetPtBins(nptbins+1,ptbins);
226 analysiscuts->SetCuts(nvars,nptbins,anacutsval);
227 analysiscuts->AddTrackCuts(esdTrackCuts);
233 analysiscuts->SetUsePID(kTRUE);
234 analysiscuts->SetPidOption(0);
235 //analysiscuts->SetUseImpParProdCorrCut(kFALSE);
236 analysiscuts->SetOptPileup(kFALSE);
237 //analysiscuts->SetUseAOD049(kTRUE);
238 analysiscuts->SetMinCentrality(mincen);
239 analysiscuts->SetMaxCentrality(maxcen);
240 cent=Form("%.0f%.0f",mincen,maxcen);
241 analysiscuts->SetUseCentrality(AliRDHFCuts::kCentV0M); //kCentOff,kCentV0M,kCentTRK,kCentTKL,kCentCL1,kCentInvalid
242 analysiscuts->SetMinPtCandidate(3.);
243 analysiscuts->SetMaxPtCandidate(1000.);
244 analysiscuts->SetRemoveDaughtersFromPrim(kFALSE);
245 // To be set only in case of strong pid
246 //analysiscuts->SetMaxPtStrongPid(9999.);
247 //analysiscuts->SetMaxPStrongPidK(1.5);
248 //analysiscuts->SetMaxPStrongPidpi(1.5);
250 cout<<"This is the odject I'm going to save:"<<nptbins<<endl;
252 analysiscuts->PrintAll();
253 TFile* fout=new TFile("DstoKKpiCuts.root","recreate");
255 analysiscuts->Write();
262 void makeInputAliAnalysisTaskSESignificanceMaximization(){
264 AliESDtrackCuts* esdTrackCuts=new AliESDtrackCuts();
265 esdTrackCuts->SetRequireSigmaToVertex(kFALSE);
267 esdTrackCuts->SetRequireTPCRefit(kTRUE);
268 esdTrackCuts->SetRequireITSRefit(kTRUE);
269 //esdTrackCuts->SetMinNClustersITS(4); // default is 5
270 esdTrackCuts->SetMinNClustersTPC(70);
271 esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,
272 AliESDtrackCuts::kAny);
273 // default is kBoth, otherwise kAny
274 esdTrackCuts->SetMinDCAToVertexXY(0.);
275 esdTrackCuts->SetPtRange(0.3,1.e10);
279 AliRDHFCutsDstoKKpi* RDHFDstoKKpi=new AliRDHFCutsDstoKKpi();
280 RDHFDstoKKpi->SetName("loosercuts");
281 RDHFDstoKKpi->SetTitle("Cuts for significance maximization");
282 RDHFDstoKKpi->AddTrackCuts(esdTrackCuts);
283 RDHFDstoKKpi->SetUsePID(kTRUE);
284 RDHFDstoKKpi->SetPidOption(1);
285 RDHFDstoKKpi->SetOptPileup(kTRUE);
286 RDHFDstoKKpi->SetRemoveDaughtersFromPrim(kTRUE);
288 const Int_t nvars=20;
290 const Int_t nptbins=4;
292 ptbins=new Float_t[nptbins+1];
299 RDHFDstoKKpi->SetPtBins(nptbins+1,ptbins);
301 //setting my cut values
303 Float_t** prodcutsval;
304 prodcutsval=new Float_t*[nvars];
305 for(Int_t ic=0;ic<nvars;ic++){prodcutsval[ic]=new Float_t[nptbins];}
306 for(Int_t ipt=0;ipt<nptbins;ipt++){
308 prodcutsval[0][ipt]=0.35;
309 prodcutsval[1][ipt]=0.3;
310 prodcutsval[2][ipt]=0.3;
311 prodcutsval[3][ipt]=0.;
312 prodcutsval[4][ipt]=0.;
313 prodcutsval[5][ipt]=0.005;
314 prodcutsval[6][ipt]=0.06;
315 prodcutsval[7][ipt]=0.0;
316 prodcutsval[8][ipt]=0.;
317 prodcutsval[9][ipt]=0.9;
318 prodcutsval[10][ipt]=0.;
319 prodcutsval[11][ipt]=1000.0;
320 prodcutsval[12][ipt]=0.015;
321 prodcutsval[13][ipt]=0.1;
322 prodcutsval[14][ipt]=0.;
323 prodcutsval[15][ipt]=1.;
324 prodcutsval[16][ipt]=0.;
325 prodcutsval[17][ipt]=0.;
326 prodcutsval[18][ipt]=0.;
327 prodcutsval[19][ipt]=-1.;
331 RDHFDstoKKpi->SetCuts(nvars,nptbins,prodcutsval);
333 Int_t nvarsforopt=RDHFDstoKKpi->GetNVarsForOpt();
334 //Int_t nvarsforopt=2;
335 const Int_t dim=4; //set this!!
337 boolforopt=new Bool_t[nvars];
339 cout<<"Number of variables for optimization has probably changed, check and edit accordingly"<<endl;
342 if(dim==nvarsforopt){
343 boolforopt=RDHFDstoKKpi->GetVarsForOpt();
346 names=new TString[nvars];
349 names=RDHFDstoKKpi->GetVarNames();
350 for(Int_t i=0;i<nvars;i++){
351 cout<<names[i]<<" for opt? (y/n)"<<endl;
357 else boolforopt[i]=kFALSE;
359 if (checktrue!=dim) {
360 cout<<"Error! You set "<<checktrue<<" kTRUE instead of "<<dim<<endl;
363 RDHFDstoKKpi->SetVarsForOpt(dim,boolforopt);
368 Float_t tighterval[dim][nptbins];
370 //number of steps for each variable is 4 now
374 Cut list rejection condition
376 0 "inv. mass [GeV]", invmassDS-massDspdg>fCutsRD
377 1 "pTK [GeV/c]", pTK<fCutsRd
378 2 "pTPi [GeV/c]", pTPi<fCutsRd
379 3 "d0K [cm]", d0K<fCutsRd
380 4 "d0Pi [cm]", d0Pi<fCutsRd
381 5 "dist12 [cm]", dist12<fCutsRd
382 6 "sigmavert [cm]", sigmavert>fCutsRd
383 7 "decLen [cm]", decLen<fCutsRD
384 8 "ptMax [GeV/c]", ptMax<fCutsRD
385 9 "cosThetaPoint", CosThetaPoint<fCutsRD
386 10 "Sum d0^2 (cm^2)", sumd0<fCutsRD
387 11 "dca [cm]", dca(i)>fCutsRD
388 12 "inv. mass (Mphi-MKK) [GeV]", invmass-pdg>fCutsRD
389 13 "inv. mass (MKo*-MKpi) [GeV]"}; invmass-pdg>fCutsRD
390 14 "Abs(CosineKpiPhiRFrame)^3",
391 15 "CosPiDsLabFrame"}
397 tighterval[0][0]=0.0;
398 tighterval[0][1]=0.0;
399 tighterval[0][2]=0.0;
400 tighterval[0][3]=0.0;
404 tighterval[1][0]=0.05;
405 tighterval[1][1]=0.05;
406 tighterval[1][2]=0.05;
407 tighterval[1][3]=0.05;
425 Int_t arrdim=dim*nptbins;
426 TClonesArray max("TParameter<float>",arrdim);
427 for (Int_t ipt=0;ipt<nptbins;ipt++){
428 for(Int_t ival=0;ival<dim;ival++){
429 name=Form("par%dptbin%d",ival,ipt);
430 new(max[ipt*dim+ival])TParameter<float>(name.Data(),tighterval[ival][ipt]);
434 TFile* fout=new TFile("cuts4SignifMaximDs.root","recreate"); //set this!!
436 RDHFDstoKKpi->Write();