1 #ifndef ALIANALYSISTASKMULTIDIELECTRONTG_H
2 #define ALIANALYSISTASKMULTIDIELECTRONTG_H
3 /* Copyright(c) 1998-2009, ALICE Experiment at CERN, All rights reserved. *
4 * See cxx source for full Copyright notice */
6 //#####################################################
8 //# Basic Analysis task for Dielectron #
9 //# single event analysis #
11 //# by WooJin J. Park, GSI / W.J.Park@gsi.de #
12 //# Ionut C. Arsene, GSI / I.C.Arsene@gsi.de #
13 //# Magnus Mager, CERN / Magnus.Mager@cern.ch #
14 //# Jens Wiechula, Uni HD / Jens.Wiechula@cern.ch #
16 //#####################################################
20 #include "AliAnalysisTaskSE.h"
27 // #include "AliDielectronPID.h"
31 class AliAnalysisCuts;
32 class AliTriggerAnalysis;
33 class AliESDtrackCuts;
35 class AliDielectronSingleTG : public TObject
38 AliDielectronSingleTG():
57 AliDielectronSingleTG(Int_t charge, Double_t cent,
58 Double_t xv, Double_t yv, Double_t zv,
59 Double_t px, Double_t py, Double_t pz, Double_t pt,
60 Double_t eta, Double_t phi, Double_t theta,
61 Int_t conv, Int_t ghost, AliVTrack *trk)
82 ~AliDielectronSingleTG() {;}
85 void SetTrack(AliVTrack *trk) { Obj = trk;}
86 Int_t Charge(void){ return fCharge;}
87 Double_t Phi(void){ return fPhi;}
88 Double_t Theta(void){ return fTheta;}
89 Double_t Px(void){ return fPx;}
90 Double_t Py(void){ return fPy;}
91 Double_t Pz(void){ return fPz;}
92 Double_t Xv(void){ return fPx;}
93 Double_t Yv(void){ return fPy;}
94 Double_t Zv(void){ return fPz;}
95 Double_t Pt(void){ return fPt;}
96 AliVTrack *GetTrack(void){ return Obj;}
97 void SetConvFlag(Int_t val){ fConv = val;}
98 void SetGstFlag(Int_t val){ fGst = val;}
99 Int_t GetConvFlag(void){ return fConv;}
100 Int_t GetGstFlag(void){ return fGst;}
104 Double_t fCentrality;
119 ClassDef(AliDielectronSingleTG, 2) // Event pool class
125 class AliAnalysisTaskMultiDielectronTG : public AliAnalysisTaskSE {
128 AliAnalysisTaskMultiDielectronTG();
129 AliAnalysisTaskMultiDielectronTG(const char *name);
130 virtual ~AliAnalysisTaskMultiDielectronTG();
132 enum ETriggerLogig {kAny, kExact};
134 virtual void UserExec(Option_t *option);
135 virtual void UserCreateOutputObjects();
136 virtual void FinishTaskOutput();
138 // virtual void NotifyRun(){AliDielectronPID::SetCorrVal((Double_t)fCurrentRunNumber);}
140 void UsePhysicsSelection(Bool_t phy=kTRUE) {fSelectPhysics=phy;}
141 void SetTriggerMask(ULong64_t mask) {fTriggerMask=mask;}
142 UInt_t GetTriggerMask() const { return fTriggerMask; }
143 void SetExcludeTriggerMask(ULong64_t mask) {fExcludeTriggerMask=mask;}
144 UInt_t GetExcludeTriggerMask() const { return fExcludeTriggerMask; }
145 void SetTriggerLogic(ETriggerLogig log) {fTriggerLogic=log;}
146 ETriggerLogig GetTriggerLogic() const {return fTriggerLogic;}
148 void SetEventFilter(AliAnalysisCuts * const filter) {fEventFilter=filter;}
149 void SetTriggerOnV0AND(Bool_t v0and=kTRUE) { fTriggerOnV0AND=v0and; }
150 void SetRejectPileup(Bool_t pileup=kTRUE) { fRejectPileup=pileup; }
151 void AddDielectron(AliDielectron * const die) { fListDielectron.Add(die); }
154 void reject_conversion(double val){d_conv_phiv = val;}
155 void enable_v0mixing(Bool_t val){d_v0_mixing = val;}
156 void check_ghost_pairs(vector<AliDielectronSingleTG*> e1);
157 void fill_pair(AliDielectronSingleTG* e1, AliDielectronSingleTG* e2, int type, AliDielectron *die);
158 bool PairTrackcut(double var1);
159 void calc_vars(AliDielectronSingleTG* e1, AliDielectronSingleTG* e2,
160 double &mass, double &phiv, double &px, double &py, double&pz,
161 double &pt, double &e, double &phi, double &eta, double &cos, double &psi);
162 void calc_pair(vector<AliDielectronSingleTG*> e1, vector<AliDielectronSingleTG*> e2, AliDielectron *die, Int_t idie);
163 void randomize_pool(vector<AliDielectronSingleTG*> e1, vector<AliDielectronSingleTG*> e2);
164 void reshuffle_buffer(vector<AliDielectronSingleTG*> ve, deque<AliDielectronSingleTG*> pool);
167 enum {kAllEvents=0, kSelectedEvents, kV0andEvents, kFilteredEvents, kPileupEvents, kNbinsEvent};
168 TList fListDielectron; // List of dielectron framework instances
169 TList fListHistos; //! List of histogram manager lists in the framework classes
170 TList fListCF; //! List with CF Managers
171 TList *tQAElectron; //! List with CF Managers
174 Bool_t fSelectPhysics; // Whether to use physics selection
175 UInt_t fTriggerMask; // Event trigger mask
176 UInt_t fExcludeTriggerMask; // Triggers to exclude from the analysis
177 Bool_t fTriggerOnV0AND; // if to trigger on V0and
178 Bool_t fRejectPileup; // pileup rejection wanted
180 ETriggerLogig fTriggerLogic; // trigger logic: any or all bits need to be matching
182 AliTriggerAnalysis *fTriggerAnalysis; //! trigger analysis class
184 AliAnalysisCuts *fEventFilter; // event filter
186 AliESDtrackCuts *fCutsMother;
188 TH1D *fEventStat; //! Histogram with event statistics
191 TH2D *fdEdXnSigmaElecvsPt;
193 TH2D *fdEdXnSigmaElecvsPtTOF;
195 TH2D *fTOFnSigmaElecvsPt;
196 TH2F *hNCrossedRowsTPC;
198 TH2F *hRatioCrossClusTPC;
200 Double_t fgValues[AliDielectronVarManager::kNMaxValues];
201 std::vector<AliDielectronSingleTG*> vem;
202 std::vector<AliDielectronSingleTG*> vep;
203 std::vector<AliDielectronSingleTG*> vem_tmp;
204 std::vector<AliDielectronSingleTG*> vep_tmp;
205 Double_t d_conv_phiv;
210 //Buffer for event mixing
211 static const int NBUF=100; //depth of buffer
212 static const int NMix=40; //# of events mixed (for +-)
213 //static const int NMix=2; //# of events mixed (for +-)
216 static const int NRPBIN=12;
217 static const int NZBIN=10;
218 static const int NCENT=10;
219 static const int NDIE=10;
220 int d_ibuf[NDIE][NZBIN][NCENT][NRPBIN];
221 std::vector<AliDielectronSingleTG*> d_vep[NBUF][NDIE][NZBIN][NCENT][NRPBIN];
222 std::vector<AliDielectronSingleTG*> d_vem[NBUF][NDIE][NZBIN][NCENT][NRPBIN];
224 static const unsigned int MAXPOOL=500;
225 //static const unsigned int MAXPOOL=50;
226 static const int MAX_TRY=3;
227 std::deque<AliDielectronSingleTG*> d_poolp[NDIE][NZBIN][NCENT][NRPBIN];
228 std::deque<AliDielectronSingleTG*> d_poolm[NDIE][NZBIN][NCENT][NRPBIN];
230 AliAnalysisTaskMultiDielectronTG(const AliAnalysisTaskMultiDielectronTG &c);
231 AliAnalysisTaskMultiDielectronTG& operator= (const AliAnalysisTaskMultiDielectronTG &c);
233 ClassDef(AliAnalysisTaskMultiDielectronTG, 2); //Analysis Task handling multiple instances of AliDielectron