]> git.uio.no Git - u/mrichter/AliRoot.git/blame - EVGEN/AliGenHBTprocessor.h
Fully commented version by Bruno Espagnon.
[u/mrichter/AliRoot.git] / EVGEN / AliGenHBTprocessor.h
CommitLineData
2b9786f4 1#ifndef ALIGENHBTPROCESSOR_H
2#define ALIGENHBTPROCESSOR_H
3/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * See cxx source for full Copyright notice */
5
6/* $Id$ */
7
8// Implementation of the interface for THBTprocessor
9// Author: Piotr Krzysztof Skowronski <Piotr.Skowronski@cern.ch>
10
11#include "AliGenerator.h"
12#include <TFile.h>
13#include <TTree.h>
14#include <AliPDG.h>
15#include "THBTprocessor.h"
16
17enum {kHBTPMaxParticleTypes = 50};
18
19class AliGenHBTprocessor : public AliGenerator {
20
21 public:
22 AliGenHBTprocessor();
23 virtual ~AliGenHBTprocessor();
24
25 virtual void Init();
26 virtual void Generate();
27 virtual void GetParticles(TClonesArray * particles);
28 Int_t IdFromPDG(Int_t) const;
29 Int_t PDGFromId(Int_t) const;
30
31 Int_t GetHbtPStatusCode(Int_t part) const;
32 void SetHbtPStatusCode(Int_t hbtstatcode, Int_t part);
2b9786f4 33/************* S E T T E R S ******************/
34
35 virtual void SetTrackRejectionFactor(Float_t trf = 1.0);
36
37 virtual void SetRefControl(Int_t rc =2);
38 virtual void SetPIDs(Int_t pid1 = kPiPlus,Int_t pid2 = kPiMinus); //PDG Codes of particles to be processed, default \\Pi^{+} and \\Pi^{-}
39 virtual void SetNPIDtypes(Int_t npidt = 2); //Number ofparticle types to be processed
40 virtual void SetDeltap(Float_t deltp = 0.1); //maximum range for random momentum shifts in GeV/c;
41 //px,py,pz independent; Default = 0.1 GeV/c.
42 virtual void SetMaxIterations(Int_t maxiter = 50);
43 virtual void SetDelChi(Float_t dc = 0.1);
44 virtual void SetIRand(Int_t irnd = 76564) ;
45
46 virtual void SetLambda(Float_t lam = 0.6);
47 virtual void SetR1d(Float_t r = 7.0) ;
48 virtual void SetRSide(Float_t rs = 6.0);
49 virtual void SetROut(Float_t ro = 7.0) ;
50 virtual void SetRLong(Float_t rl = 4.0) ;
51 virtual void SetRPerp(Float_t rp = 6.0);
52 virtual void SetRParallel(Float_t rprl = 4.0);
53 virtual void SetR0(Float_t r0 = 4.0) ;
54 virtual void SetQ0(Float_t q0 = 9.0) ;
55 virtual void SetSwitch1D(Int_t s1d = 3);
56 virtual void SetSwitch3D(Int_t s3d = 0) ;
57 virtual void SetSwitchType(Int_t st = 3);
58 virtual void SetSwitchCoherence(Int_t sc = 0);
59 virtual void SetSwitchCoulomb(Int_t scol = 2);
60 virtual void SetSwitchFermiBose(Int_t sfb = 1);
61
62 virtual void SetMomentumRange(Float_t pmin=0, Float_t pmax=0); //Dummy method
63 virtual void SetPtRange(Float_t ptmin = 0.1, Float_t ptmax = 0.98);
64 virtual void SetPxRange(Float_t pxmin = -1.0, Float_t pxmax = 1.0);
65 virtual void SetPyRange(Float_t pymin = -1.0, Float_t pymax = 1.0);
66 virtual void SetPzRange(Float_t pzmin = -3.6, Float_t pzmax = 3.6);
67
68 virtual void SetPhiRange(Float_t phimin = 0.0, Float_t phimax = 360.0);//Angle in degrees
69 //coherent with AliGenCocktail
70 //incohernet with AliGenerator
71 virtual void SetEtaRange(Float_t etamin = -1.5, Float_t etamax = 1.5);//Pseudorapidity
4c90f2a0 72 void SetThetaRange(Float_t thetamin = 0, Float_t thetamax = 180); //Azimuthal angle, override AliGenerator method
73 //which uses this, core fortran HBTProcessor uses Eta (pseudorapidity)
74 //so these methods has to be synchronized
75
2b9786f4 76 virtual void SetNPtBins(Int_t nptbin = 50);
77 virtual void SetNPhiBins(Int_t nphibin = 50);
78 virtual void SetNEtaBins(Int_t netabin = 50);
79 virtual void SetNPxBins(Int_t npxbin = 20);
80 virtual void SetNPyBins(Int_t npybin = 20);
81 virtual void SetNPzBins(Int_t npzbin = 70);
82
83
84 virtual void SetNBins1DFineMesh(Int_t n = 10);
85 virtual void SetBinSize1DFineMesh(Float_t x=0.01);
86
87 virtual void SetNBins1DCoarseMesh(Int_t n =2 );
88 virtual void SetBinSize1DCoarseMesh(Float_t x=0.05);
89
90 virtual void SetNBins3DFineMesh(Int_t n = 8);
91 virtual void SetBinSize3DFineMesh(Float_t x=0.01);
92
93 virtual void SetNBins3DCoarseMesh(Int_t n = 2);
94 virtual void SetBinSize3DCoarseMesh(Float_t x=0.08);
95
96 virtual void SetNBins3DFineProjectMesh(Int_t n =3 );
97/***********************************************************************/
98/* * * * * * * P R O T E C T E D A R E A * * * * * * * * * * * */
99/***********************************************************************/
100 protected:
101
102 THBTprocessor * fHBTprocessor; //pointer to generator (TGenerator)
103 Int_t **fHbtPStatCodes; //! hbtp status codes of particles
104 Int_t fNPDGCodes; //! Number of defined particles
105 Int_t fPDGCode[kHBTPMaxParticleTypes]; //! PDG codes (for conversion PDG<->Geant)
106 void DefineParticles(); //initiates array with PDG codes
107 void InitStatusCodes(); //Initiates status codes (allocates memory and sets everything to zero)
108 void CleanStatusCodes(); //deletes array with status codes
109 /********** P A R A M E T E R S OF THE GENERATOR****************/
110
111 Float_t fTrackRejectionFactor; //variates in range 0.0 <-> 1.0
112 //Describes the factor of particles rejected from the output.
113 //Used only in case of low muliplicity particles e.g. lambdas.
114 //Processor generates addisional particles and builds the
115 //correletions on such a statistics.
116 //At the end these particels are left in the event according
117 //to this factor: 1==all particles are left
118 // 0==all are removed
119 Int_t fReferenceControl; //switch wether read reference histograms from file =1
120 // compute from input events =2 - default
121 Int_t fPrintFull; // Full print out option - each event
122 Int_t fPrintSectorData; // Print sector overflow diagnostics
123 Int_t fNPidTypes; // # particle ID types to correlate
124 Int_t fPid[2]; // Geant particle ID #s, max of 2 types
125 Int_t fNevents ; // # events in input event text file
126 Int_t fSwitch_1d; // Include 1D correlations
127 Int_t fSwitch_3d; // Include 3D correlations
128 Int_t fSwitch_type ; // For like, unlike or both PID pairs
129 Int_t fSwitch_coherence; // To include incoh/coher mixed source
130 Int_t fSwitch_coulomb; // Coulomb correction selection options
131 Int_t fSwitch_fermi_bose; // For fermions or bosons
132
133// Numbers of particles and pairs:
134
135 Int_t fN_part_1_trk; // Total # PID #1 in 'trk', all flags
136 Int_t fN_part_2_trk; // Total # PID #2 in 'trk', all flags
137 Int_t fN_part_tot_trk; // Total # all part. in 'trk', all flgs
138 Int_t fN_part_used_1_trk; // # PID#1, used (flag=0) in 'trk'
139 Int_t fN_part_used_2_trk; // # PID#2, used (flag=0) in 'trk'
140
141 Int_t fN_part_1_trk2; // Total # PID #1 in 'trk2', all flags
142 Int_t fN_part_2_trk2; // Total # PID #2 in 'trk2', all flags
143 Int_t fN_part_tot_trk2; // Total # all part. in 'trk2', all flgs
144 Int_t fN_part_used_1_trk2; // # PID#1, used (flag=0) in 'trk2'
145 Int_t fN_part_used_2_trk2; // # PID#2, used (flag=0) in 'trk2'
146
147 Int_t fN_part_used_1_ref; // # PID#1, used (flag=0) in Reference
148 Int_t fN_part_used_2_ref; // # PID#2, used (flag=0) in Reference
149 Int_t fN_part_used_1_inc; // # PID#1, used (flag=0) in Inclusive
150 Int_t fN_part_used_2_inc; // # PID#2, used (flag=0) in Inclusive
151
152 Int_t fNum_pairs_like; // # like pairs used (flag=0) in fit
153 Int_t fNum_pairs_unlike; // # unlike pairs used (flag=0) in fit
154 Int_t fNum_pairs_like_ref; // # like pairs used (flag=0) in Ref.
155 Int_t fNum_pairs_unlike_ref; // # unlike pairs used (flag=0) in Ref.
156 Int_t fNum_pairs_like_inc; // # like pairs used (flag=0) in Incl.
157 Int_t fNum_pairs_unlike_inc; // # unlike pairs used (flag=0) in Incl.
158
159// Counters:
160
161 Int_t fEvent_line_counter; // Input event text file line counter
162 Int_t fMaxit; // Max # iterations in track adjustment
163 Int_t fIrand; // Random # starting seed (Def=12345)
164 Int_t fFile10_line_counter; // Output, correlated event text file
165// // line counter
166
167// Correlation Model Parameters:
168
169 Float_t fLambda; // Chaoticity parameter
170 Float_t fR_1d; // Spherical source radius (fm)
171 Float_t fRside; // 3D Bertsch-Pratt source 'side' R (fm)
172 Float_t fRout; // 3D Bertsch-Pratt source 'out' R (fm)
173 Float_t fRlong; // 3D Bertsch-Pratt source 'long' R (fm)
174 Float_t fRperp; // 3D YKP source transverse radius (fm)
175 Float_t fRparallel; // 3D YKP source longitudinal radius(fm)
176 Float_t fR0; // 3D YKP source emission time durat(fm)
177 Float_t fQ0; // NA35 Coulomb parameter (GeV/c) or
178// // Coul radius for Pratt finite src (fm)
179
180// Search Control Parameters:
181
182
183 Float_t fDeltap; // Max limit for x,y,z momt shifts(GeV/c)
184 Float_t fDelchi; // Min% change in Chi-Sq to stop iterat.
185
186
187// Chi-Square Values:
188
189 Float_t fChisq_wt_like_1d; // 1D, Like pairs
190 Float_t fChisq_wt_unlike_1d; // 1D, Unlike pairs
191 Float_t fChisq_wt_like_3d_fine; // 3D, Like pairs, Fine Mesh
192 Float_t fChisq_wt_unlike_3d_fine; // 3D, Unlike pairs, Fine Mesh
193 Float_t fChisq_wt_like_3d_coarse; // 3D, Like pairs, Coarse Mesh
194 Float_t fChisq_wt_unlike_3d_coarse; // 3D, Unlike pairs, Coarse Mesh
195 Float_t fChisq_wt_hist1_1; // One-body, particle ID type #1
196 Float_t fChisq_wt_hist1_2; // One-body, particle ID type #2
197
198// Particle Masses:
199
200 Float_t fMass1, fMass2; // Particle ID# 1 and 2 masses (GeV)
201
202
203 /********** M E S H ****************/
204
205
206 Int_t fN_pt_bins; // # one-body pt bins
207 Int_t fN_phi_bins; // # one-body phi bins
208 Int_t fN_eta_bins; // # one-body eta bins
209
210 Int_t fN_1d_fine; // # bins for 1D, Fine Mesh
211 Int_t fN_1d_coarse; // # bins for 1D, Coarse Mesh
212 Int_t fN_1d_total; // Total # bins for 1D
213 Int_t fN_3d_fine ; // # bins for 3D, Fine Mesh
214 Int_t fN_3d_coarse; // # bins for 3D, Coarse Mesh
215 Int_t fN_3d_total; // Total # bins for 3D
216 Int_t fN_3d_fine_project; // # 3D fine mesh bins to sum over for
217
218// Momentum Space Sectors for Track Sorting:
219
220 Int_t fN_px_bins; // # sector bins in px
221 Int_t fN_py_bins; // # sector bins in py
222 Int_t fN_pz_bins; // # sector bins in pz
223 Int_t fN_sectors; // Total # sectors in 3D momentum space
224
225// Temporary Momentum Space Sector information storage during trk adjust.
226
227 Int_t fOld_sec_ntrk; // Old sector # tracks
228 Int_t fOld_sec_flag; // Old sector flag value
229 Int_t fOld_sec_trkid[MAX_TRK_SAVE]; // Old sector track id array
230
231 Int_t fNew_sec_ntrk; // New sector # tracks
232 Int_t fNew_sec_flag; // New sector flag value
233 Int_t fNew_sec_trkid[MAX_TRK_SAVE];// New sector track id array
234 Int_t fNew_sec_save; // New sector ID value
235 Int_t fNld_sec_save; // Old sector ID value
236
237 Float_t fPt_bin_size ; // One-body pt bin size in (GeV/c)
238
239
240 Float_t fPhi_bin_size; // One-body phi bin size in (degrees)
241
242 Float_t fEta_bin_size ; // One-body eta bin size
243 Float_t fEta_min; // One-body eta min/max
244 Float_t fEta_max;
245// Two-Body Histograms and Correlation Mesh for 1D and 3D distributions:
246// // projections onto single axis.
247
248 Float_t fBinsize_1d_fine; // Bin Size - 1D, Fine Mesh in (GeV/c)
249 Float_t fBinsize_1d_coarse; // Bin Size - 1D, Coarse Mesh in (GeV/c)
250 Float_t fQmid_1d; // q (GeV/c) at fine-coarse mesh boundary
251 Float_t fQmax_1d; // Max q (GeV/c) for 1D distributions
252 Float_t fBinsize_3d_fine; // Bin Size - 3D, Fine Mesh in (GeV/c)
253 Float_t fBinsize_3d_coarse; // Bin Size - 3D, Coarse Mesh in (GeV/c)
254 Float_t fQmid_3d; // q (GeV/c) at fine-coarse mesh boundary
255 Float_t fQmax_3d; // Max q (GeV/c) for 3D distributions
256
257 Float_t fPx_min; // Sector range in px in GeV/c
258 Float_t fPx_max; //--//--
259 Float_t fDelpx; // Mom. space sector cell size - px(GeV/c)
260
261 Float_t fPy_min; // Sector range in py in GeV/c
262 Float_t fPy_max; // --//--
263 Float_t fDelpy; // Mom. space sector cell size - py(GeV/c)
264
265 Float_t fPz_min; // Sector range in pz in GeV/c min
266 Float_t fPz_max; // Sector range in pz in GeV/c max
267 Float_t fDelpz; // Mom. space sector cell size - pz(GeV/c)
268
4c90f2a0 269
270 /******* P R O T E C T E D M E T H O D S *****/
271 public:
272 //conveerts Eta (pseudorapidity) to etha(azimuthal angle). Returns radians
273 static Double_t EtaToTheta(Double_t arg){return 2.*TMath::ATan(TMath::Exp(-arg));}
274 //converts etha(azimuthal angle) to Eta (pseudorapidity). Argument in radians
275 static Double_t ThetaToEta(Double_t arg);
276 //converts Degrees To Radians
277 static Double_t DegreesToRadians(Double_t arg){return arg*TMath::Pi()/180.;}
278 //converts Radians To Degrees
279 static Double_t RadiansToDegrees(Double_t arg){return arg*180./TMath::Pi();}
280
2b9786f4 281 ClassDef(AliGenHBTprocessor,1) // Interface class for AliMevsim
282
283};
4c90f2a0 284#include <iostream.h>
2b9786f4 285#endif