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