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