4 static enum LMMECutSet {
5 kPbPb2011TPCandTOF, //TOF required
6 kPbPb2011TPCandTOFwide, //TOF required, more relaxed cut on TPC
13 static enum LMMECentSel {
20 //char* LMEECutNames[kCUTSETMAX] = { "PbPb2011TPCandTOF","PbPb2011TPCorTOF"};
25 LMEECutLib() {useMC=kFALSE;}
27 AliDielectronEventCuts* GetEventCuts(Int_t cutSet);
28 AliAnalysisCuts* GetCentralityCuts(Int_t centSel);
29 AliDielectronTrackRotator* GetTrackRotator(Int_t cutSet);
30 AliDielectronMixingHandler* GetMixingHandler(Int_t cutSet);
32 AliAnalysisCuts* GetPIDCutsAna(Int_t cutSet);
33 AliAnalysisCuts* GetPIDCutsPre(Int_t cutSet);
35 AliAnalysisCuts* GetPairCuts(Int_t cutSet);
37 AliAnalysisCuts* GetTrackCutsAna(Int_t cutSet);
38 AliAnalysisCuts* GetTrackCutsPre(Int_t cutSet);
40 void SetMCFlag( Bool_t isMC=kTRUE) {useMC=isMC;}
45 AliDielectronEventCuts* GetEventCuts(Int_t cutSet) {
46 AliDielectronEventCuts* eventCuts = 0x0;
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.);
58 default: cout << "No Event Cut defined" << endl;
63 AliAnalysisCuts* GetCentralityCuts(Int_t centSel) {
64 AliDielectronVarCuts* centCuts = 0x0;
66 case kPbPb2011Central:
67 centCuts = new AliDielectronVarCuts("centCuts","CentralityPbPb2011Central");
68 centCuts->AddCut(AliDielectronVarManager::kCentrality,0.,10.);
70 case kPbPb2011SemiCentral:
71 centCuts = new AliDielectronVarCuts("centCuts","CentralityPbPb2011SemiCentral");
72 //Restrict to 50%, Trigger selction
73 centCuts->AddCut(AliDielectronVarManager::kCentrality,20.,50.);
75 case kPbPb2011Peripheral:
76 centCuts = new AliDielectronVarCuts("centCuts","CentralityPbPb2011Peripheral");
77 centCuts->AddCut(AliDielectronVarManager::kCentrality,50.,90.);
79 default: cout << "No Centrality selected" << endl;
85 AliDielectronTrackRotator* GetTrackRotator(Int_t cutSet) {
86 AliDielectronTrackRotator* trackRotator = 0x0;
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());
98 default: cout << "No Rotator defined" << endl;
104 AliDielectronMixingHandler* GetMixingHandler(Int_t cutSet) {
105 AliDielectronMixingHandler* mixingHandler = 0x0;
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);
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);
127 default: cout << "No Mixing Handler defined" << endl;
129 return mixingHandler;
133 AliAnalysisCuts* GetPIDCutsAna(Int_t cutSet) {
134 AliAnalysisCuts* anaCuts=0x0;
136 // + [2] added for Dec2010 Cut!
137 TF1 *lowerCut = new TF1("lowerCut", "[0] * TMath::Exp([1]*x) + [2]", 0, 20);
139 lowerCut->SetParameter(0, -2.7);
140 lowerCut->SetParameter(1, -0.4357);
142 /* 18.01.2011 ALiHFEpid.cxx */
143 lowerCut->SetParameter(0,-3.7);
144 lowerCut->SetParameter(1,-0.8);
145 lowerCut->SetParameter(2,-0.35);
147 if (useMC) { //overwrite parameters
148 lowerCut->SetParameter(0,-2.5);
149 lowerCut->SetParameter(2,-2.2);
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 );
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 );
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 );
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");
180 pidTPCsignal->AddCut(AliDielectronVarManager::kTPCsignal,65.,85.);
183 pidTPCsignal->AddCut(AliDielectronVarManager::kTPCsignal,75.,90.);
185 //___________________________________________
186 AliDielectronVarCuts *pidTPCsignalWide = new AliDielectronVarCuts("pidTPCsignalWide","cut on the TPC signal");
187 pidTPCsignalWide->AddCut(AliDielectronVarManager::kTPCsignal,65.,90.);
188 //___________________________________________
190 AliDielectronVarCuts *pTPC = new AliDielectronVarCuts("P>.4","P>.4");
191 pTPC->AddCut(AliDielectronVarManager::kPt,.4,5.);
193 AliDielectronVarCuts *pMin = new AliDielectronVarCuts("P>.2","P>.2");
194 pMin->AddCut(AliDielectronVarManager::kPt,.2,5.);
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;
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;
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;
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;
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;
237 default: cout << "No Analysis PID Cut defined " << endl;
242 AliAnalysisCuts* GetPIDCutsPre(Int_t cutSet) {
243 AliAnalysisCuts* anaCuts=0x0;
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));
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));
263 AliDielectronCutGroup* cgInitialTrackFilter = new AliDielectronCutGroup("cgInitialTrackFilter","cgInitialTrackFilter",AliDielectronCutGroup::kCompOR);
264 cgInitialTrackFilter->AddCut(cgITSTPC);
265 cgInitialTrackFilter->AddCut(cgITSSA);
266 anaCuts = cgInitialTrackFilter;
268 default: cout << "No Pre-PID Cut defined " << endl;
274 AliAnalysisCuts* GetPairCuts(Int_t cutSet) {
275 AliDielectronVarCuts* pairCuts=0x0;
277 case kPbPb2011TPCorTOF :
278 case kpp2010TPCandTOF :
279 pairCuts = new AliDielectronVarCuts("InvMass","InvMass > 150 MeV");
280 pairCuts->AddCut(AliDielectronVarManager::kM,0.15,100.,kTRUE);
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);
288 default: cout << "No Pair Cuts defined " << endl;
293 AliAnalysisCuts* GetTrackCutsAna(Int_t cutSet) {
294 AliESDtrackCuts* trackCuts=0x0;
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);
319 default: cout << "No Analysis Track Cut defined " << endl;
324 AliAnalysisCuts* GetTrackCutsPre(Int_t cutSet) {
325 AliESDtrackCuts* trackCuts=0x0;
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?!
344 default: cout << "No Pre-Track Cut defined " << endl;