]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGDQ/dielectron/AliDielectronEventCuts.cxx
o update dielectron 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>
31#include <AliESDEvent.h>
ffbede40 32#include <AliMultiplicity.h>
ba15fdfb 33#include <AliCentrality.h>
2a14a7b1 34
35#include "AliDielectronEventCuts.h"
36
37ClassImp(AliDielectronEventCuts)
38
39AliDielectronEventCuts::AliDielectronEventCuts() :
40 AliAnalysisCuts(),
41 fVtxZmin(0.),
42 fVtxZmax(0.),
43 fRequireVtx(kFALSE),
44 fMinVtxContributors(0),
ffbede40 45 fMultITSTPC(kFALSE),
ba15fdfb 46 fCentMin(1.),
47 fCentMax(0.),
2a14a7b1 48 fVtxType(kVtxTracks),
49 fRequireV0and(0),
50 fTriggerAnalysis(0x0),
51 fkVertex(0x0)
52{
53 //
54 // Default Constructor
55 //
56
57}
58
59//______________________________________________
60AliDielectronEventCuts::AliDielectronEventCuts(const char* name, const char* title) :
61 AliAnalysisCuts(name, title),
62 fVtxZmin(0.),
63 fVtxZmax(0.),
64 fRequireVtx(kFALSE),
65 fMinVtxContributors(0),
ffbede40 66 fMultITSTPC(kFALSE),
ba15fdfb 67 fCentMin(1.),
68 fCentMax(0.),
2a14a7b1 69 fVtxType(kVtxTracks),
70 fRequireV0and(0),
71 fTriggerAnalysis(0x0),
72 fkVertex(0x0)
73{
74 //
75 // Named Constructor
76 //
77}
78
79//______________________________________________
80AliDielectronEventCuts::~AliDielectronEventCuts()
81{
82 //
83 // Default Destructor
84 //
85 if (fTriggerAnalysis) delete fTriggerAnalysis;
86}
87
88//______________________________________________
89Bool_t AliDielectronEventCuts::IsSelected(TObject* event)
90{
91 //
92 // check the cuts
93 //
94
95 AliESDEvent *ev=dynamic_cast<AliESDEvent*>(event);
96 if (!ev) return kFALSE;
97
ba15fdfb 98 if (fCentMin<fCentMax){
99 AliCentrality *centrality=ev->GetCentrality();
100 Double_t centralityF=-1;
101 if (centrality) centralityF = centrality->GetCentralityPercentile("V0M");
102 if (centralityF<fCentMin || centralityF>=fCentMax) return kFALSE;
103 }
104
2a14a7b1 105 fkVertex=0x0;
5720c765 106
2a14a7b1 107 switch(fVtxType){
1201a1a9 108 case kVtxTracks:
109 case kVtxTracksOrSPD:
110 fkVertex=ev->GetPrimaryVertexTracks();
111 break;
2a14a7b1 112 case kVtxSPD: fkVertex=ev->GetPrimaryVertexSPD(); break;
113 case kVtxTPC: fkVertex=ev->GetPrimaryVertexTPC(); break;
114 case kVtxAny: fkVertex=ev->GetPrimaryVertex(); break;
115 }
116
117 if ((fRequireVtx||fVtxZmin<fVtxZmax||fMinVtxContributors>0)&&!fkVertex) return kFALSE;
118
2a14a7b1 119
120 if (fMinVtxContributors>0){
121 Int_t nCtrb = fkVertex->GetNContributors();
ba15fdfb 122 if (nCtrb<fMinVtxContributors){
123 if (fVtxType==kVtxTracksOrSPD){
124 fkVertex=ev->GetPrimaryVertexSPD();
125 nCtrb = fkVertex->GetNContributors();
126 if (nCtrb<fMinVtxContributors) return kFALSE;
127 } else {
128 return kFALSE;
129 }
130 }
2a14a7b1 131 }
132
ba15fdfb 133 if (fVtxZmin<fVtxZmax){
134 Double_t zvtx=fkVertex->GetZv();
135 if (zvtx<fVtxZmin||zvtx>fVtxZmax) return kFALSE;
136 }
137
2a14a7b1 138 if (fRequireV0and){
139 if (!fTriggerAnalysis) fTriggerAnalysis=new AliTriggerAnalysis;
140 Bool_t v0AND = kFALSE;
141 if (fRequireV0and==1){
142 Bool_t v0A = fTriggerAnalysis->IsOfflineTriggerFired(ev, AliTriggerAnalysis::kV0A);
143 Bool_t v0C = fTriggerAnalysis->IsOfflineTriggerFired(ev, AliTriggerAnalysis::kV0C);
144 v0AND = v0A && v0C;
145 }
146
147 if (fRequireV0and==2){
148 Bool_t v0AHW = (fTriggerAnalysis->V0Trigger(ev, AliTriggerAnalysis::kASide, kTRUE) == AliTriggerAnalysis::kV0BB);
149 Bool_t v0CHW = (fTriggerAnalysis->V0Trigger(ev, AliTriggerAnalysis::kCSide, kTRUE) == AliTriggerAnalysis::kV0BB);
150 v0AND = v0AHW && v0CHW;
151 }
152
153 if (!v0AND) return kFALSE;
154 }
ffbede40 155
156 if (fMultITSTPC){
157 const AliESDVertex *vtxESDTPC=ev->GetPrimaryVertexTPC();
158 const AliMultiplicity *multESD = ev->GetMultiplicity();
159 if ( vtxESDTPC && multESD && vtxESDTPC->GetNContributors() < (-10.+0.25*multESD->GetNumberOfITSClusters(0)) )
160 return kFALSE;
161 }
ba15fdfb 162
2a14a7b1 163
164 return kTRUE;
165}
166