1 #ifndef AliEventPoolManager_h
2 #define AliEventPoolManager_h
14 // Generic event mixing classes
16 // Stores a buffer of tracks that updates continuously. The track type
17 // contained by the pools can be anything inheriting from
18 // TObject. Pools are updated based on maintaining a minimum fixed
19 // number of tracks. Multiplicity/centrality and z-vertex bins must be
20 // passed in at initialization. For example of implementation, see
21 // $ALICE_ROOT/PWGCF/Correlations/DPhi/AliAnalysisTaskPhiCorrelations.cxx
23 // Authors: A. Adare and C. Loizides
27 class AliEventPool : public TObject
51 AliEventPool(Int_t d, Double_t multMin, Double_t multMax,
52 Double_t zvtxMin, Double_t zvtxMax,
53 Double_t psiMin=-999., Double_t psiMax=999.)
75 Bool_t EventMatchesBin(Int_t mult, Double_t zvtx, Double_t psi=0.) const;
76 Bool_t EventMatchesBin(Double_t mult, Double_t zvtx, Double_t psi=0.) const;
77 Bool_t IsReady() const { return NTracksInPool() >= fTargetTrackDepth; }
78 Bool_t IsFirstReady() const { return fFirstFilled; }
79 Int_t GetNTimes() const { return fNTimes; }
80 Int_t GetCurrentNEvents() const { return fEvents.size(); }
81 Int_t GlobalEventIndex(Int_t j) const;
82 TObject *GetRandomTrack() const;
83 TObjArray *GetRandomEvent() const;
84 TObjArray *GetEvent(Int_t i) const;
85 Int_t MultBinIndex() const { return fMultBinIndex; }
86 Int_t NTracksInEvent(Int_t iEvent) const;
87 Int_t NTracksInCurrentEvent() const { return fNTracksInEvent.back(); }
88 void PrintInfo() const;
89 Int_t PsiBinIndex() const { return fPsiBinIndex; }
90 Int_t NTracksInPool() const;
91 Bool_t WasUpdated() const { return fWasUpdated; }
92 Int_t ZvtxBinIndex() const { return fZvtxBinIndex; }
93 void SetDebug(Bool_t b) { fDebug = b; }
94 void SetTargetTrackDepth(Int_t d) { fTargetTrackDepth = d; }
95 Int_t SetEventMultRange(Int_t multMin, Int_t multMax);
96 Int_t SetEventMultRange(Double_t multMin, Double_t multMax);
97 Int_t SetEventZvtxRange(Double_t zvtxMin, Double_t zvtxMax);
98 Int_t SetEventPsiRange(Double_t psiMin, Double_t psiMax);
99 void SetMultBinIndex(Int_t iM) { fMultBinIndex = iM; }
100 void SetZvtxBinIndex(Int_t iZ) { fZvtxBinIndex = iZ; }
101 void SetPsiBinIndex(Int_t iP) { fPsiBinIndex = iP; }
102 Int_t UpdatePool(TObjArray *trk);
105 deque<TObjArray*> fEvents; //Holds TObjArrays of MyTracklets
106 deque<int> fNTracksInEvent; //Tracks in event
107 deque<int> fEventIndex; //Original event index
108 Int_t fMixDepth; //Number of evts. to mix with
109 Double_t fMultMin, fMultMax; //Track multiplicity bin range
110 Double_t fZvtxMin, fZvtxMax; //Event z-vertex bin range
111 Double_t fPsiMin, fPsiMax; //Event plane angle (Psi) bin range
112 Bool_t fWasUpdated; //Evt. succesfully passed selection?
113 Int_t fMultBinIndex; //Multiplicity bin
114 Int_t fZvtxBinIndex; //Zvertex bin
115 Int_t fPsiBinIndex; //Event plane angle (Psi) bin
116 Int_t fDebug; //If 1 then debug on
117 Int_t fTargetTrackDepth; //Number of tracks, once full
118 Bool_t fFirstFilled; //Init to false
119 Int_t fNTimes; //Number of times init. condition reached
121 ClassDef(AliEventPool,2) // Event pool class
124 class AliEventPoolManager : public TObject
127 AliEventPoolManager()
133 fTargetTrackDepth(0) {;}
134 AliEventPoolManager(Int_t maxEvts, Int_t minNTracks,
135 Int_t nMultBins, Double_t *multbins,
136 Int_t nZvtxBins, Double_t *zvtxbins);
138 AliEventPoolManager(Int_t maxEvts, Int_t minNTracks,
139 Int_t nMultBins, Double_t *multbins,
140 Int_t nZvtxBins, Double_t *zvtxbins,
141 Int_t nPsiBins, Double_t *psibins);
143 ~AliEventPoolManager() {;}
145 // First uses bin indices, second uses the variables themselves.
146 AliEventPool *GetEventPool(Int_t iMult, Int_t iZvtx, Int_t iPsi=0) const;
147 AliEventPool *GetEventPool(Int_t centVal, Double_t zvtxVal, Double_t psiVal=0.) const;
148 AliEventPool *GetEventPool(Double_t centVal, Double_t zvtxVal, Double_t psiVal=0.) const;
150 Int_t InitEventPools(Int_t depth,
151 Int_t nmultbins, Double_t *multbins,
152 Int_t nzvtxbins, Double_t *zvtxbins,
153 Int_t npsibins, Double_t *psibins);
155 void SetTargetTrackDepth(Int_t d) { fTargetTrackDepth = d;} // Same as for G.E.P. class
156 Int_t UpdatePools(TObjArray *trk);
157 void SetDebug(Bool_t b) { fDebug = b; }
160 Int_t fDebug; // If 1 then debug on
161 Int_t fNMultBins; // number mult bins
162 Int_t fNZvtxBins; // number vertex bins
163 Int_t fNPsiBins; // number Event plane angle (Psi) bins
164 std::vector<AliEventPool*> fEvPool; // pool in bins of [fNMultBin][fNZvtxBin][fNPsiBin]
165 Int_t fTargetTrackDepth; // Required track size, same for all pools.
167 ClassDef(AliEventPoolManager,2)