removed duplications in AlidNdPtHelper and AliPWG0Helper and small changes
[u/mrichter/AliRoot.git] / PWG0 / dNdPt / AlidNdPtEventCuts.cxx
1 /**************************************************************************
2 * Copyright(c) 1998-1999, 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 #include <iostream>
17 #include <TList.h>
18
19 #include "AliLog.h"
20 #include "AliESDEvent.h"
21 #include "AliESDVertex.h"
22 #include "AliMCEvent.h"
23 #include "AliHeader.h"
24 #include "AliGenEventHeader.h"
25
26 #include "AlidNdPtEventCuts.h"
27
28 using namespace std;
29
30 ClassImp(AlidNdPtEventCuts)
31
32 //_____________________________________________________________________________
33 AlidNdPtEventCuts::AlidNdPtEventCuts(const Char_t* name,const Char_t *title) : 
34 AliAnalysisCuts(name, title)
35 , fTriggerRequired(kTRUE)
36 , fRecVertexRequired(kTRUE)
37 , fEventProcessType(AliPWG0Helper::kInvalidProcess)
38 , fMinNContributors(0)
39 , fMaxNContributors(0)
40 , fMaxR(0)
41 , fMinZv(0)
42 , fMaxZv(0)
43 , fMeanXv(0)
44 , fMeanYv(0)
45 , fMeanZv(0)
46 , fSigmaMeanXv(0)
47 , fSigmaMeanYv(0)
48 , fSigmaMeanZv(0)
49 , fRedoTPCVertex(kTRUE)
50 , fUseBeamSpotConstraint(kTRUE)
51 {
52   // default constructor 
53   
54   // init data members with defaults
55   Init();
56 }
57
58 //_____________________________________________________________________________
59 AlidNdPtEventCuts::~AlidNdPtEventCuts()  
60 {
61   // destructor
62 }
63
64 //_____________________________________________________________________________
65 void AlidNdPtEventCuts::Init()  
66 {
67   // set default values
68   SetTriggerRequired();
69   SetRecVertexRequired();
70   SetEventProcessType();
71   SetNContributorsRange();
72   SetMaxR();
73   SetZvRange();
74   SetMeanXYZv();
75   SetSigmaMeanXYZv();
76   SetRedoTPCVertex();
77   SetUseBeamSpotConstraint();
78 }
79
80 //_____________________________________________________________________________
81 Bool_t AlidNdPtEventCuts::AcceptEvent(AliESDEvent *esdEvent,AliMCEvent *mcEvent, const AliESDVertex *vtx)
82 {
83   // Check event selection cuts
84   Bool_t retValue=kTRUE;
85
86   if(!esdEvent) return kFALSE;
87   if(!IsRecVertexRequired()) return kTRUE;
88   if(!vtx) return kFALSE;
89   if(!vtx->GetStatus()) return kFALSE;
90
91   if(mcEvent) {
92    // check MC event conditions
93    AliHeader* header = mcEvent->Header();
94    if(!header) return kFALSE;
95   
96     // select event type (ND-non diffractive, SD-single diffractive, DD-double diffractive)
97     if(fEventProcessType == AliPWG0Helper::kInvalidProcess) { 
98       retValue=kTRUE;
99     } 
100     else if(fEventProcessType == AliPWG0Helper::kSD || fEventProcessType == AliPWG0Helper::kDD) {
101       AliPWG0Helper::MCProcessType processType = AliPWG0Helper::GetEventProcessType(header);
102       if(processType == AliPWG0Helper::kND) retValue=kFALSE;
103       else retValue=kTRUE;
104     }
105     else if(fEventProcessType == AliPWG0Helper::GetEventProcessType(header)) { 
106       retValue=kTRUE;
107     }
108     else 
109       retValue=kFALSE;
110   }
111
112   Float_t R = TMath::Sqrt(vtx->GetXv()*vtx->GetXv()+vtx->GetYv()*vtx->GetYv());
113
114   if(vtx->GetNContributors() < fMinNContributors) return kFALSE; 
115   if(vtx->GetNContributors() > fMaxNContributors) return kFALSE; 
116   if(R > fMaxR) return kFALSE; 
117   if(vtx->GetZv() < fMinZv) return kFALSE; 
118   if(vtx->GetZv() > fMaxZv) return kFALSE; 
119
120 return retValue;  
121 }
122
123 //_____________________________________________________________________________
124 Bool_t AlidNdPtEventCuts::AcceptMCEvent(AliMCEvent *mcEvent)
125 {
126   // Check event selection cuts
127   if(!mcEvent) return kFALSE;
128
129   Bool_t retValue=kTRUE;
130
131   // check MC event conditions
132   AliHeader* header = mcEvent->Header();
133   if(!header) return kFALSE;
134
135   AliGenEventHeader* genHeader = header->GenEventHeader();
136   if (!genHeader) {
137     AliDebug(AliLog::kError, "Could not retrieve genHeader from Header");
138     return kFALSE;
139   }
140   TArrayF vtxMC(3);
141   genHeader->PrimaryVertex(vtxMC);
142   
143   // select event type (ND-non diffractive, SD-single diffractive, DD-double diffractive)
144   if(fEventProcessType == AliPWG0Helper::kInvalidProcess) { 
145      retValue=kTRUE;
146   } else {
147      if(fEventProcessType == AliPWG0Helper::GetEventProcessType(header)) retValue=kTRUE;
148      else retValue=kFALSE;
149   }
150
151   Float_t R = TMath::Sqrt(vtxMC[0]*vtxMC[0]+vtxMC[1]*vtxMC[1]);
152
153   if(R > fMaxR) return kFALSE; 
154   if(vtxMC[2] < fMinZv) return kFALSE; 
155   if(vtxMC[2] > fMaxZv) return kFALSE; 
156
157 return retValue;  
158 }
159
160 //_____________________________________________________________________________
161 Long64_t AlidNdPtEventCuts::Merge(TCollection* list) 
162 {
163   // Merge list of objects (needed by PROOF)
164   if (!list)
165   return 0;
166
167   if (list->IsEmpty())
168   return 1;
169
170   TIterator* iter = list->MakeIterator();
171   TObject* obj = 0;
172
173   Int_t count=0;
174   while((obj = iter->Next()) != 0) 
175   {
176     AlidNdPtEventCuts* entry = dynamic_cast<AlidNdPtEventCuts*>(obj);
177     if (entry == 0)  
178       continue; 
179
180   count++;
181   }
182
183 return count;
184 }