]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGDQ/dielectron/macrosLMEE/ConfigTakuLMEEPbPb2011.C
new Tasks by Taku
[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,-2,2,200,0,3.15,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,-2,2,200,0,3.15,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","PhivR","R vs Phiv; R[cm]; Phiv[rad]",
459                         200,0.,30, 200,0,4, AliDielectronVarManager::kR,AliDielectronVarManager::kPsiPair);
460   
461
462   histos->UserHistogram("MyPairV0","InvV0MyMassPairPt","Inv.MyMass vs PairPt;Inv. MyMass [GeV]; pT [GeV]",
463                         1000,0.0,5.0,200,0.,20.,AliDielectronVarManager::kM,AliDielectronVarManager::kPt);
464
465   histos->UserHistogram("MyPairV0","InvV0MyMassOpeningAngle","Opening Angle vs Inv.MyMass;Inv. MyMass [GeV]; OA[rad]",
466                         1000,0.0,5.0,200,0.,6.3,AliDielectronVarManager::kM,AliDielectronVarManager::kOpeningAngle);
467
468   histos->UserHistogram("MyPairV0","InvV0MyMassPsiPair","PsiPair vs Inv.MyMass;Inv. MyMass [GeV]; Psi[rad]",
469                         1000,0.0,5.0,200,0.,4,AliDielectronVarManager::kM,AliDielectronVarManager::kPsiPair);
470
471   histos->UserHistogram("MyPairV0","InvV0MyMassPhivPair","PhivPair vs Inv.MyMass;Inv. MyMass [GeV]; Phiv [rad]",
472                         1000,0.0,5.0,200,0.,4,AliDielectronVarManager::kM,AliDielectronVarManager::kPhivPair);
473
474   histos->UserHistogram("MyPairV0","InvV0MyMassR","R vs Inv.MyMass;Inv. MyMass [GeV]; R[cm]",
475                         1000,0.0,5.0,200,0.,30,AliDielectronVarManager::kM,AliDielectronVarManager::kR);
476   histos->UserHistogram("MyPairV0","PsiPairR","R vs PsiPair; R[cm]; PsiPair[rad]",
477                         200,0.,30, 200,0,4, AliDielectronVarManager::kR,AliDielectronVarManager::kPsiPair);
478   
479   ////////////////////////////////////////////////////////////////////////////
480   ////////////////////////////////////////////////////////////////////////////
481
482
483
484
485
486
487   die->SetHistogramManager(histos);
488 }
489
490
491 void InitCF(AliDielectron* die, Int_t cutDefinition)
492 {
493   //
494   // Setupd the CF Manager if needed
495   //
496
497   AliDielectronCF *cf=new AliDielectronCF(die->GetName(),die->GetTitle());
498
499   //pair variables
500   cf->AddVariable(AliDielectronVarManager::kP,200,0,20);
501   cf->AddVariable(AliDielectronVarManager::kPt,200,0,20);
502   cf->AddVariable(AliDielectronVarManager::kM, 1000,0,5.00); //5Mev Steps
503   cf->AddVariable(AliDielectronVarManager::kY,100,-2.,2.);
504   cf->AddVariable(AliDielectronVarManager::kPairType,10,0,10);
505
506   cf->AddVariable(AliDielectronVarManager::kCentrality,100, 0, 100);
507   cf->AddVariable(AliDielectronVarManager::kOpeningAngle,320,0.,3.2);
508   cf->AddVariable(AliDielectronVarManager::kPsiPair,320,0.,3.2);
509   //leg variables
510   cf->AddVariable(AliDielectronVarManager::kP,200,0.,20.,kTRUE);
511   cf->AddVariable(AliDielectronVarManager::kPt,200,0.,20.,kTRUE);
512   cf->AddVariable(AliDielectronVarManager::kITSsignal,1000,0.0.,1000.,kTRUE);
513   cf->AddVariable(AliDielectronVarManager::kTPCsignal,500,0.0.,500.,kTRUE);
514   cf->AddVariable(AliDielectronVarManager::kTPCnSigmaEle,100,-10.0.,10.,kTRUE);
515   cf->AddVariable(AliDielectronVarManager::kITSnSigmaEle,100,-10.0.,10.,kTRUE);
516   cf->AddVariable(AliDielectronVarManager::kY,100,-2.,2.,kTRUE);
517   //only in this case write MC truth info
518   if (MCenabled) {
519     cf->SetStepForMCtruth();
520     //cf->SetStepsForMCtruthOnly();
521     cf->SetStepForAfterAllCuts();
522     cf->AddVariable(AliDielectronVarManager::kHaveSameMother,5,-2,2);
523     //cf->AddVariable(AliDielectronVarManager::kPdgCode,10000,-5000.5,4999.5,kTRUE);
524     //cf->AddVariable(AliDielectronVarManager::kPdgCodeMother,10000,-5000.5,4999.5,kTRUE);
525   }
526
527   cf->SetStepsForSignal();
528   die->SetCFManagerPair(cf);
529
530
531
532   /*
533  AliDielectronSignalMC* lowMassDiele=new
534     AliDielectronSignalMC("lowMassDiele","low mass dielectron pairs");
535   lowMassDiele->SetLegPDGs(11,-11);
536   lowMassDiele->SetCheckBothChargesLegs(kTRUE,kTRUE);
537   lowMassDiele->SetLegSources(AliDielectronSignalMC::kPrimary,
538       AliDielectronSignalMC::kPrimary);
539   lowMassDiele->SetFillPureMCStep(kTRUE);
540   die->AddSignalMC(lowMassDiele);
541
542   AliDielectronSignalMC* secondary=new
543     AliDielectronSignalMC("secondary","secondary electrons pairs");
544   secondary->SetLegPDGs(11,-11);
545   secondary->SetCheckBothChargesLegs(kTRUE,kTRUE);
546   secondary->SetLegSources(AliDielectronSignalMC::kSecondary,
547       AliDielectronSignalMC::kSecondary);
548   die->AddSignalMC(secondary);
549
550
551   AliDielectronSignalMC* finalState=new
552     AliDielectronSignalMC("finalState","finalState electrons pairs");
553   finalState->SetLegPDGs(11,-11);
554   finalState->SetCheckBothChargesLegs(kTRUE,kTRUE);
555   finalState->SetLegSources(AliDielectronSignalMC::kFinalState,
556       AliDielectronSignalMC::kFinalState);
557   die->AddSignalMC(finalState);
558   */
559
560 }
561
562 //--------------------------------------
563 void EnableMC() {
564   MCenabled=kTRUE;
565 }
566
567
568 //--------------------------------------
569 void SetSignals(AliDielectron *die)
570 {
571
572
573   AliDielectronSignalMC* promptJpsi = new AliDielectronSignalMC("promptJpsi","Prompt J/psi");   // prompt J/psi (not from beauty decays)
574   promptJpsi->SetLegPDGs(11,-11);
575   promptJpsi->SetMotherPDGs(443,443);
576   promptJpsi->SetGrandMotherPDGs(503,503,kTRUE,kTRUE);   // not from beauty hadrons
577   promptJpsi->SetMothersRelation(AliDielectronSignalMC::kSame);
578   promptJpsi->SetFillPureMCStep(kTRUE);
579   promptJpsi->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
580   promptJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
581   promptJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
582   promptJpsi->SetCheckBothChargesGrandMothers(kTRUE,kTRUE);
583   die->AddSignalMC(promptJpsi);
584
585   // physical backgrounds (electrons from other sources)
586   AliDielectronSignalMC* diEleContinuum = new AliDielectronSignalMC("diEleContinuum","di-electron continuum");     // all di-electrons originating in the collision
587   diEleContinuum->SetLegPDGs(11,-11);
588   diEleContinuum->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
589   diEleContinuum->SetCheckBothChargesLegs(kTRUE,kTRUE);
590   die->AddSignalMC(diEleContinuum);
591   
592   AliDielectronSignalMC* diEleCharm = new AliDielectronSignalMC("diEleCharm","di-electrons from charm");  // dielectrons originating from charm hadrons (not neccessary from same mother)
593   diEleCharm->SetLegPDGs(11,-11);
594   diEleCharm->SetMotherPDGs(403,403);
595   diEleCharm->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
596   diEleCharm->SetCheckBothChargesLegs(kTRUE,kTRUE);
597   diEleCharm->SetCheckBothChargesMothers(kTRUE,kTRUE);
598   die->AddSignalMC(diEleCharm);
599
600   AliDielectronSignalMC* diEleOpenCharm = new AliDielectronSignalMC("diEleOpenCharm","di-electrons from open charm");  // dielectrons originating from open charm hadrons
601   diEleOpenCharm->SetLegPDGs(11,-11);
602   diEleOpenCharm->SetMotherPDGs(402,402);
603   diEleOpenCharm->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
604   diEleOpenCharm->SetCheckBothChargesLegs(kTRUE,kTRUE);
605   diEleOpenCharm->SetCheckBothChargesMothers(kTRUE,kTRUE);
606   die->AddSignalMC(diEleOpenCharm);
607
608
609   // background from secondary electrons
610   AliDielectronSignalMC* secondaryElectrons = new AliDielectronSignalMC("secondaryElectrons","Secondary electrons");   // all di-electrons from secondary electrons (interaction with detector)
611   secondaryElectrons->SetLegPDGs(11,-11);
612   secondaryElectrons->SetLegSources(AliDielectronSignalMC::kSecondary, AliDielectronSignalMC::kSecondary);
613   secondaryElectrons->SetCheckBothChargesLegs(kTRUE,kTRUE);
614   die->AddSignalMC(secondaryElectrons);
615
616   /*
617   AliDielectronSignalMC* primarySecElePairs = new AliDielectronSignalMC("primarySecElePairs","Primary+Secondary electron pairs");  // primary-secondary pairs
618   primarySecElePairs->SetLegPDGs(11,-11);
619   primarySecElePairs->SetCheckBothChargesLegs(kTRUE,kTRUE);
620   primarySecElePairs->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kSecondary);
621   die->AddSignalMC(primarySecElePairs);
622   */
623
624   AliDielectronSignalMC* conversionElePairs = new AliDielectronSignalMC("conversionElePairs","conversion electron pairs");      // pairs made from conversion (may be also from 2 different conversions)
625   conversionElePairs->SetLegPDGs(11,-11);
626   conversionElePairs->SetCheckBothChargesLegs(kTRUE,kTRUE);
627   conversionElePairs->SetLegSources(AliDielectronSignalMC::kSecondary, AliDielectronSignalMC::kSecondary);
628   conversionElePairs->SetMotherPDGs(22,22);
629   die->AddSignalMC(conversionElePairs);
630
631   // misidentification
632   /*
633   AliDielectronSignalMC* allEleMisIdPairs = new AliDielectronSignalMC("allEleMisIdPairs","all electron+misid. pairs");  // one true electron + a mis-id electron (all sources included)
634   allEleMisIdPairs->SetLegPDGs(11,11,kFALSE,kTRUE);
635   allEleMisIdPairs->SetCheckBothChargesLegs(kTRUE,kTRUE);
636   die->AddSignalMC(allEleMisIdPairs);
637
638   AliDielectronSignalMC* allMisIdMisIdPairs = new AliDielectronSignalMC("allMisIdMisIdPairs","all misid.+misid. pairs");  // mis-id + mis-id
639   allMisIdMisIdPairs->SetLegPDGs(11,11,kTRUE,kTRUE);
640   allMisIdMisIdPairs->SetCheckBothChargesLegs(kTRUE,kTRUE);
641   die->AddSignalMC(allMisIdMisIdPairs);
642
643   AliDielectronSignalMC* elePionPairs = new AliDielectronSignalMC("elePionPairs","electron+pion pairs");    // true electron + mis-id pion
644   elePionPairs->SetLegPDGs(11,211);
645   elePionPairs->SetCheckBothChargesLegs(kTRUE,kTRUE);
646   die->AddSignalMC(elePionPairs);
647
648   AliDielectronSignalMC* eleKaonPairs = new AliDielectronSignalMC("eleKaonPairs","electron+kaon pairs");   // true electron + mis-id kaon
649   eleKaonPairs->SetLegPDGs(11,321);
650   eleKaonPairs->SetCheckBothChargesLegs(kTRUE,kTRUE);
651   die->AddSignalMC(eleKaonPairs);
652
653   AliDielectronSignalMC* eleProtonPairs = new AliDielectronSignalMC("eleProtonPairs","Electron+proton pairs");  // true electron + mis-id proton
654   eleProtonPairs->SetLegPDGs(11,2212);
655   eleProtonPairs->SetCheckBothChargesLegs(kTRUE,kTRUE);
656   die->AddSignalMC(eleProtonPairs);
657
658   AliDielectronSignalMC* piPiPairs = new AliDielectronSignalMC("piPiPairs","pion+pion pairs");    // mis-id pion + mis-id pion
659   piPiPairs->SetLegPDGs(211,211);
660   piPiPairs->SetCheckBothChargesLegs(kTRUE,kTRUE);
661   die->AddSignalMC(piPiPairs);
662
663   AliDielectronSignalMC* piKaonPairs = new AliDielectronSignalMC("piKaonPairs","pion+kaon pairs");  // mis-id pion + mis-id kaon
664   piKaonPairs->SetLegPDGs(211,321);
665   piKaonPairs->SetCheckBothChargesLegs(kTRUE,kTRUE);
666   die->AddSignalMC(piKaonPairs);
667
668   AliDielectronSignalMC* piProtonPairs = new AliDielectronSignalMC("piProtonPairs","pion+proton pairs");  // mis-id pion + mis-id proton
669   piProtonPairs->SetLegPDGs(211,2212);
670   piProtonPairs->SetCheckBothChargesLegs(kTRUE,kTRUE);
671   die->AddSignalMC(piProtonPairs);
672
673   AliDielectronSignalMC* kaonKaonPairs = new AliDielectronSignalMC("kaonKaonPairs","kaon+kaon pairs");  // mis-id kaon + mis-id kaon
674   kaonKaonPairs->SetLegPDGs(321,321);
675   kaonKaonPairs->SetCheckBothChargesLegs(kTRUE,kTRUE);
676   die->AddSignalMC(kaonKaonPairs);
677
678   AliDielectronSignalMC* kaonProtonPairs = new AliDielectronSignalMC("kaonProtonPairs","kaon+proton pairs");   // mis-id kaon + mis-id proton
679   kaonProtonPairs->SetLegPDGs(321,2212);
680   kaonProtonPairs->SetCheckBothChargesLegs(kTRUE,kTRUE);
681   die->AddSignalMC(kaonProtonPairs);
682
683   AliDielectronSignalMC* protonProtonPairs = new AliDielectronSignalMC("protonProtonPairs","proton+proton pairs");  // mis-id proton + mis-id proton
684   protonProtonPairs->SetLegPDGs(2212,2212);
685   protonProtonPairs->SetCheckBothChargesLegs(kTRUE,kTRUE);
686   die->AddSignalMC(protonProtonPairs);
687
688   AliDielectronSignalMC* muonAllPairs = new AliDielectronSignalMC("muonAllPairs","muon+everything pairs");        // mis-id muon + something else (electron, pion, kaon, proton)
689   muonAllPairs->SetLegPDGs(13,13,kFALSE,kTRUE);
690   muonAllPairs->SetCheckBothChargesLegs(kTRUE,kTRUE);
691   die->AddSignalMC(muonAllPairs);
692   */
693
694
695   AliDielectronSignalMC* pi0Sig = new AliDielectronSignalMC("pi0", "pi0Signal"); ///pi0 dalitz pairs 
696   pi0Sig->SetLegPDGs(11,-11);
697   pi0Sig->SetMotherPDGs(111,111);
698   pi0Sig->SetMothersRelation(AliDielectronSignalMC::kSame);
699   pi0Sig->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
700   pi0Sig->SetMotherSources(AliDielectronSignalMC::kPrimary, AliDielectronSignalMC::kPrimary);
701   pi0Sig->SetCheckBothChargesLegs(kTRUE,kTRUE);
702   pi0Sig->SetCheckBothChargesMothers(kTRUE,kTRUE);
703   pi0Sig->SetFillPureMCStep(kTRUE);
704   die->AddSignalMC(pi0Sig);
705
706
707   AliDielectronSignalMC* etaSig = new AliDielectronSignalMC("Eta", "etaSignal"); ///eta dalitz pairs 
708   etaSig->SetLegPDGs(11,-11);
709   etaSig->SetMotherPDGs(221,221);
710   etaSig->SetMothersRelation(AliDielectronSignalMC::kSame);
711   etaSig->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
712   etaSig->SetMotherSources(AliDielectronSignalMC::kPrimary, AliDielectronSignalMC::kPrimary);
713   etaSig->SetCheckBothChargesLegs(kTRUE,kTRUE);
714   etaSig->SetCheckBothChargesMothers(kTRUE,kTRUE);
715   etaSig->SetFillPureMCStep(kTRUE);
716   die->AddSignalMC(etaSig);
717
718
719   AliDielectronSignalMC* etaprimeSig = new AliDielectronSignalMC("Etaprime", "etaprimeSignal"); ///etaprime pairs 
720   etaprimeSig->SetLegPDGs(11,-11);
721   etaprimeSig->SetMotherPDGs(331,331);
722   etaprimeSig->SetMothersRelation(AliDielectronSignalMC::kSame);
723   etaprimeSig->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
724   etaprimeSig->SetMotherSources(AliDielectronSignalMC::kPrimary, AliDielectronSignalMC::kPrimary);
725   etaprimeSig->SetCheckBothChargesLegs(kTRUE,kTRUE);
726   etaprimeSig->SetCheckBothChargesMothers(kTRUE,kTRUE);
727   etaprimeSig->SetFillPureMCStep(kTRUE);
728   die->AddSignalMC(etaprimeSig);
729
730
731   AliDielectronSignalMC* rhoSig = new AliDielectronSignalMC("Rho", "rhoSignal"); ///rho pairs 
732   rhoSig->SetLegPDGs(11,-11);
733   rhoSig->SetMotherPDGs(113,113);
734   rhoSig->SetMothersRelation(AliDielectronSignalMC::kSame);
735   rhoSig->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
736   rhoSig->SetMotherSources(AliDielectronSignalMC::kPrimary, AliDielectronSignalMC::kPrimary);
737   rhoSig->SetCheckBothChargesLegs(kTRUE,kTRUE);
738   rhoSig->SetCheckBothChargesMothers(kTRUE,kTRUE);
739   rhoSig->SetFillPureMCStep(kTRUE);
740   die->AddSignalMC(rhoSig);
741
742   AliDielectronSignalMC* omegaSig = new AliDielectronSignalMC("Omega", "omegaSignal"); ///omega pairs 
743   omegaSig->SetLegPDGs(11,-11);
744   omegaSig->SetMotherPDGs(223,223);
745   omegaSig->SetMothersRelation(AliDielectronSignalMC::kSame);
746   omegaSig->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
747   omegaSig->SetMotherSources(AliDielectronSignalMC::kPrimary, AliDielectronSignalMC::kPrimary);
748   omegaSig->SetCheckBothChargesLegs(kTRUE,kTRUE);
749   omegaSig->SetCheckBothChargesMothers(kTRUE,kTRUE);
750   omegaSig->SetFillPureMCStep(kTRUE);
751   die->AddSignalMC(omegaSig);
752   
753   AliDielectronSignalMC* phiSig = new AliDielectronSignalMC("Phi", "phiSignal"); ///phi pairs 
754   phiSig->SetLegPDGs(11,-11);
755   phiSig->SetMotherPDGs(333,333);
756   phiSig->SetMothersRelation(AliDielectronSignalMC::kSame);
757   phiSig->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
758   phiSig->SetMotherSources(AliDielectronSignalMC::kPrimary, AliDielectronSignalMC::kPrimary);
759   phiSig->SetCheckBothChargesLegs(kTRUE,kTRUE);
760   phiSig->SetCheckBothChargesMothers(kTRUE,kTRUE);
761   phiSig->SetFillPureMCStep(kTRUE);
762   die->AddSignalMC(phiSig);
763
764   /*
765   AliDielectronSignalMC* convSig = new AliDielectronSignalMC("conv", "convSignal");
766   convSig->SetLegPDGs(11,-11);
767   convSig->SetMothersRelation(AliDielectronSignalMC::kSame);
768   convSig->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState); //in this case, ee needs to be true=IsPhysicalPrimary(label)
769   convSig->SetCheckBothChargesLegs(kFALSE,kFALSE);
770   die->AddSignalMC(convSig);
771   */
772 }
773