]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG/FLOW/Base/AliFlowTrackSimpleCuts.cxx
initial checkin of the new flow development - from an OLD diff!
[u/mrichter/AliRoot.git] / PWG / FLOW / Base / AliFlowTrackSimpleCuts.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 /* $Id$ */ 
17
18 // AliFlowTrackSimpleCuts:
19 // A simple track cut class to the the AliFlowTrackSimple 
20 // for basic kinematic cuts
21 //
22 // author: N. van der Kolk (kolk@nikhef.nl)
23 // mods: Mikolaj Krzewicki (mikolaj.krzewicki@cern.ch)
24
25 #include <limits.h>
26 #include <float.h>
27 #include "TNamed.h"
28 #include "TParticle.h"
29 #include "TParticlePDG.h"
30 #include "AliFlowTrackSimpleCuts.h"
31 #include "AliFlowTrackSimple.h"
32
33 ClassImp(AliFlowTrackSimpleCuts)
34
35 //-----------------------------------------------------------------------
36 AliFlowTrackSimpleCuts::AliFlowTrackSimpleCuts(const char* name):
37   TNamed(name,name),
38   fCutPt(kFALSE),
39   fPtMax(FLT_MAX),
40   fPtMin(-FLT_MAX),
41   fCutEta(kFALSE),
42   fEtaMax(FLT_MAX),
43   fEtaMin(-FLT_MAX),
44   fCutPhi(kFALSE),
45   fPhiMax(FLT_MAX),
46   fPhiMin(-FLT_MAX),
47   fCutPID(kFALSE),
48   fPID(0),
49   fCutCharge(kFALSE),
50   fCharge(0),
51   fCutMass(kFALSE),
52   fMassMax(FLT_MAX),
53   fMassMin(-FLT_MAX),
54   fNumberOfPOIclasses(1)
55 {
56   //constructor 
57 }
58
59 ////-----------------------------------------------------------------------
60 //AliFlowTrackSimpleCuts::AliFlowTrackSimpleCuts(const AliFlowTrackSimpleCuts& someCuts):
61 //  TNamed(),
62 //  fCutPt(someCuts.fCutPt),
63 //  fPtMax(someCuts.fPtMax),
64 //  fPtMin(someCuts.fPtMin),
65 //  fCutEta(someCuts.fCutEta),
66 //  fEtaMax(someCuts.fEtaMax),
67 //  fEtaMin(someCuts.fEtaMin),
68 //  fCutPhi(someCuts.fCutPhi),
69 //  fPhiMax(someCuts.fPhiMax),
70 //  fPhiMin(someCuts.fPhiMin),
71 //  fCutPID(someCuts.fCutPID),
72 //  fPID(someCuts.fPID),
73 //  fCutCharge(someCuts.fCutCharge),
74 //  fCharge(someCuts.fCharge)
75 //{
76 //  //copy constructor 
77 //}
78 //
79 ////-----------------------------------------------------------------------
80 //AliFlowTrackSimpleCuts& AliFlowTrackSimpleCuts::operator=(const AliFlowTrackSimpleCuts& someCuts)
81 //{
82 //  TNamed::operator=(someCuts);
83 //  fCutPt  = someCuts.fCutPt;
84 //  fPtMax  = someCuts.fPtMax;
85 //  fPtMin  = someCuts.fPtMin;
86 //  fCutEta = someCuts.fCutEta;
87 //  fEtaMax = someCuts.fEtaMax;
88 //  fEtaMin = someCuts.fEtaMin;
89 //  fCutPhi = someCuts.fCutPhi;
90 //  fPhiMax = someCuts.fPhiMax;
91 //  fPhiMin = someCuts.fPhiMin;
92 //  fCutPID = someCuts.fCutPID;
93 //  fPID    = someCuts.fPID;
94 //  fCutCharge = someCuts.fCutCharge;
95 //  fCharge = someCuts.fCharge;
96 //
97 //  return *this;
98 //}
99
100 //----------------------------------------------------------------------- 
101 Int_t AliFlowTrackSimpleCuts::IsSelected(TObject* obj, Int_t)
102 {
103   //check cuts
104   TParticle* p = dynamic_cast<TParticle*>(obj);
105   if (p) return PassesCuts(p);
106   AliFlowTrackSimple* ts = dynamic_cast<AliFlowTrackSimple*>(obj);
107   if (ts) return PassesCuts(ts);
108   return 0; //default when passed a wrong type of object
109 }
110
111 //----------------------------------------------------------------------- 
112 Int_t AliFlowTrackSimpleCuts::PassesCuts(const AliFlowTrackSimple *track) const
113 {
114   //simple method to check if the simple track passes the simple cuts
115   if(fCutPt) {if (track->Pt() < fPtMin || track->Pt() >= fPtMax ) return 0;}
116   if(fCutEta) {if (track->Eta() < fEtaMin || track->Eta() >= fEtaMax ) return 0;}
117   if(fCutPhi) {if (track->Phi() < fPhiMin || track->Phi() >= fPhiMax ) return 0;}
118   if(fCutCharge) {if (track->Charge() != fCharge) return 0;}
119   if(fCutMass) {if (track->Mass() < fMassMin || track->Mass() >= fMassMax ) return 0;}
120   //if(fCutPID) {if (track->PID() != fPID) return kFALSE;}
121   return 1;
122 }
123
124 //----------------------------------------------------------------------- 
125 Int_t AliFlowTrackSimpleCuts::PassesCuts(TParticle* track) const
126 {
127   //simple method to check if the simple track passes the simple cuts
128   if(fCutPt)  {if (track->Pt() < fPtMin || track->Pt() >= fPtMax ) return 0;}
129   if(fCutEta) {if (track->Eta() < fEtaMin || track->Eta() >= fEtaMax ) return 0;}
130   if(fCutPhi) {if (track->Phi() < fPhiMin || track->Phi() >= fPhiMax ) return 0;}
131   //if(fCutPID) {if (track->GetPdgCode() != fPID) return 0;}
132
133   //getting the charge from a tparticle is expensive
134   //only do it if neccesary
135   if (fCutCharge) 
136   {
137     TParticlePDG* ppdg = track->GetPDG();
138     Int_t charge = TMath::Nint(ppdg->Charge()/3.0); //mc particles have charge in units of 1/3e
139     if (charge==fCharge) return 1;
140   }
141
142   if (fCutMass) {
143     TParticlePDG* ppdg = track->GetPDG();
144     if (ppdg->Mass() < fMassMin || ppdg->Mass() >= fMassMax )
145       return 0;
146   }
147
148   return 1;
149 }