]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG/FLOW/Base/AliFlowEventSimpleMakerOnTheFly.h
patching flow cuts (Panos)
[u/mrichter/AliRoot.git] / PWG / FLOW / Base / AliFlowEventSimpleMakerOnTheFly.h
1 /* 
2  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. 
3  * See cxx source for full Copyright notice 
4  * $Id$ 
5  */
6
7 /************************************ 
8  * Create an event and perform full *
9  * flow analysis 'on the fly'.      * 
10  *                                  * 
11  * author: Ante Bilandzic           * 
12  *         (abilandzic@gmail.com)   *
13  ************************************/ 
14
15 #ifndef ALIFLOWEVENTSIMPLEMAKERONTHEFLY_H
16 #define ALIFLOWEVENTSIMPLEMAKERONTHEFLY_H
17
18 class TF1;
19 class TRandom3;
20 class TH3F;
21
22 class AliFlowEventSimple;
23 class AliFlowTrackSimple;
24 class AliFlowTrackSimpleCuts;
25         
26 class AliFlowEventSimpleMakerOnTheFly{
27  public:
28   AliFlowEventSimpleMakerOnTheFly(UInt_t uiSeed = 0); // constructor
29   virtual ~AliFlowEventSimpleMakerOnTheFly(); // destructor
30   virtual void Init();   
31   Bool_t AcceptOrNot(AliFlowTrackSimple *pTrack);  
32   AliFlowEventSimple* CreateEventOnTheFly(AliFlowTrackSimpleCuts const *cutsRP, AliFlowTrackSimpleCuts const *cutsPOI); 
33   // Setters and getters:
34   void SetMinMult(Int_t iMinMult) {this->fMinMult = iMinMult;}
35   Int_t GetMinMult() const {return this->fMinMult;} 
36   void SetMaxMult(Int_t iMaxMult) {this->fMaxMult = iMaxMult;}
37   Int_t GetMaxMult() const {return this->fMaxMult;} 
38   void SetMass(Double_t dMass) {this->fMass = dMass;}
39   Double_t GetMass() const {return this->fMass;} 
40   void SetTemperature(Double_t dT) {this->fTemperature = dT;}
41   Double_t GetTemperature() const {return this->fTemperature;} 
42   void SetV1(Double_t dV1) {this->fV1 = dV1;}
43   Double_t GetV1() const {return this->fV1;} 
44   void SetV2(Double_t dV2) {this->fV2 = dV2;}
45   Double_t GetV2() const {return this->fV2;} 
46   void SetV3(Double_t dV3) {this->fV3 = dV3;}
47   Double_t GetV3() const {return this->fV3;} 
48   void SetV4(Double_t dV4) {this->fV4 = dV4;}
49   Double_t GetV4() const {return this->fV4;} 
50   void SetV5(Double_t dV5) {this->fV5 = dV5;}
51   Double_t GetV5() const {return this->fV5;} 
52   void SetV6(Double_t dV6) {this->fV6 = dV6;}
53   Double_t GetV6() const {return this->fV6;} 
54   void SetUniformFluctuationsV2(Bool_t b) {this->fUniformFluctuationsV2 = b;}
55   Bool_t GetUniformFluctuationsV2() const {return this->fUniformFluctuationsV2;} 
56   void SetMinV2(Double_t dMinV2) {this->fMinV2 = dMinV2;}
57   Double_t GetMinV2() const {return this->fMinV2;} 
58   void SetMaxV2(Double_t dMaxV2) {this->fMaxV2 = dMaxV2;}
59   Double_t GetMaxV2() const {return this->fMaxV2;} 
60   void SetPtDependentV2(Bool_t b) {this->fPtDependentV2 = b;}
61   Bool_t GetPtDependentV2() const {return this->fPtDependentV2;} 
62   void SetV2vsPtCutOff(Double_t dV2vsPtCutOff) {this->fV2vsPtCutOff = dV2vsPtCutOff;}
63   Double_t GetV2vsPtCutOff() const {return this->fV2vsPtCutOff;} 
64   void SetV2vsPtMax(Double_t dV2vsPtMax) {this->fV2vsPtMax = dV2vsPtMax;}
65   Double_t GetV2vsPtMax() const {return this->fV2vsPtMax;} 
66   void SetSubeventEtaRange(Double_t minA, Double_t maxA, Double_t minB, Double_t maxB) 
67   {this->fEtaMinA = minA;this->fEtaMaxA = maxA;this->fEtaMinB = minB;this->fEtaMaxB = maxB;};
68   void SetNTimes(Int_t nt) {this->fNTimes = nt;}
69   Int_t GetNTimes() const {return this->fNTimes;} 
70   void SetUniformAcceptance(Bool_t ua) {this->fUniformAcceptance = ua;}
71   Bool_t GetUniformAcceptance() const {return this->fUniformAcceptance;} 
72   void SetFirstSectorPhiMin(Double_t dPhiMin1) {this->fPhiMin1 = dPhiMin1;}
73   Double_t GetFirstSectorPhiMin() const {return this->fPhiMin1;} 
74   void SetFirstSectorPhiMax(Double_t dPhiMax1) {this->fPhiMax1 = dPhiMax1;}
75   Double_t GetFirstSectorPhiMax() const {return this->fPhiMax1;}  
76   void SetFirstSectorProbability(Double_t dProbability1) {this->fProbability1 = dProbability1;}
77   Double_t GetFirstSectorProbability() const {return this->fProbability1;}    
78   void SetSecondSectorPhiMin(Double_t dPhiMin2) {this->fPhiMin2 = dPhiMin2;}
79   Double_t GetSecondSectorPhiMin() const {return this->fPhiMin2;} 
80   void SetSecondSectorPhiMax(Double_t dPhiMax2) {this->fPhiMax2 = dPhiMax2;}
81   Double_t GetSecondSectorPhiMax() const {return this->fPhiMax2;}
82   void SetSecondSectorProbability(Double_t dProbability2) {this->fProbability2 = dProbability2;}
83   Double_t GetSecondSectorProbability() const {return this->fProbability2;}       
84
85   //Acceptance - simulate detector effects/inefficiencies
86   void SimulateDetectorEffects() {fSimulateDetectorEffects = kTRUE;}
87   void SetNumberOfInefficientSectorsInPhi(Int_t numberOfInefficientSectors) {
88     fNumberOfInefficientSectors = numberOfInefficientSectors;
89     fInefficiencyFactorInPhi = 0.5;}
90   void SetInefficiencyFactor(Double_t gInefficiencyFactorInPhi) {
91     fInefficiencyFactorInPhi = gInefficiencyFactorInPhi;}
92   void SetNumberOfDeadSectorsInPhi(Int_t numberOfDeadSectors) {
93     fNumberOfDeadSectors = numberOfDeadSectors;}
94   void EnableEfficiencyDropNearEtaEdges() {
95     fEfficiencyDropNearEtaEdges = kTRUE;}
96
97  private:
98   AliFlowEventSimpleMakerOnTheFly(const AliFlowEventSimpleMakerOnTheFly& anAnalysis); // copy constructor
99   AliFlowEventSimpleMakerOnTheFly& operator=(const AliFlowEventSimpleMakerOnTheFly& anAnalysis); // assignment operator
100
101   void SetupEfficiencyMatrix();
102
103   Int_t fCount; // count number of events 
104   Int_t fMinMult; // uniformly sampled multiplicity is >= iMinMult
105   Int_t fMaxMult; // uniformly sampled multiplicity is < iMaxMult
106   TF1 *fPtSpectra; // transverse momentum distribution (pt is sampled from hardwired Boltzmann distribution)
107   Double_t fMass; // mass in pt distribution (hardwired is Boltzmann pt distribution)
108   Double_t fTemperature; // "temperature" in pt distribution (hardwired is Boltzmann pt distribution)   
109   TF1 *fPhiDistribution; // azimuthal distribution (phi is sampled from hardwired Fourier-like distribution)
110   Double_t fV1; // harmonic v1
111   Double_t fV2; // harmonic v2
112   Double_t fV3; // harmonic v3
113   Double_t fV4; // harmonic v4
114   Double_t fV5; // harmonic v5
115   Double_t fV6; // harmonic v6
116   Bool_t fUniformFluctuationsV2; // v2 is sampled uniformly for each event and for all particles from [fMinV2,fMaxV2] 
117   Double_t fMinV2; // if v2 is sampled uniformly for each event, this is lower boundary on its value  
118   Double_t fMaxV2; // if v2 is sampled uniformly for each event, this is upper boundary on its value
119   Bool_t fPtDependentV2; // v2 is pt-dependent
120   Double_t fV2vsPtCutOff; // if v2 is pt-dependent: for v2 < fV2vsPtCutOff v2 is growing linearly, otherwise v2 = fV2vsPtMax
121   Double_t fV2vsPtMax; // if v2 is pt-dependent: v2 = fV2vsPtMax for v2 >= fV2vsPtCutOff 
122   Double_t fEtaMinA; // minimum eta of subevent A
123   Double_t fEtaMaxA; // maximum eta of subevent A
124   Double_t fEtaMinB; // minimum eta of subevent B
125   Double_t fEtaMaxB; // maximum eta of subevent B 
126   Int_t fNTimes; // number of times to use the same particle in the analysis (simulating nonflow)
127   Bool_t fUniformAcceptance; // detector has uniform azimuthal acceptance or not
128   Double_t fPhiMin1; // first sector with non-uniform acceptance starts at azimuth fPhiMin1
129   Double_t fPhiMax1; // first sector with non-uniform acceptance ends at azimuth fPhiMax1
130   Double_t fProbability1; // particles emitted in fPhiMin1 < phi < fPhiMax1 are taken with probability fProbability1 
131   Double_t fPhiMin2; // second sector with non-uniform acceptance starts at azimuth fPhiMin2
132   Double_t fPhiMax2; // second sector with non-uniform acceptance ends at azimuth fPhiMax2
133   Double_t fProbability2; // particles emitted in fPhiMin2 < phi < fPhiMax2 are taken with probability fProbability2
134   Double_t fPi; // pi
135
136   //Simulate detector effects
137   Bool_t fSimulateDetectorEffects;//simulate detector effects in pT
138   Int_t fNumberOfInefficientSectors;//inefficient secotrs in phi
139   Double_t fInefficiencyFactorInPhi;//efficiency factor < 1
140   Int_t fNumberOfDeadSectors;//number of dead sectors
141   Bool_t fEfficiencyDropNearEtaEdges;//efficiency drop in eta edges
142   TH3F *fEfficiencyMatrix; //efficiency matrix in eta-pt-phi
143
144   ClassDef(AliFlowEventSimpleMakerOnTheFly,1) // macro for rootcint
145 };
146  
147 #endif
148
149
150