]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGDQ/dielectron/macrosLMEE/ConfigLowMassDiEOezdemir.C
update from pr task : sjena
[u/mrichter/AliRoot.git] / PWGDQ / dielectron / macrosLMEE / ConfigLowMassDiEOezdemir.C
1
2    void InitHistograms(AliDielectron *die, Int_t cutDefinition);
3    void InitCF(AliDielectron* die, Int_t cutDefinition);
4
5    void InitMCCuts(Bool_t mcStatus, Int_t nPDGC, TArrayI* pdgC);
6
7    void SetupTrackCuts(AliDielectron *die, Int_t cutDefinition);
8
9    void SetupPairCuts(AliDielectron *die, Int_t cutDefinition);
10
11    void EnableMC();
12    AliESDtrackCuts *SetupESDtrackCuts(Int_t cutDefinition);
13    AliESDtrackCuts *SetupESDtrackCutsITSSA(Int_t cutDefinition);
14
15    TString names=("Base");
16    TObjArray *arrNames=names.Tokenize(";");
17    const Int_t nDie=arrNames->GetEntries();
18    Bool_t MCenabled=kFALSE;
19
20    Bool_t kMix = 0; //Event mixing (M.Koehler)
21
22    AliDielectron* ConfigLowMassDiEOezdemir(Int_t cutDefinition,Bool_t hasMC=kFALSE)
23    {
24          //
25          // Setup the instance of AliDielectron
26          //
27          
28          MCenabled=hasMC;
29          
30          // create the actual framework object
31         
32         TString name=Form("%02d",cutDefinition);
33          if ((cutDefinition)<arrNames->GetEntriesFast()){
34            name=arrNames->At((cutDefinition))->GetName();
35          }
36
37          //thisCut only relevant for MC:
38          AliDielectron *die =
39            new AliDielectron(Form
40            ("%s",name.Data()),
41                    Form("Track cuts: %s",name.Data()));
42         //Event mixing (M.Koehler)
43         if(kMix){
44         AliDielectronMixingHandler *mix = new AliDielectronMixingHandler;
45         mix->SetMixType(AliDielectronMixingHandler::kAll);
46         mix->AddVariable(AliDielectronVarManager::kZvPrim,"-10., -7.5, -5., -2.5 , 0., 2.5, 5., 7.5 , 10.");
47         mix->AddVariable(AliDielectronVarManager::kNacc,"0,10000");
48         mix->SetDepth(10);
49         die->SetMixingHandler(mix);
50         }
51          
52          // cut setup
53          SetupTrackCuts(die,cutDefinition);
54          SetupPairCuts(die,cutDefinition);
55          
56          // histogram setup
57          // only if an AliDielectronHistos object is attached to the
58          // dielectron framework histograms will be filled
59          //
60          InitHistograms(die,cutDefinition);
61
62          // the last definition uses no cuts and only the QA histograms should be filled!
63          //InitCF(die,cutDefinition);
64 /*
65          AliDielectronTrackRotator *rot=new AliDielectronTrackRotator;
66          rot->SetIterations(1);
67          rot->SetConeAnglePhi(TMath::Pi());
68          die->SetTrackRotator(rot);
69 */
70          return die;
71    }
72
73    //______________________________________________________________________________________
74    void SetupTrackCuts(AliDielectron *die, Int_t cutDefinition)
75    {
76          //
77          // Setup the track cuts
78          //
79          //
80
81
82          //
83          // ============ DALITZ REJECTION CUTS ====================
84          //
85          AliDielectronCutGroup* cgITSTPC = new AliDielectronCutGroup("cgITSTPC","cgITSTPC",AliDielectronCutGroup::kCompAND);
86          AliDielectronCutGroup* cgITSSA = new AliDielectronCutGroup("cgITSSA","cgITSSA",AliDielectronCutGroup::kCompAND);
87
88          cgITSTPC->AddCut(SetupESDtrackCuts(cutDefinition));
89          
90          AliDielectronPID *pidITSTPC = new AliDielectronPID("TPCpre","TPCpre");
91          pidITSTPC->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-3.,3.);
92          cgITSTPC->AddCut(pidITSTPC);
93
94          //---
95
96          cgITSSA->AddCut(SetupESDtrackCutsITSSA(cutDefinition));
97
98          AliDielectronPID *pidITSSA = new  AliDielectronPID("pidITSSA","pidITSSA");
99          //pidITSSA->AddCut(AliDielectronPID::kITS,AliPID::kPion,-999999.,-2.5,0.0,0.15,kFALSE ); //18.01.11: electron ID@lowpT
100          //pidITSSA->AddCut(AliDielectronPID::kITS,AliPID::kElectron,-3.,3.);
101          cgITSSA->AddCut(pidITSSA);
102
103          //
104          // ================Setup PID-Cuts (for final acceptance)===============
105          //
106          AliDielectronVarCuts *pt = new AliDielectronVarCuts("P>.2","P>.2");
107          pt->AddCut(AliDielectronVarManager::kP,.2,1e30);
108
109          // + [2] added for Dec2010 Cut! 
110          TF1 *lowerCut = new TF1("lowerCut", "[0] * TMath::Exp([1]*x) + [2]", 0, 20);
111      /* until Nov2010
112          lowerCut->SetParameter(0, -2.7);
113          lowerCut->SetParameter(1, -0.4357);
114          */
115          /* 18.01.2011 ALiHFEpid.cxx */
116          lowerCut->SetParameter(0,-3.7);
117          lowerCut->SetParameter(1,-0.8);
118          lowerCut->SetParameter(2,-0.35);
119 /*
120          if (MCenabled) { //overwrite parameters
121            lowerCut->SetParameter(0,-2.5);
122            lowerCut->SetParameter(2,-2.2);
123          }
124 */
125          //___________________________________________
126
127          AliDielectronPID *pidTPChardTOF = new AliDielectronPID("TPC-TOF-HFE","TPC-TOF-HFE");
128          pidTPChardTOF->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,lowerCut,3.,0.0,100.,kFALSE);
129          pidTPChardTOF->AddCut(AliDielectronPID::kTOF ,AliPID::kElectron , -3. , 3. , 0.0 , 100., kFALSE );
130
131          //___________________________________________
132          AliDielectronPID *pidTT = new AliDielectronPID("TPC-TOF","TPC-TOF");
133          pidTT->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-1.5,3.,0.2,100.,kFALSE);
134          pidTT->AddCut( AliDielectronPID::kTOF ,AliPID::kElectron , -2. , 2. , 0.4 , 5., kFALSE );
135          pidTT->AddCut(AliDielectronPID::kTPC,AliPID::kPion,-100.,4.,0.2,100.,kTRUE);
136
137         //___________________________________________
138          AliDielectronPID *pidTTnew = new AliDielectronPID("TPC-TOF-HFE","TPC-TOF-HFE");
139          pidTTnew->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-1.5,3.,0.2,100.,kFALSE);
140          pidTTnew->AddCut( AliDielectronPID::kTOF ,AliPID::kElectron , -3. , 3. , 0.4 , 5., kFALSE );
141          pidTTnew->AddCut(AliDielectronPID::kTPC,AliPID::kPion,-100.,4.,0.2,100.,kTRUE);
142
143          //___________________________________________
144          AliDielectronPID *pidTTonlyKP = new AliDielectronPID("TPC-TOF-HFE","TPC-TOF-HFE");
145          pidTTonlyKP->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,lowerCut,3.,0.0,100.,kFALSE);
146          pidTTonlyKP->AddCut( AliDielectronPID::kTOF ,AliPID::kElectron , -3. , 3. , 0.4 , 100., kFALSE );
147          pidTTonlyKP->AddCut(AliDielectronPID::kTPC,AliPID::kProton,-3,3.,0.,0.4,kTRUE); 
148          pidTTonlyKP->AddCut(AliDielectronPID::kTPC,AliPID::kKaon,-3,3.,0.,0.4,kTRUE); 
149
150          //___________________________________________
151
152          AliDielectronPID *pidTTupp = new AliDielectronPID("TPC-TOF-HFE","TPC-TOF-HFE");
153          pidTTupp->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-1.,3.,0.0,100.,kFALSE);
154          pidTTupp->AddCut( AliDielectronPID::kTOF ,AliPID::kElectron , -1. , 3. , 0.4 , 100., kFALSE );
155          pidTTupp->AddCut(AliDielectronPID::kTPC,AliPID::kPion,-1,3.,0.,0.4,kTRUE);
156          pidTTupp->AddCut(AliDielectronPID::kTPC,AliPID::kProton,-1,3.,0.,0.4,kTRUE); 
157          pidTTupp->AddCut(AliDielectronPID::kTPC,AliPID::kKaon,-1,3.,0.,0.4,kTRUE); 
158          //___________________________________________
159
160          AliDielectronPID *pidITS = new AliDielectronPID("ITS PID","ITS PID");
161          //pidITS->AddCut(AliDielectronPID::kITS,AliPID::kElectron,-1.,1.,0.0,100.,kFALSE );
162          pidITS->AddCut(AliDielectronPID::kITS,AliPID::kPion,-999999.,-2.5,0.0,0.15,kFALSE ); //18.01.11: electron ID@lowpT
163          pidITS->AddCut(AliDielectronPID::kITS,AliPID::kPion,-2.,2.,0.15,0.3,kTRUE ); //18.01.11: electron ID@lowpT
164          //move to config section, to give additional point in CF
165          pidITS->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,lowerCut,3.,0.0,100.,kFALSE);
166          pidITS->AddCut(AliDielectronPID::kTPC,AliPID::kPion,-3,3.,0.0,100.,kTRUE);
167          pidITS->AddCut(AliDielectronPID::kTOF ,AliPID::kElectron , -3. , 3. , 0.3 , 100., kFALSE );
168
169          AliDielectronVarCuts *ptITS = new AliDielectronVarCuts("Pt>.05","Pt>.05");
170          ptITS->AddCut(AliDielectronVarManager::kPt,.05,1e30);
171          //___________________________________________
172
173          AliDielectronPID *pidJpsi = new AliDielectronPID("TPC Jpsi-like","TPC Jpsi-like");
174          pidJpsi->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,lowerCut,3.,kFALSE); 
175          pidJpsi->AddCut(AliDielectronPID::kTPC,AliPID::kProton,-3,3.,kTRUE); //Difference: HFE-like inclusion
176          pidJpsi->AddCut(AliDielectronPID::kTPC,AliPID::kPion,-3,3.,kTRUE); //Difference: HFE-like inclusion
177          pidJpsi->AddCut(AliDielectronPID::kTPC,AliPID::kKaon,-3,3.,kTRUE); //Difference: HFE-like inclusion
178
179          //___________________________________________
180          AliDielectronPID *pidTPConlyE = new AliDielectronPID("TPC PID","TPC PID");
181          pidTPConlyE->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-1.5,3.,0.,100.,kFALSE);
182
183         //___________________________________________
184          AliDielectronPID *pidTPC = new AliDielectronPID("TPC PID","TPC PID");
185          pidTPC->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-1.5,3.,0.,100.,kFALSE);
186          pidTPC->AddCut(AliDielectronPID::kTPC,AliPID::kProton,-1.5,1.5,0.,100.,kTRUE); 
187          pidTPC->AddCut(AliDielectronPID::kTPC,AliPID::kKaon,-1.5,1.5,0.,100.,kTRUE);
188          pidTPC->AddCut(AliDielectronPID::kTPC,AliPID::kPion,-1.5,1.5,0.,100.,kTRUE); 
189
190          // 
191          // =============CREATE GROUPS FOR ==============
192          //
193
194          //Soft cut conditions for initial single-track analysis
195          AliDielectronCutGroup* cgInitialTrackFilter = new AliDielectronCutGroup("cgInitialTrackFilter","cgInitialTrackFilter",AliDielectronCutGroup::kCompOR);
196          cgInitialTrackFilter->AddCut(cgITSTPC);
197          cgInitialTrackFilter->AddCut(cgITSSA);
198
199
200          //Setup possible CutGroups for Step2
201          //HFE-Like:
202          //
203          //ITS-TPC-TOF
204          AliDielectronCutGroup* cgSecondTrackFilterITS = new AliDielectronCutGroup("cgSecondTrackFilterITS","cgSecondTrackFilterITS",AliDielectronCutGroup::kCompAND);
205          cgSecondTrackFilterITS->AddCut(cgITSTPC);
206          cgSecondTrackFilterITS->AddCut(pidITS);
207          cgSecondTrackFilterITS->AddCut(ptITS);
208
209
210          //Config 6: TPC-TOF classic rej. only kaon & proton
211          AliDielectronCutGroup* cgSecondTrackFilterPIDTPConlyKP = new AliDielectronCutGroup("cgPIDTPConlyKP","cgPIDTPConlyKP",AliDielectronCutGroup::kCompAND);
212          cgSecondTrackFilterPIDTPConlyKP->AddCut(pt);
213          cgSecondTrackFilterPIDTPConlyKP->AddCut(SetupESDtrackCuts(cutDefinition));
214          cgSecondTrackFilterPIDTPConlyKP->AddCut(pidTTonlyKP);
215
216
217          //Config 0: TPC-TOF classic 
218          AliDielectronCutGroup* cgSecondTrackFilterPIDTPCclassic = new AliDielectronCutGroup("cgPIDTPCclassic","cgPIDTPCclassic",AliDielectronCutGroup::kCompAND);
219          cgSecondTrackFilterPIDTPCclassic->AddCut(SetupESDtrackCuts(cutDefinition));
220          //cgSecondTrackFilterPIDTPCclassic->AddCut(pidTT);
221
222          //Config 1: TPC-TOF Classic with -1.5/3 sigma (soft TOF, TPC exclusion)
223          AliDielectronCutGroup* cgSecondTrackFilterPIDTPC = new AliDielectronCutGroup("cgPIDTPC","cgPIDTPC",AliDielectronCutGroup::kCompAND);
224          cgSecondTrackFilterPIDTPC->AddCut(SetupESDtrackCuts(cutDefinition));
225          cgSecondTrackFilterPIDTPC->AddCut(pidTTnew);
226
227         //Config 2: TPC only electrons
228          AliDielectronCutGroup* cgSecondTrackFilterPIDTPConlyE = new AliDielectronCutGroup("cgPIDTPConlyE","cgPIDTPConlyE",AliDielectronCutGroup::kCompAND);
229          cgSecondTrackFilterPIDTPConlyE->AddCut(SetupESDtrackCuts(cutDefinition));
230          cgSecondTrackFilterPIDTPConlyE->AddCut(pidTPConlyE);
231
232         //TPC (kaon, proton, pion exclusion)
233         AliDielectronCutGroup* cgSecondTrackFilterPIDTPCSA = new AliDielectronCutGroup("cgPIDTPCSA","cgPIDTPCSA",AliDielectronCutGroup::kCompAND);
234          cgSecondTrackFilterPIDTPCSA->AddCut(SetupESDtrackCuts(cutDefinition));
235          cgSecondTrackFilterPIDTPCSA->AddCut(pidTPC);
236
237          //Not in use
238          AliDielectronCutGroup* cgSecondTrackFilterJpsi = new AliDielectronCutGroup("cgSecondTrackFilterJpsi","cgSecondTrackFilterJpsi",AliDielectronCutGroup::kCompAND);
239          cgSecondTrackFilterJpsi->AddCut(pt);
240          cgSecondTrackFilterJpsi->AddCut(pidJpsi);
241          cgSecondTrackFilterJpsi->AddCut(cgITSTPC);
242
243          AliDielectronCutGroup* cgSecondTrackFilterCombinedTPC=  new AliDielectronCutGroup("cgSecondTrackFilterCombinedTPC","cgSecondTrackFilterCombinedTPC",AliDielectronCutGroup::kCompOR);
244          cgSecondTrackFilterCombinedTPC->AddCut(cgSecondTrackFilterPIDTPC);
245          cgSecondTrackFilterCombinedTPC->AddCut(cgSecondTrackFilterJpsi);
246
247
248
249          //Correct BG scheme for Combinatorial BG 
250          //die->SetPreFilterUnlikeOnly();
251          die->SetPreFilterAllSigns();
252          die->SetUseKF(kFALSE);
253
254          //New Cut-scheme
255          //
256          //
257         
258 //      if ( cutDefinition ==0 ) {
259 //         //Step1: TrackFilter, nur grob
260 //         die->GetTrackFilter().AddCuts(cgInitialTrackFilter);
261 //         //Step2: "Final" PID
262 //         die->GetPairPreFilterLegs().AddCuts(cgSecondTrackFilterPIDTPC);      
263 //      }
264
265
266         if ( cutDefinition ==0 ) {
267            die->GetTrackFilter().AddCuts(cgSecondTrackFilterPIDTPC);    
268         }
269
270    }
271    //______________________________________________________________________________________
272
273    void SetupPairCuts(AliDielectron *die, Int_t cutDefinition)
274    {
275          //
276          // Setup the pair cuts
277          //
278          
279         
280         if(cutDefinition == 0){
281
282         AliDielectronTrackCuts *noconv=new AliDielectronTrackCuts("noConv","conversion tagging");
283         noconv->SetV0DaughterCut(AliPID::kElectron,kTRUE);
284         die->GetTrackFilter().AddCuts(noconv);
285                     
286         //pair rapidity
287 //         AliDielectronVarCuts *RapidityCut=new AliDielectronVarCuts("RapidityCut","RapidityCut");
288 //      RapidityCut->AddCut(AliDielectronVarManager::kY, -0.8 , 0.8);
289 //         die->GetPairFilter().AddCuts(RapidityCut);   
290
291         AliDielectronVarCuts *PhiV = new AliDielectronVarCuts("PhiV","PhiV");//mass and Phiv together
292         PhiV->AddCut(AliDielectronVarManager::kM, 0.0 , 0.05);
293         PhiV->AddCut(AliDielectronVarManager::kPhivPair, 2.5 , 3.2 );
294         die->GetPairPreFilter().AddCuts(PhiV);
295         /*
296         AliDielectronVarCuts *PhiV2 = new AliDielectronVarCuts("PhiV2","PhiV2");//mass and Phiv together
297         PhiV2->AddCut(AliDielectronVarManager::kM, 0.05 , 1000.);
298
299         AliDielectronCutGroup* pairCutsCG2 =new AliDielectronCutGroup("pairCutsCG2","pairCutsCG2",AliDielectronCutGroup::kCompOR);
300         pairCutsCG2->AddCut(PhiV);
301         pairCutsCG2->AddCut(PhiV2);
302         die->GetPairFilter().AddCuts(pairCutsCG2);
303         */
304         /*
305         if (MCenabled) {
306         AliDielectronVarCuts *mcpid =new AliDielectronVarCuts("mcpid","mcpid");
307         mcpid->SetCutType(AliDielectronVarCuts::kAny);
308         mcpid->AddCut(AliDielectronVarManager::kPdgCode, 11);
309         mcpid->AddCut(AliDielectronVarManager::kPdgCode, -11);
310         die->GetTrackFilter().AddCuts(mcpid);
311
312         AliDielectronVarCuts *MCnoConv =new AliDielectronVarCuts("MCnoConv","MCnoConv");
313         MCnoConv->AddCut(AliDielectronVarManager::kPdgCodeMother, 22,kTRUE);
314         die->GetTrackFilter().AddCuts(MCnoConv);
315                 }
316         */      
317         }
318
319    }
320
321    //______________________________________________________________________________________
322    AliESDtrackCuts *SetupESDtrackCuts(Int_t cutDefinition)
323    {
324          //
325          // Setup default AliESDtrackCuts
326          //
327          AliESDtrackCuts *esdTrackCuts = new AliESDtrackCuts;
328           //esdTrackCuts->SetDCAToVertex2D(kTRUE);
329          
330          esdTrackCuts->SetMaxDCAToVertexZ(3.0);
331          esdTrackCuts->SetMaxDCAToVertexXY(1.0); 
332          //esdTrackCuts->SetMaxNsigmaToVertex(3.0); 
333
334          esdTrackCuts->SetPtRange(  0.2 , 100.0);
335          esdTrackCuts->SetEtaRange( -0.8 , 0.8 );
336          esdTrackCuts->SetRequireSigmaToVertex(kFALSE);
337          esdTrackCuts->SetAcceptKinkDaughters(kFALSE);
338          esdTrackCuts->SetDCAToVertex2D(kFALSE);
339
340          esdTrackCuts->SetRequireITSRefit(kTRUE);
341          //esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kBoth); //SPDboth
342          esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kFirst); //Base
343          //esdTrackCuts->SetMinNClustersITS(4); // ITSCls4
344          esdTrackCuts->SetMinNClustersITS(3);  //Base
345
346          esdTrackCuts->SetRequireTPCRefit(kTRUE);
347          //esdTrackCuts->SetMinNClustersTPC(100); //TPCCls100
348          esdTrackCuts->SetMinNClustersTPC(80);     //Base
349          
350
351          //esdTrackCuts->SetMinNCrossedRowsTPC(120); //TPCCrsR120
352          esdTrackCuts->SetMinNCrossedRowsTPC(100);   //Base
353
354          esdTrackCuts->SetMinRatioCrossedRowsOverFindableClustersTPC(0.5);
355          esdTrackCuts->SetMaxChi2PerClusterTPC(4);
356
357          return esdTrackCuts;
358    }
359
360    //______________________________________________________________________________________
361
362    AliESDtrackCuts *SetupESDtrackCutsITSSA(Int_t cutDefinition)
363    {
364          //
365          // Setup default AliESDtrackCuts
366          //
367          AliESDtrackCuts *esdTrackCuts = new AliESDtrackCuts;
368           esdTrackCuts->SetDCAToVertex2D(kTRUE);
369
370          esdTrackCuts->SetMaxDCAToVertexZ(3.0);
371          esdTrackCuts->SetMaxDCAToVertexXY(1.0); 
372
373          esdTrackCuts->SetEtaRange( -0.84 , 0.84 );
374          
375          esdTrackCuts->SetPtRange(  0.0, 200.);
376
377          esdTrackCuts->SetAcceptKinkDaughters(kFALSE);
378          esdTrackCuts->SetRequireITSRefit(kTRUE);
379          esdTrackCuts->SetRequireITSStandAlone(kTRUE);
380
381          esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kFirst);
382          esdTrackCuts->SetMinNClustersITS(3); //PhotonGroup-Dalitz: 2?!
383          
384
385          return esdTrackCuts;
386    }
387
388    //______________________________________________________________________________________
389
390 void InitHistograms(AliDielectron *die, Int_t cutDefinition)
391    {
392  //
393   // Initialise the histograms
394   //
395   
396   //Setup histogram classes
397   AliDielectronHistos *histos=
398     new AliDielectronHistos(die->GetName(),
399                             die->GetTitle());
400   
401
402
403   //Initialise histogram classes
404   histos->SetReservedWords("Track;Pair");
405   //histos->SetReservedWords("Track");  
406
407   //Event class
408   histos->AddClass("Event");
409   
410
411   //Track classes
412   //to fill also track info from 2nd event loop until 2
413   for (Int_t i=0; i<2; ++i){
414     histos->AddClass(Form("Track_%s",AliDielectron::TrackClassName(i)));
415   }
416   
417   //Pair classes
418   // to fill also mixed event histograms loop until 10
419
420   for (Int_t i=0; i<3; ++i){
421     histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(i)));
422
423   }
424
425   if(kMix){
426   histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(3))); //ME ++
427   histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(4)));//ME -+
428   histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(6)));//ME +-
429   histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(7))); // ME --
430   }
431
432   //if(kRot)histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(10)));//Rot
433
434
435   //add histograms to event class
436   histos->UserHistogram("Event","nEvents","Number of processed events after cuts;Number events",1,0,1,AliDielectronVarManager::kNevents);
437   histos->UserHistogram("Event","ZVertex","ZVertex;ZVertex/cm",480,-12.,12.,AliDielectronVarManager::kZvPrim);
438   histos->UserHistogram("Event","nESDTracks","ESD tracks;ESD tracks;Number events",100,0,200,AliDielectronVarManager::kTracks);
439   histos->UserHistogram("Event","Nacc","Number of accepted tracks;Number events",100,0,200,AliDielectronVarManager::kNacc);
440   histos->UserHistogram("Event","NVtxContrib","Number of Vertex Contributor;NVtx;Number events",100,0,100,AliDielectronVarManager::kNVtxContrib);
441
442
443   //add histograms to Track classes
444   histos->UserHistogram("Track","P","P;P [GeV];#tracks",500,0.,10.,AliDielectronVarManager::kPIn);
445   histos->UserHistogram("Track","Pt","Pt;Pt [GeV];#tracks",500,0.,10.,AliDielectronVarManager::kPt);
446   histos->UserHistogram("Track","Eta","Eta; Eta ;#tracks",100,-1.,1.,AliDielectronVarManager::kEta);
447   histos->UserHistogram("Track","Phi","Phi; Phi ;#tracks",640,0.,6.4,AliDielectronVarManager::kPhi);
448
449
450   histos->UserHistogram("Track","Eta_phi","Eta vs Phi;Eta;Phi",100,-1.,1.,320,0.,6.4,AliDielectronVarManager::kEta,AliDielectronVarManager::kPhi);
451   histos->UserHistogram("Track","Eta_pt","Eta vs Pt;Eta;Pt",100,-1.,1.,500,0.,10.,AliDielectronVarManager::kEta,AliDielectronVarManager::kPt);
452   histos->UserHistogram("Track","ImpParXY_Pt","ImpParXY_Pt; Pt; ÍmpParXY",500,0.,10.,500,-5.,5.,AliDielectronVarManager::kPt,AliDielectronVarManager::kImpactParXY);
453   histos->UserHistogram("Track","ImpParZ_Pt","ImpParZ_Pt; Pt; ÍmpParZ",500,0.,10.,500,-5.,5.,AliDielectronVarManager::kPt,AliDielectronVarManager::kImpactParZ);
454  
455
456   //track checks (ITS)
457   histos->UserHistogram("Track","ITSchi2Cl_Mom","ITS Chi2 vs Momentum;Mom;ITS chi2",500,0.,5.,50,0.,5.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kITSchi2Cl);
458   histos->UserHistogram("Track","NclsITS_Mom",";Mom;kNclsITS",500,0.,5.,7,0,7,AliDielectronVarManager::kPIn,AliDielectronVarManager::kNclsITS);
459
460   //track checks (TPC)
461   histos->UserHistogram("Track","TPCsignalNfrac_Mom",";fraction TPCSignalN/TPCncls vs Momentum;Mom;TPCSignalN/TPCncls",500,0.,5.,60,0.,1.2,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCsignalNfrac);
462   histos->UserHistogram("Track","TPCchi2Cl_Mom","TPC Chi2 vs Momentum;Mom;TPC Chi2",500,0.,10.,100,0,5,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCchi2Cl);
463   histos->UserHistogram("Track","TPCclsDiff_Mom","kTPCclsDiff vs Momentum;Mom;kTPCclsDiff",500,0.,10.,100,-10,10,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCclsDiff);
464   histos->UserHistogram("Track","FindableTPCcls_Mom","kNFclsTPC vs Momentum;Mom;kNFclsTPC",500,0.,10.,200,0.,200.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kNFclsTPC);
465   histos->UserHistogram("Track","TPCcls_Mom","kNclsTPC vs Momentum;Mom;kNclsTPC",500,0.,10.,200,0.,200.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kNclsTPC);
466   histos->UserHistogram("Track","kNclsSFracTPC_Mom","kNclsSFracTPC vs Momentum;Mom;kTPCclsSFrac",500,0.,10.,1000,0.,1.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kNclsSFracTPC);
467   histos->UserHistogram("Track","kNFclsTPCrFrac_Mom","kNFclsTPCrFrac vs Momentum;Mom;kNFclsTPCrFrac",500,0.,10.,60,0.,1.2.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kNFclsTPCrFrac);
468
469   //track checks (TOF)
470   histos->UserHistogram("Track","TOFbeta_Mom","kTOFbeta vs Momentum;Mom;TOFbeta",500,0.,5.,120,0.,1.2,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTOFbeta);
471   histos->UserHistogram("Track","TOFPIDBit_Mom","kTOFPIDBit vs Momentum;Mom;TOFPIDbit",500,0.,5.,2,0.,1.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTOFPIDBit);
472
473   //track checks (PID)
474   histos->UserHistogram("Track","ITSnSigma_MomPio","ITS number of sigmas Pion vs Momentum;Mom;ITSsigmaPion",500,0.,5.,1000,-20,20,AliDielectronVarManager::kPIn,AliDielectronVarManager::kITSnSigmaPio);
475   histos->UserHistogram("Track","TPCnSigma_MomPio","TPC number of sigmas Pions vs Momentum;Mom;TPCsigmaPion",500,0.,5.,1000,-20,20,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCnSigmaPio);
476
477   histos->UserHistogram("Track","ITSnSigma_MomEle","ITS number of sigmas Electrons vs Momentum;Mom;ITSsigmaEle",500,0.,5.,800,-40,40,AliDielectronVarManager::kPIn,AliDielectronVarManager::kITSnSigmaEle);
478   histos->UserHistogram("Track","TPCnSigma_MomEle","TPC number of sigmas Electrons vs Momentum;Mom;TPCsigmaEle",1000,0.,10.,800,-40,40,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCnSigmaEle);
479   histos->UserHistogram("Track","TOFnSigma_MomEle","TOF number of sigmas Electrons vs Momentum;Mom;TOFsigmaEle",500,0.,5.,800,-40,40,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTOFnSigmaEle);
480
481   histos->UserHistogram("Track","ITSdEdx_P","dEdx;P [GeV];ITS signal (arb units) vs Momentum;Mom;ITSsignal", 500,0,5,800,0,200,AliDielectronVarManager::kPIn,AliDielectronVarManager::kITSsignal);
482   histos->UserHistogram("Track","TPCdEdx_P","dEdx;P [GeV];TPC signal (arb units) vs Momentum;Mom;TPCsignal", 500,0,10.,800,0,200,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCsignal);
483
484   //
485   //add histograms to Pair classes
486   //
487
488   histos->UserHistogram("Pair","InvMass","Inv.Mass;Inv. Mass [GeV];#pairs",
489                         500,0,4,AliDielectronVarManager::kM);
490
491   histos->UserHistogram("Pair","InvMass_low","Inv.Mass;Inv. Mass [GeV];#pairs",
492                         500,0,0.5,AliDielectronVarManager::kM);
493
494   histos->UserHistogram("Pair","InvMass10","Inv.Mass;Inv. Mass [GeV];#pairs",
495                         500,0.,5.,AliDielectronVarManager::kM);
496
497   histos->UserHistogram("Pair","kDeltaEta","kDeltaEta;kDeltaEta;#pairs",
498                         160,0.,1.6,AliDielectronVarManager::kDeltaEta);
499
500   histos->UserHistogram("Pair","kDeltaEta_low","kDeltaEta;kDeltaEta;#pairs",
501                         500,0.,0.5,AliDielectronVarManager::kDeltaEta);
502
503   histos->UserHistogram("Pair","kDeltaPhi","kDeltaPhi;kDeltaPhi;#pairs",
504                         320,0.,6.4,AliDielectronVarManager::kDeltaPhi);
505
506   histos->UserHistogram("Pair",
507                         "kDeltaEta_kDeltaPhi","kDeltaEta_kDeltaPhi;kDeltaEta;kDeltaPhi",
508                         160, 0. , 1.6, 320 , 0., 6.4 ,
509                          AliDielectronVarManager::kDeltaEta , AliDielectronVarManager::kDeltaPhi );
510
511   histos->UserHistogram("Pair","PhiV",";PhiV;#pairs",
512                         320,0.,6.4,AliDielectronVarManager::kPhivPair);
513
514
515    histos->UserHistogram("Pair","PhiV_Pt",";Pt;PhiV",
516                          100,0.,10.,320,0.,6.4,AliDielectronVarManager::kPt,AliDielectronVarManager::kPhivPair);
517
518    histos->UserHistogram("Pair","InvMass_bin2","Inv.Mass;Inv. Mass [GeV];#pairs",
519         "0. , 0.025, 0.05 , 0.075 ,0.1 ,0.15 , 0.2 , 0.25 , 0.3 , 
520         0.4 ,  0.5 , 0.6, 0.65 , 0.688 , 0.725, 0.75, 0.775, 0.8 , 0.85 ,
521          0.95,  0.975 , 1.0 , 1.025 , 1.05, 1.125 , 1.25 , 1.5 , 1.75 , 2.0 , 
522         2.25, 2.5 , 2.75 , 2.85, 2.95,3.05, 3.1 , 3.15 , 
523         3.3 , 3.5, 3.75 , 4.0",AliDielectronVarManager::kM);
524
525
526   histos->UserHistogram("Pair",
527                         "InvMass_Pt","InvMass_Pt;InvMass;Pt",
528                         500, 0. , 4., 100 , 0., 5. ,
529                          AliDielectronVarManager::kM , AliDielectronVarManager::kPt );
530
531   histos->UserHistogram("Pair",
532                         "InvMass_PhivPair","InvMass_PhivPair;InvMass;PhivPair",
533                         500, 0. , 4., 320 , 0., 3.2 ,
534                          AliDielectronVarManager::kM , AliDielectronVarManager::kPhivPair );
535
536   histos->UserHistogram("Pair",
537                         "OpAngle","Opening angle;Opening angle;#pairs",
538                         320, 0. , 3.2, 
539                          AliDielectronVarManager::kOpeningAngle);
540
541   histos->UserHistogram("Pair",
542                         "OpAngle_InvMass","OpAngle_InvMass;Opening angle;Invariant Mass",
543                         320, 0. , 3.2, 500 , 0. , 4. ,
544                          AliDielectronVarManager::kOpeningAngle,AliDielectronVarManager::kM);
545
546
547   histos->UserHistogram("Pair",
548                         "Phi","Phi;counts;Phi",
549                         320, 0. , 6.4, AliDielectronVarManager::kPhi);
550
551   histos->UserHistogram("Pair",
552                         "Y","Y;counts;Y",
553                         120, -1.2 , 1.2, AliDielectronVarManager::kY);
554
555   die->SetHistogramManager(histos);
556
557 }
558
559
560 void InitCF(AliDielectron* die, Int_t cutDefinition)
561 {
562   //
563   // Setupd the CF Manager if needed
564   //
565   AliDielectronCF *cf=new AliDielectronCF(die->GetName(),die->GetTitle());
566  
567   //pair variables
568   cf->AddVariable(AliDielectronVarManager::kPt,100,0.,10.);
569   //cf->AddVariable(AliDielectronVarManager::kP,200,0,20);
570   //cf->AddVariable(AliDielectronVarManager::kPhi,64, -3.2, 3.2);
571   cf->AddVariable(AliDielectronVarManager::kY,40,-2.,2.);
572   cf->AddVariable(AliDielectronVarManager::kM,500,0.,4.); 
573   //cf->AddVariable(AliDielectronVarManager::kPairType,10,0,10);
574   //cf->AddVariable(AliDielectronVarManager::kOpeningAngle,315,0,3.15);
575   //cf->AddVariable(AliDielectronVarManager::kDeltaEta,200,-2,2);
576   //cf->AddVariable(AliDielectronVarManager::kDeltaPhi,100,0,3.15);
577   //cf->AddVariable(AliDielectronVarManager::kHaveSameMother,21,-10,10);
578   cf->AddVariable(AliDielectronVarManager::kNumberOfDaughters,5,0,5);
579   //leg variables
580   cf->AddVariable(AliDielectronVarManager::kPt,100,0.,10.,kTRUE);
581   //cf->AddVariable(AliDielectronVarManager::kP,200,0.,20.,kTRUE);
582   //cf->AddVariable(AliDielectronVarManager::kY,40,-2.,2.,kTRUE);
583   cf->AddVariable(AliDielectronVarManager::kEta,20,-1.,1.,kTRUE);
584   cf->AddVariable(AliDielectronVarManager::kPhi,100,0.,3.15,kTRUE);
585 //  cf->AddVariable(AliDielectronVarManager::kITSsignal,1000,0.0.,1000.,kTRUE);
586 //  cf->AddVariable(AliDielectronVarManager::kHaveSameMother,21,-10,10,kTRUE);
587 //  cf->AddVariable(AliDielectronVarManager::kNumberOfDaughters,11,0,10,kTRUE);
588  
589   //only in this case write MC truth info
590  
591   if (MCenabled) {
592         cf->SetStepForMCtruth();
593         //cf->SetStepsForMCtruthOnly();
594         //cf->SetStepForNoCutsMCmotherPid();
595         cout << "MC ENABLED ------------------------------------------------------" << endl;
596     //cf->AddVariable(AliDielectronVarManager::kPdgCode,10000,-5000.5,4999.5,kTRUE);
597     //cf->AddVariable(AliDielectronVarManager::kPdgCodeMother,10000,-5000.5,4999.5,kTRUE);
598   }
599
600   //cf->SetStepsForEachCut();
601   //cf->SetStepForPreFilter();
602   cf->SetStepForAfterAllCuts();
603   //cf->SetStepsForBackground();
604   cf->SetStepsForSignal();
605   
606   die->SetCFManagerPair(cf);
607
608 /*
609
610   AliDielectronSignalMC* lowMassDiele=new
611         AliDielectronSignalMC("lowMassDiele","low mass dielectron pairs");
612   lowMassDiele->SetLegPDGs(11,-11);
613   lowMassDiele->SetCheckBothChargesLegs(kTRUE,kTRUE);
614   lowMassDiele->SetLegSources(AliDielectronSignalMC::kPrimary,
615           AliDielectronSignalMC::kPrimary);
616   lowMassDiele->SetFillPureMCStep(kTRUE);
617   die->AddSignalMC(lowMassDiele);
618
619   AliDielectronSignalMC* secondary=new
620         AliDielectronSignalMC("secondary","secondary electrons pairs");
621   secondary->SetLegPDGs(11,-11);
622   secondary->SetCheckBothChargesLegs(kTRUE,kTRUE);
623   secondary->SetLegSources(AliDielectronSignalMC::kSecondary,
624           AliDielectronSignalMC::kSecondary);
625   die->AddSignalMC(secondary);
626
627   AliDielectronSignalMC* eleFromConversions=new
628         AliDielectronSignalMC("eleFromConversions","conversion electrons");
629   eleFromConversions->SetLegPDGs(11,-11);
630   eleFromConversions->SetCheckBothChargesLegs(kTRUE,kTRUE);
631   eleFromConversions->SetLegSources(AliDielectronSignalMC::kSecondary,
632           AliDielectronSignalMC::kSecondary);
633   eleFromConversions->SetMotherPDGs(22,22);    // 22- photon
634   die->AddSignalMC(eleFromConversions);
635
636   AliDielectronSignalMC* misIdPions=new
637         AliDielectronSignalMC("misIdPions","mis id. pion pairs");
638   misIdPions->SetLegPDGs(211,-211);
639   misIdPions->SetCheckBothChargesLegs(kTRUE,kTRUE);
640   die->AddSignalMC(misIdPions);
641
642   AliDielectronSignalMC* dalitzDecays=new
643         AliDielectronSignalMC("dalitzDecays","dalitz Pairs");
644   dalitzDecays->SetLegPDGs(11,-11);
645   dalitzDecays->SetCheckBothChargesLegs(kTRUE,kTRUE);
646   dalitzDecays->SetLegSources(AliDielectronSignalMC::kSecondary,
647                 AliDielectronSignalMC::kSecondary);
648   dalitzDecays->SetMotherPDGs(111,111);
649   dalitzDecays->SetFillPureMCStep(kTRUE);
650   die->AddSignalMC(dalitzDecays);
651 */
652
653 AliDielectronSignalMC* PhiDecays= new AliDielectronSignalMC("PhiDecays","Phi Pairs");
654 PhiDecays->SetLegPDGs(11,-11);
655 PhiDecays->SetCheckBothChargesLegs(kTRUE,kTRUE);
656 PhiDecays->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
657 PhiDecays->SetMotherPDGs(333,333);
658 PhiDecays->SetMothersRelation(AliDielectronSignalMC::kSame); 
659 PhiDecays->SetFillPureMCStep(kTRUE);
660 die->AddSignalMC(PhiDecays);
661
662 AliDielectronSignalMC* OmegaDecays= new AliDielectronSignalMC("OmegaDecays","Omega Pairs");
663 OmegaDecays->SetLegPDGs(11,-11);
664 OmegaDecays->SetCheckBothChargesLegs(kTRUE,kTRUE);
665 OmegaDecays->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
666 OmegaDecays->SetMotherPDGs(223,223);
667 OmegaDecays->SetMothersRelation(AliDielectronSignalMC::kSame); 
668 OmegaDecays->SetFillPureMCStep(kTRUE);
669 die->AddSignalMC(OmegaDecays);
670
671 /*
672 AliDielectronSignalMC* RhoDecays= new AliDielectronSignalMC("RhoDecays","Rho Pairs");
673 RhoDecays->SetLegPDGs(11,-11);
674 RhoDecays->SetCheckBothChargesLegs(kTRUE,kTRUE);
675 RhoDecays->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
676 RhoDecays->SetMotherPDGs(113,113);
677 RhoDecays->SetMothersRelation(AliDielectronSignalMC::kSame); 
678 RhoDecays->SetFillPureMCStep(kTRUE);
679 die->AddSignalMC(RhoDecays);
680
681 AliDielectronSignalMC* DieleConti= new AliDielectronSignalMC("DieleConti","low mass ee pairs");
682 DieleConti->SetLegPDGs(11,-11);
683 DieleConti->SetMotherPDGs(0,0,22,22);
684 DieleConti->SetCheckBothChargesLegs(kTRUE,kTRUE);
685 DieleConti->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
686 DieleConti->SetMothersRelation(AliDielectronSignalMC::kSame);
687 DieleConti->SetFillPureMCStep(kTRUE);
688 die->AddSignalMC(DieleConti);*/
689
690
691 }
692
693 //--------------------------------------
694    void EnableMC() {
695         MCenabled=kTRUE;
696    }
697