Line data Source code
1 : #ifndef ALIGENHBTOSL_H
2 : #define ALIGENHBTOSL_H
3 : //__________________________________________________________
4 : /////////////////////////////////////////////////////////////
5 : // //
6 : // class AliGenHBTosl //
7 : // //
8 : // Genarator simulating particle correlations //
9 : // //
10 : // The main idea of the generator is to produce particles //
11 : // according to some distribution of two particle //
12 : // property. In HBT they are qout,qsie and qlong. //
13 : // In order to be able to generate signal that produces //
14 : // given two particle correlation background must be //
15 : // known before in order to produce the shape of signal //
16 : // to randomize given distribution from. //
17 : // //
18 : // The generator works as follows: //
19 : // 1. Coarse Background (fQCoarseBackground) is generated //
20 : // ade from the particles //
21 : // given by the external generator (variable //
22 : // fGenerator) by the mixing technique. //
23 : // 2. Coarse signal is prduced by multiplying Coarse //
24 : // background by a required function //
25 : // See method FillCoarseSignal //
26 : // 3. Signal is randomized out of the coarse signal //
27 : // histogram (two particle property). First particle //
28 : // is taken from the external generator, and the //
29 : // second one is CALCULATED on the basis of the first //
30 : // one and the two particle property (qout,qside,qlong)//
31 : // Background is made by the mixing out of the //
32 : // genereted signal events. //
33 : // This step is cotinued up to the moment signal //
34 : // histogram has enough statistics (data member //
35 : // fMinFill) //
36 : // See method StartSignalPass1() //
37 : // 4. chi is calculated for each bin (chiarray variqable) //
38 : // (not the chi2 because sign is important) //
39 : // Two particle prioperty //
40 : // (qout,qside,qlong) is chosen at the points that //
41 : // chi is the smallest. First particle is taken from //
42 : // the the external generator (fGenerator) and second's /
43 : // momenta are caclulated out of their momenta and //
44 : // (qout,qside,qlong). Background is updated //
45 : // continuesely for all the events. This step is //
46 : // continued until stability conditions are fullfiled //
47 : // or maximum number of iteration is reached. //
48 : // 5. The same as step 4 but events are stored. //
49 : // //
50 : ////////////////////////////////////////////////////////////
51 :
52 : #include "AliGenerator.h"
53 : #include <iosfwd>
54 :
55 : class TH3D;
56 : class AliStack;
57 : class TParticle;
58 : class TVector3;
59 : using std::ofstream;
60 :
61 : class AliGenHBTosl: public AliGenerator
62 : {
63 : public:
64 : AliGenHBTosl();
65 : AliGenHBTosl(Int_t n,Int_t pid = 211);
66 : AliGenHBTosl(const AliGenHBTosl& hbt);
67 : virtual ~AliGenHBTosl();
68 :
69 : void Init();
70 : void Generate();
71 :
72 0 : void SetGenerator(AliGenerator* gen){fGenerator = gen;}
73 0 : void SetDebug(Int_t debug){fDebug = debug;}
74 0 : Int_t GetDebug() const {return fDebug;}
75 :
76 : void Rotate(TVector3& relvector, TVector3& vector);
77 : Double_t Rotate(Double_t x,Double_t y,Double_t z);
78 0 : void SetSamplePhiRange(Float_t min,Float_t max){fSamplePhiMin = min; fSamplePhiMax = max;}
79 :
80 : Int_t GetThreeD(TParticle* first,TParticle* second, Double_t qout, Double_t qside, Double_t qlong);
81 :
82 :
83 : protected:
84 :
85 : void GetOneD(TParticle* first, TParticle* second,Double_t qinv);
86 :
87 : void FillCoarse();
88 : void FillCoarseSignal();
89 : void StartSignal();
90 : void StartSignalPass1();
91 : void Mix(TList* eventbuffer,TH3D* denominator,TH3D* denominator2);
92 : void Mix(AliStack* stack, TH3D* numerator, TH3D* numerator2);
93 : Double_t GetQInv(TParticle* f, TParticle* s);
94 : void GetQOutQSideQLong(TParticle* f, TParticle* s,Double_t& out, Double_t& side, Double_t& lon);
95 : Double_t GetQInvCorrTheorValue(Double_t qinv) const;
96 : Double_t GetQOutQSideQLongCorrTheorValue(Double_t& out, Double_t& side, Double_t& lon) const;
97 :
98 : Double_t Scale(TH3D* num,TH3D* den);
99 : void SetTrack(TParticle* p, Int_t& ntr) ;
100 : void SetTrack(TParticle* p, Int_t& ntr, AliStack* stack) const ;
101 :
102 : AliStack* RotateStack();
103 : void SwapGeneratingHistograms();
104 : void TestCoarseSignal();
105 :
106 : Bool_t CheckParticle(TParticle* p, TParticle* aupair,AliStack* stack);
107 : void Copy(TObject&) const;
108 : AliGenHBTosl & operator=(const AliGenHBTosl & rhs);
109 : private:
110 : TH3D* fQCoarseBackground;//Initial Background
111 : TH3D* fQCoarseSignal;//signal calculated by multiplying coarse background and model function
112 : TH3D* fQSignal;//generating signal histogram
113 : TH3D* fQBackground;//generating background histogram
114 :
115 : TH3D* fQSecondSignal;//second signal histogram
116 : TH3D* fQSecondBackground;//seconf background histogram
117 :
118 : Float_t fQRange;//range of generating histograms
119 : Int_t fQNBins;//number of bins of generating histograms
120 : AliGenerator* fGenerator;//input generator
121 :
122 : TList* fStackBuffer;//List with stacks
123 : Int_t fBufferSize;//defines number of events used for background mixing
124 : Int_t fNBinsToScale;//defines how many bins are used to calculate scaling factor
125 : Int_t fDebug;//debug flag
126 : Bool_t fSignalShapeCreated;//flag indicating that generating histograms are ready
127 :
128 : Int_t fMaxIterations; //maximal nuber of iterations on startup
129 : Float_t fMaxChiSquereChange;//value of ChiSqr change in %, when sturtup process in stable
130 : Float_t fMaxChiSquerePerNDF;//value of the chi2 where generating histograms are considered as good
131 :
132 :
133 : Double_t fQRadius;//simulated radius
134 :
135 : Int_t fPID;//pid of particle
136 : //we limit mixing to some finit phi range to make it faster
137 : Float_t fSamplePhiMin;//min phi
138 : Float_t fSamplePhiMax;//max phi
139 :
140 : Float_t fSignalRegion;//Defines signal region
141 :
142 : Int_t fMinFill;//Minimal allowed fill in background histograms - fill is continued until all bins have more than this
143 :
144 : Bool_t fSwapped;//indicates if generating histograms were already swapped
145 :
146 : ofstream* fLogFile;//! File where logs are stored
147 :
148 6 : ClassDef(AliGenHBTosl,1)
149 : };
150 : #endif
|