]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGHF/correlationHF/macros/makeTFile4CutsD0Correlations.C
Merge branch 'feature-movesplit'
[u/mrichter/AliRoot.git] / PWGHF / correlationHF / macros / makeTFile4CutsD0Correlations.C
CommitLineData
a2ad7da1 1#include <Riostream.h>
2#include <TFile.h>
3#include <AliRDHFCutsD0toKpi.h>
4#include <TClonesArray.h>
5#include <TParameter.h>
6#include "AliHFAssociatedTrackCuts.h"
7
8//Use:
9//Set hard coded commentet with //set this!!
10// root[] .L makeInputD0tasks.C++
11// root[] makeInputAliAnalysisTaskSED0Correlations()
12//similar macros for the other D mesons
13
14//Author: Fabio Colamaria, fabio.colamaria@ba.infn.it
15
16//macro to make a .root file which contains an AliRDHFCutsD0toKpi for AliAnalysisTaskSED0Mass task
17
18void makeInputAliAnalysisTaskSED0Correlations(){
19
20//____________________________________________________
21
22// Cuts for D0 cuts
23
24 AliRDHFCutsD0toKpi* RDHFD0Corr=new AliRDHFCutsD0toKpi();
25 RDHFD0Corr->SetName("D0toKpiCuts");
26 RDHFD0Corr->SetTitle("Cuts for D0 analysis");
27
28 RDHFD0Corr->SetMinVtxContr(1);
29
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);
41
42 RDHFD0Corr->AddTrackCuts(esdTrackCuts);
43
44 //D0 selection topological cuts
45 const Int_t nptbins =14;
46 const Double_t ptmax = 9999.;
47 const Int_t nvars=11;
48 Float_t ptbins[nptbins+1];
49 ptbins[0]=0.;
50 ptbins[1]=0.5;
51 ptbins[2]=1.;
52 ptbins[3]=2.;
53 ptbins[4]=3.;
54 ptbins[5]=4.;
55 ptbins[6]=5.;
56 ptbins[7]=6.;
57 ptbins[8]=7.;
58 ptbins[9]=8.;
59 ptbins[10]=12.;
60 ptbins[11]=16.;
61 ptbins[12]=20.;
62 ptbins[13]=24.;
63 ptbins[14]=ptmax;
64
65 RDHFD0Corr->SetGlobalIndex(nvars,nptbins);
66 RDHFD0Corr->SetPtBins(nptbins+1,ptbins);
67
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 */
82
83
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];
87
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];
91 }
92 }
93
94 RDHFD0Corr->SetCuts(nvars,nptbins,cutsMatrixTransposeStand);
95 RDHFD0Corr->SetUseSpecialCuts(kTRUE);
96 RDHFD0Corr->SetRemoveDaughtersFromPrim(kTRUE);
97
98 for(Int_t iv=0;iv<nvars;iv++) delete [] cutsMatrixTransposeStand[iv];
99 delete [] cutsMatrixTransposeStand;
100 cutsMatrixTransposeStand=NULL;
101
102 //D0 pid settings
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;
107
108 AliAODPidHF* pidObj=new AliAODPidHF();
109 Int_t mode=1;
110 const Int_t nlims=2;
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
113 Bool_t asym=kTRUE;
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);
129
130 //activate pileup rejection (for pp)
131 RDHFD0Corr->SetOptPileup(AliRDHFCuts::kRejectPileupEvent);
132
133 TString cent="";
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
140
141 //temporary
142 //RDHFD0Corr->SetFixRefs();
143
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!!
147
148 fout->cd();
149 RDHFD0Corr->Write();
150 fout->Close();
151
152//____________________________________________________
153
154 // Cuts for correlated tracks
155
156 AliHFAssociatedTrackCuts* HFCorrelationCuts=new AliHFAssociatedTrackCuts();
157 HFCorrelationCuts->SetName("AssociatedTrkCuts");
158 HFCorrelationCuts->SetTitle("Cuts for associated track");
ad8d2dfd 159 Float_t eta = 0.9;
a2ad7da1 160
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*
ad8d2dfd 168//esdHadrCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kAny);
a2ad7da1 169 esdHadrCuts->SetMinDCAToVertexXY(0.);
ad8d2dfd 170 esdHadrCuts->SetEtaRange(-eta,eta);
a2ad7da1 171 esdHadrCuts->SetPtRange(0.,1.e10);
172 HFCorrelationCuts->AddTrackCuts(esdHadrCuts);
173
174 // Set kinematics cuts for AOD track
175 const int nofcuts = 4;
176 Float_t* trackcutsarray;
177 trackcutsarray=new Float_t[nofcuts];
bec72d8c 178 trackcutsarray[0] = 0.3;//track min pt
a2ad7da1 179 trackcutsarray[1] = 10000.;//track max pt
bec72d8c 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!
a2ad7da1 181 trackcutsarray[3] = 10000.;//track max impact parameter
182 HFCorrelationCuts->SetNVarsTrack(nofcuts);
183 HFCorrelationCuts->SetAODTrackCuts(trackcutsarray);
da975030 184
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
a2ad7da1 187
188 // Set kinematics cuts for AOD v0
a2ad7da1 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);
201
202 // Set PID
203 Int_t mode =1;
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);
220
ad8d2dfd 221 //Event Mixing settings
222 HFCorrelationCuts->SetMaxNEventsInPool(200);
223 HFCorrelationCuts->SetMinNTracksInPool(1000);
224 HFCorrelationCuts->SetMinEventsToMix(8);
225 HFCorrelationCuts->SetNofPoolBins(5,5);
226
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;
231
232 HFCorrelationCuts->SetPoolBins(ZVrtxBins,MultiplicityBins);
233
a2ad7da1 234 // Save to *.root file
235 HFCorrelationCuts->PrintAll();
236 TFile* fout=new TFile("AssocPartCuts.root","recreate"); //set this!!
237 fout->cd();
238 HFCorrelationCuts->Write();
239 fout->Close();
240
241}
242