]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGDQ/dielectron/macrosJPSI/ConfigJpsi_mw_EffpPb.C
-one more user update (michael)
[u/mrichter/AliRoot.git] / PWGDQ / dielectron / macrosJPSI / ConfigJpsi_mw_EffpPb.C
1
2 void InitHistograms(AliDielectron *die, Int_t cutDefinition);
3 void InitCF(AliDielectron* die, Int_t cutDefinition);
4
5 void SetupTrackCuts(AliDielectron *die, Int_t cutDefinition);
6 void SetupPairCuts(AliDielectron *die, Int_t cutDefinition);
7
8
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();
12
13 AliDielectron* ConfigJpsi_mw_EffpPb(Int_t cutDefinition)
14 {
15   //
16   // Setup the instance of AliDielectron
17   //
18   
19   // create the actual framework object
20   TString name=Form("%02d",cutDefinition);
21   if (cutDefinition<arrNames->GetEntriesFast()){
22     name=arrNames->At(cutDefinition)->GetName();
23   }
24   AliDielectron *die =
25     new AliDielectron(Form("%s",name.Data()),
26                       Form("Track cuts: %s",name.Data()));
27   
28   // cut setup
29   SetupTrackCuts(die,cutDefinition);
30   SetupPairCuts(die,cutDefinition);
31   
32   //
33   // histogram setup
34   // only if an AliDielectronHistos object is attached to the
35   //  dielectron framework histograms will be filled
36   //
37   InitHistograms(die,cutDefinition);
38   InitCF(die,cutDefinition);
39   
40   return die;
41 }
42
43 //______________________________________________________________________________________
44 void SetupTrackCuts(AliDielectron *die, Int_t cutDefinition)
45 {
46   //
47   // Setup the track cuts
48
49   //tracking cuts
50   AliDielectronTrackCuts *trackCuts=new AliDielectronTrackCuts("ITSandgeneral_trackCuts","ITSandgeneral_trackCuts");
51   if(cutDefinition==1) {
52     trackCuts->SetRequireTPCRefit(kTRUE);
53   }
54   if(cutDefinition>1) {
55     trackCuts->SetRequireITSRefit(kTRUE);
56     trackCuts->SetRequireTPCRefit(kTRUE);
57   }
58   if(cutDefinition==2 || cutDefinition==4) {
59     trackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kAny);
60   }
61   if(cutDefinition==3 || cutDefinition==5) {
62     trackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kFirst);
63   }
64   die->GetTrackFilter().AddCuts(trackCuts);
65   
66   if(cutDefinition>1){
67     AliDielectronVarCuts *varCuts = new AliDielectronVarCuts("trackkineandTPCQ","trackkine_and_TPC");
68     
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);
75   }
76   if (cutDefinition>=4){
77     //ESD pid cuts
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;
81     Double_t nSigma=3.;
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);
84     
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);
87     
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);
92     
93     die->GetTrackFilter().AddCuts(pid);
94   }
95 }
96
97 //______________________________________________________________________________________
98 void SetupPairCuts(AliDielectron *die, Int_t cutDefinition)
99 {
100   //
101   // Setup the pair cuts
102   //
103
104   //reject conversions
105   AliDielectronVarCuts *openingAngleCut=new AliDielectronVarCuts("OpeningAngle","Opening angle>0.35rad");
106   openingAngleCut->AddCut(AliDielectronVarManager::kOpeningAngle,.035,4.);
107   if(cutDefinition>1)
108     die->GetPairFilter().AddCuts(openingAngleCut);  
109 }
110
111
112 //______________________________________________________________________________________
113 void InitHistograms(AliDielectron *die, Int_t cutDefinition)
114 {
115   //
116   // Initialise the histograms
117   //
118   
119   //Setup histogram classes
120   AliDielectronHistos *histos=
121     new AliDielectronHistos(die->GetName(),
122                             die->GetTitle());
123   
124   //Initialise histogram classes
125   histos->SetReservedWords("Track;Pair");
126   
127   //Event class
128   histos->AddClass("Event");
129   
130   //Track classes
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)));
134   }
135   
136   //Pair classes
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)));
140   }
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);
144   
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);
155   
156
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);
166   
167   die->SetHistogramManager(histos);
168 }
169
170 void InitCF(AliDielectron* die, Int_t cutDefinition)
171 {
172   //
173   // Setupd the CF Manager if needed
174   //
175   
176   AliDielectronCF *cf=new AliDielectronCF(die->GetName(),die->GetTitle());
177
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");
183   //j/psi mass
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);
202   //leg momentum
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);
208
209   if(cutDefinition==0) {
210     cf->SetStepForMCtruth();
211     cf->SetStepForAfterAllCuts(kFALSE);
212     cf->SetStepsForSignal(kFALSE);
213   }
214   if(cutDefinition>0){
215     //    cf->SetStepForNoCutsMCmotherPid();
216     cf->SetStepForAfterAllCuts();
217     //    cf->SetStepsForEachCut();
218     cf->SetStepsForSignal();
219     //    cf->SetStepsForBackground();
220   }
221   die->SetCFManagerPair(cf);
222   
223 }