]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWG/FLOW/Base/AliFlowVector.h
initial checkin of the new flow development - from an OLD diff!
[u/mrichter/AliRoot.git] / PWG / FLOW / Base / AliFlowVector.h
index 1af3d9395b7ae08d30453243487719b1e8013bbc..06b23a3abe7dac068efaf945eb8dfde160de7b22 100644 (file)
@@ -6,20 +6,22 @@
 #define ALIFLOWVECTOR_H
 
 #include "TVector2.h"
+#include "AliFlowTrackSimple.h"
 
 //********************************************************************
 // AliFlowVector:                                                    *
 // Class to hold the flow vector and multiplicity for flow analysis. *
 // Author: A. Bilandzic (anteb@nikhef.nl)                            *
 //********************************************************************
+class AliFlowTrackSimple;
 
 class AliFlowVector: public TVector2 {
  public:
   AliFlowVector();
   AliFlowVector(const AliFlowVector& aVector);
-  AliFlowVector(const TVector2 &p, Double_t m);                      // constructor: Add a weight to the TVector
-  AliFlowVector(Double_t *y, Double_t m=1);                          // constructor: Analogue to TVector2(y) with multiplicity
-  AliFlowVector(Double_t x, Double_t y, Double_t m=1);   // constructor: Sets the components individually
+  AliFlowVector(const TVector2 &p, Double_t m, Int_t h=2, Int_t poiType=0, Int_t s=1);                      // constructor: Add a weight to the TVector
+  AliFlowVector(Double_t *y, Double_t m=1, Int_t h=2, Int_t poiType=0, Int_t s=-1);                          // constructor: Analogue to TVector2(y) with multiplicity
+  AliFlowVector(Double_t x, Double_t y, Double_t m=1, Int_t h=2, Int_t poiType=0, Int_t s=-1);               // constructor: Sets the components individually
   virtual ~AliFlowVector();
 
   void SetMagPhi(Double_t size, Double_t angle, Double_t mult=1);          // Set vector and weighted multiplicity
@@ -27,22 +29,36 @@ class AliFlowVector: public TVector2 {
   AliFlowVector& operator=(const AliFlowVector& aVector);                        // Assign to self
   AliFlowVector& operator+=(const AliFlowVector& aVector);                       // Add to self
   AliFlowVector& operator-=(const AliFlowVector& aVector);                       // Subtract from self
-  AliFlowVector& operator*=(double w);                                     // Multiply by a weight
-  AliFlowVector& operator/=(double w){ (*this)*=(1.0/w); return *this;};      // Divide by a weight
+  AliFlowVector& operator*=(Double_t w);                                     // Multiply by a weight
+  AliFlowVector& operator/=(Double_t w){ (*this)*=(1.0/w); return *this;};      // Divide by a weight
   const AliFlowVector operator+(const AliFlowVector&a) const { AliFlowVector v(*this); return v+=a; };   // Add and return by value
   const AliFlowVector operator-(const AliFlowVector&a) const { AliFlowVector v(*this); return v-=a; };   // Subtract and return by value
-  const AliFlowVector operator*(double w) const { AliFlowVector v(*this); return v*=w; };          // Scale and return by value
-  const AliFlowVector operator/(double w) const { AliFlowVector v(*this); return v/=w; };          // Scale and return by value
+  const AliFlowVector operator*(Double_t w) const { AliFlowVector v(*this); return v*=w; };          // Scale and return by value
+  const AliFlowVector operator/(Double_t w) const { AliFlowVector v(*this); return v/=w; };          // Scale and return by value
+
+  Int_t SubtractTrackWithDaughters( const AliFlowTrackSimple* track,
+                                   Double_t extraWeight=1.
+                                 );  //subtract a track with all its daughters
 
   Bool_t  IsFolder() const {return kTRUE;};
 
   void SetMult(Double_t mult) {fMult = mult;};           // Set sum of weights
   Double_t GetMult() const {return fMult;};                    // Get sum of weights
+  void SetHarmonic(Int_t h) {fHarmonic = h;}             //set the harmonic
+  Int_t GetHarmonic() const {return fHarmonic;}          //get the harmonic
+  void SetFlowTagType(Int_t t) {fPOItype=t;}
+  Int_t GetFlowTagType() const {return fPOItype;}
+  void SetSubeventNumber(Int_t n) {fSubeventNumber=n;}
+  Int_t GetSubeventNumber() const {return fSubeventNumber;}
+  void Clear(Option_t* option="");
         
  private:
   Double_t fMult;                 // multiplicity = sum of weights = w_1 + w_2 + ... + w_n
+  Int_t fHarmonic;                // harmonic for which the vector is constructed
+  Int_t fPOItype;             //which tracks are used to construct? RP=0, POIn=n,...
+  Int_t fSubeventNumber;          //for which subevent is this vector constructed? (-1 for no subevent in particular)
    
-  ClassDef(AliFlowVector, 1
+  ClassDef(AliFlowVector, 2
 };