]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGDQ/dielectron/macros/ConfigJpsi2eeEff.C
including switch to set on/off iso-track core removal, cleaning and bug fix
[u/mrichter/AliRoot.git] / PWGDQ / dielectron / macros / ConfigJpsi2eeEff.C
CommitLineData
8df8e382 1
2void InitHistograms(AliDielectron *die, Int_t cutDefinition);
3void InitCF(AliDielectron* die, Int_t cutDefinition);
4
5void SetupTrackCuts(AliDielectron *die, Int_t cutDefinition);
6void SetupPairCuts(AliDielectron *die, Int_t cutDefinition);
7
48609e3d 8AliESDtrackCuts *SetupESDtrackCuts(Int_t cutDefinition);
8df8e382 9
48609e3d 10TString names=("nocut;TPCrefit;ESDcuts;ESDcuts+SPDany+TPCpid;ESDcuts+SPDfirst+TPCpid");
8df8e382 11TObjArray *arrNames=names.Tokenize(";");
12const Int_t nDie=arrNames->GetEntriesFast();
13
48609e3d 14AliDielectron* ConfigJpsi2ee(Int_t cutDefinition, Bool_t isAOD=kFALSE)
8df8e382 15{
16 //
17 // Setup the instance of AliDielectron
18 //
48609e3d 19 if (isAOD) return 0x0;
8df8e382 20 // create the actual framework object
21 TString name=Form("%02d",cutDefinition);
22 if (cutDefinition<arrNames->GetEntriesFast()){
23 name=arrNames->At(cutDefinition)->GetName();
24 }
25 AliDielectron *die =
26 new AliDielectron(Form("%s",name.Data()),
27 Form("Track cuts: %s",name.Data()));
28
29 // cut setup
30 SetupTrackCuts(die,cutDefinition);
31 SetupPairCuts(die,cutDefinition);
32
33 //
34 // histogram setup
35 // only if an AliDielectronHistos object is attached to the
36 // dielectron framework histograms will be filled
37 //
38 InitHistograms(die,cutDefinition);
39 InitCF(die,cutDefinition);
40
41 return die;
42}
43
44//______________________________________________________________________________________
45void SetupTrackCuts(AliDielectron *die, Int_t cutDefinition)
46{
47 //
48 // Setup the track cuts
49 //
48609e3d 50
8df8e382 51 //ESD quality cuts
52 if (cutDefinition>0){
48609e3d 53 die->GetTrackFilter().AddCuts(SetupESDtrackCuts(cutDefinition));
8df8e382 54 }
48609e3d 55
8df8e382 56 if (cutDefinition>=3){
48609e3d 57 //ESD pid cuts
58 AliDielectronPID *pid=new AliDielectronPID("MC_Prod_Data","MC to reproduce data");
59 //proton cut to reproduce data parametrisation
60 Double_t resolution=0.058;
61 Double_t nSigma=3.;
62 TF1 *ff=new TF1(Form("fBethe%d",AliPID::kProton), Form("(%f*%f+(AliExternalTrackParam::BetheBlochAleph(x/%f,[0],[1],[2],[3],[4])-AliExternalTrackParam::BetheBlochAleph(x/%f,[0],[1],[2],[3],[4])))/%f", nSigma,resolution, AliPID::ParticleMass(AliPID::kProton), AliPID::ParticleMass(AliPID::kElectron), resolution), 0.05,200.);
63 ff->SetParameters(0.0283086/0.97,2.63394e+01,5.04114e-11,2.12543e+00,4.88663e+00);
64 pid->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,3);
65 pid->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,ff,10,0,3);
66 pid->AddCut(AliDielectronPID::kTPC,AliPID::kPion,-3,3,kTRUE);
8df8e382 67 die->GetTrackFilter().AddCuts(pid);
48609e3d 68 }
8df8e382 69}
70
71//______________________________________________________________________________________
72void SetupPairCuts(AliDielectron *die, Int_t cutDefinition)
73{
74 //
75 // Setup the pair cuts
76 //
8df8e382 77
48609e3d 78 //reject conversions
79 AliDielectronVarCuts *openingAngleCut=new AliDielectronVarCuts("OpeningAngle","Opening angle>0.35rad");
80 openingAngleCut->AddCut(AliDielectronVarManager::kOpeningAngle,.035,4.);
81 if(cutDefinition>1)
82 die->GetPairFilter().AddCuts(openingAngleCut);
8df8e382 83}
84
85//______________________________________________________________________________________
48609e3d 86AliESDtrackCuts *SetupESDtrackCuts(Int_t cutDefinition)
8df8e382 87{
88 //
89 // Setup default AliESDtrackCuts
90 //
91 AliESDtrackCuts *esdTrackCuts = new AliESDtrackCuts;
48609e3d 92 if(cutDefinition==1) {
93 esdTrackCuts->SetRequireTPCRefit(kTRUE);
94 }
95 if(cutDefinition>1) {
96 // esdTrackCuts->SetEtaRange(-0.9,0.9);
97 esdTrackCuts->SetRequireITSRefit(kTRUE);
98 esdTrackCuts->SetMaxDCAToVertexZ(3.0);
99 esdTrackCuts->SetMaxDCAToVertexXY(1);
100 esdTrackCuts->SetRequireTPCRefit(kTRUE);
101 esdTrackCuts->SetAcceptKinkDaughters(kFALSE);
102 esdTrackCuts->SetMinNClustersTPC(80);
103 esdTrackCuts->SetMaxChi2PerClusterTPC(4);
104 }
105 if(cutDefinition==3) {
106 esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kAny);
107 }
108 if(cutDefinition==4) {
109 esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kFirst);
110 }
111
8df8e382 112 return esdTrackCuts;
113}
114
115//______________________________________________________________________________________
116void InitHistograms(AliDielectron *die, Int_t cutDefinition)
117{
118 //
119 // Initialise the histograms
120 //
121
122 //Setup histogram classes
123 AliDielectronHistos *histos=
124 new AliDielectronHistos(die->GetName(),
125 die->GetTitle());
126
127 //Initialise histogram classes
128 histos->SetReservedWords("Track;Pair");
129
130 //Event class
131 histos->AddClass("Event");
132
133 //Track classes
134 //to fill also track info from 2nd event loop until 2
135 for (Int_t i=0; i<2; ++i){
136 histos->AddClass(Form("Track_%s",AliDielectron::TrackClassName(i)));
137 }
138
139 //Pair classes
140 // to fill also mixed event histograms loop until 10
141 for (Int_t i=0; i<3; ++i){
142 histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(i)));
143 }
144 //add histograms to event class
145 histos->UserHistogram("Event","nEvents","Number of processed events after cuts;Number events",
146 1,0.,1.,AliDielectronVarManager::kNevents);
147
148 //add histograms to Track classes
149 histos->UserHistogram("Track","Pt","Pt;Pt [GeV];#tracks",200,0,20.,AliDielectronVarManager::kPt);
0c09cae4 150 histos->UserHistogram("Track","Eta","Eta;Eta;#tracks",400,-2.0,-2.0,AliDielectronVarManager::kEta);
151 histos->UserHistogram("Track","Phi","Phi;Phi;#tracks",650,0,6.5,AliDielectronVarManager::kPhi);
152 histos->UserHistogram("Track","Theta","Theta;Theta;#tracks",350,0,3.5,AliDielectronVarManager::kTheta);
8df8e382 153 histos->UserHistogram("Track","dEdx_P","dEdx;P [GeV];TPC signal (arb units);#tracks",
0c09cae4 154 400,0.2,20.,200,0.,200.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCsignal,kTRUE);
155 histos->UserHistogram("Track","TPCnSigmaEle_P","TPC number of sigmas Electrons;P [GeV];TPC number of sigmas Electrons;#tracks",
156 400,0.2,20.,100,-5.,5.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCnSigmaEle,kTRUE);
157 histos->UserHistogram("Track","TPCnSigmaPio_P","TPC number of sigmas Pions;P [GeV];TPC number of sigmas Pions;#tracks",
158 400,0.2,20.,100,-5.,5.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCnSigmaPio,kTRUE);
159 histos->UserHistogram("Track","dXY","dXY;dXY [cm];#tracks",200,-2.,2.,AliDielectronVarManager::kImpactParXY);
8df8e382 160 histos->UserHistogram("Track","TPCnSigma_P","TPC number of sigmas Electrons;P [GeV];TPC number of sigmas Electrons;#tracks",
161 400,1e-2,20.,100,-10.,10.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCnSigmaEle,kTRUE);
8df8e382 162
163 //add histograms to Pair classes
164 histos->UserHistogram("Pair","InvMass","Inv.Mass;Inv. Mass [GeV];#pairs",
165 500,0.,4.,AliDielectronVarManager::kM);
166 histos->UserHistogram("Pair","Rapidity","Rapidity;Rapidity;#pairs",
167 100,-2.,2.,AliDielectronVarManager::kY);
168 histos->UserHistogram("Pair","OpeningAngle","Opening angle;angle",
169 100,0.,3.15,AliDielectronVarManager::kOpeningAngle);
170 histos->UserHistogram("Pair","InvMass_OpeningAngle","Opening angle:Inv.Mass;Inv. Mass [GeV];angle",
171 100,0.,4.,100,0.,3.15,AliDielectronVarManager::kM,AliDielectronVarManager::kOpeningAngle);
0c09cae4 172 histos->UserHistogram("Pair","ThetaHE","Theta (helicity system);#theta [rad.]",
173 500,0.,1.0,AliDielectronVarManager::kThetaHE);
174 histos->UserHistogram("Pair","PhiHE","Phi (helicity system);#varphi [rad.]",
175 500,-6.5,6.5,AliDielectronVarManager::kPhiHE);
176 histos->UserHistogram("Pair","ThetaCS","Theta (Collins-Soper system);#theta [rad.]",
177 500,0.0,1.0,AliDielectronVarManager::kThetaCS);
178 histos->UserHistogram("Pair","PhiCS","Phi (Collins-Soper system);#varphi [rad.]",
179 500,-6.5,6.5,AliDielectronVarManager::kPhiCS);
8df8e382 180
181 die->SetHistogramManager(histos);
182}
183
0c09cae4 184//______________________________________________________________________________________
8df8e382 185void InitCF(AliDielectron* die, Int_t cutDefinition)
186{
187 //
188 // Setupd the CF Manager if needed
189 //
190
191 AliDielectronCF *cf=new AliDielectronCF(die->GetName(),die->GetTitle());
48609e3d 192
193 //pair variables **********************************************************
194 // j/psi pt ------------------
195 TVectorD *binLimPt=new TVectorD(14);
196 (*binLimPt)[0]=0.0; (*binLimPt)[1]=0.4; (*binLimPt)[2]=0.8; (*binLimPt)[3]=1.4;
197 (*binLimPt)[4]=2.0; (*binLimPt)[5]=2.8; (*binLimPt)[6]=3.5; (*binLimPt)[7]=4.2;
198 (*binLimPt)[8]=5.0; (*binLimPt)[9]=6.0; (*binLimPt)[10]=7.0; (*binLimPt)[11]=8.0;
199 (*binLimPt)[12]=9.0; (*binLimPt)[13]=10.0;
200 cf->AddVariable(AliDielectronVarManager::kPt, binLimPt);
201 // j/psi y -------------------
202 TVectorD *binLimY=new TVectorD(13);
203 (*binLimY)[0]=-1.0; (*binLimY)[1]=-0.88; (*binLimY)[2]=-0.8;
204 (*binLimY)[3]=-0.6; (*binLimY)[4]=-0.4; (*binLimY)[5]=-0.2; (*binLimY)[6]=0.0;
205 (*binLimY)[7]=0.2; (*binLimY)[8]=0.4; (*binLimY)[9]=0.6; (*binLimY)[10]=0.8;
206 (*binLimY)[11]=0.88; (*binLimY)[12]=1.0;
207 cf->AddVariable(AliDielectronVarManager::kY, binLimY);
208 // pair type -----------------
209 cf->AddVariable(AliDielectronVarManager::kPairType, 3, 0.0, 3.0);
210 //leg variables **********************************************************
211 // leg pseudo-rapidity --------------------------
212 cf->AddVariable(AliDielectronVarManager::kEta, binLimY, kTRUE);
213 // leg TPC n-sigma electron ---------------------
214 // cf->AddVariable(AliDielectronVarManager::kTPCnSigmaEle, 12, -3.0, 3.0, kTRUE);
215 // leg pt ---------------------------------------
216 TVectorD *binLimPtLeg=new TVectorD(7);
217 (*binLimPtLeg)[0]=0.0; (*binLimPtLeg)[1]=0.8; (*binLimPtLeg)[2]=0.9;
218 (*binLimPtLeg)[3]=1.0; (*binLimPtLeg)[4]=1.1; (*binLimPtLeg)[5]=1.2;
219 (*binLimPtLeg)[6]=20.0;
220 cf->AddVariable(AliDielectronVarManager::kPt, binLimPtLeg, kTRUE);
221 // leg Ncls TPC ---------------------------------
222 TVectorD *binLimNclsTPC=new TVectorD(7);
223 (*binLimNclsTPC)[0]=0.0; (*binLimNclsTPC)[1]=80.0; (*binLimNclsTPC)[2]=90.0;
224 (*binLimNclsTPC)[3]=100.0; (*binLimNclsTPC)[4]=110.0; (*binLimNclsTPC)[5]=120.0;
225 (*binLimNclsTPC)[6]=160.0;
226 cf->AddVariable(AliDielectronVarManager::kNclsTPC, binLimNclsTPC, kTRUE);
227 // -------------------------------------------------------------------------------
228
229 if(cutDefinition==0) {
8df8e382 230 cf->SetStepForMCtruth();
8df8e382 231 cf->SetStepForAfterAllCuts(kFALSE);
48609e3d 232 cf->SetStepsForSignal(kFALSE);
8df8e382 233 }
48609e3d 234 if(cutDefinition>0){
235 // cf->SetStepForNoCutsMCmotherPid();
236 cf->SetStepForAfterAllCuts();
237 // cf->SetStepsForEachCut();
238 cf->SetStepsForSignal();
239 // cf->SetStepsForBackground();
8df8e382 240 }
8df8e382 241 die->SetCFManagerPair(cf);
242
243}