]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG3/dielectron/macros/ConfigJpsi2eeDataAOD.C
Updates and additions: Classes for signal and spectrum extraction; saving of
[u/mrichter/AliRoot.git] / PWG3 / dielectron / macros / ConfigJpsi2eeDataAOD.C
1
2 void InitHistograms(AliDielectron *die, Int_t cutDefinition);
3 void InitCF(AliDielectron* die, Int_t cutDefinition);
4
5 void SetupTrackCuts(AliDielectron *die, Int_t cutDefinition);
6 void SetupPairCuts(AliDielectron *die, Int_t cutDefinition);
7
8 TString names=("trackQ+Pt>1GeV+loose_PID;trackQ+Pt>1GeV+tight_PID;trackQ+Pt>.5GeV");
9 TObjArray *arrNames=names.Tokenize(";");
10
11 const Int_t nDie=arrNames->GetEntries();
12
13 AliDielectron* ConfigJpsi2ee(Int_t cutDefinition)
14 {
15   //
16   // Setup the instance of AliDielectron
17   //
18   
19   // create the actual framework object
20   TString name=Form("%02d",cutDefinition);
21   if (cutDefinition<arrNames->GetEntriesFast()){
22     name=arrNames->At(cutDefinition)->GetName();
23   }
24   AliDielectron *die =
25     new AliDielectron(Form("%s",name.Data()),
26                       Form("Track cuts: %s",name.Data()));
27   
28   // cut setup
29   SetupTrackCuts(die,cutDefinition);
30   SetupPairCuts(die,cutDefinition);
31   
32   //
33   // histogram setup
34   // only if an AliDielectronHistos object is attached to the
35   //  dielectron framework the QA histograms will be filled
36   //
37   InitHistograms(die,cutDefinition);
38
39   // the last definition uses no cuts and only the QA histograms should be filled!
40   if (cutDefinition<nDie-1) InitCF(die,cutDefinition);
41   
42   return die;
43 }
44
45 //______________________________________________________________________________________
46 void SetupTrackCuts(AliDielectron *die, Int_t cutDefinition)
47 {
48   //
49   // Setup the track cuts
50   //
51   
52   //ESD quality cuts
53   die->GetTrackFilter().AddCuts(SetupESDtrackCuts(cutDefinition));
54   
55
56   //QA no CF
57   if (cutDefinition==nDie-1) {
58     //Pt cut
59     AliDielectronVarCuts *pt = new AliDielectronVarCuts("Pt>.5","Pt>.5");
60     pt->AddCut(AliDielectronVarManager::kPt,.5,1e30);
61     die->GetTrackFilter().AddCuts(pt);
62     
63     return;
64   }
65
66   
67   AliDielectronVarCuts *pt = new AliDielectronVarCuts("Pt>1","Pt>1");
68   pt->AddCut(AliDielectronVarManager::kPt,1.,1e30);
69   pt->AddCut(AliDielectronVarManager::kImpactParZ,-3.,3.);
70   pt->AddCut(AliDielectronVarManager::kImpactParXY,-.07,.07);
71   die->GetTrackFilter().AddCuts(pt);
72   
73   //loose PID
74   if (cutDefinition==0){
75     //ESD pid cuts (TPC nSigma Electrons)
76     AliDielectronVarCuts *pid = new AliDielectronVarCuts("TPCpid","TPC nSigma cut |e|<3 pi>2 |P|>2 |K|>2");
77     //include
78     pid->AddCut(AliDielectronVarManager::kTPCnSigmaEle, -3., 3.);
79     //exclude
80     pid->AddCut(AliDielectronVarManager::kTPCnSigmaPio, -20., 2., kTRUE);
81     pid->AddCut(AliDielectronVarManager::kTPCnSigmaPro, -2., 2., kTRUE);
82     pid->AddCut(AliDielectronVarManager::kTPCnSigmaKao, -2., 2., kTRUE);
83     die->GetTrackFilter().AddCuts(pid);
84   }
85
86   //tight PID
87   if (cutDefinition==1){
88     //ESD pid cuts (TPC nSigma Electrons)
89     AliDielectronVarCuts *pid = new AliDielectronVarCuts("TPCpid","TPC nSigma cut |e|<2 pi>2 |P|>2 |K|>2; |dXY|<200um");
90     //include
91     pid->AddCut(AliDielectronVarManager::kTPCnSigmaEle, -2., 2.);
92     //exclude
93     pid->AddCut(AliDielectronVarManager::kTPCnSigmaPio, -2., 2., kTRUE);
94     pid->AddCut(AliDielectronVarManager::kTPCnSigmaPro, -2., 2., kTRUE);
95     pid->AddCut(AliDielectronVarManager::kTPCnSigmaKao, -2., 2., kTRUE);
96     //tighten Impact parameter to 200um
97     pid->AddCut(AliDielectronVarManager::kImpactParXY, -0.02, 0.02);
98     die->GetTrackFilter().AddCuts(pid);
99   }
100   
101 }
102
103 //______________________________________________________________________________________
104 void SetupPairCuts(AliDielectron *die, Int_t cutDefinition)
105 {
106   //
107   // Setup the pair cuts
108   //
109   
110   
111   // reject conversions
112   // and select mass region
113   AliDielectronVarCuts *openingAngleCut=new AliDielectronVarCuts("OpeningAngle","Opening angle > 35mrad");
114   openingAngleCut->AddCut(AliDielectronVarManager::kOpeningAngle,.035,4.);
115   openingAngleCut->AddCut(AliDielectronVarManager::kM,2.,4.);
116   die->GetPairFilter().AddCuts(openingAngleCut);
117 }
118
119 //______________________________________________________________________________________
120 void InitHistograms(AliDielectron *die, Int_t cutDefinition)
121 {
122   //
123   // Initialise the QA histograms
124   //
125
126   //Setup QA histograms
127   AliDielectronHistos *histos=
128     new AliDielectronHistos(die->GetName(),
129                             die->GetTitle());
130   
131   //Initialise histogram classes
132   histos->SetReservedWords("Track;Pair");
133   
134   //Event class (only for last QA)
135   if (cutDefinition==nDie-1) histos->AddClass("Event");
136   
137   //Track classes, only first event
138   for (Int_t i=0; i<2; ++i){
139     histos->AddClass(Form("Track_%s",AliDielectron::TrackClassName(i)));
140   }
141   
142   //Pair classes, only first event
143   for (Int_t i=0; i<3; ++i){
144     histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(i)));
145   }
146
147   //Event histograms
148   if (cutDefinition==nDie-1){
149     //add histograms to event class
150     histos->UserHistogram("Event","nEvents","Number of processed events after cuts;Number events",
151                           1,0.,1.,AliDielectronVarManager::kNevents);
152   }
153   
154   //add histograms to Track classes
155   histos->UserHistogram("Track","Pt","Pt;Pt [GeV];#tracks",200,0,20.,AliDielectronVarManager::kPt);
156   histos->UserHistogram("Track","dEdx_P","dEdx;P [GeV];TPC signal (arb units);#tracks",
157                         400,0.2,20.,200,0.,200.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCsignal,kTRUE);
158   histos->UserHistogram("Track","TPCnSigmaEle_P","TPC number of sigmas Electrons;P [GeV];TPC number of sigmas Electrons;#tracks",
159                         400,0.2,20.,100,-5.,5.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCnSigmaEle,kTRUE);
160   histos->UserHistogram("Track","TPCnSigmaPio_P","TPC number of sigmas Pions;P [GeV];TPC number of sigmas Pions;#tracks",
161                         400,0.2,20.,100,-5.,5.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCnSigmaPio,kTRUE);
162   histos->UserHistogram("Track","dXY","dXY;dXY [cm];#tracks",200,-2.,2.,AliDielectronVarManager::kImpactParXY);
163   
164   //add histograms to Pair classes
165   histos->UserHistogram("Pair","InvMass","Inv.Mass;Inv. Mass [GeV];#pairs",
166                         500,0.,4.,AliDielectronVarManager::kM);
167   histos->UserHistogram("Pair","Rapidity","Rapidity;Rapidity;#pairs",
168                         100,-2.,2.,AliDielectronVarManager::kY);
169   histos->UserHistogram("Pair","OpeningAngle","Opening angle;angle",
170                         100,0.,3.15,AliDielectronVarManager::kOpeningAngle);
171   histos->UserHistogram("Pair","Chi2/NDF","#Chi^{2}/NDF;#Chi^{2}/NDF",
172                         100, 0., 20., AliDielectronVarManager::kChi2NDF);
173   
174   die->SetHistogramManager(histos);
175 }
176
177
178 void InitCF(AliDielectron* die, Int_t cutDefinition)
179 {
180   //
181   // Setupd the CF Manager if needed
182   //
183   AliDielectronCF *cf=new AliDielectronCF(die->GetName(),die->GetTitle());
184   
185   //pair variables
186   cf->AddVariable(AliDielectronVarManager::kPt,20,0,10);
187   cf->AddVariable(AliDielectronVarManager::kY,40,-2,2);
188   cf->AddVariable(AliDielectronVarManager::kM,200,-0.01,3.99);
189   cf->AddVariable(AliDielectronVarManager::kPairType,10,0,10);
190   //leg variables
191   cf->AddVariable(AliDielectronVarManager::kPt,20,0,10,kTRUE);
192   
193   //only in this case write MC truth info
194   cf->SetStepsForCutsIncreasing();
195   if (cutDefinition==0){
196     cf->SetStepForMCtruth();
197   }
198   
199   die->SetCFManagerPair(cf);
200 }