3 //__________________________________________________________
4 /////////////////////////////////////////////////////////////
6 // class AliGenHBTosl //
8 // Genarator simulating particle correlations //
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. //
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 //
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. //
50 ////////////////////////////////////////////////////////////
52 #include "AliGenerator.h"
59 #include <Riostream.h>
61 class AliGenHBTosl: public AliGenerator
65 AliGenHBTosl(Int_t n,Int_t pid = 211);
66 virtual ~AliGenHBTosl();
71 void SetGenerator(AliGenerator* gen){fGenerator = gen;}
72 void SetDebug(Int_t debug){fDebug = debug;}
73 Int_t GetDebug() const {return fDebug;}
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;}
79 Int_t GetThreeD(TParticle* first,TParticle* second, Double_t qout, Double_t qside, Double_t qlong);
84 void GetOneD(TParticle* first, TParticle* second,Double_t qinv);
87 void FillCoarseSignal();
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;
97 Double_t Scale(TH3D* num,TH3D* den);
98 void SetTrack(TParticle* p, Int_t& ntr) ;
99 void SetTrack(TParticle* p, Int_t& ntr, AliStack* stack) const ;
101 AliStack* RotateStack();
102 void SwapGeneratingHistograms();
103 void TestCoarseSignal();
105 Bool_t CheckParticle(TParticle* p, TParticle* aupair,AliStack* stack);
107 TH3D* fQCoarseBackground;//Initial Background
108 TH3D* fQCoarseSignal;//signal calculated by multiplying coarse background and model function
109 TH3D* fQSignal;//generating signal histogram
110 TH3D* fQBackground;//generating background histogram
112 TH3D* fQSecondSignal;//second signal histogram
113 TH3D* fQSecondBackground;//seconf background histogram
115 Float_t fQRange;//range of generating histograms
116 Int_t fQNBins;//number of bins of generating histograms
117 AliGenerator* fGenerator;//input generator
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
122 Int_t fDebug;//debug flag
123 Bool_t fSignalShapeCreated;//flag indicating that generating histograms are ready
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
130 Double_t fQRadius;//simulated radius
132 Int_t fPID;//pid of particle
133 //we limit mixing to some finit phi range to make it faster
134 Float_t fSamplePhiMin;//min phi
135 Float_t fSamplePhiMax;//max phi
137 Float_t fSignalRegion;//Defines signal region
139 Int_t fMinFill;//Minimal allowed fill in background histograms - fill is continued until all bins have more than this
141 Bool_t fSwapped;//indicates if generating histograms were already swapped
143 ofstream* fLogFile;//! File where logs are stored
145 ClassDef(AliGenHBTosl,1)