]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGDQ/dielectron/macrosLMEE/ConfigTakuLMEEPbPb2011.C
b63fa688b9b092e67f8e7efdc424b4452da80a1c
[u/mrichter/AliRoot.git] / PWGDQ / dielectron / macrosLMEE / ConfigTakuLMEEPbPb2011.C
1 void InitHistograms(AliDielectron *die, Int_t cutDefinition);
2 void InitCF(AliDielectron* die, Int_t cutDefinition);
3 void EnableMC();
4 void SetSignals(AliDielectron *die);
5
6 //////////////////////////////////////////////////////
7 ///// lists of cuts 
8 ////  |cutDefinition | CENT | PID | Pair |
9 ///// | 0 | - | - | - |
10 ///// | 1 | 0-10 | kPbPb2011TPCandTOFwide | - | 
11 ///// | 2 | 10-30 | kPbPb2011TPCandTOFwide | - | 
12 ///// | 3 | 30-50 | kPbPb2011TPCandTOFwide | - | 
13 ///// | 4 | 0-10 | kPbPb2011TPCandTOFwide | OP & SetPreFilterAllSigns | 
14 ///// | 5 | 10-30 | kPbPb2011TPCandTOFwide | OP & SetPreFilterAllSigns | 
15 ///// | 6 | 30-50 | kPbPb2011TPCandTOFwide | OP & SetPreFilterAllSigns | 
16 ///// | 7 | 0-10 | kPbPb2011TPCandTOFwide | Phiv & SetPreFilterAllSigns | 
17 ///// | 8 | 10-30 | kPbPb2011TPCandTOFwide | Phiv & SetPreFilterAllSigns | 
18 ///// | 9 | 30-50 | kPbPb2011TPCandTOFwide | Phiv & SetPreFilterAllSigns | 
19 ///// | 10 | 0-10 | kPbPb2011TPCandTOFwide | OP & No SetPreFilterAllSigns | 
20 ///// | 11 | 10-30 | kPbPb2011TPCandTOFwide | OP & No SetPreFilterAllSigns | 
21 ///// | 12 | 30-50 | kPbPb2011TPCandTOFwide | OP & No SetPreFilterAllSigns | 
22 ///// | 13 | 0-10 | kPbPb2011TPCandTOFwide | Phiv & No SetPreFilterAllSigns | 
23 ///// | 14 | 10-30 | kPbPb2011TPCandTOFwide | Phiv & No SetPreFilterAllSigns | 
24 ///// | 15 | 30-50 | kPbPb2011TPCandTOFwide | Phiv & No SetPreFilterAllSigns | 
25 //////////////////////////////////////////////////////////
26
27
28
29
30
31
32
33 TString names=("noPairing;TPCTOFCentnoPair;TPCTOFSemiCent1noPair;TPCTOFSemiCent2noPair;TPCTOFCentOpPair;TPCTOFSemiCent1OpPair;TPCTOFSemiCent2OpPair;TPCTOFCentPvPair;TPCTOFSemiCent1PvPair;TPCTOFSemiCent2PvPair;TPCTOFCentOpPair2;TPCTOFSemiCent1OpPair2;TPCTOFSemiCent2OpPair2;TPCTOFCentPvPair2;TPCTOFSemiCent1PvPair2;TPCTOFSemiCent2PvPair2");
34                 
35 TObjArray *arrNames=names.Tokenize(";");
36 const Int_t nDie=arrNames->GetEntries();
37
38 Bool_t MCenabled=kFALSE;
39
40
41 AliDielectron* ConfigTakuLMEEPbPb2011(Int_t cutDefinition, Bool_t withMC=kFALSE, Bool_t CFenable=kFALSE)
42 {
43
44   Int_t selectedPID=-1;
45   Int_t selectedCentrality=-1;
46   Int_t selectedPairCut=-1;
47   Bool_t rejectionStep=kFALSE;
48   Bool_t HasPairCut = kFALSE;
49   LMEECutLib*  LMCL = new LMEECutLib();
50
51   //
52   // Setup the instance of AliDielectron
53   //
54
55   MCenabled=withMC;
56   // create the actual framework object
57
58   TString name=Form("%02d",cutDefinition);
59   if ((cutDefinition)<arrNames->GetEntriesFast()){
60     name=arrNames->At((cutDefinition))->GetName();
61   }
62   
63   //thisCut only relevant for MC:
64   AliDielectron *die =
65     new AliDielectron(Form
66                       ("%s",name.Data()),
67                       Form("Track cuts: %s",name.Data()));
68   
69   
70   if (MCenabled){
71     die->SetHasMC(kTRUE);
72   }
73   
74   //Setup AnalysisSelection:
75   if (cutDefinition==0) {
76     //not yet implemented
77   }
78   //////////////////////////////////////////////
79   else if (cutDefinition==1) {
80     selectedPID = LMEECutLib::kPbPb2011TPCandTOFwide;
81     selectedCentrality = LMEECutLib::kPbPb2011Central;
82     rejectionStep = kFALSE;
83     HasPairCut = kFALSE;
84   }
85   else if (cutDefinition==2) {
86     selectedPID = LMEECutLib::kPbPb2011TPCandTOFwide;
87     selectedCentrality = LMEECutLib::kPbPb2011SemiCentral1;
88     rejectionStep = kFALSE;
89     HasPairCut = kFALSE;
90   }
91   else if (cutDefinition==3) {
92     selectedPID = LMEECutLib::kPbPb2011TPCandTOFwide;
93     selectedCentrality = LMEECutLib::kPbPb2011SemiCentral2;
94     rejectionStep = kFALSE;
95     HasPairCut = kFALSE;
96   }
97   //////////////////////////////////////////////
98   else if (cutDefinition==4) {
99     selectedPID = LMEECutLib::kPbPb2011TPCandTOFwide;
100     selectedCentrality = LMEECutLib::kPbPb2011Central;
101     selectedPairCut = LMEECutLib::kPbPb2011OP;
102     rejectionStep = kTRUE;
103     HasPairCut =  kTRUE;
104   }
105   else if (cutDefinition==5) {
106     selectedPID = LMEECutLib::kPbPb2011TPCandTOFwide;
107     selectedCentrality = LMEECutLib::kPbPb2011SemiCentral1;
108     selectedPairCut = LMEECutLib::kPbPb2011OP;
109     rejectionStep = kTRUE;
110     HasPairCut =  kTRUE;
111   }
112   else if (cutDefinition==6) {
113     selectedPID = LMEECutLib::kPbPb2011TPCandTOFwide;
114     selectedCentrality = LMEECutLib::kPbPb2011SemiCentral2;
115     selectedPairCut = LMEECutLib::kPbPb2011OP;
116     rejectionStep = kTRUE;
117     HasPairCut =  kTRUE;
118   }
119   //////////////////////////////////////////////
120   else if (cutDefinition==7) {
121     selectedPID = LMEECutLib::kPbPb2011TPCandTOFwide;
122     selectedCentrality = LMEECutLib::kPbPb2011Central;
123     selectedPairCut = LMEECutLib::kPbPb2011Phiv;
124     rejectionStep = kTRUE;
125     HasPairCut =  kTRUE;
126   }
127   else if (cutDefinition==8) {
128     selectedPID = LMEECutLib::kPbPb2011TPCandTOFwide;
129     selectedCentrality = LMEECutLib::kPbPb2011SemiCentral1;
130     selectedPairCut = LMEECutLib::kPbPb2011Phiv;
131     rejectionStep = kTRUE;
132     HasPairCut =  kTRUE;
133   }
134   else if (cutDefinition==9) {
135     selectedPID = LMEECutLib::kPbPb2011TPCandTOFwide;
136     selectedCentrality = LMEECutLib::kPbPb2011SemiCentral2;
137     selectedPairCut = LMEECutLib::kPbPb2011Phiv;
138     rejectionStep = kTRUE;
139     HasPairCut =  kTRUE;
140   }
141   //////////////////////////////////////////////
142   else if (cutDefinition==10) {
143     selectedPID = LMEECutLib::kPbPb2011TPCandTOFwide;
144     selectedCentrality = LMEECutLib::kPbPb2011Central;
145     selectedPairCut = LMEECutLib::kPbPb2011OP;
146     rejectionStep = kFALSE;
147     HasPairCut =  kTRUE;
148   }
149   else if (cutDefinition==11) {
150     selectedPID = LMEECutLib::kPbPb2011TPCandTOFwide;
151     selectedCentrality = LMEECutLib::kPbPb2011SemiCentral1;
152     selectedPairCut = LMEECutLib::kPbPb2011OP;
153     rejectionStep = kFALSE;
154     HasPairCut =  kTRUE;
155   }
156   else if (cutDefinition==12) {
157     selectedPID = LMEECutLib::kPbPb2011TPCandTOFwide;
158     selectedCentrality = LMEECutLib::kPbPb2011SemiCentral2;
159     selectedPairCut = LMEECutLib::kPbPb2011OP;
160     rejectionStep = kFALSE;
161     HasPairCut =  kTRUE;
162   }
163   //////////////////////////////////////////////
164   else if (cutDefinition==13) {
165     selectedPID = LMEECutLib::kPbPb2011TPCandTOFwide;
166     selectedCentrality = LMEECutLib::kPbPb2011Central;
167     selectedPairCut = LMEECutLib::kPbPb2011Phiv;
168     rejectionStep = kFALSE;
169     HasPairCut =  kTRUE;
170   }
171   else if (cutDefinition==14) {
172     selectedPID = LMEECutLib::kPbPb2011TPCandTOFwide;
173     selectedCentrality = LMEECutLib::kPbPb2011SemiCentral1;
174     selectedPairCut = LMEECutLib::kPbPb2011Phiv;
175     rejectionStep = kFALSE;
176     HasPairCut =  kTRUE;
177   }
178   else if (cutDefinition==15) {
179     selectedPID = LMEECutLib::kPbPb2011TPCandTOFwide;
180     selectedCentrality = LMEECutLib::kPbPb2011SemiCentral2;
181     selectedPairCut = LMEECutLib::kPbPb2011Phiv;
182     rejectionStep = kFALSE;    
183     HasPairCut =  kTRUE;
184   }
185   //////////////////////////////////////////////
186
187
188
189   //Legacy cuts, check consistence w/ 1 & 4, then remove
190   /*
191   else if (cutDefinition==7) {
192     selectedPID = LMEECutLib::kPbPb2011TPCandTOF;
193     selectedCentrality = LMEECutLib::kPbPb2011Central;
194     rejectionStep = kFALSE;
195   }
196   else if (cutDefinition==8) {
197     selectedPID = LMEECutLib::kPbPb2011TPCandTOF;
198     selectedCentrality = LMEECutLib::kPbPb2011Central;
199     rejectionStep = kTRUE;
200   }
201   */
202   else Semi{
203     cout << " =============================== " << endl;
204     cout << " ==== INVALID CONFIGURATION ==== " << endl;
205     cout << " =============================== " << endl;
206   }
207
208
209   //Now configure task
210
211   /*
212   if (rejectionStep) {
213     die->GetTrackFilter().AddCuts(LMCL->GetPIDCutsPre(selectedPID) );
214     die->GetPairPreFilterLegs().AddCuts(LMCL->GetPIDCutsAna(selectedPID) );
215     die->GetPairPreFilter().AddCuts(LMCL->GetPairCuts(selectedPID) );
216   }
217   else { //No Prefilter, no Pairfilter
218   }
219   */
220
221
222   //Apply correct Pre-Filter Scheme, if necessary
223   die->SetPreFilterAllSigns(rejectionStep);
224
225   die->GetTrackFilter().AddCuts( LMCL->GetPIDCutsAna(selectedPID) );
226   die->GetEventFilter().AddCuts(LMCL->GetCentralityCuts(selectedCentrality));
227
228   if(HasPairCut==kTRUE){
229     if(rejectionStep==kTRUE){
230       die->GetPairPreFilterLegs().AddCuts(LMCL->GetPIDCutsAna(selectedPID) );
231       die->GetPairPreFilter().AddCuts( LMCL->GetPairPreFilterCuts(selectedPairCut));
232       die->GetPairFilter().AddCuts( LMCL->GetPairCuts(selectedPairCut));
233     }else{
234       die->GetPairFilter().AddCuts( LMCL->GetPairCuts(selectedPairCut));
235     }
236   }
237
238
239
240
241   AliDielectronTrackRotator *rot= 0x0;
242   /*AliDielectronTrackRotator *rot= LMCL->GetTrackRotator(selectedPID);
243   die->SetTrackRotator(rot);
244    */
245   AliDielectronMixingHandler *mix=LMCL->GetMixingHandler(selectedPID);
246   die->SetMixingHandler(mix);
247
248   // histogram setup
249   // only if an AliDielectronHistos object is attached to the
250   // dielectron framework histograms will be filled
251   //
252   InitHistograms(die,cutDefinition);
253
254   // the last definition uses no cuts and only the QA histograms should be filled!
255   if (CFenable) {
256     SetSignals(die);
257     InitCF(die,cutDefinition);
258   }
259   return die;
260 }
261
262 //______________________________________________________________________________________
263
264 void InitHistograms(AliDielectron *die, Int_t cutDefinition)
265 {
266   //
267   // Initialise the histograms
268   //
269
270   //Setup histogram Manager
271   AliDielectronHistos *histos=
272         new AliDielectronHistos(die->GetName(),
273                 die->GetTitle());
274   //Initialise histogram classes
275   histos->SetReservedWords("Track;Pair;Pre;RejTrack;RejPair:MyPair:MyPairV0");
276
277   //Event class
278 //  if (cutDefinition==nDie-1) 
279   histos->AddClass("Event");
280
281   //Track classes
282   //to fill also track info from 2nd event loop until 2
283   for (Int_t i=0; i<2; ++i){
284     histos->AddClass(Form("Track_%s",AliDielectron::TrackClassName(i)));
285   }
286   
287   //Pair classes
288   // to fill also mixed event histograms loop until 10
289   for (Int_t i=0; i<3; ++i){
290     histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(i)));
291   }
292   
293   //ME and track rot
294   if (die->GetMixingHandler()) {
295     histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(3)));
296     histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(4)));
297     histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(6)));
298     histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(7)));
299   }
300   if (die->GetTrackRotator()) {
301     histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(10)));
302   }
303   
304   //PreFilter Classes
305   //to fill also track info from 2nd event loop until 2
306   for (Int_t i=0; i<2; ++i){
307     histos->AddClass(Form("Pre_%s",AliDielectron::TrackClassName(i)));
308   }
309   
310   
311   //Create Classes for Rejected Tracks/Pairs:
312   for (Int_t i=0; i<2; ++i){
313     histos->AddClass(Form("RejTrack_%s",AliDielectron::TrackClassName(i)));
314   }
315   for (Int_t i=0; i<3; ++i){
316     histos->AddClass(Form("RejPair_%s",AliDielectron::PairClassName(i)));
317   }
318   
319   
320   //My Pair classes
321   // to fill also mixed event histograms loop until 10
322
323   const char* fgkPairClassNames[7] = {
324     "unlike",
325     "like_pp",
326     "like_ee",
327     "mixunlike_pe",
328     "mixunlike_ep",
329     "mixlike_pp",
330     "mixlike_ee"
331   };
332   for (Int_t i=0; i<7; ++i){
333     histos->AddClass(Form("MyPair_%s",fgkPairClassNames[i]));
334   }
335   for (Int_t i=0; i<7; ++i){
336     histos->AddClass(Form("MyPairV0_%s",fgkPairClassNames[i]));
337   }
338
339
340   /*
341   //track rotation
342
343   histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(AliDielectron::kEv1PMRot)));
344   histos->AddClass(Form("Track_Legs_%s",AliDielectron::PairClassName(AliDielectron::kEv1PMRot)));
345   */
346   //add histograms to event class
347   histos->UserHistogram("Event","nEvents","Number of processed events after cuts;Number events",
348                         1,0.,1.,AliDielectronVarManager::kNevents);
349   //histos->UserHistogram("Event","Centrality","Centrality;Centrality [%]","0,10,20,40,80,100,101",
350   //AliDielectronVarManager::kCentrality);
351   histos->UserHistogram("Event","Centrality","Centrality;Centrality [%]",100, 0, 100,
352                         AliDielectronVarManager::kCentrality);
353   
354
355   //add histograms to Track classes, also fills RejTrack
356   histos->UserHistogram("Track","Pt","Pt;Pt [GeV];#tracks",200,0,20.,AliDielectronVarManager::kPt);
357   histos->UserHistogram("Track","NclsSFracTPC","NclsSFracTPC; NclsSFracTPC;#tracks",200,0,10.,AliDielectronVarManager::kNclsSFracTPC);
358   histos->UserHistogram("Track","TPCclsDiff","TPCclsDiff; TPCclsDiff;#tracks",200,0,10.,AliDielectronVarManager::kTPCclsDiff);
359
360   histos->UserHistogram("Track","ITS_dEdx_P","ITS_dEdx;P [GeV];ITS signal (arb units);#tracks",
361           400,0.0,20.,1000,0.,1000.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kITSsignal,kTRUE);
362
363   histos->UserHistogram("Track","dEdx_P","dEdx;P [GeV];TPC signal (arb units);#tracks",
364           400,0.0,20.,200,0.,200.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCsignal,kTRUE);
365
366   histos->UserHistogram("Track","TPCnSigmaEle_P","TPC number of sigmas Electrons;P [GeV];TPC number of sigmas Electrons;#tracks",
367           400,0.0,20.,100,-5.,5.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCnSigmaEle,kTRUE);
368   histos->UserHistogram("Track","TPCnSigmaKao_P","TPC number of sigmas Kaons;P [GeV];TPC number of sigmas Kaons;#tracks",
369           400,0.0,20.,100,-5.,5.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCnSigmaKao,kTRUE);
370   histos->UserHistogram("Track","TPCnSigmaPio_P","TPC number of sigmas Pions;P [GeV];TPC number of sigmas Pions;#tracks",
371           400,0.0,20.,100,-5.,5.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCnSigmaPio,kTRUE);
372
373   histos->UserHistogram("Track","TRDpidPobEle_P","TRD PID probability Electrons;P [GeV];TRD prob Electrons;#tracks",
374           400,0.0,20.,100,0.,1.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTRDprobEle,kTRUE);
375   histos->UserHistogram("Track","TRDpidPobPio_P","TRD PID probability Pions;P [GeV];TRD prob Pions;#tracks",
376           400,0.0,20.,100,0.,1.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTRDprobPio,kTRUE);
377
378   histos->UserHistogram("Track","TOFnSigmaKao_P","TOF number of sigmas Kaons;P [GeV];TOF number of sigmas Kaons;#tracks",
379           400,0.0,20.,100,-5.,5.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTOFnSigmaKao,kTRUE);
380   histos->UserHistogram("Track","TOFnSigmaPro_P","TOF number of sigmas Protons;P [GeV];TOF number of sigmas Protons;#tracks",
381           400,0.0,20.,100,-5.,5.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTOFnSigmaPro,kTRUE);
382
383   histos->UserHistogram("Track","Eta_Phi","Eta Phi Map; Eta; Phi;#tracks",
384                         200,-1,1,200,0,6.3,AliDielectronVarManager::kEta,AliDielectronVarManager::kPhi);
385
386   histos->UserHistogram("Track","dXY","dXY;dXY [cm];#tracks",200,-2.,2.,AliDielectronVarManager::kImpactParXY);
387
388   histos->UserHistogram("Track","TPCnCls","Number of Clusters TPC;TPC number clusteres;#tracks",159,0.,159.,AliDielectronVarManager::kNclsTPC);
389
390   histos->UserHistogram("Track","TPCnCls_kNFclsTPCr","nTPC vs nTPCr;nTPC vs nTPCr;#tracks",159,0.,159.,159,0.,159.,AliDielectronVarManager::kNclsTPC,AliDielectronVarManager::kNFclsTPCr);
391
392   histos->UserHistogram("Track","kNFclsTPCr_pT","nTPCr vs pt;nTPCr vs pt;#tracks",159,0.,159.,200,0.,20.,AliDielectronVarManager::kNFclsTPCr,AliDielectronVarManager::kPt);
393
394   //add histograms to Pair classes, also fills RejPair
395   histos->UserHistogram("Pair","InvMass","Inv.Mass;Inv. Mass [GeV];#pairs",
396                         1000,0.0,5.00,AliDielectronVarManager::kM);
397   histos->UserHistogram("Pair","Rapidity","Rapidity;Rapidity;#pairs",
398                         100,-2.,2.,AliDielectronVarManager::kY);
399   histos->UserHistogram("Pair","OpeningAngle","Opening angle;angle",
400                         100,0.,3.15,AliDielectronVarManager::kOpeningAngle);
401   //2D Histo Plot
402   histos->UserHistogram("Pair","InvMassPairPt","Inv.Mass vs PairPt;Inv. Mass [GeV], pT [GeV];#pairs",
403                         1000,0.0,5.0,200,0.,20.,AliDielectronVarManager::kM,AliDielectronVarManager::kPt);
404   histos->UserHistogram("Pair","InvMassPhivPair","PhivPair vs Inv. Mass;Inv. Mass [GeV]; Phiv",
405                         1000,0.0,5.0,200,0.,4,AliDielectronVarManager::kM,AliDielectronVarManager::kPhivPair);
406   histos->UserHistogram("Pair","InvMassOpeningAngle","Opening Angle vs Inv.Mass;Inv. Mass [GeV] ; OpeningAngle[rad]",
407                         1000,0.0,5.0,200,0.,6.3,AliDielectronVarManager::kM,AliDielectronVarManager::kOpeningAngle);
408
409   //add histograms to Track classes
410   histos->UserHistogram("Pre","Pt","Pt;Pt [GeV];#tracks",200,0,20.,AliDielectronVarManager::kPt);
411
412   histos->UserHistogram("Pre","ITS_dEdx_P","ITS_dEdx;P [GeV];ITS signal (arb units);#tracks",
413           400,0.0,20.,1000,0.,1000.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kITSsignal,kTRUE);
414
415   histos->UserHistogram("Pre","dEdx_P","dEdx;P [GeV];TPC signal (arb units);#tracks",
416           400,0.0,20.,200,0.,200.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCsignal,kTRUE);
417
418   histos->UserHistogram("Pre","Eta_Phi","Eta Phi Map; Eta; Phi;#tracks",
419                         200,-1,1,200,0,6.3,AliDielectronVarManager::kEta,AliDielectronVarManager::kPhi);
420
421   histos->UserHistogram("Pre","dXY","dXY;dXY [cm];#tracks",200,-2.,2.,AliDielectronVarManager::kImpactParXY);
422
423   histos->UserHistogram("Pre","ZVertex ","ZVertex ;ZVertex[cm];#tracks",20,-20,20,AliDielectronVarManager::kZv);
424   histos->UserHistogram("Pre","XVertex ","XVertex ;XVertex[cm];#tracks",20,-20,20,AliDielectronVarManager::kXv);
425   histos->UserHistogram("Pre","YVertex ","YVertex ;YVertex[cm];#tracks",20,-20,20,AliDielectronVarManager::kYv);
426
427   histos->UserHistogram("Pre","TPCnSigmaEle_P","TPC number of sigmas Electrons;P [GeV];TPC number of sigmas Electrons;#tracks",
428                         400,0.0,20.,100,-5.,5.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCnSigmaEle,kTRUE);
429   histos->UserHistogram("Pre","TPCnSigmaKao_P","TPC number of sigmas Kaons;P [GeV];TPC number of sigmas Kaons;#tracks",
430                         400,0.0,20.,100,-5.,5.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCnSigmaKao,kTRUE);
431   histos->UserHistogram("Pre","TPCnSigmaPio_P","TPC number of sigmas Pions;P [GeV];TPC number of sigmas Pions;#tracks",
432                         400,0.0,20.,100,-5.,5.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCnSigmaPio,kTRUE);
433   histos->UserHistogram("Pre","TPCnSigmaPro_P","TPC number of sigmas Proton;P [GeV];TPC number of sigmas Pions;#tracks",
434                         400,0.0,20.,100,-5.,5.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCnSigmaPro,kTRUE);
435
436
437 //  histos->UserHistogram("Pre","TPCnCls","Number of Clusters TPC;TPC number clusteres;#tracks",159,0.,159.,AliDielectronVarManager::kNclsTPC);
438
439
440   ////////////////////////////////////////////////////////////////////////////
441   ////////////////////////////////////////////////////////////////////////////
442   ////// my own histograms 
443   histos->UserHistogram("MyPair","InvMyMassPairPt","Inv.MyMass vs PairPt;Inv. MyMass [GeV]; pT [GeV]",
444                         1000,0.0,5.0,200,0.,20.,AliDielectronVarManager::kM,AliDielectronVarManager::kPt);
445
446   histos->UserHistogram("MyPair","InvMyMassOpeningAngle","Opening Angle vs Inv.MyMass;Inv. MyMass [GeV] ; OpeningAngle[rad]",
447                         1000,0.0,5.0,200,0.,6.3,AliDielectronVarManager::kM,AliDielectronVarManager::kOpeningAngle);
448
449   histos->UserHistogram("MyPair","InvMyMassPsiPair","PsiPair vs Inv.MyMass;Inv. MyMass [GeV]; Phiv",
450                         1000,0.0,5.0,200,0.,4,AliDielectronVarManager::kM,AliDielectronVarManager::kPsiPair);
451
452   histos->UserHistogram("MyPair","InvMyMassPhivPair","PhivPair vs Inv.MyMass;Inv. MyMass [GeV]; Phiv",
453                         1000,0.0,5.0,200,0.,4,AliDielectronVarManager::kM,AliDielectronVarManager::kPhivPair);
454
455   histos->UserHistogram("MyPair","InvMyMassR","R vs Inv.MyMass;Inv. MyMass [GeV]; R[cm]",
456                         1000,0.0,5.0,200,0.,30,AliDielectronVarManager::kM,AliDielectronVarManager::kR);
457
458   histos->UserHistogram("MyPair","InvMyMassdPhi","dPhi of pairs vs Inv.MyMass;Inv. MyMass [GeV]; dPhi[rad]",
459                         1000,0.0,5.0,200,0.,3.1415,AliDielectronVarManager::kM,AliDielectronVarManager::kCosPointingAngle);
460
461   histos->UserHistogram("MyPair","PhivR","R vs Phiv; R[cm]; Phiv[rad]",
462                         200,0.,30, 200,0,4, AliDielectronVarManager::kR,AliDielectronVarManager::kPsiPair);
463   
464
465   histos->UserHistogram("MyPairV0","InvV0MyMassPairPt","Inv.MyMass vs PairPt;Inv. MyMass [GeV]; pT [GeV]",
466                         1000,0.0,5.0,200,0.,20.,AliDielectronVarManager::kM,AliDielectronVarManager::kPt);
467
468   histos->UserHistogram("MyPairV0","InvV0MyMassOpeningAngle","Opening Angle vs Inv.MyMass;Inv. MyMass [GeV]; OA[rad]",
469                         1000,0.0,5.0,200,0.,6.3,AliDielectronVarManager::kM,AliDielectronVarManager::kOpeningAngle);
470
471   histos->UserHistogram("MyPairV0","InvV0MyMassPsiPair","PsiPair vs Inv.MyMass;Inv. MyMass [GeV]; Psi[rad]",
472                         1000,0.0,5.0,200,0.,4,AliDielectronVarManager::kM,AliDielectronVarManager::kPsiPair);
473
474   histos->UserHistogram("MyPairV0","InvV0MyMassPhivPair","PhivPair vs Inv.MyMass;Inv. MyMass [GeV]; Phiv [rad]",
475                         1000,0.0,5.0,200,0.,4,AliDielectronVarManager::kM,AliDielectronVarManager::kPhivPair);
476
477   histos->UserHistogram("MyPairV0","InvV0MyMassR","R vs Inv.MyMass;Inv. MyMass [GeV]; R[cm]",
478                         1000,0.0,5.0,200,0.,30,AliDielectronVarManager::kM,AliDielectronVarManager::kR);
479   histos->UserHistogram("MyPairV0","PsiPairR","R vs PsiPair; R[cm]; PsiPair[rad]",
480                         200,0.,30, 200,0,4, AliDielectronVarManager::kR,AliDielectronVarManager::kPsiPair);
481   histos->UserHistogram("MyPairV0","InvV0MyMassdPhi","dPhi of pairs vs Inv.MyMass;Inv. MyMass [GeV]; dPhi[rad]",
482                         1000,0.0,5.0,200,0.,3.1415,AliDielectronVarManager::kM,AliDielectronVarManager::kCosPointingAngle);
483   
484   ////////////////////////////////////////////////////////////////////////////
485   ////////////////////////////////////////////////////////////////////////////
486
487
488
489
490
491
492   die->SetHistogramManager(histos);
493 }
494
495
496 void InitCF(AliDielectron* die, Int_t cutDefinition)
497 {
498   //
499   // Setupd the CF Manager if needed
500   //
501
502   AliDielectronCF *cf=new AliDielectronCF(die->GetName(),die->GetTitle());
503
504   //pair variables
505   cf->AddVariable(AliDielectronVarManager::kP,200,0,20);
506   cf->AddVariable(AliDielectronVarManager::kPt,200,0,20);
507   cf->AddVariable(AliDielectronVarManager::kM, 1000,0,5.00); //5Mev Steps
508   cf->AddVariable(AliDielectronVarManager::kY,100,-2.,2.);
509   cf->AddVariable(AliDielectronVarManager::kPairType,10,0,10);
510
511   cf->AddVariable(AliDielectronVarManager::kCentrality,100, 0, 100);
512   cf->AddVariable(AliDielectronVarManager::kOpeningAngle,320,0.,3.2);
513   cf->AddVariable(AliDielectronVarManager::kPsiPair,320,0.,3.2);
514   //leg variables
515   cf->AddVariable(AliDielectronVarManager::kP,200,0.,20.,kTRUE);
516   cf->AddVariable(AliDielectronVarManager::kPt,200,0.,20.,kTRUE);
517   cf->AddVariable(AliDielectronVarManager::kITSsignal,1000,0.0.,1000.,kTRUE);
518   cf->AddVariable(AliDielectronVarManager::kTPCsignal,500,0.0.,500.,kTRUE);
519   cf->AddVariable(AliDielectronVarManager::kTPCnSigmaEle,100,-10.0.,10.,kTRUE);
520   cf->AddVariable(AliDielectronVarManager::kITSnSigmaEle,100,-10.0.,10.,kTRUE);
521   cf->AddVariable(AliDielectronVarManager::kY,100,-2.,2.,kTRUE);
522   //only in this case write MC truth info
523   if (MCenabled) {
524     cf->SetStepForMCtruth();
525     //cf->SetStepsForMCtruthOnly();
526     cf->SetStepForAfterAllCuts();
527     cf->AddVariable(AliDielectronVarManager::kHaveSameMother,5,-2,2);
528     //cf->AddVariable(AliDielectronVarManager::kPdgCode,10000,-5000.5,4999.5,kTRUE);
529     //cf->AddVariable(AliDielectronVarManager::kPdgCodeMother,10000,-5000.5,4999.5,kTRUE);
530   }
531
532   cf->SetStepsForSignal();
533   die->SetCFManagerPair(cf);
534
535
536
537   /*
538  AliDielectronSignalMC* lowMassDiele=new
539     AliDielectronSignalMC("lowMassDiele","low mass dielectron pairs");
540   lowMassDiele->SetLegPDGs(11,-11);
541   lowMassDiele->SetCheckBothChargesLegs(kTRUE,kTRUE);
542   lowMassDiele->SetLegSources(AliDielectronSignalMC::kPrimary,
543       AliDielectronSignalMC::kPrimary);
544   lowMassDiele->SetFillPureMCStep(kTRUE);
545   die->AddSignalMC(lowMassDiele);
546
547   AliDielectronSignalMC* secondary=new
548     AliDielectronSignalMC("secondary","secondary electrons pairs");
549   secondary->SetLegPDGs(11,-11);
550   secondary->SetCheckBothChargesLegs(kTRUE,kTRUE);
551   secondary->SetLegSources(AliDielectronSignalMC::kSecondary,
552       AliDielectronSignalMC::kSecondary);
553   die->AddSignalMC(secondary);
554
555
556   AliDielectronSignalMC* finalState=new
557     AliDielectronSignalMC("finalState","finalState electrons pairs");
558   finalState->SetLegPDGs(11,-11);
559   finalState->SetCheckBothChargesLegs(kTRUE,kTRUE);
560   finalState->SetLegSources(AliDielectronSignalMC::kFinalState,
561       AliDielectronSignalMC::kFinalState);
562   die->AddSignalMC(finalState);
563   */
564
565 }
566
567 //--------------------------------------
568 void EnableMC() {
569   MCenabled=kTRUE;
570 }
571
572
573 //--------------------------------------
574 void SetSignals(AliDielectron *die)
575 {
576
577
578   AliDielectronSignalMC* promptJpsi = new AliDielectronSignalMC("promptJpsi","Prompt J/psi");   // prompt J/psi (not from beauty decays)
579   promptJpsi->SetLegPDGs(11,-11);
580   promptJpsi->SetMotherPDGs(443,443);
581   promptJpsi->SetGrandMotherPDGs(503,503,kTRUE,kTRUE);   // not from beauty hadrons
582   promptJpsi->SetMothersRelation(AliDielectronSignalMC::kSame);
583   promptJpsi->SetFillPureMCStep(kTRUE);
584   promptJpsi->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
585   promptJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
586   promptJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
587   promptJpsi->SetCheckBothChargesGrandMothers(kTRUE,kTRUE);
588   die->AddSignalMC(promptJpsi);
589
590   // physical backgrounds (electrons from other sources)
591   AliDielectronSignalMC* diEleContinuum = new AliDielectronSignalMC("diEleContinuum","di-electron continuum");     // all di-electrons originating in the collision
592   diEleContinuum->SetLegPDGs(11,-11);
593   diEleContinuum->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
594   diEleContinuum->SetCheckBothChargesLegs(kTRUE,kTRUE);
595   die->AddSignalMC(diEleContinuum);
596   
597   AliDielectronSignalMC* diEleCharm = new AliDielectronSignalMC("diEleCharm","di-electrons from charm");  // dielectrons originating from charm hadrons (not neccessary from same mother)
598   diEleCharm->SetLegPDGs(11,-11);
599   diEleCharm->SetMotherPDGs(403,403);
600   diEleCharm->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
601   diEleCharm->SetCheckBothChargesLegs(kTRUE,kTRUE);
602   diEleCharm->SetCheckBothChargesMothers(kTRUE,kTRUE);
603   die->AddSignalMC(diEleCharm);
604
605   AliDielectronSignalMC* diEleOpenCharm = new AliDielectronSignalMC("diEleOpenCharm","di-electrons from open charm");  // dielectrons originating from open charm hadrons
606   diEleOpenCharm->SetLegPDGs(11,-11);
607   diEleOpenCharm->SetMotherPDGs(402,402);
608   diEleOpenCharm->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
609   diEleOpenCharm->SetCheckBothChargesLegs(kTRUE,kTRUE);
610   diEleOpenCharm->SetCheckBothChargesMothers(kTRUE,kTRUE);
611   die->AddSignalMC(diEleOpenCharm);
612
613
614   // background from secondary electrons
615   AliDielectronSignalMC* secondaryElectrons = new AliDielectronSignalMC("secondaryElectrons","Secondary electrons");   // all di-electrons from secondary electrons (interaction with detector)
616   secondaryElectrons->SetLegPDGs(11,-11);
617   secondaryElectrons->SetLegSources(AliDielectronSignalMC::kSecondary, AliDielectronSignalMC::kSecondary);
618   secondaryElectrons->SetCheckBothChargesLegs(kTRUE,kTRUE);
619   die->AddSignalMC(secondaryElectrons);
620
621   /*
622   AliDielectronSignalMC* primarySecElePairs = new AliDielectronSignalMC("primarySecElePairs","Primary+Secondary electron pairs");  // primary-secondary pairs
623   primarySecElePairs->SetLegPDGs(11,-11);
624   primarySecElePairs->SetCheckBothChargesLegs(kTRUE,kTRUE);
625   primarySecElePairs->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kSecondary);
626   die->AddSignalMC(primarySecElePairs);
627   */
628
629   AliDielectronSignalMC* conversionElePairs = new AliDielectronSignalMC("conversionElePairs","conversion electron pairs");      // pairs made from conversion (may be also from 2 different conversions)
630   conversionElePairs->SetLegPDGs(11,-11);
631   conversionElePairs->SetCheckBothChargesLegs(kTRUE,kTRUE);
632   conversionElePairs->SetLegSources(AliDielectronSignalMC::kSecondary, AliDielectronSignalMC::kSecondary);
633   conversionElePairs->SetMotherPDGs(22,22);
634   die->AddSignalMC(conversionElePairs);
635
636   // misidentification
637   /*
638   AliDielectronSignalMC* allEleMisIdPairs = new AliDielectronSignalMC("allEleMisIdPairs","all electron+misid. pairs");  // one true electron + a mis-id electron (all sources included)
639   allEleMisIdPairs->SetLegPDGs(11,11,kFALSE,kTRUE);
640   allEleMisIdPairs->SetCheckBothChargesLegs(kTRUE,kTRUE);
641   die->AddSignalMC(allEleMisIdPairs);
642
643   AliDielectronSignalMC* allMisIdMisIdPairs = new AliDielectronSignalMC("allMisIdMisIdPairs","all misid.+misid. pairs");  // mis-id + mis-id
644   allMisIdMisIdPairs->SetLegPDGs(11,11,kTRUE,kTRUE);
645   allMisIdMisIdPairs->SetCheckBothChargesLegs(kTRUE,kTRUE);
646   die->AddSignalMC(allMisIdMisIdPairs);
647
648   AliDielectronSignalMC* elePionPairs = new AliDielectronSignalMC("elePionPairs","electron+pion pairs");    // true electron + mis-id pion
649   elePionPairs->SetLegPDGs(11,211);
650   elePionPairs->SetCheckBothChargesLegs(kTRUE,kTRUE);
651   die->AddSignalMC(elePionPairs);
652
653   AliDielectronSignalMC* eleKaonPairs = new AliDielectronSignalMC("eleKaonPairs","electron+kaon pairs");   // true electron + mis-id kaon
654   eleKaonPairs->SetLegPDGs(11,321);
655   eleKaonPairs->SetCheckBothChargesLegs(kTRUE,kTRUE);
656   die->AddSignalMC(eleKaonPairs);
657
658   AliDielectronSignalMC* eleProtonPairs = new AliDielectronSignalMC("eleProtonPairs","Electron+proton pairs");  // true electron + mis-id proton
659   eleProtonPairs->SetLegPDGs(11,2212);
660   eleProtonPairs->SetCheckBothChargesLegs(kTRUE,kTRUE);
661   die->AddSignalMC(eleProtonPairs);
662
663   AliDielectronSignalMC* piPiPairs = new AliDielectronSignalMC("piPiPairs","pion+pion pairs");    // mis-id pion + mis-id pion
664   piPiPairs->SetLegPDGs(211,211);
665   piPiPairs->SetCheckBothChargesLegs(kTRUE,kTRUE);
666   die->AddSignalMC(piPiPairs);
667
668   AliDielectronSignalMC* piKaonPairs = new AliDielectronSignalMC("piKaonPairs","pion+kaon pairs");  // mis-id pion + mis-id kaon
669   piKaonPairs->SetLegPDGs(211,321);
670   piKaonPairs->SetCheckBothChargesLegs(kTRUE,kTRUE);
671   die->AddSignalMC(piKaonPairs);
672
673   AliDielectronSignalMC* piProtonPairs = new AliDielectronSignalMC("piProtonPairs","pion+proton pairs");  // mis-id pion + mis-id proton
674   piProtonPairs->SetLegPDGs(211,2212);
675   piProtonPairs->SetCheckBothChargesLegs(kTRUE,kTRUE);
676   die->AddSignalMC(piProtonPairs);
677
678   AliDielectronSignalMC* kaonKaonPairs = new AliDielectronSignalMC("kaonKaonPairs","kaon+kaon pairs");  // mis-id kaon + mis-id kaon
679   kaonKaonPairs->SetLegPDGs(321,321);
680   kaonKaonPairs->SetCheckBothChargesLegs(kTRUE,kTRUE);
681   die->AddSignalMC(kaonKaonPairs);
682
683   AliDielectronSignalMC* kaonProtonPairs = new AliDielectronSignalMC("kaonProtonPairs","kaon+proton pairs");   // mis-id kaon + mis-id proton
684   kaonProtonPairs->SetLegPDGs(321,2212);
685   kaonProtonPairs->SetCheckBothChargesLegs(kTRUE,kTRUE);
686   die->AddSignalMC(kaonProtonPairs);
687
688   AliDielectronSignalMC* protonProtonPairs = new AliDielectronSignalMC("protonProtonPairs","proton+proton pairs");  // mis-id proton + mis-id proton
689   protonProtonPairs->SetLegPDGs(2212,2212);
690   protonProtonPairs->SetCheckBothChargesLegs(kTRUE,kTRUE);
691   die->AddSignalMC(protonProtonPairs);
692
693   AliDielectronSignalMC* muonAllPairs = new AliDielectronSignalMC("muonAllPairs","muon+everything pairs");        // mis-id muon + something else (electron, pion, kaon, proton)
694   muonAllPairs->SetLegPDGs(13,13,kFALSE,kTRUE);
695   muonAllPairs->SetCheckBothChargesLegs(kTRUE,kTRUE);
696   die->AddSignalMC(muonAllPairs);
697   */
698
699
700   AliDielectronSignalMC* pi0Sig = new AliDielectronSignalMC("pi0", "pi0Signal"); ///pi0 dalitz pairs 
701   pi0Sig->SetLegPDGs(11,-11);
702   pi0Sig->SetMotherPDGs(111,111);
703   pi0Sig->SetMothersRelation(AliDielectronSignalMC::kSame);
704   pi0Sig->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
705   pi0Sig->SetMotherSources(AliDielectronSignalMC::kPrimary, AliDielectronSignalMC::kPrimary);
706   pi0Sig->SetCheckBothChargesLegs(kTRUE,kTRUE);
707   pi0Sig->SetCheckBothChargesMothers(kTRUE,kTRUE);
708   pi0Sig->SetFillPureMCStep(kTRUE);
709   die->AddSignalMC(pi0Sig);
710
711
712   AliDielectronSignalMC* etaSig = new AliDielectronSignalMC("Eta", "etaSignal"); ///eta dalitz pairs 
713   etaSig->SetLegPDGs(11,-11);
714   etaSig->SetMotherPDGs(221,221);
715   etaSig->SetMothersRelation(AliDielectronSignalMC::kSame);
716   etaSig->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
717   etaSig->SetMotherSources(AliDielectronSignalMC::kPrimary, AliDielectronSignalMC::kPrimary);
718   etaSig->SetCheckBothChargesLegs(kTRUE,kTRUE);
719   etaSig->SetCheckBothChargesMothers(kTRUE,kTRUE);
720   etaSig->SetFillPureMCStep(kTRUE);
721   die->AddSignalMC(etaSig);
722
723
724   AliDielectronSignalMC* etaprimeSig = new AliDielectronSignalMC("Etaprime", "etaprimeSignal"); ///etaprime pairs 
725   etaprimeSig->SetLegPDGs(11,-11);
726   etaprimeSig->SetMotherPDGs(331,331);
727   etaprimeSig->SetMothersRelation(AliDielectronSignalMC::kSame);
728   etaprimeSig->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
729   etaprimeSig->SetMotherSources(AliDielectronSignalMC::kPrimary, AliDielectronSignalMC::kPrimary);
730   etaprimeSig->SetCheckBothChargesLegs(kTRUE,kTRUE);
731   etaprimeSig->SetCheckBothChargesMothers(kTRUE,kTRUE);
732   etaprimeSig->SetFillPureMCStep(kTRUE);
733   die->AddSignalMC(etaprimeSig);
734
735
736   AliDielectronSignalMC* rhoSig = new AliDielectronSignalMC("Rho", "rhoSignal"); ///rho pairs 
737   rhoSig->SetLegPDGs(11,-11);
738   rhoSig->SetMotherPDGs(113,113);
739   rhoSig->SetMothersRelation(AliDielectronSignalMC::kSame);
740   rhoSig->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
741   rhoSig->SetMotherSources(AliDielectronSignalMC::kPrimary, AliDielectronSignalMC::kPrimary);
742   rhoSig->SetCheckBothChargesLegs(kTRUE,kTRUE);
743   rhoSig->SetCheckBothChargesMothers(kTRUE,kTRUE);
744   rhoSig->SetFillPureMCStep(kTRUE);
745   die->AddSignalMC(rhoSig);
746
747   AliDielectronSignalMC* omegaSig = new AliDielectronSignalMC("Omega", "omegaSignal"); ///omega pairs 
748   omegaSig->SetLegPDGs(11,-11);
749   omegaSig->SetMotherPDGs(223,223);
750   omegaSig->SetMothersRelation(AliDielectronSignalMC::kSame);
751   omegaSig->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
752   omegaSig->SetMotherSources(AliDielectronSignalMC::kPrimary, AliDielectronSignalMC::kPrimary);
753   omegaSig->SetCheckBothChargesLegs(kTRUE,kTRUE);
754   omegaSig->SetCheckBothChargesMothers(kTRUE,kTRUE);
755   omegaSig->SetFillPureMCStep(kTRUE);
756   die->AddSignalMC(omegaSig);
757   
758   AliDielectronSignalMC* phiSig = new AliDielectronSignalMC("Phi", "phiSignal"); ///phi pairs 
759   phiSig->SetLegPDGs(11,-11);
760   phiSig->SetMotherPDGs(333,333);
761   phiSig->SetMothersRelation(AliDielectronSignalMC::kSame);
762   phiSig->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
763   phiSig->SetMotherSources(AliDielectronSignalMC::kPrimary, AliDielectronSignalMC::kPrimary);
764   phiSig->SetCheckBothChargesLegs(kTRUE,kTRUE);
765   phiSig->SetCheckBothChargesMothers(kTRUE,kTRUE);
766   phiSig->SetFillPureMCStep(kTRUE);
767   die->AddSignalMC(phiSig);
768
769   /*
770   AliDielectronSignalMC* convSig = new AliDielectronSignalMC("conv", "convSignal");
771   convSig->SetLegPDGs(11,-11);
772   convSig->SetMothersRelation(AliDielectronSignalMC::kSame);
773   convSig->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState); //in this case, ee needs to be true=IsPhysicalPrimary(label)
774   convSig->SetCheckBothChargesLegs(kFALSE,kFALSE);
775   die->AddSignalMC(convSig);
776   */
777 }
778