3 #include <AliRDHFCutsD0toKpi.h>
4 #include <TClonesArray.h>
5 #include <TParameter.h>
6 #include "AliHFAssociatedTrackCuts.h"
9 //Set hard coded commentet with //set this!!
10 // root[] .L makeInputD0tasks.C++
11 // root[] makeInputAliAnalysisTaskSED0Correlations()
12 //similar macros for the other D mesons
14 //Author: Fabio Colamaria, fabio.colamaria@ba.infn.it
16 //macro to make a .root file which contains an AliRDHFCutsD0toKpi for AliAnalysisTaskSED0Mass task
18 void makeInputAliAnalysisTaskSED0Correlations(){
20 //____________________________________________________
24 AliRDHFCutsD0toKpi* RDHFD0Corr=new AliRDHFCutsD0toKpi();
25 RDHFD0Corr->SetName("D0toKpiCuts");
26 RDHFD0Corr->SetTitle("Cuts for D0 analysis");
28 RDHFD0Corr->SetMinVtxContr(1);
30 //Quality tracks for daughters
31 AliESDtrackCuts* esdTrackCuts=new AliESDtrackCuts();
32 esdTrackCuts->SetRequireSigmaToVertex(kFALSE);
33 esdTrackCuts->SetRequireTPCRefit(kTRUE);
34 esdTrackCuts->SetRequireITSRefit(kTRUE);
35 //esdTrackCuts->SetMinNClustersITS(4); // default is 5
36 //esdTrackCuts->SetMinNClustersTPC(120);
37 esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kAny); // default is kBoth, otherwise kAny
38 esdTrackCuts->SetMinDCAToVertexXY(0.);
39 esdTrackCuts->SetEtaRange(-0.8,0.8);
40 esdTrackCuts->SetPtRange(0.3,1.e10);
42 RDHFD0Corr->AddTrackCuts(esdTrackCuts);
44 //D0 selection topological cuts
45 const Int_t nptbins =14;
46 const Double_t ptmax = 9999.;
48 Float_t ptbins[nptbins+1];
65 RDHFD0Corr->SetGlobalIndex(nvars,nptbins);
66 RDHFD0Corr->SetPtBins(nptbins+1,ptbins);
68 Float_t cutsMatrixD0toKpiStand[nptbins][nvars]={{0.400,350.*1E-4,0.8,0.5,0.5,1000.*1E-4,1000.*1E-4,-5000.*1E-8,0.80,0.,0.},/* pt<0.5*/
69 {0.400,350.*1E-4,0.8,0.5,0.5,1000.*1E-4,1000.*1E-4,-5000.*1E-8,0.80,0.,0.},/* 0.5<pt<1*/
70 {0.400,300.*1E-4,0.8,0.4,0.4,1000.*1E-4,1000.*1E-4,-25000.*1E-8,0.80,0.,0.},/* 1<pt<2 */
71 {0.400,300.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-15000.*1E-8,0.85,0.,0.},/* 2<pt<3 */
72 {0.400,300.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-8000.*1E-8,0.85,0.,0.},/* 3<pt<4 */
73 {0.400,300.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-8000.*1E-8,0.85,0.,0.},/* 4<pt<5 */
74 {0.400,300.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-8000.*1E-8,0.85,0.,0.},/* 5<pt<6 */
75 {0.400,300.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-8000.*1E-8,0.85,0.,0.},/* 6<pt<7 */
76 {0.400,300.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-7000.*1E-8,0.85,0.,0.},/* 7<pt<8 */
77 {0.400,300.*1E-4,0.9,0.7,0.7,1000.*1E-4,1000.*1E-4,-5000.*1E-8,0.85,0.,0.},/* 8<pt<12 */
78 {0.400,300.*1E-4,1.0,0.7,0.7,1000.*1E-4,1000.*1E-4,10000.*1E-8,0.85,0.,0.},/* 12<pt<16 */
79 {0.400,300.*1E-4,1.0,0.7,0.7,1000.*1E-4,1000.*1E-4,999999.*1E-8,0.85,0.,0.},/* 16<pt<20 */
80 {0.400,300.*1E-4,1.0,0.7,0.7,1000.*1E-4,1000.*1E-4,999999.*1E-8,0.85,0.,0.},/* 20<pt<24 */
81 {0.400,300.*1E-4,1.0,0.7,0.7,1000.*1E-4,1000.*1E-4,999999.*1E-8,0.85,0.,0.}};/* pt>24 */
84 //CREATE TRANSPOSE MATRIX...REVERSE INDICES as required by AliRDHFCuts
85 Float_t **cutsMatrixTransposeStand=new Float_t*[nvars];
86 for(Int_t iv=0;iv<nvars;iv++)cutsMatrixTransposeStand[iv]=new Float_t[nptbins];
88 for (Int_t ibin=0;ibin<nptbins;ibin++){
89 for (Int_t ivar = 0; ivar<nvars; ivar++){
90 cutsMatrixTransposeStand[ivar][ibin]=cutsMatrixD0toKpiStand[ibin][ivar];
94 RDHFD0Corr->SetCuts(nvars,nptbins,cutsMatrixTransposeStand);
95 RDHFD0Corr->SetUseSpecialCuts(kTRUE);
96 RDHFD0Corr->SetRemoveDaughtersFromPrim(kTRUE);
98 for(Int_t iv=0;iv<nvars;iv++) delete [] cutsMatrixTransposeStand[iv];
99 delete [] cutsMatrixTransposeStand;
100 cutsMatrixTransposeStand=NULL;
103 Bool_t pidflag=kTRUE;
104 RDHFD0Corr->SetUsePID(pidflag);
105 if(pidflag) cout<<"PID is used"<<endl;
106 else cout<<"PID is not used"<<endl;
108 AliAODPidHF* pidObj=new AliAODPidHF();
111 Double_t plims[nlims]={0.6,0.8}; //TPC limits in momentum [GeV/c]
112 Bool_t compat=kTRUE; //effective only for this mode
114 Double_t sigmas[5]={2.,1.,0.,3.,0.}; //to be checked and to be modified with new implementation of setters by Rossella
115 pidObj->SetAsym(asym);// if you want to use the asymmetric bands in TPC
116 pidObj->SetMatch(mode);
117 pidObj->SetPLimit(plims,nlims);
118 pidObj->SetSigma(sigmas);
119 pidObj->SetCompat(compat);
120 pidObj->SetPCompatTOF(1.5);
121 pidObj->SetSigmaForTPCCompat(3.);
122 pidObj->SetSigmaForTOFCompat(3.);
123 pidObj->SetTPC(kTRUE);
124 pidObj->SetTOF(kTRUE);
125 RDHFD0Corr->SetPidHF(pidObj);
126 RDHFD0Corr->SetUsePID(kTRUE);
127 RDHFD0Corr->SetUseDefaultPID(kFALSE); //to use the AliAODPidHF
128 RDHFD0Corr->SetLowPt(kFALSE);
130 //activate pileup rejection (for pp)
131 RDHFD0Corr->SetOptPileup(AliRDHFCuts::kRejectPileupEvent);
134 //centrality selection (Pb-Pb)
135 Float_t minc=0,maxc=100;
136 RDHFD0Corr->SetMinCentrality(minc);
137 RDHFD0Corr->SetMaxCentrality(maxc);
138 cent=Form("%.0f%.0f",minc,maxc);
139 RDHFD0Corr->SetUseCentrality(AliRDHFCuts::kCentOff); //kCentOff,kCentV0M,kCentTRK,kCentTKL,kCentCL1,kCentInvalid
142 //RDHFD0Corr->SetFixRefs();
144 cout<<"This is the object I'm going to save:"<<endl;
145 RDHFD0Corr->PrintAll();
146 TFile* fout=new TFile("D0toKpiCuts.root","recreate"); //set this!!
152 //____________________________________________________
154 // Cuts for correlated tracks
156 AliHFAssociatedTrackCuts* HFCorrelationCuts=new AliHFAssociatedTrackCuts();
157 HFCorrelationCuts->SetName("AssociatedTrkCuts");
158 HFCorrelationCuts->SetTitle("Cuts for associated track");
161 // Set quality cuts on tracks
162 AliESDtrackCuts *esdHadrCuts = new AliESDtrackCuts("AliESDHadrCuts","default");
163 esdHadrCuts->SetRequireSigmaToVertex(kFALSE);
164 esdHadrCuts->SetRequireTPCRefit(kTRUE);
165 esdHadrCuts->SetRequireITSRefit(kTRUE);
166 esdHadrCuts->SetMinNClustersITS(2); //as for D*
167 esdHadrCuts->SetMinNClustersTPC(80); //as for D*
168 //esdHadrCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kAny);
169 esdHadrCuts->SetMinDCAToVertexXY(0.);
170 esdHadrCuts->SetEtaRange(-eta,eta);
171 esdHadrCuts->SetPtRange(0.,1.e10);
172 HFCorrelationCuts->AddTrackCuts(esdHadrCuts);
174 // Set kinematics cuts for AOD track
175 const int nofcuts = 4;
176 Float_t* trackcutsarray;
177 trackcutsarray=new Float_t[nofcuts];
178 trackcutsarray[0] = 0.3;//track min pt
179 trackcutsarray[1] = 10000.;//track max pt
180 trackcutsarray[2] = -99999999.;//track min impact parameter. DON'T put 0 since default value is -999999. and it would skip all tracks if d0 is not calculated!
181 trackcutsarray[3] = 10000.;//track max impact parameter
182 HFCorrelationCuts->SetNVarsTrack(nofcuts);
183 HFCorrelationCuts->SetAODTrackCuts(trackcutsarray);
185 HFCorrelationCuts->SetCharge(0); // -1/+1 to look for opposite/same charge, 0 no charge selection
186 HFCorrelationCuts->SetFilterBit(0); // set 0 for analysis with AOD from 2010
188 // Set kinematics cuts for AOD v0
189 const int nofcuts2 = 7;
190 Float_t* vzerocutsarray;
191 vzerocutsarray=new Float_t[nofcuts2];
192 vzerocutsarray[0] = 0.2; // max dca between two daugters (cm)
193 vzerocutsarray[1] = 2; // max chi square
194 vzerocutsarray[2] = 2.; // min decay length (cm)
195 vzerocutsarray[3] = 15; // max decay length (cm)
196 vzerocutsarray[4] = 100.; // max opening angle between two daugters
197 vzerocutsarray[5] = 0; // min pt of k0 (GeV/c)
198 vzerocutsarray[6] = 0.9; // set eta acceptance
199 HFCorrelationCuts->SetNVarsVzero(nofcuts2);
200 HFCorrelationCuts->SetAODvZeroCuts(vzerocutsarray);
204 Double_t ptlimit[2] = {0.6,0.8};
205 AliAODPidHF* pidObj=new AliAODPidHF();
206 pidObj->SetMatch(1); //A.Rossi mode
207 pidObj->SetAsym(kTRUE);
208 pidObj->SetPLimit(ptlimit);
209 pidObj->SetSigma(0,2.); //TPC sigma, in three pT ranges
210 pidObj->SetSigma(1,1.);
211 pidObj->SetSigma(2,0.);
212 pidObj->SetSigma(3,3.); //TOF sigma, whole pT range
213 pidObj->SetPCompatTOF(1.5);
214 pidObj->SetSigmaForTPCCompat(3.);
215 pidObj->SetSigmaForTOFCompat(3.);
216 pidObj->SetTPC(kTRUE);
217 pidObj->SetTOF(kTRUE);
218 pidObj->SetCompat(kTRUE);
219 HFCorrelationCuts->SetPidHF(pidObj);
221 //Event Mixing settings
222 HFCorrelationCuts->SetMaxNEventsInPool(200);
223 HFCorrelationCuts->SetMinNTracksInPool(1000);
224 HFCorrelationCuts->SetMinEventsToMix(8);
225 HFCorrelationCuts->SetNofPoolBins(5,5);
227 Double_t MBins[]={0,20,40,60,80,500};
228 Double_t * MultiplicityBins = MBins;
229 Double_t ZBins[]={-10,-5,-2.5,2.5,5,10};
230 Double_t *ZVrtxBins = ZBins;
232 HFCorrelationCuts->SetPoolBins(ZVrtxBins,MultiplicityBins);
234 // Save to *.root file
235 HFCorrelationCuts->PrintAll();
236 TFile* fout=new TFile("AssocPartCuts.root","recreate"); //set this!!
238 HFCorrelationCuts->Write();