4 static enum LMMECutSet {
12 static enum LMMECentSel {
19 //char* LMEECutNames[kCUTSETMAX] = { "PbPb2011TPCandTOF","PbPb2011TPCorTOF"};
24 AliDielectronEventCuts* GetEventCuts(Int_t cutSet);
25 AliAnalysisCuts* GetCentralityCuts(Int_t centSel);
26 AliDielectronTrackRotator* GetTrackRotator(Int_t cutSet);
27 AliDielectronMixingHandler* GetMixingHandler(Int_t cutSet);
29 AliAnalysisCuts* GetPIDCutsAna(Int_t cutSet);
30 AliAnalysisCuts* GetPIDCutsPre(Int_t cutSet);
32 AliAnalysisCuts* GetPairCuts(Int_t cutSet);
34 AliAnalysisCuts* GetTrackCutsAna(Int_t cutSet);
35 AliAnalysisCuts* GetTrackCutsPre(Int_t cutSet);
40 AliDielectronEventCuts* GetEventCuts(Int_t cutSet) {
41 AliDielectronEventCuts* eventCuts = 0x0;
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.);
52 default: cout << "No Event Cut defined" << endl;
57 AliAnalysisCuts* GetCentralityCuts(Int_t centSel) {
58 AliDielectronVarCuts* centCuts = 0x0;
60 case kPbPb2011Central:
61 centCuts = new AliDielectronVarCuts("centCuts","CentralityPbPb2011Central");
62 centCuts->AddCut(AliDielectronVarManager::kCentrality,0.,10.);
64 case kPbPb2011SemiCentral:
65 centCuts = new AliDielectronVarCuts("centCuts","CentralityPbPb2011SemiCentral");
66 //Restrict to 50%, Trigger selction
67 centCuts->AddCut(AliDielectronVarManager::kCentrality,10.,50.);
69 case kPbPb2011Peripheral:
70 centCuts = new AliDielectronVarCuts("centCuts","CentralityPbPb2011Peripheral");
71 centCuts->AddCut(AliDielectronVarManager::kCentrality,50.,90.);
73 default: cout << "No Centrality selected" << endl;
79 AliDielectronTrackRotator* GetTrackRotator(Int_t cutSet) {
80 AliDielectronTrackRotator* trackRotator = 0x0;
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());
91 default: cout << "No Rotator defined" << endl;
97 AliDielectronMixingHandler* GetMixingHandler(Int_t cutSet) {
98 AliDielectronMixingHandler* mixingHandler = 0x0;
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);
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);
119 default: cout << "No Mixing Handler defined" << endl;
121 return mixingHandler;
125 AliAnalysisCuts* GetPIDCutsAna(Int_t cutSet) {
126 AliAnalysisCuts* anaCuts=0x0;
128 // + [2] added for Dec2010 Cut!
129 TF1 *lowerCut = new TF1("lowerCut", "[0] * TMath::Exp([1]*x) + [2]", 0, 20);
131 lowerCut->SetParameter(0, -2.7);
132 lowerCut->SetParameter(1, -0.4357);
134 /* 18.01.2011 ALiHFEpid.cxx */
135 lowerCut->SetParameter(0,-3.7);
136 lowerCut->SetParameter(1,-0.8);
137 lowerCut->SetParameter(2,-0.35);
139 if (MCenabled) { //overwrite parameters
140 lowerCut->SetParameter(0,-2.5);
141 lowerCut->SetParameter(2,-2.2);
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 );
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 );
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 );
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 //___________________________________________
174 AliDielectronVarCuts *pTPC = new AliDielectronVarCuts("P>.4","P>.4");
175 pTPC->AddCut(AliDielectronVarManager::kP,.4,5.);
177 AliDielectronVarCuts *pMin = new AliDielectronVarCuts("P>.2","P>.2");
178 pMin->AddCut(AliDielectronVarManager::kP,.2,5.);
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;
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;
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;
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;
214 default: cout << "No Analysis PID Cut defined " << endl;
219 AliAnalysisCuts* GetPIDCutsPre(Int_t cutSet) {
220 AliAnalysisCuts* anaCuts=0x0;
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));
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));
239 AliDielectronCutGroup* cgInitialTrackFilter = new AliDielectronCutGroup("cgInitialTrackFilter","cgInitialTrackFilter",AliDielectronCutGroup::kCompOR);
240 cgInitialTrackFilter->AddCut(cgITSTPC);
241 cgInitialTrackFilter->AddCut(cgITSSA);
242 anaCuts = cgInitialTrackFilter;
244 default: cout << "No Pre-PID Cut defined " << endl;
250 AliAnalysisCuts* GetPairCuts(Int_t cutSet) {
251 AliDielectronVarCuts* pairCuts=0x0;
253 case kPbPb2011TPCorTOF :
254 case kpp2010TPCandTOF :
255 pairCuts = new AliDielectronVarCuts("InvMass","InvMass > 150 MeV");
256 pairCuts->AddCut(AliDielectronVarManager::kM,0.15,100.,kTRUE);
258 case kPbPb2011TPCandTOF :
259 case kpp2010TPCorTOF :
260 pairCuts =new AliDielectronVarCuts("OpeningAngle","Opening angle > .035rad");
261 pairCuts->AddCut(AliDielectronVarManager::kOpeningAngle, 0. , 0.035);
263 default: cout << "No Pair Cuts defined " << endl;
268 AliAnalysisCuts* GetTrackCutsAna(Int_t cutSet) {
269 AliESDtrackCuts* trackCuts=0x0;
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);
293 default: cout << "No Analysis Track Cut defined " << endl;
298 AliAnalysisCuts* GetTrackCutsPre(Int_t cutSet) {
299 AliESDtrackCuts* trackCuts=0x0;
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?!
317 default: cout << "No Pre-Track Cut defined " << endl;