]>
Commit | Line | Data |
---|---|---|
695dc56f | 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 | ||
54 | class TH3D; | |
55 | class AliStack; | |
56 | class TParticle; | |
57 | class TVector; | |
58 | ||
5fdc214b | 59 | #include <Riostream.h> |
60 | ||
695dc56f | 61 | class AliGenHBTosl: public AliGenerator |
62 | { | |
63 | public: | |
64 | AliGenHBTosl(); | |
65 | AliGenHBTosl(Int_t n,Int_t pid = 211); | |
66 | virtual ~AliGenHBTosl(); | |
67 | ||
68 | void Init(); | |
69 | void Generate(); | |
70 | ||
71 | void SetGenerator(AliGenerator* gen){fGenerator = gen;} | |
f84379e8 | 72 | void SetDebug(Int_t debug){fDebug = debug;} |
73 | Int_t GetDebug() const {return fDebug;} | |
695dc56f | 74 | |
75 | void Rotate(TVector3& relvector, TVector3& vector); | |
76 | Double_t Rotate(Double_t x,Double_t y,Double_t z); | |
77 | void SetSamplePhiRange(Float_t min,Float_t max){fSamplePhiMin = min; fSamplePhiMax = max;} | |
78 | ||
79 | Int_t GetThreeD(TParticle* first,TParticle* second, Double_t qout, Double_t qside, Double_t qlong); | |
80 | ||
81 | ||
82 | protected: | |
83 | ||
84 | void GetOneD(TParticle* first, TParticle* second,Double_t qinv); | |
85 | ||
86 | void FillCoarse(); | |
87 | void FillCoarseSignal(); | |
88 | void StartSignal(); | |
89 | void StartSignalPass1(); | |
90 | void Mix(TList* eventbuffer,TH3D* denominator,TH3D* denominator2); | |
91 | void Mix(AliStack* stack, TH3D* numerator, TH3D* numerator2); | |
92 | Double_t GetQInv(TParticle* f, TParticle* s); | |
93 | void GetQOutQSideQLong(TParticle* f, TParticle* s,Double_t& out, Double_t& side, Double_t& lon); | |
94 | Double_t GetQInvCorrTheorValue(Double_t qinv) const; | |
95 | Double_t GetQOutQSideQLongCorrTheorValue(Double_t& out, Double_t& side, Double_t& lon) const; | |
96 | ||
97 | Double_t Scale(TH3D* num,TH3D* den); | |
5fdc214b | 98 | void SetTrack(TParticle* p, Int_t& ntr) ; |
99 | void SetTrack(TParticle* p, Int_t& ntr, AliStack* stack) const ; | |
695dc56f | 100 | |
101 | AliStack* RotateStack(); | |
102 | void SwapGeneratingHistograms(); | |
103 | void TestCoarseSignal(); | |
104 | ||
105 | Bool_t CheckParticle(TParticle* p, TParticle* aupair,AliStack* stack); | |
106 | private: | |
107 | TH3D* fQCoarseBackground;//Initial Background | |
5fdc214b | 108 | TH3D* fQCoarseSignal;//signal calculated by multiplying coarse background and model function |
109 | TH3D* fQSignal;//generating signal histogram | |
110 | TH3D* fQBackground;//generating background histogram | |
695dc56f | 111 | |
5fdc214b | 112 | TH3D* fQSecondSignal;//second signal histogram |
113 | TH3D* fQSecondBackground;//seconf background histogram | |
695dc56f | 114 | |
5fdc214b | 115 | Float_t fQRange;//range of generating histograms |
116 | Int_t fQNBins;//number of bins of generating histograms | |
117 | AliGenerator* fGenerator;//input generator | |
695dc56f | 118 | |
5fdc214b | 119 | TList* fStackBuffer;//List with stacks |
120 | Int_t fBufferSize;//defines number of events used for background mixing | |
121 | Int_t fNBinsToScale;//defines how many bins are used to calculate scaling factor | |
f5b253b3 | 122 | Int_t fDebug;//debug flag |
5fdc214b | 123 | Bool_t fSignalShapeCreated;//flag indicating that generating histograms are ready |
695dc56f | 124 | |
125 | Int_t fMaxIterations; //maximal nuber of iterations on startup | |
126 | Float_t fMaxChiSquereChange;//value of ChiSqr change in %, when sturtup process in stable | |
127 | Float_t fMaxChiSquerePerNDF;//value of the chi2 where generating histograms are considered as good | |
128 | ||
129 | ||
5fdc214b | 130 | Double_t fQRadius;//simulated radius |
695dc56f | 131 | |
5fdc214b | 132 | Int_t fPID;//pid of particle |
695dc56f | 133 | //we limit mixing to some finit phi range to make it faster |
5fdc214b | 134 | Float_t fSamplePhiMin;//min phi |
135 | Float_t fSamplePhiMax;//max phi | |
695dc56f | 136 | |
5fdc214b | 137 | Float_t fSignalRegion;//Defines signal region |
695dc56f | 138 | |
5fdc214b | 139 | Int_t fMinFill;//Minimal allowed fill in background histograms - fill is continued until all bins have more than this |
695dc56f | 140 | |
5fdc214b | 141 | Bool_t fSwapped;//indicates if generating histograms were already swapped |
142 | ||
143 | ofstream* fLogFile;//! File where logs are stored | |
695dc56f | 144 | |
145 | ClassDef(AliGenHBTosl,1) | |
146 | }; | |
147 | #endif |