]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGDQ/dielectron/macrosLMEE/ConfigLMEEpp2010.C
add robust defaults
[u/mrichter/AliRoot.git] / PWGDQ / dielectron / macrosLMEE / ConfigLMEEpp2010.C
1 #include "LMEECutLib.C"
2 void InitHistograms(AliDielectron *die, Int_t cutDefinition);
3 void InitCF(AliDielectron* die, Int_t cutDefinition);
4 void EnableMC();
5
6 TString names=("noPairing;TPCandTOFnoRej;TPCorTOF");
7 TObjArray *arrNames=names.Tokenize(";");
8 const Int_t nDie=arrNames->GetEntries();
9
10 Bool_t MCenabled=kFALSE;
11
12
13 AliDielectron* ConfigLMEEpp2010(Int_t cutDefinition, Bool_t hasMC=kFALSE, Bool_t enableCF=kTRUE);
14 {
15
16   Int_t selectedPID=-1;
17   Bool_t rejectionStep=kFALSE;
18   LMEECutLib*  LMCL = new LMEECutLib();
19
20   //
21   // Setup the instance of AliDielectron
22   //
23
24   MCenabled=hasMC;
25
26   if (MCenabled)
27         die->SetHasMC(kTRUE);
28   // create the actual framework object
29
30   TString name=Form("%02d",cutDefinition);
31   if ((cutDefinition)<arrNames->GetEntriesFast()){
32         name=arrNames->At((cutDefinition))->GetName();
33   }
34
35   //thisCut only relevant for MC:
36   AliDielectron *die =
37         new AliDielectron(Form
38                 ("%s",name.Data()),
39                 Form("Track cuts: %s",name.Data()));
40
41
42   //Setup AnalysisSelection:
43   if (cutDefinition==0) {
44         //not yet implemented
45   }
46   else if (cutDefinition==1) {
47    //TPCTOFCentnoRej =>
48         selectedPID = LMEECutLib::kpp2010TPCandTOF;
49         rejectionStep = kFALSE;
50   }
51   else if (cutDefinition==2) {
52         //TPCTOFCentnoRej =>
53         selectedPID = LMEECutLib::kpp2010TPCorTOF;
54         rejectionStep = kTRUE;
55   }
56   else {
57         cout << " =============================== " << endl;
58         cout << " ==== INVALID CONFIGURATION ==== " << endl;
59         cout << " =============================== " << endl;
60   }
61
62
63   //Now configure task
64
65   //Apply correct Pre-Filter Scheme, if necessary
66   die->SetPreFilterAllSigns();
67
68         if (rejectionStep) {
69                 die->GetTrackFilter().AddCuts(LMCL->GetPIDCutsPre(selectedPID) );
70                 die->GetPairPreFilterLegs().AddCuts(LMCL->GetPIDCutsAna(selectedPID) );
71                 die->GetPairPreFilter().AddCuts(LMCL->GetPairCuts(selectedPID) );
72         }
73         else { //No Prefilter, no Pairfilter
74                 die->GetTrackFilter().AddCuts( LMCL->GetPIDCutsAna(selectedPID) );
75         }
76
77
78
79
80   AliDielectronTrackRotator *rot= LMCL->GetTrackRotator(selectedPID);
81   die->SetTrackRotator(rot);
82
83   AliDielectronMixingHandler *mix=LMCL->GetMixingHandler(selectedPID);
84   die->SetMixingHandler(mix);
85
86   // histogram setup
87   // only if an AliDielectronHistos object is attached to the
88   // dielectron framework histograms will be filled
89   //
90   InitHistograms(die,cutDefinition);
91
92   // the last definition uses no cuts and only the QA histograms should be filled!
93   if (enableCF) InitCF(die,cutDefinition);
94
95   return die;
96 }
97
98 //______________________________________________________________________________________
99
100 void InitHistograms(AliDielectron *die, Int_t cutDefinition)
101 {
102   //
103   // Initialise the histograms
104   //
105
106   //Setup histogram Manager
107   AliDielectronHistos *histos=
108         new AliDielectronHistos(die->GetName(),
109                 die->GetTitle());
110   //Initialise histogram classes
111   histos->SetReservedWords("Track;Pair;Pre;RejTrack;RejPair");
112
113   //Event class
114 //  if (cutDefinition==nDie-1) 
115                 histos->AddClass("Event");
116
117   //Track classes
118   //to fill also track info from 2nd event loop until 2
119   for (Int_t i=0; i<2; ++i){
120         histos->AddClass(Form("Track_%s",AliDielectron::TrackClassName(i)));
121   }
122
123   //Pair classes
124   // to fill also mixed event histograms loop until 10
125   for (Int_t i=0; i<3; ++i){
126         histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(i)));
127   }
128
129   //ME and track rot
130   if (die->GetMixingHandler()) {
131         histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(3)));
132         histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(4)));
133         histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(6)));
134         histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(7)));
135   }
136   if (die->GetTrackRotator()) {
137         histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(10)));
138   }
139
140   //PreFilter Classes
141   //to fill also track info from 2nd event loop until 2
142   for (Int_t i=0; i<2; ++i){
143         histos->AddClass(Form("Pre_%s",AliDielectron::TrackClassName(i)));
144   }
145
146
147   //Create Classes for Rejected Tracks/Pairs:
148   for (Int_t i=0; i<2; ++i){
149         histos->AddClass(Form("RejTrack_%s",AliDielectron::TrackClassName(i)));
150   }
151   for (Int_t i=0; i<3; ++i){
152         histos->AddClass(Form("RejPair_%s",AliDielectron::PairClassName(i)));
153   }
154
155   /*
156   //track rotation
157
158   histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(AliDielectron::kEv1PMRot)));
159   histos->AddClass(Form("Track_Legs_%s",AliDielectron::PairClassName(AliDielectron::kEv1PMRot)));
160   */
161         //add histograms to event class
162         histos->UserHistogram("Event","nEvents","Number of processed events after cuts;Number events",
163                 1,0.,1.,AliDielectronVarManager::kNevents);
164         histos->UserHistogram("Event","Centrality","Centrality;Centrality [%]","0,10,20,40,80,100,101",
165                 AliDielectronVarManager::kCentrality);
166
167
168   //add histograms to Track classes, also fills RejTrack
169   histos->UserHistogram("Track","Pt","Pt;Pt [GeV];#tracks",200,0,20.,AliDielectronVarManager::kPt);
170   histos->UserHistogram("Track","NclsSFracTPC","NclsSFracTPC; NclsSFracTPC;#tracks",200,0,10.,AliDielectronVarManager::kNclsSFracTPC);
171   histos->UserHistogram("Track","TPCclsDiff","TPCclsDiff; TPCclsDiff;#tracks",200,0,10.,AliDielectronVarManager::kTPCclsDiff);
172
173   histos->UserHistogram("Track","ITS_dEdx_P","ITS_dEdx;P [GeV];ITS signal (arb units);#tracks",
174           400,0.0,20.,200,0.,1000.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kITSsignal,kTRUE);
175
176   histos->UserHistogram("Track","dEdx_P","dEdx;P [GeV];TPC signal (arb units);#tracks",
177           400,0.0,20.,200,0.,200.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCsignal,kTRUE);
178 /*
179   histos->UserHistogram("Track","TPCnSigmaEle_P","TPC number of sigmas Electrons;P [GeV];TPC number of sigmas Electrons;#tracks",
180           400,0.0,20.,100,-5.,5.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCnSigmaEle,kTRUE);
181   histos->UserHistogram("Track","TPCnSigmaKao_P","TPC number of sigmas Kaons;P [GeV];TPC number of sigmas Kaons;#tracks",
182           400,0.0,20.,100,-5.,5.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCnSigmaKao,kTRUE);
183   histos->UserHistogram("Track","TPCnSigmaPio_P","TPC number of sigmas Pions;P [GeV];TPC number of sigmas Pions;#tracks",
184           400,0.0,20.,100,-5.,5.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCnSigmaPio,kTRUE);
185
186   histos->UserHistogram("Track","TRDpidPobEle_P","TRD PID probability Electrons;P [GeV];TRD prob Electrons;#tracks",
187           400,0.0,20.,100,0.,1.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTRDprobEle,kTRUE);
188   histos->UserHistogram("Track","TRDpidPobPio_P","TRD PID probability Pions;P [GeV];TRD prob Pions;#tracks",
189           400,0.0,20.,100,0.,1.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTRDprobPio,kTRUE);
190
191   histos->UserHistogram("Track","TOFnSigmaKao_P","TOF number of sigmas Kaons;P [GeV];TOF number of sigmas Kaons;#tracks",
192           400,0.0,20.,100,-5.,5.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTOFnSigmaKao,kTRUE);
193   histos->UserHistogram("Track","TOFnSigmaPro_P","TOF number of sigmas Protons;P [GeV];TOF number of sigmas Protons;#tracks",
194           400,0.0,20.,100,-5.,5.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTOFnSigmaPro,kTRUE);
195 */
196   histos->UserHistogram("Track","Eta_Phi","Eta Phi Map; Eta; Phi;#tracks",
197           100,-2,2,100,0,3.15,AliDielectronVarManager::kEta,AliDielectronVarManager::kPhi);
198
199   histos->UserHistogram("Track","dXY","dXY;dXY [cm];#tracks",200,-2.,2.,AliDielectronVarManager::kImpactParXY);
200
201   histos->UserHistogram("Track","TPCnCls","Number of Clusters TPC;TPC number clusteres;#tracks",159,0.,159.,AliDielectronVarManager::kNclsTPC);
202
203   histos->UserHistogram("Track","TPCnCls_kNFclsTPCr","nTPC vs nTPCr;nTPC vs nTPCr;#tracks",159,0.,159.,159,0.,159.,AliDielectronVarManager::kNclsTPC,AliDielectronVarManager::kNFclsTPCr);
204
205   histos->UserHistogram("Track","kNFclsTPCr_pT","nTPCr vs pt;nTPCr vs pt;#tracks",159,0.,159.,200,0.,20.,AliDielectronVarManager::kNFclsTPCr,AliDielectronVarManager::kPt);
206
207   //add histograms to Pair classes, also fills RejPair
208   histos->UserHistogram("Pair","InvMass","Inv.Mass;Inv. Mass [GeV];#pairs",
209           500,0.0,5.00,AliDielectronVarManager::kM);
210   histos->UserHistogram("Pair","Rapidity","Rapidity;Rapidity;#pairs",
211           100,-2.,2.,AliDielectronVarManager::kY);
212   histos->UserHistogram("Pair","OpeningAngle","Opening angle;angle",
213           100,0.,3.15,AliDielectronVarManager::kOpeningAngle);
214   //2D Histo Plot
215   histos->UserHistogram("Pair","InvMassPairPt","Inv.Mass vs PairPt;Inv. Mass [GeV], pT [GeV];#pairs",
216           500,0.0,5.0,100,0.,10.,AliDielectronVarManager::kM,AliDielectronVarManager::kPt);
217
218   histos->UserHistogram("Pair","InvMassOpeningAngle","Opening Angle vs Inv.Mass;Inv. Mass [GeV];#pairs",
219           500,0.0,5.0,200,0.,6.3,AliDielectronVarManager::kM,AliDielectronVarManager::kOpeningAngle);
220
221   //add histograms to PRE-Track classes
222   histos->UserHistogram("Pre","Pt","Pt;Pt [GeV];#tracks",200,0,20.,AliDielectronVarManager::kPt);
223
224   histos->UserHistogram("Pre","ITS_dEdx_P","ITS_dEdx;P [GeV];ITS signal (arb units);#tracks",
225           400,0.0,20.,200,0.,1000.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kITSsignal,kTRUE);
226
227   histos->UserHistogram("Pre","dEdx_P","dEdx;P [GeV];TPC signal (arb units);#tracks",
228           400,0.0,20.,200,0.,200.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCsignal,kTRUE);
229
230 /*
231   histos->UserHistogram("Pre","TPCnSigmaEle_P","TPC number of sigmas Electrons;P [GeV];TPC number of sigmas Electrons;#tracks",
232           400,0.0,20.,100,-5.,5.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCnSigmaEle,kTRUE);
233   histos->UserHistogram("Pre","TPCnSigmaKao_P","TPC number of sigmas Kaons;P [GeV];TPC number of sigmas Kaons;#tracks",
234           400,0.0,20.,100,-5.,5.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCnSigmaKao,kTRUE);
235   histos->UserHistogram("Pre","TPCnSigmaPio_P","TPC number of sigmas Pions;P [GeV];TPC number of sigmas Pions;#tracks",
236           400,0.0,20.,100,-5.,5.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCnSigmaPio,kTRUE);
237
238   histos->UserHistogram("Pre","TRDpidPobEle_P","TRD PID probability Electrons;P [GeV];TRD prob Electrons;#tracks",
239           400,0.0,20.,100,0.,1.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTRDprobEle,kTRUE);
240   histos->UserHistogram("Pre","TRDpidPobPio_P","TRD PID probability Pions;P [GeV];TRD prob Pions;#tracks",
241           400,0.0,20.,100,0.,1.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTRDprobPio,kTRUE);
242
243   histos->UserHistogram("Pre","TOFnSigmaKao_P","TOF number of sigmas Kaons;P [GeV];TOF number of sigmas Kaons;#tracks",
244           400,0.0,20.,100,-5.,5.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTOFnSigmaKao,kTRUE);
245   histos->UserHistogram("Pre","TOFnSigmaPro_P","TOF number of sigmas Protons;P [GeV];TOF number of sigmas Protons;#tracks",
246           400,0.0,20.,100,-5.,5.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTOFnSigmaPro,kTRUE);
247 */
248   histos->UserHistogram("Pre","Eta_Phi","Eta Phi Map; Eta; Phi;#tracks",
249           100,-2,2,100,0,3.15,AliDielectronVarManager::kEta,AliDielectronVarManager::kPhi);
250
251   histos->UserHistogram("Pre","dXY","dXY;dXY [cm];#tracks",200,-2.,2.,AliDielectronVarManager::kImpactParXY);
252
253   histos->UserHistogram("Pre","TPCnCls","Number of Clusters TPC;TPC number clusteres;#tracks",159,0.,159.,AliDielectronVarManager::kNclsTPC);
254
255   die->SetHistogramManager(histos);
256 }
257
258
259 void InitCF(AliDielectron* die, Int_t cutDefinition)
260 {
261   //
262   // Setupd the CF Manager if needed
263   //
264         AliDielectronCF *cf=new AliDielectronCF(die->GetName(),die->GetTitle());
265
266         //pair variables
267         cf->AddVariable(AliDielectronVarManager::kP,200,0,20);
268         cf->AddVariable(AliDielectronVarManager::kM,201,-0.01,4.01); //20Mev Steps
269         cf->AddVariable(AliDielectronVarManager::kY,100,-2.,2.);
270         cf->AddVariable(AliDielectronVarManager::kPairType,10,0,10);
271
272         cf->AddVariable(AliDielectronVarManager::kCentrality,"0.,10.0,30.0,40.0,60.,80.,100.");
273         cf->AddVariable(AliDielectronVarManager::kOpeningAngle,320,0.,3.2);
274         //leg variables
275         cf->AddVariable(AliDielectronVarManager::kP,200,0.,20.,kTRUE);
276         cf->AddVariable(AliDielectronVarManager::kITSsignal,1000,0.0.,1000.,kTRUE);
277         cf->AddVariable(AliDielectronVarManager::kTPCsignal,500,0.0.,500.,kTRUE);
278         cf->AddVariable(AliDielectronVarManager::kY,100,-2.,2.,kTRUE);
279         //only in this case write MC truth info
280         if (MCenabled) {
281                 cf->SetStepForMCtruth();
282                 cf->SetStepsForMCtruthOnly();
283                 cf->AddVariable(AliDielectronVarManager::kHaveSameMother,5,-2,2);
284                 cf->AddVariable(AliDielectronVarManager::kPdgCode,10000,-5000.5,4999.5,kTRUE);
285                 cf->AddVariable(AliDielectronVarManager::kPdgCodeMother,10000,-5000.5,4999.5,kTRUE);
286         }
287
288         cf->SetStepsForSignal();
289         die->SetCFManagerPair(cf);
290
291
292 //only in this case write MC truth info
293   if (MCenabled) {
294         cf->SetStepForMCtruth();
295         cf->SetStepsForMCtruthOnly();
296         cf->AddVariable(AliDielectronVarManager::kHaveSameMother,21,-10,10,kTRUE);
297         cf->AddVariable(AliDielectronVarManager::kPdgCode,10000,-5000.5,4999.5,kTRUE);
298         cf->AddVariable(AliDielectronVarManager::kPdgCodeMother,10000,-5000.5,4999.5,kTRUE);
299   }
300
301   cf->SetStepsForSignal();
302   die->SetCFManagerPair(cf);
303 }
304
305 //--------------------------------------
306 void EnableMC() {
307   MCenabled=kTRUE;
308 }
309