]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGDQ/dielectron/AliDielectronEventCuts.cxx
o update package
[u/mrichter/AliRoot.git] / PWGDQ / dielectron / AliDielectronEventCuts.cxx
CommitLineData
2a14a7b1 1/*************************************************************************
2* Copyright(c) 1998-2009, ALICE Experiment at CERN, All rights reserved. *
3* *
4* Author: The ALICE Off-line Project. *
5* Contributors are mentioned in the code where appropriate. *
6* *
7* Permission to use, copy, modify and distribute this software and its *
8* documentation strictly for non-commercial purposes is hereby granted *
9* without fee, provided that the above copyright notice appears in all *
10* copies and that both the copyright notice and this permission notice *
11* appear in the supporting documentation. The authors make no claims *
12* about the suitability of this software for any purpose. It is *
13* provided "as is" without express or implied warranty. *
14**************************************************************************/
15
16///////////////////////////////////////////////////////////////////////////
17// Dielectron EventCuts //
18// //
19// //
20/*
21Detailed description
22
23
24*/
25// //
26///////////////////////////////////////////////////////////////////////////
27
5720c765 28
2a14a7b1 29#include <AliTriggerAnalysis.h>
30#include <AliESDVertex.h>
d327d9cd 31#include <AliAODVertex.h>
2a14a7b1 32#include <AliESDEvent.h>
d327d9cd 33#include <AliAODEvent.h>
ffbede40 34#include <AliMultiplicity.h>
ba15fdfb 35#include <AliCentrality.h>
2a14a7b1 36
37#include "AliDielectronEventCuts.h"
38
39ClassImp(AliDielectronEventCuts)
40
41AliDielectronEventCuts::AliDielectronEventCuts() :
42 AliAnalysisCuts(),
43 fVtxZmin(0.),
44 fVtxZmax(0.),
45 fRequireVtx(kFALSE),
46 fMinVtxContributors(0),
ffbede40 47 fMultITSTPC(kFALSE),
ba15fdfb 48 fCentMin(1.),
49 fCentMax(0.),
2a14a7b1 50 fVtxType(kVtxTracks),
51 fRequireV0and(0),
52 fTriggerAnalysis(0x0),
d327d9cd 53 fkVertex(0x0),
54 fkVertexAOD(0x0)
2a14a7b1 55{
56 //
57 // Default Constructor
58 //
59
60}
61
62//______________________________________________
63AliDielectronEventCuts::AliDielectronEventCuts(const char* name, const char* title) :
64 AliAnalysisCuts(name, title),
65 fVtxZmin(0.),
66 fVtxZmax(0.),
67 fRequireVtx(kFALSE),
68 fMinVtxContributors(0),
ffbede40 69 fMultITSTPC(kFALSE),
ba15fdfb 70 fCentMin(1.),
71 fCentMax(0.),
2a14a7b1 72 fVtxType(kVtxTracks),
73 fRequireV0and(0),
74 fTriggerAnalysis(0x0),
d327d9cd 75 fkVertex(0x0),
76 fkVertexAOD(0x0)
2a14a7b1 77{
78 //
79 // Named Constructor
80 //
81}
82
83//______________________________________________
84AliDielectronEventCuts::~AliDielectronEventCuts()
85{
86 //
87 // Default Destructor
88 //
89 if (fTriggerAnalysis) delete fTriggerAnalysis;
90}
91
92//______________________________________________
93Bool_t AliDielectronEventCuts::IsSelected(TObject* event)
94{
95 //
96 // check the cuts
97 //
98
d327d9cd 99 if(event->IsA() == AliESDEvent::Class()) return IsSelectedESD(event);
100 else if(event->IsA() == AliAODEvent::Class()) return IsSelectedAOD(event);
101 else return kFALSE;
102}
103//____________________________________________________________________
104Bool_t AliDielectronEventCuts::IsSelectedESD(TObject* event)
105{
106 //
107 // check the cuts
108 //
109
2a14a7b1 110 AliESDEvent *ev=dynamic_cast<AliESDEvent*>(event);
111 if (!ev) return kFALSE;
112
ba15fdfb 113 if (fCentMin<fCentMax){
114 AliCentrality *centrality=ev->GetCentrality();
115 Double_t centralityF=-1;
116 if (centrality) centralityF = centrality->GetCentralityPercentile("V0M");
117 if (centralityF<fCentMin || centralityF>=fCentMax) return kFALSE;
118 }
119
2a14a7b1 120 fkVertex=0x0;
5720c765 121
2a14a7b1 122 switch(fVtxType){
1201a1a9 123 case kVtxTracks:
124 case kVtxTracksOrSPD:
125 fkVertex=ev->GetPrimaryVertexTracks();
126 break;
2a14a7b1 127 case kVtxSPD: fkVertex=ev->GetPrimaryVertexSPD(); break;
128 case kVtxTPC: fkVertex=ev->GetPrimaryVertexTPC(); break;
129 case kVtxAny: fkVertex=ev->GetPrimaryVertex(); break;
130 }
131
132 if ((fRequireVtx||fVtxZmin<fVtxZmax||fMinVtxContributors>0)&&!fkVertex) return kFALSE;
133
2a14a7b1 134
135 if (fMinVtxContributors>0){
136 Int_t nCtrb = fkVertex->GetNContributors();
ba15fdfb 137 if (nCtrb<fMinVtxContributors){
138 if (fVtxType==kVtxTracksOrSPD){
139 fkVertex=ev->GetPrimaryVertexSPD();
140 nCtrb = fkVertex->GetNContributors();
141 if (nCtrb<fMinVtxContributors) return kFALSE;
142 } else {
143 return kFALSE;
144 }
145 }
2a14a7b1 146 }
147
ba15fdfb 148 if (fVtxZmin<fVtxZmax){
149 Double_t zvtx=fkVertex->GetZv();
150 if (zvtx<fVtxZmin||zvtx>fVtxZmax) return kFALSE;
151 }
152
2a14a7b1 153 if (fRequireV0and){
154 if (!fTriggerAnalysis) fTriggerAnalysis=new AliTriggerAnalysis;
155 Bool_t v0AND = kFALSE;
156 if (fRequireV0and==1){
157 Bool_t v0A = fTriggerAnalysis->IsOfflineTriggerFired(ev, AliTriggerAnalysis::kV0A);
158 Bool_t v0C = fTriggerAnalysis->IsOfflineTriggerFired(ev, AliTriggerAnalysis::kV0C);
159 v0AND = v0A && v0C;
160 }
161
162 if (fRequireV0and==2){
163 Bool_t v0AHW = (fTriggerAnalysis->V0Trigger(ev, AliTriggerAnalysis::kASide, kTRUE) == AliTriggerAnalysis::kV0BB);
164 Bool_t v0CHW = (fTriggerAnalysis->V0Trigger(ev, AliTriggerAnalysis::kCSide, kTRUE) == AliTriggerAnalysis::kV0BB);
165 v0AND = v0AHW && v0CHW;
166 }
167
168 if (!v0AND) return kFALSE;
169 }
ffbede40 170
171 if (fMultITSTPC){
172 const AliESDVertex *vtxESDTPC=ev->GetPrimaryVertexTPC();
173 const AliMultiplicity *multESD = ev->GetMultiplicity();
174 if ( vtxESDTPC && multESD && vtxESDTPC->GetNContributors() < (-10.+0.25*multESD->GetNumberOfITSClusters(0)) )
175 return kFALSE;
176 }
ba15fdfb 177
2a14a7b1 178
d327d9cd 179 return kTRUE;
180}
181//______________________________________________
182Bool_t AliDielectronEventCuts::IsSelectedAOD(TObject* event)
183{
184 //
185 // check the cuts
186 //
187
188 AliAODEvent *ev=dynamic_cast<AliAODEvent*>(event);
189 if (!ev) return kFALSE;
190
191 if (fCentMin<fCentMax){
192 AliCentrality *centrality=ev->GetCentrality();
193 Double_t centralityF=-1;
194 if (centrality) centralityF = centrality->GetCentralityPercentile("V0M");
195 if (centralityF<fCentMin || centralityF>=fCentMax) return kFALSE;
196 }
197
198 fkVertexAOD=0x0;
199
200 switch(fVtxType){
201 case kVtxTracks:
d327d9cd 202 fkVertexAOD=0x0;
203 break;
a823f01b 204 case kVtxTPC: fkVertexAOD=GetPrimaryVertexTPC(ev);
205 break;
d327d9cd 206 case kVtxSPD:
a823f01b 207 case kVtxTracksOrSPD: fkVertexAOD=ev->GetPrimaryVertexSPD();
d327d9cd 208 break;
a823f01b 209 case kVtxAny: fkVertexAOD=ev->GetPrimaryVertex();
d327d9cd 210 break;
211 }
212
213 if ((fRequireVtx||fVtxZmin<fVtxZmax||fMinVtxContributors>0)&&!fkVertexAOD) return kFALSE;
214
215 if (fMinVtxContributors>0){
216 Int_t nCtrb = fkVertexAOD->GetNContributors();
217 if (nCtrb<fMinVtxContributors){
a823f01b 218 // if (fVtxType==kVtxTracksOrSPD){
219 // fkVertexAOD=ev->GetVertex(AliAODVertex::kPrimary);
220 // nCtrb = fkVertexAOD->GetNContributors();
221 // if (nCtrb<fMinVtxContributors) return kFALSE;
222 // } else {
223 return kFALSE;
224 //}
d327d9cd 225 }
226 }
a823f01b 227
d327d9cd 228
229 if (fVtxZmin<fVtxZmax){
230 Double_t zvtx=fkVertexAOD->GetZ();
231 if (zvtx<fVtxZmin||zvtx>fVtxZmax) return kFALSE;
232 }
a823f01b 233
d327d9cd 234 /*
235 if (fRequireV0and){
236 // if (!fTriggerAnalysis) fTriggerAnalysis=new AliTriggerAnalysis;
237 Bool_t v0AND = kFALSE;
238 if (fRequireV0and==1){
239 Bool_t v0A = fTriggerAnalysis->IsOfflineTriggerFired(ev, AliTriggerAnalysis::kV0A);
240 Bool_t v0A = header->GetOfflineTrigger(); //TODO
241 Bool_t v0C = fTriggerAnalysis->IsOfflineTriggerFired(ev, AliTriggerAnalysis::kV0C);
242 v0AND = v0A && v0C;
243 }
244
245 if (fRequireV0and==2){
246 Bool_t v0AHW = (fTriggerAnalysis->V0Trigger(ev, AliTriggerAnalysis::kASide, kTRUE) == AliTriggerAnalysis::kV0BB);
247 Bool_t v0CHW = (fTriggerAnalysis->V0Trigger(ev, AliTriggerAnalysis::kCSide, kTRUE) == AliTriggerAnalysis::kV0BB);
248 v0AND = v0AHW && v0CHW;
249 }
250
251 if (!v0AND) return kFALSE;
252 }
253 */
254 /* if (fMultITSTPC){
255 const AliESDVertex *vtxESDTPC=ev->GetPrimaryVertexTPC();
256 const AliMultiplicity *multESD = ev->GetMultiplicity();
257 if ( vtxESDTPC && multESD && vtxESDTPC->GetNContributors() < (-10.+0.25*multESD->GetNumberOfITSClusters(0)) )
258 return kFALSE;
259 }
260 */
261
2a14a7b1 262 return kTRUE;
263}
264