New reader for the pedestal run and vdrift (Julian) and some bug fixing (Raphaelle)
[u/mrichter/AliRoot.git] / EVGEN / AliGenHBTosl.h
CommitLineData
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
54class TH3D;
55class AliStack;
56class TParticle;
e8d02863 57class TVector3;
695dc56f 58
5fdc214b 59#include <Riostream.h>
60
695dc56f 61class AliGenHBTosl: public AliGenerator
62{
63 public:
64 AliGenHBTosl();
65 AliGenHBTosl(Int_t n,Int_t pid = 211);
1c56e311 66 AliGenHBTosl(const AliGenHBTosl& hbt);
695dc56f 67 virtual ~AliGenHBTosl();
68
69 void Init();
70 void Generate();
71
72 void SetGenerator(AliGenerator* gen){fGenerator = gen;}
f84379e8 73 void SetDebug(Int_t debug){fDebug = debug;}
74 Int_t GetDebug() const {return fDebug;}
695dc56f 75
76 void Rotate(TVector3& relvector, TVector3& vector);
77 Double_t Rotate(Double_t x,Double_t y,Double_t z);
78 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);
5fdc214b 99 void SetTrack(TParticle* p, Int_t& ntr) ;
100 void SetTrack(TParticle* p, Int_t& ntr, AliStack* stack) const ;
695dc56f 101
102 AliStack* RotateStack();
103 void SwapGeneratingHistograms();
104 void TestCoarseSignal();
105
106 Bool_t CheckParticle(TParticle* p, TParticle* aupair,AliStack* stack);
1c56e311 107 void Copy(TObject&) const;
108 AliGenHBTosl & operator=(const AliGenHBTosl & rhs);
695dc56f 109 private:
110 TH3D* fQCoarseBackground;//Initial Background
5fdc214b 111 TH3D* fQCoarseSignal;//signal calculated by multiplying coarse background and model function
112 TH3D* fQSignal;//generating signal histogram
113 TH3D* fQBackground;//generating background histogram
695dc56f 114
5fdc214b 115 TH3D* fQSecondSignal;//second signal histogram
116 TH3D* fQSecondBackground;//seconf background histogram
695dc56f 117
5fdc214b 118 Float_t fQRange;//range of generating histograms
119 Int_t fQNBins;//number of bins of generating histograms
120 AliGenerator* fGenerator;//input generator
695dc56f 121
5fdc214b 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
f5b253b3 125 Int_t fDebug;//debug flag
5fdc214b 126 Bool_t fSignalShapeCreated;//flag indicating that generating histograms are ready
695dc56f 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
5fdc214b 133 Double_t fQRadius;//simulated radius
695dc56f 134
5fdc214b 135 Int_t fPID;//pid of particle
695dc56f 136 //we limit mixing to some finit phi range to make it faster
5fdc214b 137 Float_t fSamplePhiMin;//min phi
138 Float_t fSamplePhiMax;//max phi
695dc56f 139
5fdc214b 140 Float_t fSignalRegion;//Defines signal region
695dc56f 141
5fdc214b 142 Int_t fMinFill;//Minimal allowed fill in background histograms - fill is continued until all bins have more than this
695dc56f 143
5fdc214b 144 Bool_t fSwapped;//indicates if generating histograms were already swapped
145
146 ofstream* fLogFile;//! File where logs are stored
695dc56f 147
148 ClassDef(AliGenHBTosl,1)
149};
150#endif