1 /**************************************************************************
2 * Copyright(c) 1998-1999, 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 **************************************************************************/
18 // AliFlowTrackSimpleCuts:
19 // A simple track cut class to the the AliFlowTrackSimple
20 // for basic kinematic cuts
22 // author: N. van der Kolk (kolk@nikhef.nl)
23 // mods: Mikolaj Krzewicki (mikolaj.krzewicki@cern.ch), Redmer Bertens (rbertens@cern.ch)
28 #include "TParticle.h"
29 #include "TParticlePDG.h"
30 #include "AliFlowTrackSimpleCuts.h"
31 #include "AliFlowTrackSimple.h"
33 ClassImp(AliFlowTrackSimpleCuts)
35 //-----------------------------------------------------------------------
36 AliFlowTrackSimpleCuts::AliFlowTrackSimpleCuts(const char* name):
62 ////-----------------------------------------------------------------------
63 //AliFlowTrackSimpleCuts::AliFlowTrackSimpleCuts(const AliFlowTrackSimpleCuts& someCuts):
65 // fCutPt(someCuts.fCutPt),
66 // fPtMax(someCuts.fPtMax),
67 // fPtMin(someCuts.fPtMin),
68 // fCutEta(someCuts.fCutEta),
69 // fEtaMax(someCuts.fEtaMax),
70 // fEtaMin(someCuts.fEtaMin),
71 // fCutPhi(someCuts.fCutPhi),
72 // fPhiMax(someCuts.fPhiMax),
73 // fPhiMin(someCuts.fPhiMin),
74 // fCutPID(someCuts.fCutPID),
75 // fPID(someCuts.fPID),
76 // fCutCharge(someCuts.fCutCharge),
77 // fCharge(someCuts.fCharge)
82 ////-----------------------------------------------------------------------
83 //AliFlowTrackSimpleCuts& AliFlowTrackSimpleCuts::operator=(const AliFlowTrackSimpleCuts& someCuts)
85 // TNamed::operator=(someCuts);
86 // fCutPt = someCuts.fCutPt;
87 // fPtMax = someCuts.fPtMax;
88 // fPtMin = someCuts.fPtMin;
89 // fCutEta = someCuts.fCutEta;
90 // fEtaMax = someCuts.fEtaMax;
91 // fEtaMin = someCuts.fEtaMin;
92 // fCutPhi = someCuts.fCutPhi;
93 // fPhiMax = someCuts.fPhiMax;
94 // fPhiMin = someCuts.fPhiMin;
95 // fCutPID = someCuts.fCutPID;
96 // fPID = someCuts.fPID;
97 // fCutCharge = someCuts.fCutCharge;
98 // fCharge = someCuts.fCharge;
103 //-----------------------------------------------------------------------
104 Bool_t AliFlowTrackSimpleCuts::IsSelected(TObject* obj, Int_t)
107 TParticle* p = dynamic_cast<TParticle*>(obj);
108 if (p) return PassesCuts(p);
109 AliFlowTrackSimple* ts = dynamic_cast<AliFlowTrackSimple*>(obj);
110 if (ts) return PassesCuts(ts);
111 return kFALSE; //default when passed a wrong type of object
114 //-----------------------------------------------------------------------
115 Bool_t AliFlowTrackSimpleCuts::PassesCuts(const AliFlowTrackSimple *track) const
117 //simple method to check if the simple track passes the simple cuts
118 if(fCutPt) {if (track->Pt() < fPtMin || track->Pt() >= fPtMax ) return kFALSE;}
119 if(fCutEta) {if (track->Eta() < fEtaMin || track->Eta() >= fEtaMax ) return kFALSE;}
120 if(fCutPhi) {if (track->Phi() < fPhiMin || track->Phi() >= fPhiMax ) return kFALSE;}
121 if(fCutCharge) {if (track->Charge() != fCharge) return kFALSE;}
122 if(fCutMass) {if (track->Mass() < fMassMin || track->Mass() >= fMassMax ) return kFALSE;}
123 if(fCutEtaGap) {if (track->Eta() > fEtaGapMin && track->Eta() < fEtaGapMax) return kFALSE;}
124 //if(fCutPID) {if (track->PID() != fPID) return kFALSE;}
128 //-----------------------------------------------------------------------
129 Bool_t AliFlowTrackSimpleCuts::PassesCuts(TParticle* track) const
131 //simple method to check if the simple track passes the simple cuts
132 if(fCutPt) {if (track->Pt() < fPtMin || track->Pt() >= fPtMax ) return kFALSE;}
133 if(fCutEta) {if (track->Eta() < fEtaMin || track->Eta() >= fEtaMax ) return kFALSE;}
134 if(fCutPhi) {if (track->Phi() < fPhiMin || track->Phi() >= fPhiMax ) return kFALSE;}
135 if(fCutEtaGap) {if (track->Eta() > fEtaGapMin && track->Eta() < fEtaGapMax) return kFALSE;}
137 //if(fCutPID) {if (track->GetPdgCode() != fPID) return kFALSE;}
139 //getting the charge from a tparticle is expensive
140 //only do it if neccesary
143 TParticlePDG* ppdg = track->GetPDG();
144 Int_t charge = TMath::Nint(ppdg->Charge()/3.0); //mc particles have charge in units of 1/3e
145 return (charge==fCharge);
149 TParticlePDG* ppdg = track->GetPDG();
150 if (ppdg->Mass() < fMassMin || ppdg->Mass() >= fMassMax )