* See cxx source for full Copyright notice */
/* $Id$ */
-#ifndef AliFlowEventSimple_H
-#define AliFlowEventSimple_H
+/*****************************************************************
+ AliFlowEventSimple: A simple event
+ for flow analysis
+
+ origin: Naomi van der Kolk (kolk@nikhef.nl)
+ Ante Bilandzic (anteb@nikhef.nl)
+ Raimond Snellings (Raimond.Snellings@nikhef.nl)
+ mods: Mikolaj Krzewicki (mikolaj.krzewicki@cern.ch)
+*****************************************************************/
-#include "AliFlowVector.h" //needed as include
-#include "TH1F.h"
-#include "TH1D.h"
-#include "TFile.h"
+#ifndef ALIFLOWEVENTSIMPLE_H
+#define ALIFLOWEVENTSIMPLE_H
+
+#include "TObject.h"
#include "TParameter.h"
+#include "TMath.h"
+class TTree;
+class TF1;
+class AliFlowVector;
class AliFlowTrackSimple;
-
-/**************************************
- * AliFlowEventSimple: A simple event *
- * for flow analysis *
- * *
- * authors: Naomi van der Kolk *
- * (kolk@nikhef.nl) *
- * Ante Bilandzic *
- * (anteb@nikhef.nl) *
- * ***********************************/
+class AliFlowTrackSimpleCuts;
class AliFlowEventSimple: public TObject {
public:
+
+ enum ConstructionMethod {kEmpty,kGenerate};
+
AliFlowEventSimple();
- AliFlowEventSimple(Int_t aLenght);
+ AliFlowEventSimple( Int_t nParticles,
+ ConstructionMethod m=kEmpty,
+ TF1* ptDist=NULL,
+ Double_t phiMin=0.0,
+ Double_t phiMax=TMath::TwoPi(),
+ Double_t etaMin=-1.0,
+ Double_t etaMax= 1.0 );
+ AliFlowEventSimple(TTree* anInput, const AliFlowTrackSimpleCuts* rpCuts, const AliFlowTrackSimpleCuts* poiCuts);
AliFlowEventSimple(const AliFlowEventSimple& anEvent);
AliFlowEventSimple& operator=(const AliFlowEventSimple& anEvent);
virtual ~AliFlowEventSimple();
Bool_t IsFolder() const {return kTRUE;};
- void Browse(TBrowser *b);
- void Print(Option_t* option = "") const; //method to print stats
+ void Browse(TBrowser *b);
+ void Print(Option_t* option = "") const; //method to print stats
- Int_t NumberOfTracks() const { return this->fNumberOfTracks; }
- Int_t GetEventNSelTracksIntFlow() const { return this->fEventNSelTracksIntFlow; }
- void SetNumberOfTracks(Int_t nr) { this->fNumberOfTracks = nr; }
- void SetEventNSelTracksIntFlow(Int_t nr) { this->fEventNSelTracksIntFlow = nr; }
+ Int_t NumberOfTracks() const { return fNumberOfTracks; }
+ Int_t GetReferenceMultiplicity() const { return fReferenceMultiplicity; }
+ void SetReferenceMultiplicity( Int_t m ) { fReferenceMultiplicity = m; }
+ Int_t GetEventNSelTracksRP() const { return fNumberOfRPs; }
+ void SetEventNSelTracksRP(Int_t nr) { fNumberOfRPs = nr; }
+ Double_t GetMCReactionPlaneAngle() const { return fMCReactionPlaneAngle; }
+ void SetMCReactionPlaneAngle(Double_t fPhiRP) { fMCReactionPlaneAngle=fPhiRP; fMCReactionPlaneAngleIsSet=kTRUE; }
+ Bool_t IsSetMCReactionPlaneAngle() const { return fMCReactionPlaneAngleIsSet; }
+ void SetAfterBurnerPrecision(Double_t p) { fAfterBurnerPrecision=p; }
+ Double_t GetAfterBurnerPrecision() const { return fAfterBurnerPrecision; }
+ void SetUserModified(Bool_t s=kTRUE) { fUserModified=s; }
+ Bool_t IsUserModified() const { return fUserModified; }
+
+ void ResolutionPt(Double_t res);
+ void TagSubeventsInEta(Double_t etaMinA, Double_t etaMaxA, Double_t etaMinB, Double_t etaMaxB );
+ void TagRP(AliFlowTrackSimpleCuts* cuts );
+ void TagPOI(AliFlowTrackSimpleCuts* cuts );
+ void CloneTracks(Int_t n);
+ void AddV1( Double_t v1 );
+ void AddV2( Double_t v2 );
+ void AddV3( Double_t v3 );
+ void AddV4( Double_t v4 );
+ void AddFlow( Double_t v1, Double_t v2, Double_t v3, Double_t v4 );
+ void AddV2( TF1* ptDepV2 );
+ void DefineDeadZone( Double_t etaMin, Double_t etaMax, Double_t phiMin, Double_t phiMax );
+ Int_t CleanUpDeadTracks();
+ static TF1* SimplePtSpectrum();
+ static TF1* SimplePtDepV2();
+
AliFlowTrackSimple* GetTrack(Int_t i);
- TObjArray* TrackCollection() const { return this->fTrackCollection; }
+ void AddTrack( AliFlowTrackSimple* track );
AliFlowVector GetQ(Int_t n=2, TList *weightsList=NULL, Bool_t usePhiWeights=kFALSE, Bool_t usePtWeights=kFALSE, Bool_t useEtaWeights=kFALSE);
-
- private:
- TObjArray* fTrackCollection; // collection of tracks
- Int_t fNumberOfTracks; // number of tracks
- Int_t fEventNSelTracksIntFlow; // number of tracks selected for integrated flow calculation
- TParameter<Int_t>* fNumberOfTracksWrap; //! number of tracks in TBrowser
- TParameter<Int_t>* fEventNSelTracksIntFlowWrap; //! number of tracks selected for integrated flow calculation in TBrowser
-
- ClassDef(AliFlowEventSimple,1) // track collection used in flow analysis
+ void Get2Qsub(AliFlowVector* Qarray, Int_t n=2, TList *weightsList=NULL, Bool_t usePhiWeights=kFALSE, Bool_t usePtWeights=kFALSE, Bool_t useEtaWeights=kFALSE);
+
+ protected:
+ virtual void Generate( Int_t nParticles,
+ TF1* ptDist=NULL,
+ Double_t phiMin=0.0,
+ Double_t phiMax=TMath::TwoPi(),
+ Double_t etaMin=-1.0,
+ Double_t etaMax= 1.0 );
+
+ TObjArray* fTrackCollection; //-> collection of tracks
+ Int_t fReferenceMultiplicity; // reference multiplicity
+ Int_t fNumberOfTracks; // number of tracks
+ Int_t fNumberOfRPs; // number of tracks that have passed the RP selection
+ Double_t fMCReactionPlaneAngle; // the angle of the reaction plane from the MC truth
+ Bool_t fMCReactionPlaneAngleIsSet; // did we set it from MC?
+ Double_t fAfterBurnerPrecision; // iteration precision in afterburner
+ Bool_t fUserModified; // did we modify the event in any way (afterburner etc) ?
+ TParameter<Int_t>* fNumberOfTracksWrap; //! number of tracks in TBrowser
+ TParameter<Int_t>* fNumberOfRPsWrap; //! number of tracks that have passed the RP selection in TBrowser
+ TParameter<Double_t>* fMCReactionPlaneAngleWrap; //! the angle of the reaction plane from the MC truth in TBrowser
+
+ ClassDef(AliFlowEventSimple,1)
};
#endif