2 void InitHistograms(AliDielectron *die, Int_t cutDefinition);
3 void InitCF(AliDielectron* die, Int_t cutDefinition);
5 void SetupTrackCuts(AliDielectron *die, Int_t cutDefinition);
6 void SetupPairCuts(AliDielectron *die, Int_t cutDefinition);
9 TString names=("nocut;TPCrefit;ESDcuts+SPDany;ESDcuts+SPDfirst;ESDcuts+SPDany+TPCpid;ESDcuts+SPDfirst+TPCpid");
10 TObjArray *arrNames=names.Tokenize(";");
11 const Int_t nDieEff=arrNames->GetEntriesFast();
13 AliDielectron* ConfigJpsi_mw_EffpPb(Int_t cutDefinition)
16 // Setup the instance of AliDielectron
19 // create the actual framework object
20 TString name=Form("%02d",cutDefinition);
21 if (cutDefinition<arrNames->GetEntriesFast()){
22 name=arrNames->At(cutDefinition)->GetName();
25 new AliDielectron(Form("%s",name.Data()),
26 Form("Track cuts: %s",name.Data()));
29 SetupTrackCuts(die,cutDefinition);
30 SetupPairCuts(die,cutDefinition);
34 // only if an AliDielectronHistos object is attached to the
35 // dielectron framework histograms will be filled
37 InitHistograms(die,cutDefinition);
38 InitCF(die,cutDefinition);
43 //______________________________________________________________________________________
44 void SetupTrackCuts(AliDielectron *die, Int_t cutDefinition)
47 // Setup the track cuts
50 AliDielectronTrackCuts *trackCuts=new AliDielectronTrackCuts("ITSandgeneral_trackCuts","ITSandgeneral_trackCuts");
51 if(cutDefinition==1) {
52 trackCuts->SetRequireTPCRefit(kTRUE);
55 trackCuts->SetRequireITSRefit(kTRUE);
56 trackCuts->SetRequireTPCRefit(kTRUE);
58 if(cutDefinition==2 || cutDefinition==4) {
59 trackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kAny);
61 if(cutDefinition==3 || cutDefinition==5) {
62 trackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kFirst);
64 die->GetTrackFilter().AddCuts(trackCuts);
67 AliDielectronVarCuts *varCuts = new AliDielectronVarCuts("trackkineandTPCQ","trackkine_and_TPC");
69 varCuts->AddCut(AliDielectronVarManager::kImpactParZ,-3.,3.);
70 varCuts->AddCut(AliDielectronVarManager::kImpactParXY,-1.,1.);
71 varCuts->AddCut(AliDielectronVarManager::kKinkIndex0,0.);
72 varCuts->AddCut(AliDielectronVarManager::kNclsTPC,80.,160.);
73 varCuts->AddCut(AliDielectronVarManager::kTPCchi2Cl,0.,4.);
74 die->GetTrackFilter().AddCuts(varCuts);
76 if (cutDefinition>=4){
78 AliDielectronPID *pid=new AliDielectronPID("MC_Prod_Data","MC to reproduce data");
79 //proton cut to reproduce data parametrisation
80 Double_t resolution=0.055;
82 TF1 *ffPro=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.);
83 ffPro->SetParameters(0.0283086/0.97,2.63394e+01,5.04114e-11,2.12543e+00,4.88663e+00);
85 TF1 *ffPio=new TF1(Form("fBethe%d",AliPID::kPion), 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::kPion), AliPID::ParticleMass(AliPID::kElectron), resolution), 0.05,200.);
86 ffPio->SetParameters(0.0283086/0.97,2.63394e+01,5.04114e-11,2.12543e+00,4.88663e+00);
88 pid->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,3);
89 pid->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,ffPro,10,0,3);
90 pid->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,ffPio,10);
91 // pid->AddCut(AliDielectronPID::kTPC,AliPID::kPion,-3,3,0.,0.,kTRUE);
93 die->GetTrackFilter().AddCuts(pid);
97 //______________________________________________________________________________________
98 void SetupPairCuts(AliDielectron *die, Int_t cutDefinition)
101 // Setup the pair cuts
105 AliDielectronVarCuts *openingAngleCut=new AliDielectronVarCuts("OpeningAngle","Opening angle>0.35rad");
106 openingAngleCut->AddCut(AliDielectronVarManager::kOpeningAngle,.035,4.);
108 die->GetPairFilter().AddCuts(openingAngleCut);
112 //______________________________________________________________________________________
113 void InitHistograms(AliDielectron *die, Int_t cutDefinition)
116 // Initialise the histograms
119 //Setup histogram classes
120 AliDielectronHistos *histos=
121 new AliDielectronHistos(die->GetName(),
124 //Initialise histogram classes
125 histos->SetReservedWords("Track;Pair");
128 histos->AddClass("Event");
131 //to fill also track info from 2nd event loop until 2
132 for (Int_t i=0; i<2; ++i){
133 histos->AddClass(Form("Track_%s",AliDielectron::TrackClassName(i)));
137 // to fill also mixed event histograms loop until 10
138 for (Int_t i=0; i<3; ++i){
139 histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(i)));
141 //add histograms to event class
142 histos->UserHistogram("Event","nEvents","Number of processed events after cuts;Number events",
143 1,0.,1.,AliDielectronVarManager::kNevents);
145 //add histograms to Track classes
146 histos->UserHistogram("Track","Pt","Pt;Pt [GeV];#tracks",400,0,20.,AliDielectronVarManager::kPt);
147 histos->UserHistogram("Track","TPCnCls","Number of Clusters TPC;TPC number clusteres;#tracks",160,-0.5,159.5,AliDielectronVarManager::kNclsTPC);
148 histos->UserHistogram("Track","nClsoverfindablecluster","Number of found Clusters TPC over findably ;TPC number cluster over findable;#tracks",160,0.0,1.1,AliDielectronVarManager::kNFclsTPCrFrac);
149 histos->UserHistogram("Track","dEdx_P","dEdx;P [GeV];TPC signal (arb units);#tracks",
150 400,1e-2,20.,200,0.,200.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCsignal,kTRUE);
151 histos->UserHistogram("Track","TPCnSigma_P","TPC number of sigmas Electrons;P [GeV];TPC number of sigmas Electrons;#tracks",
152 400,1e-2,20.,100,-10.,10.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCnSigmaEle,kTRUE);
153 histos->UserHistogram("Track","dXY","dXY;dXY [cm];#tracks",500,-1.,1.,AliDielectronVarManager::kImpactParXY);
154 histos->UserHistogram("Track","dZ","dZ;dZ [cm];#tracks",600,-3.,3.,AliDielectronVarManager::kImpactParZ);
157 //add histograms to Pair classes
158 histos->UserHistogram("Pair","InvMass","Inv.Mass;Inv. Mass [GeV];#pairs",
159 125,0.,125*.04,AliDielectronVarManager::kM);
160 histos->UserHistogram("Pair","Rapidity","Rapidity;Rapidity;#pairs",
161 100,-1.,1.,AliDielectronVarManager::kY);
162 histos->UserHistogram("Pair","OpeningAngle","Opening angle;angle",
163 100,0.,3.15,AliDielectronVarManager::kOpeningAngle);
164 histos->UserHistogram("Pair","InvMass_OpeningAngle","Opening angle:Inv.Mass;Inv. Mass [GeV];angle",
165 100,0.,4.,100,0.,3.15,AliDielectronVarManager::kM,AliDielectronVarManager::kOpeningAngle);
167 die->SetHistogramManager(histos);
170 void InitCF(AliDielectron* die, Int_t cutDefinition)
173 // Setupd the CF Manager if needed
176 AliDielectronCF *cf=new AliDielectronCF(die->GetName(),die->GetTitle());
178 //pair variables **********************************************************
179 // j/psi pt ------------------
180 cf->AddVariable(AliDielectronVarManager::kPt, "0.0, 0.2, 0.4, 0.6, 0.8, 1.0, 1.2, 1.4, 1.6, 1.8, 2.0, 2.2, 2.4, 2.6, 2.8, 3.0, 3.2, 3.5, 3.8, 4.2, 4.6, 5.0, 5.5, 6.0, 6.5, 7.0, 7.5, 8.0, 8.5, 9.0, 9.5, 10.0");
181 // j/psi y -------------------
182 cf->AddVariable(AliDielectronVarManager::kY, "-5,-1,-0.9,-0.8,-0.7,-0.5,-0.3,0.3,0.5,0.7,0.8,0.9,1.0,5");
184 cf->AddVariable(AliDielectronVarManager::kM,125,0.,125*.04); //40Mev Steps
185 // pair type -----------------
186 cf->AddVariable(AliDielectronVarManager::kPairType, 3, 0.0, 3.0); //NOTE
187 // cos theta* Collins-Soper
188 // cf->AddVariable(AliDielectronVarManager::kThetaCS, 20, -1.0, 1.0);
189 // cos theta* Helicity
190 //cf->AddVariable(AliDielectronVarManager::kThetaHE, 20, -1.0, 1.0);
191 //leg variables **********************************************************
192 // leg pseudo-rapidity --------------------------
193 cf->AddVariable(AliDielectronVarManager::kEta, "-1.0, -0.88, -0.8, -0.7, -0.6, -0.5, -0.4, -0.3, -0.2, -0.1, 0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.88, 1.0", kTRUE);
194 // leg TPC n-sigma electron ---------------------
195 // cf->AddVariable(AliDielectronVarManager::kTPCnSigmaEle, 12, -3.0, 3.0, kTRUE);
196 // leg pt ---------------------------------------
197 cf->AddVariable(AliDielectronVarManager::kPt,"0.0, 0.8, 0.9, 0.95, 1.0, 1.05, 1.1, 1.2, 100.0",kTRUE);
198 // leg Ncls TPC ---------------------------------
199 cf->AddVariable(AliDielectronVarManager::kNclsTPC,"0, 70, 75, 80, 85, 90, 100, 120, 160",kTRUE);
200 // leg ITS first cluster point
201 cf->AddVariable(AliDielectronVarManager::kITSLayerFirstCls,6,-0.5,5.5,kTRUE);
203 cf->AddVariable(AliDielectronVarManager::kP,"0.0, 0.8, 0.9, 0.95, 1.0, 1.05, 1.1, 1.2,1.5,2.0,3.0,4.0,5.0, 100.0",kTRUE);
204 // -------------------------------------------------------------------------------
205 //event variables*********************************************************
206 cf->AddVariable(AliDielectronVarManager::kNaccTrckltsEsd10,101,-0.5,100.5);
207 cf->AddVariable(AliDielectronVarManager::kNaccTrckltsEsd10Corr,101,-0.5,100.5);
209 if(cutDefinition==0) {
210 cf->SetStepForMCtruth();
211 cf->SetStepForAfterAllCuts(kFALSE);
212 cf->SetStepsForSignal(kFALSE);
215 // cf->SetStepForNoCutsMCmotherPid();
216 cf->SetStepForAfterAllCuts();
217 // cf->SetStepsForEachCut();
218 cf->SetStepsForSignal();
219 // cf->SetStepsForBackground();
221 die->SetCFManagerPair(cf);