]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGDQ/dielectron/macrosLMEE/LMEECutLib.C
update macros to use new mass calculation
[u/mrichter/AliRoot.git] / PWGDQ / dielectron / macrosLMEE / LMEECutLib.C
1 class LMEECutLib {
2
3   public:
4         static  enum LMMECutSet {
5                 kPbPb2011TPCandTOF,  //TOF required
6                 kPbPb2011TPCandTOFwide, //TOF required, more relaxed cut on TPC
7                 kPbPb2011TPCorTOF,
8                 kpp2010TPCandTOF,
9                 kpp2010TPCorTOF,
10                 kCUTSETMAX
11         };
12
13         static  enum LMMECentSel {
14           kPbPb2011Central,
15                 kPbPb2011SemiCentral,
16                 kPbPb2011Peripheral,
17                 kCENTSELMAX
18         };
19
20         //char* LMEECutNames[kCUTSETMAX] = { "PbPb2011TPCandTOF","PbPb2011TPCorTOF"};
21         
22         Bool_t useMC;
23
24
25         LMEECutLib() {useMC=kFALSE;}
26
27         AliDielectronEventCuts*     GetEventCuts(Int_t cutSet);
28         AliAnalysisCuts*            GetCentralityCuts(Int_t centSel);
29         AliDielectronTrackRotator*  GetTrackRotator(Int_t cutSet);
30         AliDielectronMixingHandler* GetMixingHandler(Int_t cutSet);
31
32         AliAnalysisCuts* GetPIDCutsAna(Int_t cutSet);  
33         AliAnalysisCuts* GetPIDCutsPre(Int_t cutSet);  
34
35         AliAnalysisCuts* GetPairCuts(Int_t cutSet);  
36
37         AliAnalysisCuts* GetTrackCutsAna(Int_t cutSet);  
38         AliAnalysisCuts* GetTrackCutsPre(Int_t cutSet);  
39
40         void SetMCFlag( Bool_t isMC=kTRUE) {useMC=isMC;}
41
42
43
44
45         AliDielectronEventCuts* GetEventCuts(Int_t cutSet) {
46           AliDielectronEventCuts* eventCuts = 0x0;
47           switch (cutSet) {
48                 case kPbPb2011TPCandTOF :
49                 case kPbPb2011TPCandTOFwide :
50                 case kPbPb2011TPCorTOF  :
51                 case kpp2010TPCandTOF :
52                 case kpp2010TPCorTOF  :
53                   eventCuts=new AliDielectronEventCuts("eventCuts","Vertex Track && |vtxZ|<10 && ncontrib>0");
54                   eventCuts->SetRequireVertex();
55                   eventCuts->SetMinVtxContributors(1);
56                   eventCuts->SetVertexZ(-10.,10.);
57                   break;
58                 default: cout << "No Event Cut defined" << endl;
59           }
60           return eventCuts;
61         }
62
63         AliAnalysisCuts* GetCentralityCuts(Int_t centSel) {
64           AliDielectronVarCuts* centCuts = 0x0;
65           switch (centSel) {
66                 case kPbPb2011Central:
67                   centCuts = new AliDielectronVarCuts("centCuts","CentralityPbPb2011Central");
68                   centCuts->AddCut(AliDielectronVarManager::kCentrality,0.,10.);
69                   break;
70                 case kPbPb2011SemiCentral:
71                   centCuts = new AliDielectronVarCuts("centCuts","CentralityPbPb2011SemiCentral");
72                   //Restrict to 50%, Trigger selction
73                   centCuts->AddCut(AliDielectronVarManager::kCentrality,20.,50.);
74                   break;
75                 case kPbPb2011Peripheral:
76                   centCuts = new AliDielectronVarCuts("centCuts","CentralityPbPb2011Peripheral");
77                   centCuts->AddCut(AliDielectronVarManager::kCentrality,50.,90.);
78                   break;
79                         default: cout << "No Centrality selected" << endl;
80           }
81           return centCuts;
82         }
83
84
85         AliDielectronTrackRotator* GetTrackRotator(Int_t cutSet) {
86           AliDielectronTrackRotator* trackRotator = 0x0;
87           switch (cutSet) {
88                 case kPbPb2011TPCandTOF :
89                 case kPbPb2011TPCandTOFwide :
90                 case kPbPb2011TPCorTOF  :
91                 case kpp2010TPCandTOF :
92                 case kpp2010TPCorTOF  :
93                   trackRotator = new AliDielectronTrackRotator();
94                   trackRotator->SetIterations(20);
95                   trackRotator->SetConeAnglePhi(TMath::Pi()/180*165);
96                   trackRotator->SetStartAnglePhi(TMath::Pi());
97                   break;
98                 default: cout << "No Rotator defined" << endl;
99           }
100           return trackRotator;
101         }
102
103
104         AliDielectronMixingHandler* GetMixingHandler(Int_t cutSet) {
105           AliDielectronMixingHandler* mixingHandler = 0x0;
106           switch (cutSet) {
107                 case kPbPb2011TPCandTOF :
108                 case kPbPb2011TPCandTOFwide :
109                 case kPbPb2011TPCorTOF  :
110                   mixingHandler = new AliDielectronMixingHandler;
111                   mixingHandler->AddVariable(AliDielectronVarManager::kZvPrim,"-10,-5,0,5,10");
112                   mixingHandler->AddVariable(AliDielectronVarManager::kCentrality,"0,5,10,20,40,80,100");
113                   mixingHandler->AddVariable(AliDielectronVarManager::kv0ACrpH2,"-6*(TMath::Pi()/6),-5*(TMath::Pi()/6),-4*(TMath::Pi()/6),-3*(TMath::Pi()/6),-2*(TMath::Pi()/6),-1*(TMath::Pi()/6),0,1*(TMath::Pi()/6),2*(TMath::Pi()/6),3*(TMath::Pi()/6),4*(TMath::Pi()/6),5*(TMath::Pi()/6),6*(TMath::Pi()/6)");
114                   //mixingHandler->SetDepth(50);
115                   mixingHandler->SetDepth(15);
116                   mixingHandler->SetMixType(AliDielectronMixingHandler::kAll);
117                   break;
118                 case kpp2010TPCandTOF :
119                 case kpp2010TPCorTOF  :
120                   mixingHandler = new AliDielectronMixingHandler;
121                   mixingHandler->AddVariable(AliDielectronVarManager::kZvPrim,"-10,-5,0,5,10");
122                   mixingHandler->AddVariable(AliDielectronVarManager::kNacc,"0,10000");
123                   //might want to add multiplicity?
124                   mixingHandler->SetDepth(25);
125                   mixingHandler->SetMixType(AliDielectronMixingHandler::kAll);
126                   break;
127                 default: cout << "No Mixing Handler defined" << endl;
128           }
129           return mixingHandler;
130         }
131
132
133         AliAnalysisCuts* GetPIDCutsAna(Int_t cutSet) {
134           AliAnalysisCuts* anaCuts=0x0;
135
136           // + [2] added for Dec2010 Cut! 
137           TF1 *lowerCut = new TF1("lowerCut", "[0] * TMath::Exp([1]*x) + [2]", 0, 20);
138           /* until Nov2010
139                  lowerCut->SetParameter(0, -2.7);
140                  lowerCut->SetParameter(1, -0.4357);
141            */
142           /* 18.01.2011 ALiHFEpid.cxx */
143           lowerCut->SetParameter(0,-3.7);
144           lowerCut->SetParameter(1,-0.8);
145           lowerCut->SetParameter(2,-0.35);
146
147           if (useMC) { //overwrite parameters
148                 lowerCut->SetParameter(0,-2.5);
149                 lowerCut->SetParameter(2,-2.2);
150           }
151
152           //---------------------------------------------
153           AliDielectronPID *pidTPCTOFeOnly = new AliDielectronPID("TPC-TOF","TPC-TOF");
154           pidTPCTOFeOnly->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-3. ,3.,0.0,100.,kFALSE);
155           pidTPCTOFeOnly->AddCut(AliDielectronPID::kTOF ,AliPID::kElectron , -3. , 3. , 0.0 , 100., kFALSE );
156
157           AliDielectronPID *pidTPCandTOF = new AliDielectronPID("TPC-TOF-HFE","TPC-TOF-HFE");
158           pidTPCandTOF->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-3.,3.,0.0,100.,kFALSE);
159           pidTPCandTOF->AddCut(AliDielectronPID::kTPC,AliPID::kPion,-3.,3.,0.,100.,kTRUE);
160           pidTPCandTOF->AddCut(AliDielectronPID::kTOF ,AliPID::kElectron , -3. , 3. , 0.0 , 100., kFALSE );
161
162           AliDielectronPID *pidTPChardTOF = new AliDielectronPID("TPC-TOF-HFE","TPC-TOF-HFE");
163           pidTPChardTOF->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,lowerCut,3.,0.0,100.,kFALSE);
164           pidTPChardTOF->AddCut(AliDielectronPID::kTPC,AliPID::kPion,-3.,3.,0.,100.,kTRUE);
165           pidTPChardTOF->AddCut(AliDielectronPID::kTPC,AliPID::kProton,-3.,3.,0.,100.,kTRUE);
166           pidTPChardTOF->AddCut(AliDielectronPID::kTPC,AliPID::kKaon,-3.,3.,0.,100.,kTRUE);
167           pidTPChardTOF->AddCut(AliDielectronPID::kTOF ,AliPID::kElectron , -3. , 3. , 0.0 , 100., kFALSE );
168           //___________________________________________
169           AliDielectronPID *pidTT = new AliDielectronPID("TPC-TOF","TPC-TOF");
170           pidTT->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-1.5,3.,0.2,0.4,kFALSE);
171           pidTT->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-3,3.,0.4,100.,kFALSE);
172           pidTT->AddCut(AliDielectronPID::kTOF ,AliPID::kElectron , -3. , 3. , 0.2 , 100., kFALSE );
173
174           pidTT->AddCut(AliDielectronPID::kTPC,AliPID::kPion,-3,3.,0.,100.,kTRUE);
175           pidTT->AddCut(AliDielectronPID::kTPC,AliPID::kProton,-3.,3.,0.,100.,kTRUE);
176           pidTT->AddCut(AliDielectronPID::kTPC,AliPID::kKaon,-3.,3.,0.,100.,kTRUE);
177           //___________________________________________
178           AliDielectronVarCuts *pidTPCsignal = new AliDielectronVarCuts("pidTPCsignal","cut on the TPC signal");
179           if (useMC) {
180                   pidTPCsignal->AddCut(AliDielectronVarManager::kTPCsignal,65.,85.); 
181           }
182           else {
183                   pidTPCsignal->AddCut(AliDielectronVarManager::kTPCsignal,75.,90.); 
184           }
185           //___________________________________________
186           AliDielectronVarCuts *pidTPCsignalWide = new AliDielectronVarCuts("pidTPCsignalWide","cut on the TPC signal");
187           pidTPCsignalWide->AddCut(AliDielectronVarManager::kTPCsignal,65.,90.); 
188           //___________________________________________
189
190           AliDielectronVarCuts *pTPC = new AliDielectronVarCuts("P>.4","P>.4");
191           pTPC->AddCut(AliDielectronVarManager::kPt,.4,5.);
192           
193           AliDielectronVarCuts *pMin = new AliDielectronVarCuts("P>.2","P>.2");
194           pMin->AddCut(AliDielectronVarManager::kPt,.2,5.);
195
196           switch (cutSet) {
197                 case kPbPb2011TPCandTOF :
198                   AliDielectronCutGroup* cgSecondTrackFilterPIDTPC1 = new AliDielectronCutGroup("cgPIDTPC1","cgPIDTPC1",AliDielectronCutGroup::kCompAND);
199                   cgSecondTrackFilterPIDTPC1->AddCut(pTPC);
200                   cgSecondTrackFilterPIDTPC1->AddCut(pidTPCandTOF);
201                   cgSecondTrackFilterPIDTPC1->AddCut(pidTPCsignal);
202                   cgSecondTrackFilterPIDTPC1->AddCut(GetTrackCutsAna(cutSet));
203                   anaCuts = cgSecondTrackFilterPIDTPC1;
204                   break;
205                 case kPbPb2011TPCandTOFwide :
206                   AliDielectronCutGroup* cgSecondTrackFilterPIDTPC1 = new AliDielectronCutGroup("cgPIDTPC1","cgPIDTPC1",AliDielectronCutGroup::kCompAND);
207                   cgSecondTrackFilterPIDTPC1->AddCut(pTPC);
208                   cgSecondTrackFilterPIDTPC1->AddCut(pidTPCandTOF);
209                   cgSecondTrackFilterPIDTPC1->AddCut(pidTPCsignalWide);
210                   cgSecondTrackFilterPIDTPC1->AddCut(GetTrackCutsAna(cutSet));
211                   anaCuts = cgSecondTrackFilterPIDTPC1;
212                   break;
213                 case kPbPb2011TPCorTOF  :
214                   AliDielectronCutGroup* cgSecondTrackFilterPIDTPC2 = new AliDielectronCutGroup("cgPIDTPC2","cgPIDTPC2",AliDielectronCutGroup::kCompAND);
215                   cgSecondTrackFilterPIDTPC2->AddCut(pMin);
216                   cgSecondTrackFilterPIDTPC2->AddCut(pidTT);
217                   cgSecondTrackFilterPIDTPC2->AddCut(pidTPCsignal);
218                   cgSecondTrackFilterPIDTPC2->AddCut(GetTrackCutsAna(cutSet));
219                   anaCuts = cgSecondTrackFilterPIDTPC2;
220                   break;
221                 case kpp2010TPCandTOF :
222                   AliDielectronCutGroup* cgSecondTrackFilterPIDTPC = new AliDielectronCutGroup("cgPIDTPC","cgPIDTPC",AliDielectronCutGroup::kCompAND);
223                   cgSecondTrackFilterPIDTPC->AddCut(pTPC);
224                   //cgSecondTrackFilterPIDTPC->AddCut(pidTPChardTOF);
225                   cgSecondTrackFilterPIDTPC->AddCut(pidTPCandTOF);
226                   cgSecondTrackFilterPIDTPC->AddCut(pidTPCTOFeOnly);
227                   cgSecondTrackFilterPIDTPC->AddCut(GetTrackCutsAna(cutSet));
228                   anaCuts = cgSecondTrackFilterPIDTPC;
229                   break;
230                 case kpp2010TPCorTOF  :
231                   AliDielectronCutGroup* cgSecondTrackFilterPIDTPC = new AliDielectronCutGroup("cgPIDTPC","cgPIDTPC",AliDielectronCutGroup::kCompAND);
232                   cgSecondTrackFilterPIDTPC->AddCut(pMin);
233                   cgSecondTrackFilterPIDTPC->AddCut(pidTT);
234                   cgSecondTrackFilterPIDTPC->AddCut(GetTrackCutsAna(cutSet));
235                   anaCuts = cgSecondTrackFilterPIDTPC;
236                   break;
237                 default: cout << "No Analysis PID Cut defined " << endl;
238           }
239           return anaCuts;
240         }
241
242         AliAnalysisCuts* GetPIDCutsPre(Int_t cutSet) {
243           AliAnalysisCuts* anaCuts=0x0;
244           switch (cutSet) {
245                 case kPbPb2011TPCandTOF :
246                 case kPbPb2011TPCandTOFwide :
247                 case kPbPb2011TPCorTOF  :
248                 case kpp2010TPCandTOF :
249                 case kpp2010TPCorTOF  :
250                   AliDielectronCutGroup* cgSecondTrackFilterPIDTPC = new AliDielectronCutGroup("cgPIDTPC","cgPIDTPC",AliDielectronCutGroup::kCompAND);
251                   AliDielectronCutGroup* cgITSTPC = new AliDielectronCutGroup("cgITSTPC","cgITSTPC",AliDielectronCutGroup::kCompAND);
252                   AliDielectronPID *pidITSTPC = new AliDielectronPID("TPCpre","TPCpre");
253                   pidITSTPC->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-3.,3.);
254                   cgITSTPC->AddCut(pidITSTPC);
255                   cgITSTPC->AddCut(GetTrackCutsAna(cutSet));
256
257                   AliDielectronCutGroup* cgITSSA = new AliDielectronCutGroup("cgITSSA","cgITSSA",AliDielectronCutGroup::kCompAND);
258                   AliDielectronPID *pidITSSA = new  AliDielectronPID("pidITSSA","pidITSSA");
259                   pidITSSA->AddCut(AliDielectronPID::kITS,AliPID::kElectron,-3.,3.);
260                   cgITSSA->AddCut(pidITSSA);
261                   cgITSSA->AddCut(GetTrackCutsPre(cutSet));
262
263                   AliDielectronCutGroup* cgInitialTrackFilter = new AliDielectronCutGroup("cgInitialTrackFilter","cgInitialTrackFilter",AliDielectronCutGroup::kCompOR);
264                   cgInitialTrackFilter->AddCut(cgITSTPC);
265                   cgInitialTrackFilter->AddCut(cgITSSA);
266                   anaCuts = cgInitialTrackFilter;
267                   break;
268                 default: cout << "No Pre-PID Cut defined " << endl;
269           }
270           return anaCuts;
271         }
272
273
274         AliAnalysisCuts* GetPairCuts(Int_t cutSet)  {  
275           AliDielectronVarCuts* pairCuts=0x0;
276           switch (cutSet) {
277                 case kPbPb2011TPCorTOF  :
278                 case kpp2010TPCandTOF :
279                   pairCuts = new AliDielectronVarCuts("InvMass","InvMass > 150 MeV");
280                   pairCuts->AddCut(AliDielectronVarManager::kM,0.15,100.,kTRUE);
281                   break;
282                 case kPbPb2011TPCandTOF :
283                 case kPbPb2011TPCandTOFwide :
284                 case kpp2010TPCorTOF  :
285                 pairCuts =new AliDielectronVarCuts("OpeningAngle","Opening angle > .035rad");
286                 pairCuts->AddCut(AliDielectronVarManager::kOpeningAngle, 0. , 0.035);
287                 break;
288                 default: cout << "No Pair Cuts defined " << endl;
289           } 
290           return pairCuts;
291         }
292
293         AliAnalysisCuts* GetTrackCutsAna(Int_t cutSet) {
294           AliESDtrackCuts* trackCuts=0x0;
295           switch (cutSet) {
296                 case kPbPb2011TPCandTOF :
297                 case kPbPb2011TPCandTOFwide :
298                 case kPbPb2011TPCorTOF  :
299                 case kpp2010TPCandTOF :
300                 case kpp2010TPCorTOF  :
301                   trackCuts = new AliESDtrackCuts();
302                   trackCuts->SetDCAToVertex2D(kTRUE);
303                   trackCuts->SetMaxDCAToVertexZ(3.0);
304                   trackCuts->SetMaxDCAToVertexXY(1.0);
305                   //trackCuts->SetMaxNsigmaToVertex(3.0); 
306                   trackCuts->SetPtRange(  0.05 , 200.0);
307                   trackCuts->SetEtaRange( -0.84 , 0.84 );
308                   trackCuts->SetAcceptKinkDaughters(kFALSE);
309                   trackCuts->SetRequireITSRefit(kTRUE);
310                   trackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kFirst);
311                   trackCuts->SetMinNClustersITS(3);
312                   trackCuts->SetRequireTPCRefit(kTRUE);
313                   //trackCuts->SetMinNClustersTPC(60);
314                   trackCuts->SetMinNCrossedRowsTPC(110);
315                   trackCuts->SetMinRatioCrossedRowsOverFindableClustersTPC(0.7);
316                   trackCuts->SetMaxChi2PerClusterTPC(3.5);
317                   //trackCuts->SetMaxChi2PerClusterITS(6);
318                   break;
319                 default: cout << "No Analysis Track Cut defined " << endl;
320           }
321           return trackCuts;
322         } 
323
324         AliAnalysisCuts* GetTrackCutsPre(Int_t cutSet) {
325           AliESDtrackCuts* trackCuts=0x0;
326           switch (cutSet) {
327                 case kPbPb2011TPCandTOF :
328                 case kPbPb2011TPCandTOFwide :
329                 case kPbPb2011TPCorTOF  :
330                 case kpp2010TPCandTOF :
331                 case kpp2010TPCorTOF  :
332                   trackCuts = new AliESDtrackCuts();
333                   trackCuts->SetDCAToVertex2D(kTRUE);
334                   trackCuts->SetMaxDCAToVertexZ(3.0);
335                   trackCuts->SetMaxDCAToVertexXY(1.0);
336                   trackCuts->SetEtaRange( -0.84 , 0.84 );
337                   trackCuts->SetPtRange(  0.05 , 0.5);
338                   trackCuts->SetAcceptKinkDaughters(kFALSE);
339                   trackCuts->SetRequireITSRefit(kTRUE);
340                   trackCuts->SetRequireITSStandAlone(kTRUE);
341                   trackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kFirst);
342                   trackCuts->SetMinNClustersITS(3); //PhotonGroup-Dalitz: 2?!
343                   break;
344                 default: cout << "No Pre-Track Cut defined " << endl;
345           }
346           return trackCuts;
347         }
348
349 };