]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG/FLOW/Base/AliFlowTrackSimple.h
Merge branch 'master' of https://git.cern.ch/reps/AliRoot
[u/mrichter/AliRoot.git] / PWG / FLOW / Base / AliFlowTrackSimple.h
1 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
2 * See cxx source for full Copyright notice */
3 /* $Id$ */
4
5 #ifndef ALIFLOWTRACKSIMPLE_H
6 #define ALIFLOWTRACKSIMPLE_H
7
8 #include "TObject.h"
9 #include "TBits.h"
10 class TParticle;
11
12 // AliFlowTrackSimple:
13 // A simple track class to the the AliFlowEventSimple for flow analysis
14 // author: N. van der Kolk (kolk@nikhef.nl)
15 // mods: Mikolaj Krzewicki (mikolaj.krzewicki@cern.ch)
16
17 class AliFlowTrackSimple: public TObject {
18
19 public:
20   enum poiTypes { kInvalid=-1,
21                  kRP=0,
22                  kPOI=1,
23                  kPOI1=2,
24                  kPOI2=3,
25                };
26
27   AliFlowTrackSimple();
28   AliFlowTrackSimple(TParticle* p);
29   AliFlowTrackSimple(const AliFlowTrackSimple& aTrack);
30   AliFlowTrackSimple& operator=(const AliFlowTrackSimple& aTrack);
31   virtual  ~AliFlowTrackSimple();
32   virtual AliFlowTrackSimple* Clone(const char* option="") const;
33   
34   Bool_t  IsFolder() const {return kTRUE;};
35   //  void Browse(TBrowser *b); 
36   virtual void Print(Option_t* option = "") const;
37
38   void Set(TParticle* p);
39
40   Double_t Eta() const; 
41   Double_t Pt()  const; 
42   Double_t Phi() const;
43   Double_t Weight() const; 
44   Int_t Charge() const;
45   Double_t Mass() const;
46   Int_t PID() const {return 0;}
47   
48   Bool_t InRPSelection() const; 
49   Bool_t InPOISelection(Int_t poiType=1) const; 
50   Bool_t IsPOItype(Int_t poiType) const;
51   void SetPOItype(Int_t poiType, Bool_t b=kTRUE);
52   Bool_t InSubevent(Int_t i) const;
53   void TagRP(Bool_t b=kTRUE) {SetForRPSelection(b);} 
54   void TagPOI(Bool_t b=kTRUE) {SetForPOISelection(b);} 
55   void Tag(Int_t n, Bool_t b=kTRUE) {fPOItype.SetBitNumber(n,b);}
56   Bool_t CheckTag(Int_t n) {return fPOItype.TestBitNumber(n);}
57   void SetForSubevent(Int_t i); 
58   void ResetPOItype() {fPOItype.ResetAllBits();}
59   void ResetSubEventTags() {fSubEventBits.ResetAllBits();}
60   Bool_t IsDead() const {return (fPOItype.CountBits()==0);}
61       
62   void SetEta(Double_t eta);
63   void SetPt(Double_t pt); 
64   void SetPhi(Double_t phi);
65   void SetWeight(Double_t weight);
66   void SetCharge(Int_t charge);
67   void SetMass(Double_t mass);
68   void SetForRPSelection(Bool_t b=kTRUE); 
69   void SetForPOISelection(Bool_t b=kTRUE); 
70   virtual void Clear(Option_t* o="");
71   
72   void ResolutionPt(Double_t resolution);
73
74   void AddV1( Double_t v1,
75               Double_t reactionPlaneAngle,
76               Double_t precision,
77               Int_t maxNumberOfIterations=100 );
78   void AddV2( Double_t v2,
79               Double_t reactionPlaneAngle,
80               Double_t precision,
81               Int_t maxNumberOfIterations=100 );
82   void AddV3( Double_t v3,
83               Double_t reactionPlaneAngle,
84               Double_t precision,
85               Int_t maxNumberOfIterations=100 );
86   void AddV4( Double_t v4,
87               Double_t reactionPlaneAngle,
88               Double_t precision,
89               Int_t maxNumberOfIterations=100 );
90   void AddV5( Double_t v5,
91               Double_t reactionPlaneAngle,
92               Double_t precision,
93               Int_t maxNumberOfIterations=100 );
94   void AddFlow( Double_t v1,
95                 Double_t v2,
96                 Double_t v3,
97                 Double_t v4,
98                 Double_t reactionPlaneAngle,
99                 Double_t precision,
100                 Int_t maxNumberOfIterations=100 );
101   void AddFlow( Double_t v1,
102                 Double_t v2,
103                 Double_t v3,
104                 Double_t v4,
105                 Double_t v5,
106                 Double_t reactionPlaneAngle,
107                 Double_t precision,
108                 Int_t maxNumberOfIterations=100 );
109   void AddFlow( Double_t v1,
110                 Double_t v2,
111                 Double_t v3,
112                 Double_t v4,
113                 Double_t v5,
114                 Double_t rp1,
115                 Double_t rp2,
116                 Double_t rp3,
117                 Double_t rp4,
118                 Double_t rp5,
119                 Double_t precision,
120                 Int_t maxNumberOfIterations=100 );
121
122   const TBits* GetPOItype() const {return &fPOItype;}
123   const TBits* GetFlowBits() const {return GetPOItype();}
124
125   void  SetID(Int_t i) {fID=i;}
126   Int_t GetID() const {return fID;}
127
128   virtual Int_t GetNDaughters() const {return 0;}
129   virtual void  AddDaughter(Int_t /*value*/) {}
130   virtual Int_t GetIDDaughter(Int_t /*value*/) const {return 0;}
131   virtual void SetDaughter(Int_t /*value*/, AliFlowTrackSimple* /*track*/) {}
132   virtual AliFlowTrackSimple *GetDaughter(Int_t /*value*/) const {return NULL;}
133
134  private:
135   AliFlowTrackSimple(Double_t phi, Double_t eta, Double_t pt, Double_t weight, Int_t charge, Double_t mass=-1);
136   Double_t fEta;         // eta
137   Double_t fPt;          // pt
138   Double_t fPhi;         // phi
139   Double_t fTrackWeight; // weight
140   Int_t    fCharge;      //charge
141   Double_t fMass;        // mass
142   TBits    fPOItype;    // bits to set if track is selected
143   TBits    fSubEventBits;// bits to set if track is selected for a subevent
144   Int_t    fID;          // Unique track ID, point back to the ESD track
145
146   ClassDef(AliFlowTrackSimple,2)                 // macro for rootcint
147
148 };
149
150 //Getters
151 inline Double_t AliFlowTrackSimple::Eta() const { 
152   return this->fEta; }
153 inline Double_t AliFlowTrackSimple::Pt() const {  
154   return this->fPt;}
155 inline Double_t AliFlowTrackSimple::Phi() const { 
156   return this->fPhi; }
157 inline Double_t AliFlowTrackSimple::Weight() const { 
158   return this->fTrackWeight; }
159 inline Int_t AliFlowTrackSimple::Charge() const { 
160   return this->fCharge; }
161 inline Double_t AliFlowTrackSimple::Mass() const { 
162   return this->fMass; }
163 //TBits
164 inline Bool_t AliFlowTrackSimple::InRPSelection() const { 
165   return fPOItype.TestBitNumber(kRP); }
166 inline Bool_t AliFlowTrackSimple::InPOISelection(Int_t poiType) const { 
167   return fPOItype.TestBitNumber(poiType); }
168 inline Bool_t AliFlowTrackSimple::IsPOItype(Int_t poiType) const {
169   return fPOItype.TestBitNumber(poiType); }
170 inline Bool_t AliFlowTrackSimple::InSubevent(Int_t i) const { 
171   return this->fSubEventBits.TestBitNumber(i); }
172
173 //Setters
174 inline void AliFlowTrackSimple::SetEta(Double_t val) {
175   fEta = val; }
176 inline void AliFlowTrackSimple::SetPt(Double_t val) {
177   fPt = val; }
178 inline void AliFlowTrackSimple::SetPhi(Double_t val) {
179   fPhi = val; }
180 inline void AliFlowTrackSimple::SetWeight(Double_t val) {
181   fTrackWeight = val; }
182 inline void AliFlowTrackSimple::SetCharge(Int_t val) {
183   fCharge = val; }
184 inline void AliFlowTrackSimple::SetMass(Double_t val) {
185   fMass = val; }
186
187   //TBits
188 inline void AliFlowTrackSimple::SetForRPSelection(Bool_t val) {
189   fPOItype.SetBitNumber(kRP,val); }
190 inline void AliFlowTrackSimple::SetForPOISelection(Bool_t val) {
191   fPOItype.SetBitNumber(kPOI,val); }
192 inline void AliFlowTrackSimple::SetForSubevent(Int_t i) {
193   fSubEventBits.SetBitNumber(i,kTRUE); }
194
195 inline void AliFlowTrackSimple::SetPOItype(Int_t poiType, Bool_t b) {
196   fPOItype.SetBitNumber(poiType,b); }
197
198 #endif
199