]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGDQ/dielectron/macrosLMEE/Config_mkoehler_CCbarMC.C
Merge branch 'feature-movesplit'
[u/mrichter/AliRoot.git] / PWGDQ / dielectron / macrosLMEE / Config_mkoehler_CCbarMC.C
1 void SetupTrackCutsDieleData(AliDielectron *diele, Int_t cutDefinition, Bool_t isAOD);
2 void SetupPairCutsDieleData(AliDielectron *diele, Int_t cutDefinition, Bool_t isAOD);
3 void InitHistogramsDieleData(AliDielectron *diele, Int_t cutDefinition, Bool_t isAOD);
4 void InitCFDieleData(AliDielectron *diele, Int_t cutDefinition, Bool_t isAOD);
5 void AddMCsignal(AliDielectron *die);
6
7
8
9
10 AliESDtrackCuts *SetupESDtrackCutsDieleData(Int_t cutDefinition);
11
12 TString namesDieleData=("CF;kAnyLeg;kMixLegs");
13
14
15
16 TObjArray *arrNamesDieleData=namesDieleData.Tokenize(";");
17
18 const Int_t nDie=arrNamesDieleData->GetEntries();
19
20 AliDielectron* Config_mkoehler_CCbarMC(Int_t cutDefinition, Bool_t isAOD=kFALSE)
21 {
22   //
23   // Setup the instance of AliDielectron
24   //
25   
26   // create the actual framework object
27   TString name=Form("%02d",cutDefinition);
28   if (cutDefinition<arrNamesDieleData->GetEntriesFast()){
29     name=arrNamesDieleData->At(cutDefinition)->GetName();
30   }
31   AliDielectron *diele = new AliDielectron(Form("%s",name.Data()),
32                              Form("Track cuts: %s",name.Data()));
33
34   // cut setup
35   SetupTrackCutsDieleData(diele, cutDefinition, isAOD);
36   SetupPairCutsDieleData(diele, cutDefinition, isAOD);
37
38   //
39   // histogram setup
40   // only if an AliDielectronHistos object is attached to the
41   // dielelectron framework histograms will be filled
42   //
43   InitHistogramsDieleData(diele, cutDefinition, isAOD);
44   InitCFDieleData(diele, cutDefinition, isAOD);
45
46   
47   return diele;
48 }
49
50
51 //______________________________________________________________________________________
52 void SetupTrackCutsDieleData(AliDielectron *diele, Int_t cutDefinition, Bool_t isAOD)
53 {
54   //
55   // Setup the track cuts
56   //
57
58   AddMCsignal(diele);
59   
60   //ESD quality cuts DielectronTrackCuts
61
62     diele->GetTrackFilter().AddCuts(SetupESDtrackCutsDieleData(cutDefinition));
63   
64 }//SetupTrackCutsDieleData
65
66
67
68
69 //______________________________________________________________________________________
70 AliESDtrackCuts *SetupESDtrackCutsDieleData(Int_t cutDefinition)
71 {
72   //
73   // Setup default AliESDtrackCuts
74   //
75   AliESDtrackCuts *esdTrackCuts = new AliESDtrackCuts;
76
77   // basic track quality cuts  (basicQ)
78   esdTrackCuts->SetMaxDCAToVertexZ(3.0);
79   esdTrackCuts->SetMaxDCAToVertexXY(1.0);
80
81   esdTrackCuts->SetEtaRange( -0.9 , 0.9 );
82
83   esdTrackCuts->SetAcceptKinkDaughters(kFALSE);
84   esdTrackCuts->SetRequireITSRefit(kTRUE);
85   esdTrackCuts->SetRequireTPCRefit(kTRUE);
86
87   esdTrackCuts->SetPtRange(.8,1e30);
88
89   esdTrackCuts->SetMinNClustersTPC(70);
90   esdTrackCuts->SetMaxChi2PerClusterTPC(4);
91
92   // default SPD any
93   esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kAny);
94
95   return esdTrackCuts;
96 }
97
98  
99
100 //______________________________________________________________________________________
101 void SetupPairCutsDieleData(AliDielectron *diele, Int_t cutDefinition, Bool_t isAOD)
102 {
103   // Setup the pair cuts
104
105   if(cutDefinition >=1){
106   //rapidity selection
107   AliDielectronVarCuts *pairCut=new AliDielectronVarCuts("pairCut","pairCut");
108   pairCut->AddCut(AliDielectronVarManager::kY,-1.,1.);
109   diele->GetPairFilter().AddCuts(pairCut);
110
111
112   AliDielectronVarCuts *mycut = new AliDielectronVarCuts("CutEMCAL","cut for EMCal");
113   mycut->AddCut(AliDielectronVarManager::kEMCALEoverP,0.75,1.25);
114   mycut->AddCut(AliDielectronVarManager::kEMCALE,3.5,100.);
115
116   
117
118   AliDielectronPairLegCuts *varpair=new AliDielectronPairLegCuts();
119   varpair->GetLeg1Filter().AddCuts(mycut);
120   varpair->GetLeg2Filter().AddCuts(mycut);
121   if(cutDefinition == 1)varpair->SetCutType(AliDielectronPairLegCuts::kAnyLeg);
122   if(cutDefinition == 2)varpair->SetCutType(AliDielectronPairLegCuts::kMixLegs);
123   diele->GetPairFilter().AddCuts(varpair);
124   }
125
126
127 }//SetupPairCutsDieleData
128
129 //______________________________________________________________________________________
130 void InitHistogramsDieleData(AliDielectron *diele, Int_t cutDefinition, Bool_t isAOD)
131 {
132   //
133   // Initialise the histograms
134   //
135   
136   //Setup histogram Manager
137   AliDielectronHistos *histos=new AliDielectronHistos(diele->GetName(),diele->GetTitle());
138   
139   //Initialise histogram classes
140   histos->SetReservedWords("Track;Pair");
141   
142   //Track classes
143   //to fill also track info from 2nd event loop until 2
144   for (Int_t i=0; i<2; ++i){
145     histos->AddClass(Form("Track_%s",AliDielectron::TrackClassName(i)));
146   }
147   
148   //Pair classes
149   // to fill also mixed event histograms loop until 10
150
151    for (Int_t i=0; i<3; ++i){
152         histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(i)));
153
154   }
155   
156   //legs from pair
157   for (Int_t i=0; i<3; ++i){
158     histos->AddClass(Form("Track_Legs_%s",AliDielectron::PairClassName(i)));
159   }
160   //track rotation
161   //histos->AddClass(Form("Pair_%s",PairClassName(AliDielectron::kEv1PMRot)));
162   //histos->AddClass(Form("Track_Legs_%s",PairClassName(AliDielectron::kEv1PMRot)));
163   
164
165     //add histograms to event class
166
167     histos->AddClass("Event");
168     histos->UserHistogram("Event","VtxZ","Vertex Z;Z[cm]",500,-40.,40.,AliDielectronVarManager::kZvPrim);
169     histos->UserHistogram("Event","VtxYxVtxZ","Vertexyz;Z[cm];Y[cm]",500,-40.,40.,400,-0.5,0.5,AliDielectronVarManager::kZvPrim,AliDielectronVarManager::kYvPrim);
170     histos->UserHistogram("Event","VtxXxVtxZ","Vertexxz;Z[cm];X[cm]",500,-40.,40.,400,-0.5,0.5,AliDielectronVarManager::kZvPrim,AliDielectronVarManager::kXvPrim);
171     histos->UserHistogram("Event","VtxYxVtxX","Vertexxz;Z[cm];X[cm]",400,-0.5,0.5,400,-0.5,0.5,AliDielectronVarManager::kXvPrim,AliDielectronVarManager::kYvPrim);
172     histos->UserHistogram("Event","MultV0A","MultV0A;multiplicity",1000,0.,1000.,AliDielectronVarManager::kMultV0A);
173     histos->UserHistogram("Event","MultV0C","MultV0C;multiplicity",1000,0.,1000.,AliDielectronVarManager::kMultV0C);
174     histos->UserHistogram("Event","MultV0","MultV0;multiplicity",1000,0.,1000.,AliDielectronVarManager::kMultV0);
175     histos->UserHistogram("Event","RefMult","RefMult;multiplicity",1000,0.,1000.,AliDielectronVarManager::kRefMult);   
176     histos->UserHistogram("Event","RefMultTPConly","RefMultTPConly;multiplicity",1000,0.,1000.,AliDielectronVarManager::kRefMultTPConly);    
177     histos->UserHistogram("Event","VZEROchMult","VZEROchMult;multiplicity",1000,0.,1000.,AliDielectronVarManager::kVZEROchMult);     
178     histos->UserHistogram("Event","MixingBin","kMixingBin;",100,0.,100.,AliDielectronVarManager::kMixingBin);     
179     
180   
181   
182   
183   //add histograms to Track classes
184   histos->UserHistogram("Track","Pt","Pt;Pt [GeV];#tracks",250,0,50.,AliDielectronVarManager::kPt,kTRUE);
185   histos->UserHistogram("Track","TPCnCls","Number of Clusters TPC;TPC number clusters;#tracks",160,-0.5,159.5,AliDielectronVarManager::kNclsTPC,kTRUE);
186   histos->UserHistogram("Track","TPCchi2Cl","Chi-2/Clusters TPC;Chi2/ncls number clusters;#tracks",100,0,10,AliDielectronVarManager::kTPCchi2Cl,kTRUE);
187   histos->UserHistogram("Track","TPCnFCls","Number of findable Clusters TPC;Number of findable Clusters TPC;#tracks",160,-0.5,159.5,AliDielectronVarManager::kNFclsTPC,kTRUE);
188   histos->UserHistogram("Track","TPCnFClsfCross","fraction crossed rows/findable;fraction crossed rows/findable;#tracks",200,0.,2.,AliDielectronVarManager::kNFclsTPCfCross,kTRUE);
189   histos->UserHistogram("Track","TPCnFClsr","Number of findable Clusters(crossed rows) TPC;Number of findable crossed rows TPC;#tracks",160,-0.5,159.5,AliDielectronVarManager::kNFclsTPCr,kTRUE);
190   histos->UserHistogram("Track","TPCnFClsrFrac","Number of found/findable Clusters TPC;Number of found/findable Clusters TPC;#tracks",200,0.,2.,AliDielectronVarManager::kNFclsTPCrFrac,kTRUE);
191   histos->UserHistogram("Track","TPCnFClsTPCfCross","Fraction of findable Clusters/Cr.rows TPC;Fraction of findable Clusters/Cr.rows TPC;#tracks",200,0.,2.,AliDielectronVarManager::kNFclsTPCfCross,kTRUE);  
192   histos->UserHistogram("Track","TPCsignalN","Number of points for TPC Signal;TPC Npoints dEdx;#tracks",160,-0.5,159.5,AliDielectronVarManager::kTPCsignalN,kTRUE);    
193   
194   histos->UserHistogram("Track","dXY","dXY;dXY [cm];#tracks",200,-1.5,1.5,AliDielectronVarManager::kImpactParXY,kTRUE);
195   histos->UserHistogram("Track","dZ","dZ;dZ [cm];#tracks",200,-4.,4.,AliDielectronVarManager::kImpactParZ,kTRUE);
196   
197   histos->UserHistogram("Track","Eta_Phi","Eta vs Phi; Eta; Phi;#tracks",
198                         100,-1.2,1.2,144,0,6.285,AliDielectronVarManager::kEta,AliDielectronVarManager::kPhi,kTRUE);
199
200   histos->UserHistogram("Track","dEdx_P","dEdx;P [GeV];TPC signal (arb units);#tracks",
201                         200,0.2,20.,800,20.,200.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCsignal,kTRUE);
202
203   histos->UserHistogram("Track","dEdx_Pt","dEdx;Pt [GeV];TPC signal (arb units);#tracks",
204                         200,0.2,20.,800,20.,200.,AliDielectronVarManager::kPt,AliDielectronVarManager::kTPCsignal,kTRUE);
205
206   histos->UserHistogram("Track","TPCnSigmaEle_P","TPCnSigmaEle;P [GeV];TPCnSigmaEle;#tracks",
207                         200,0.2,20.,800,-12.,12.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCnSigmaEle,kTRUE);
208   
209   histos->UserHistogram("Track","TPCnSigmaEle_Pt","TPCnSigmaEle;Pt [GeV];TPCnSigmaEle;#tracks",
210                         200,0.2,20.,800,-12.,12.,AliDielectronVarManager::kPt,AliDielectronVarManager::kTPCnSigmaEle,kTRUE);
211
212   histos->UserHistogram("Track","TPCnSigmaEle_Phi","TPCnSigmaEle;#phi [rad];TPCnSigmaEle;#tracks",
213                         200,0.,2*TMath::Pi(),800,-12.,12.,AliDielectronVarManager::kPhi,AliDielectronVarManager::kTPCnSigmaEle,kTRUE);
214   
215   histos->UserHistogram("Track","TPCnSigmaEle_Eta","TPCnSigmaEle;#eta;TPCnSigmaEle;#tracks",
216                         200,-1.,1.,800,-12.,12.,AliDielectronVarManager::kEta,AliDielectronVarManager::kTPCnSigmaEle,kTRUE);
217     
218
219   histos->UserHistogram("Track","dEdx_Phi","dEdx vs phi;#phi [rad];TPC signal (arb units);#tracks",
220                         200,0.,2*TMath::Pi(),800,20.,200.,AliDielectronVarManager::kPhi,AliDielectronVarManager::kTPCsignal,kTRUE);
221
222   histos->UserHistogram("Track","dEdx_Eta","dEdx vs eta;#eta;TPC signal (arb units);#tracks",
223                         200,-1.,1.,800,20.,200.,AliDielectronVarManager::kEta,AliDielectronVarManager::kTPCsignal,kTRUE);
224
225
226
227   histos->UserHistogram("Track","dEdx_nSigmaEMCal","dEdx vs nSigmaEMCal;NsigmaEmcal;TPC signal (arb units);NSigmaEMCAL",
228                         200,-5.,5.,800,20.,200.,AliDielectronVarManager::kEMCALnSigmaEle,AliDielectronVarManager::kTPCsignal,kTRUE);
229
230   histos->UserHistogram("Track","dEdx_TPCnSigmaEle","dEdx vs TPCnSigmaEle;TPC signal electrons(arbunits);TPC number of sigmas Electrons;TPC signal (a.u.);#tracks",
231                         100,-10.,10.,800,20.,200.,AliDielectronVarManager::kTPCnSigmaEle,AliDielectronVarManager::kTPCsignal,kTRUE);
232
233   histos->UserHistogram("Track","dEdx_EoverP","dEdx;EoverP;TPC signal (arbunits);E/P",100,0.,5.,800,20.,200.,AliDielectronVarManager::kEMCALEoverP,AliDielectronVarManager::kTPCsignal,kTRUE);
234   
235   histos->UserHistogram("Track","nSigmaEMCal_EoverP","NsigmaEmcal;EoverP;NSigmaEMCAL;E/P",100,0.,5.,200,-5.,5.,AliDielectronVarManager::kEMCALEoverP,AliDielectronVarManager::kEMCALnSigmaEle,kTRUE);
236  
237   histos->UserHistogram("Track","EMCal_E","EmcalE;Cluster Energy [GeV];#Clusters",200,0.,40.,AliDielectronVarManager::kEMCALE,kTRUE);
238
239   histos->UserHistogram("Track","ITS_FirstCls","ITS First Layer;ITS First Layer;#Entries",6,0.,6.,AliDielectronVarManager::kITSLayerFirstCls,kTRUE);
240  
241   //add histograms to Pair classes
242   histos->UserHistogram("Pair","InvMass","Inv.Mass;Inv. Mass [GeV];#pairs",
243                         251,-.01,5.01,AliDielectronVarManager::kM);
244   histos->UserHistogram("Pair","InvMass2D","Inv.Mass;Pt [GeV]; Inv. Mass [GeV]",
245                         20,0.,20.,251,-.01,5.01,AliDielectronVarManager::kPt,AliDielectronVarManager::kM);
246      
247      
248     histos->UserHistogram("Pair","InvMasslong","Inv.Mass;Inv. Mass [GeV];#pairs",
249                         301,-.02,15.02,AliDielectronVarManager::kM);
250     
251   histos->UserHistogram("Pair","Rapidity","Rapidity;Rapidity;#pairs",
252                         50,-1.,1.,AliDielectronVarManager::kY);
253   histos->UserHistogram("Pair","OpeningAngle","Opening angle;angle",
254                         50,0.,3.15,AliDielectronVarManager::kOpeningAngle);
255
256   histos->UserHistogram("Pair","PseudoProperTime","Pseudoproper decay length; pseudoproper-decay-length[#mum];Entries/40#mum",
257                           150,-0.3.,0.3,AliDielectronVarManager::kPseudoProperTime);
258   
259  histos->UserHistogram("Pair","Chi2/NDF","#Chi^{2}/NDF;#Chi^{2}/NDF",
260                         100, 0., 20., AliDielectronVarManager::kChi2NDF);
261   
262   
263   diele->SetHistogramManager(histos);
264 }
265
266
267 void InitCFDieleData(AliDielectron *diele, Int_t cutDefinition, Bool_t isAOD)
268 {
269   //
270   // Setupd the CF Manager if needed
271   //
272   
273   AliDielectronCF *cf=new AliDielectronCF(diele->GetName(),diele->GetTitle());
274   
275   //pair variables
276   cf->AddVariable(AliDielectronVarManager::kPt,"1.0,2.0,3.0,4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0,15.0,16.0,17.0,18.0,19.0,20.0");
277   cf->AddVariable(AliDielectronVarManager::kM,500,0.,10.);//also try variable bi sizes later...
278   
279     cf->AddVariable(AliDielectronVarManager::kPairType,12,0,12);
280   cf->AddVariable(AliDielectronVarManager::kOpeningAngle,31,-0.15,3.15);
281   cf->AddVariable(AliDielectronVarManager::kEta,40,-1.,1.);
282   cf->AddVariable(AliDielectronVarManager::kY,40,-1.,1.);
283   cf->AddVariable(AliDielectronVarManager::kPhi,20,0.,20*0.32);
284 //  cf->AddVariable(AliDielectronVarManager::kPseudoProperTime,300,-0.3,0.3);
285 //  cf->AddVariable(AliDielectronVarManager::kPseudoProperTimeErr,200,0.,0.1);
286 //  cf->AddVariable(AliDielectronVarManager::kPseudoProperTimeResolution,400,-0.1,0.1);
287 //  cf->AddVariable(AliDielectronVarManager::kPseudoProperTimePull,400,-0.1,0.1); 
288 //  cf->AddVariable(AliDielectronVarManager::kChi2NDF,40, 0., 20.);
289
290   //global leg variables
291   cf->AddVariable(AliDielectronVarManager::kP,50,0.,5.,kTRUE);
292   cf->AddVariable(AliDielectronVarManager::kPt,"0.,0.5,0.75,0.9,1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 2.0, 3.0, 4.0, 8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0,17.0,18.0,19.0,20.0,30.0,50.0,100.0",kTRUE);
293   cf->AddVariable(AliDielectronVarManager::kNclsTPC,"65, 70, 75, 80, 85, 90, 95, 100, 120, 160",kTRUE);
294   cf->AddVariable(AliDielectronVarManager::kTPCchi2Cl,100, 0., 10.,kTRUE);
295   cf->AddVariable(AliDielectronVarManager::kTPCsignalN,160,-0.5,159.5,kTRUE);   
296   cf->AddVariable(AliDielectronVarManager::kEta,44,-1.2,1.2,kTRUE);
297   cf->AddVariable(AliDielectronVarManager::kPhi,64,0.,64*0.1,kTRUE);
298 //  cf->AddVariable(AliDielectronVarManager::kImpactParXY,200,-1.,1.,kTRUE);
299 //  cf->AddVariable(AliDielectronVarManager::kImpactParZ,600,-3.,3.,kTRUE);
300   //TPC
301   cf->AddVariable(AliDielectronVarManager::kTPCsignal,"40.,50.,55.,60.,65.,68.,70.,72.,75.,80.,90.,100.,110.,200.",kTRUE);
302   cf->AddVariable(AliDielectronVarManager::kTPCnSigmaEle,20,-3.,4.,kTRUE);
303   cf->AddVariable(AliDielectronVarManager::kTPCnSigmaPio,8,1.,4.5,kTRUE);
304   cf->AddVariable(AliDielectronVarManager::kTPCnSigmaPro,8,0.,4.,kTRUE);
305   cf->AddVariable(AliDielectronVarManager::kNclsSTPC,20,0.,1.,kTRUE);//shared cluster
306     //ITS
307   cf->AddVariable(AliDielectronVarManager::kNclsITS,6,0.,6.,kTRUE);
308   cf->AddVariable(AliDielectronVarManager::kITSLayerFirstCls,6,0.,6.,kTRUE);
309   
310   //TOF
311 //  cf->AddVariable(AliDielectronVarManager::kTOFnSigmaEle,20,-3.5,4.,kTRUE);
312 //  cf->AddVariable(AliDielectronVarManager::kTOFnSigmaPio,8,0.,4.,kTRUE);
313   //EMCal variables
314 //  cf->AddVariable(AliDielectronVarManager::kEMCALE,20,0.,20.,kTRUE); 
315 //  cf->AddVariable(AliDielectronVarManager::kEMCALnSigmaEle,50,-5.,5.,kTRUE);
316 //  cf->AddVariable(AliDielectronVarManager::kEMCALNCells,50,0,50,kTRUE);
317 //  cf->AddVariable(AliDielectronVarManager::kEMCALEoverP,"0.6,0.7,0.8,0.9,1.1,1.2,1.3,1.4,1.8,2.0,4.0",kTRUE);
318   
319 //    cf->AddVariable(AliDielectronVarManager::kMixingBin,100,0.,100.);
320     cf->AddVariable(AliDielectronVarManager::kZvPrim,20,-20.,20.);
321
322    
323     /*
324     if (cutDefinition == 0){
325       
326             cf->SetStepForMCtruth();
327             
328   }
329     */
330     
331     
332     
333         cf->SetStepForMCtruth();
334         
335         
336   //leg variables
337   diele->SetCFManagerPair(cf);
338   
339 }
340
341 void AddMCsignal(AliDielectron *die){
342   
343   AliDielectronSignalMC* diEleOpenCharm = new AliDielectronSignalMC("diEleOpenCharm","di-electrons from open charm");  // dielectrons originating from open charm hadrons
344   diEleOpenCharm->SetLegPDGs(11,-11);
345   diEleOpenCharm->SetMotherPDGs(402,402);
346   diEleOpenCharm->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
347   diEleOpenCharm->SetCheckBothChargesLegs(kTRUE,kTRUE);
348   diEleOpenCharm->SetCheckBothChargesMothers(kTRUE,kTRUE);
349   diEleOpenCharm->SetFillPureMCStep(kTRUE);
350   die->AddSignalMC(diEleOpenCharm);
351
352 //    501 - open beauty mesons     
353   AliDielectronSignalMC* diEleOpenBeauty = new AliDielectronSignalMC("diEleOpenBeauty","di-electrons from open beauty");  // dielectrons originating from open beauty hadrons
354   diEleOpenBeauty->SetLegPDGs(11,-11);
355   diEleOpenBeauty->SetMotherPDGs(501,501);
356   diEleOpenBeauty->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
357   diEleOpenBeauty->SetCheckBothChargesLegs(kTRUE,kTRUE);
358   diEleOpenBeauty->SetCheckBothChargesMothers(kTRUE,kTRUE);
359   diEleOpenBeauty->SetFillPureMCStep(kTRUE);
360   die->AddSignalMC(diEleOpenBeauty);
361
362 }//void AddMCsignal(AliDielectron *die)
363
364
365
366