1 /*************************************************************************
2 * Copyright(c) 1998-2009, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
16 ///////////////////////////////////////////////////////////////////////////
17 // Dielectron EventCuts //
26 ///////////////////////////////////////////////////////////////////////////
29 #include <AliTriggerAnalysis.h>
30 #include <AliESDVertex.h>
31 #include <AliAODVertex.h>
32 #include <AliESDEvent.h>
33 #include <AliAODEvent.h>
34 #include <AliMultiplicity.h>
35 #include <AliCentrality.h>
37 #include "AliDielectronEventCuts.h"
39 ClassImp(AliDielectronEventCuts)
41 AliDielectronEventCuts::AliDielectronEventCuts() :
46 fMinVtxContributors(0),
52 fTriggerAnalysis(0x0),
57 // Default Constructor
62 //______________________________________________
63 AliDielectronEventCuts::AliDielectronEventCuts(const char* name, const char* title) :
64 AliAnalysisCuts(name, title),
68 fMinVtxContributors(0),
74 fTriggerAnalysis(0x0),
83 //______________________________________________
84 AliDielectronEventCuts::~AliDielectronEventCuts()
89 if (fTriggerAnalysis) delete fTriggerAnalysis;
92 //______________________________________________
93 Bool_t AliDielectronEventCuts::IsSelected(TObject* event)
99 if(event->IsA() == AliESDEvent::Class()) return IsSelectedESD(event);
100 else if(event->IsA() == AliAODEvent::Class()) return IsSelectedAOD(event);
103 //____________________________________________________________________
104 Bool_t AliDielectronEventCuts::IsSelectedESD(TObject* event)
110 AliESDEvent *ev=dynamic_cast<AliESDEvent*>(event);
111 if (!ev) return kFALSE;
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;
124 case kVtxTracksOrSPD:
125 fkVertex=ev->GetPrimaryVertexTracks();
127 case kVtxSPD: fkVertex=ev->GetPrimaryVertexSPD(); break;
128 case kVtxTPC: fkVertex=ev->GetPrimaryVertexTPC(); break;
129 case kVtxAny: fkVertex=ev->GetPrimaryVertex(); break;
132 if ((fRequireVtx||fVtxZmin<fVtxZmax||fMinVtxContributors>0)&&!fkVertex) return kFALSE;
135 if (fMinVtxContributors>0){
136 Int_t nCtrb = fkVertex->GetNContributors();
137 if (nCtrb<fMinVtxContributors){
138 if (fVtxType==kVtxTracksOrSPD){
139 fkVertex=ev->GetPrimaryVertexSPD();
140 nCtrb = fkVertex->GetNContributors();
141 if (nCtrb<fMinVtxContributors) return kFALSE;
148 if (fVtxZmin<fVtxZmax){
149 Double_t zvtx=fkVertex->GetZv();
150 if (zvtx<fVtxZmin||zvtx>fVtxZmax) return kFALSE;
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);
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;
168 if (!v0AND) return kFALSE;
172 const AliESDVertex *vtxESDTPC=ev->GetPrimaryVertexTPC();
173 const AliMultiplicity *multESD = ev->GetMultiplicity();
174 if ( vtxESDTPC && multESD && vtxESDTPC->GetNContributors() < (-10.+0.25*multESD->GetNumberOfITSClusters(0)) )
181 //______________________________________________
182 Bool_t AliDielectronEventCuts::IsSelectedAOD(TObject* event)
188 AliAODEvent *ev=dynamic_cast<AliAODEvent*>(event);
189 if (!ev) return kFALSE;
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;
201 case kVtxTracks: fkVertexAOD=0x0; break;
202 case kVtxTPC: fkVertexAOD=GetPrimaryVertexTPC(ev); break;
204 case kVtxTracksOrSPD: fkVertexAOD=ev->GetPrimaryVertexSPD(); break;
205 case kVtxAny: fkVertexAOD=ev->GetPrimaryVertex(); break;
208 if ((fRequireVtx||fVtxZmin<fVtxZmax||fMinVtxContributors>0)&&!fkVertexAOD) return kFALSE;
210 if (fMinVtxContributors>0){
211 Int_t nCtrb = fkVertexAOD->GetNContributors();
212 if (nCtrb<fMinVtxContributors){
213 // if (fVtxType==kVtxTracksOrSPD){
214 // fkVertexAOD=ev->GetVertex(AliAODVertex::kPrimary);
215 // nCtrb = fkVertexAOD->GetNContributors();
216 // if (nCtrb<fMinVtxContributors) return kFALSE;
224 if (fVtxZmin<fVtxZmax){
225 Double_t zvtx=fkVertexAOD->GetZ();
226 if (zvtx<fVtxZmin||zvtx>fVtxZmax) return kFALSE;
231 // if (!fTriggerAnalysis) fTriggerAnalysis=new AliTriggerAnalysis;
232 Bool_t v0AND = kFALSE;
233 if (fRequireV0and==1){
234 Bool_t v0A = fTriggerAnalysis->IsOfflineTriggerFired(ev, AliTriggerAnalysis::kV0A);
235 Bool_t v0A = header->GetOfflineTrigger(); //TODO
236 Bool_t v0C = fTriggerAnalysis->IsOfflineTriggerFired(ev, AliTriggerAnalysis::kV0C);
240 if (fRequireV0and==2){
241 Bool_t v0AHW = (fTriggerAnalysis->V0Trigger(ev, AliTriggerAnalysis::kASide, kTRUE) == AliTriggerAnalysis::kV0BB);
242 Bool_t v0CHW = (fTriggerAnalysis->V0Trigger(ev, AliTriggerAnalysis::kCSide, kTRUE) == AliTriggerAnalysis::kV0BB);
243 v0AND = v0AHW && v0CHW;
246 if (!v0AND) return kFALSE;
250 const AliESDVertex *vtxESDTPC=ev->GetPrimaryVertexTPC();
251 const AliMultiplicity *multESD = ev->GetMultiplicity();
252 if ( vtxESDTPC && multESD && vtxESDTPC->GetNContributors() < (-10.+0.25*multESD->GetNumberOfITSClusters(0)) )