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 ///////////////////////////////////////////////////////////////////////////
28 #include <AliTriggerAnalysis.h>
29 #include <AliESDVertex.h>
30 #include <AliESDEvent.h>
31 #include <AliMultiplicity.h>
32 #include <AliCentrality.h>
34 #include "AliDielectronEventCuts.h"
36 ClassImp(AliDielectronEventCuts)
38 AliDielectronEventCuts::AliDielectronEventCuts() :
43 fMinVtxContributors(0),
49 fTriggerAnalysis(0x0),
53 // Default Constructor
58 //______________________________________________
59 AliDielectronEventCuts::AliDielectronEventCuts(const char* name, const char* title) :
60 AliAnalysisCuts(name, title),
64 fMinVtxContributors(0),
70 fTriggerAnalysis(0x0),
78 //______________________________________________
79 AliDielectronEventCuts::~AliDielectronEventCuts()
84 if (fTriggerAnalysis) delete fTriggerAnalysis;
87 //______________________________________________
88 Bool_t AliDielectronEventCuts::IsSelected(TObject* event)
94 AliESDEvent *ev=dynamic_cast<AliESDEvent*>(event);
95 if (!ev) return kFALSE;
97 if (fCentMin<fCentMax){
98 AliCentrality *centrality=ev->GetCentrality();
99 Double_t centralityF=-1;
100 if (centrality) centralityF = centrality->GetCentralityPercentile("V0M");
101 if (centralityF<fCentMin || centralityF>=fCentMax) return kFALSE;
107 case kVtxTracksOrSPD:
108 fkVertex=ev->GetPrimaryVertexTracks();
110 case kVtxSPD: fkVertex=ev->GetPrimaryVertexSPD(); break;
111 case kVtxTPC: fkVertex=ev->GetPrimaryVertexTPC(); break;
112 case kVtxAny: fkVertex=ev->GetPrimaryVertex(); break;
115 if ((fRequireVtx||fVtxZmin<fVtxZmax||fMinVtxContributors>0)&&!fkVertex) return kFALSE;
118 if (fMinVtxContributors>0){
119 Int_t nCtrb = fkVertex->GetNContributors();
120 if (nCtrb<fMinVtxContributors){
121 if (fVtxType==kVtxTracksOrSPD){
122 fkVertex=ev->GetPrimaryVertexSPD();
123 nCtrb = fkVertex->GetNContributors();
124 if (nCtrb<fMinVtxContributors) return kFALSE;
131 if (fVtxZmin<fVtxZmax){
132 Double_t zvtx=fkVertex->GetZv();
133 if (zvtx<fVtxZmin||zvtx>fVtxZmax) return kFALSE;
137 if (!fTriggerAnalysis) fTriggerAnalysis=new AliTriggerAnalysis;
138 Bool_t v0AND = kFALSE;
139 if (fRequireV0and==1){
140 Bool_t v0A = fTriggerAnalysis->IsOfflineTriggerFired(ev, AliTriggerAnalysis::kV0A);
141 Bool_t v0C = fTriggerAnalysis->IsOfflineTriggerFired(ev, AliTriggerAnalysis::kV0C);
145 if (fRequireV0and==2){
146 Bool_t v0AHW = (fTriggerAnalysis->V0Trigger(ev, AliTriggerAnalysis::kASide, kTRUE) == AliTriggerAnalysis::kV0BB);
147 Bool_t v0CHW = (fTriggerAnalysis->V0Trigger(ev, AliTriggerAnalysis::kCSide, kTRUE) == AliTriggerAnalysis::kV0BB);
148 v0AND = v0AHW && v0CHW;
151 if (!v0AND) return kFALSE;
155 const AliESDVertex *vtxESDTPC=ev->GetPrimaryVertexTPC();
156 const AliMultiplicity *multESD = ev->GetMultiplicity();
157 if ( vtxESDTPC && multESD && vtxESDTPC->GetNContributors() < (-10.+0.25*multESD->GetNumberOfITSClusters(0)) )