Updates in GRP Preprocessor (Ernesto)
[u/mrichter/AliRoot.git] / HBTAN / AliHBTLLWeights.h
1 /* $Id$ */
2
3 //_________________________________________________________________
4 ///////////////////////////////////////////////////////////////////////
5 //
6 // class AliHBTLLWeights
7 //
8 // This class introduces the weight's calculation 
9 // according to the Lednicky's algorithm.
10 // The detailed description of the algorithm can be found 
11 // in comments to fortran code:
12 // fsiw.f, fsiini.f  
13 //
14 // Source simulation: Particle position/distance randomization
15 // This class has functionality of randomizing particle positions / pair distances
16 // so obtained correlation function follows a given shape, 
17 // depending on a value of fRandomPosition member
18 // By default this feature is switched off: fRandomPosition == AliHBTLLWeights::kNone
19 // It can be: kGaussianQInv - so 1D Qinv correlation function has a Gaussian shape 
20 //                            (and also Qlong and Qside, but not Qout)
21 //            kGaussianOSL - so 3D Qout-Qside-Qlong correlation function has a Gaussian shape
22 //
23 // Ludmila Malinina, Piotr Krzysztof Skowronski
24 //
25 ///////////////////////////////////////////////////////////////////////
26
27 #ifndef ALIHBTLLWEIGHTS_H
28 #define ALIHBTLLWEIGHTS_H
29
30 #include "AliHBTWeights.h"
31
32 class AliHBTPair;
33 class AliVAODParticle;
34 class AliHBTLLWeights: public AliHBTWeights
35  {
36    public:
37      AliHBTLLWeights();
38      virtual ~AliHBTLLWeights(){;}
39      static AliHBTLLWeights* Instance();
40      
41      void Set();
42      
43      Double_t GetWeight(AliHBTPair* partpair); //get weight calculated by Lednicky's algorithm
44
45      void Init(); //put the initial values in fortran commons fsiini, led_bldata
46      void SetTest(Bool_t rtest = kTRUE);//Sets fTest member
47
48      void SetColoumb(Bool_t col = kTRUE);//: (ICH in fortran code) Coulomb interaction between the two particles ON (OFF)
49      void SetQuantumStatistics(Bool_t qss = kTRUE);//IQS: quantum statistics for the two particles ON (OFF) //if non-identical particles automatically off
50      void SetStrongInterSwitch(Bool_t sis = kTRUE);//ISI: strong interaction between the two particles ON (OFF)
51      void SetColWithResidNuclSwitch(Bool_t crn = kTRUE);//I3C: Coulomb interaction with residual nucleus ON (OFF)  
52      void SetLambda(Double_t la){fOneMinusLambda=1.-la;}  //lambda=haoticity
53      void SetApproxModel(Int_t ap);//sets  Model of Approximation (NS in Fortran code)
54      void SetParticlesTypes(Int_t pid1, Int_t pid2); //set AliRoot particles types   
55      void SetNucleusCharge(Double_t ch); // not used now  (see comments in fortran code)
56      void SetNucleusMass(Double_t mass); // (see comments in fortran code)
57      
58      enum ERandomizationWay {kNone = 0, kGaussianQInv, kGaussianOSL};
59
60      void SetRandomPosition(ERandomizationWay rw = kNone); //Choose if, and if yes, how to randomize distance between particles
61      void SetR1dw(Double_t R);   //spherical source model radii                                                                                                                                                                                                 
62      
63    protected:
64      
65      Bool_t fTest;           //flag indicating if parameters listed below are to be calculated automatically (0)
66                              //or 
67      Bool_t fColoumbSwitch;   //switches on/off Coulumb effect
68      Bool_t fQuantStatSwitch; //switches on/off Quantum Statistics effect
69      Bool_t fStrongInterSwitch;//Switches strong interactions TRUE=ON
70      Bool_t fColWithResidNuclSwitch;//Switches couloumb interaction 
71                                     //with residual nucleus TRUE=ON          
72      Double_t fNuclMass;   //mass of nucleus
73      Double_t fNuclCharge; //charge of nucleus
74      
75      ERandomizationWay   fRandomPosition;//flag indicating if positions of particles shuold be randomized according to parameters below
76      Double_t fRadius;        //radius used for randomizing particle vertex position
77      
78      Double_t fOneMinusLambda; //1 - intercept parameter
79      
80      Int_t fApproximationModel; //approximation used to calculate Bethe-Salpeter amplitude see SetApproxModel for more comments
81
82      Int_t fPID1;  //Pdg Code of the first particle in the pair
83      Int_t fPID2;  //Pdg Code of the second particle in the pair
84      Double_t fSigma; //constants for spherical source model in cm
85      static const Double_t fgkWcons; //constant for fm->GeV conversion 1/0.1973
86
87      static  AliHBTLLWeights *fgLLWeights;// pointer to wrapper of Fortran Lednicky code
88
89      static Int_t GetPairCode(Int_t pid1,Int_t pid2);
90      static Int_t GetPairCode(const AliHBTPair* partpair);//calculate automatically internal code 
91
92    private:
93      AliHBTLLWeights(const AliHBTLLWeights &/*source*/);
94      AliHBTLLWeights & operator=(const AliHBTLLWeights& /*source*/);
95      
96      Int_t SetMomentaInLCMS(AliVAODParticle* part1, AliVAODParticle* part2);
97      void  RandomPairDistances();
98      
99           
100      void Rotate(Double_t x, Double_t y, Double_t sphi, Double_t cphi, Double_t& xr, Double_t& yr);
101      void Boost (Double_t z, Double_t t, Double_t beta, Double_t gamma, Double_t& zt, Double_t& yt);
102      ClassDef(AliHBTLLWeights,2)
103  };
104
105 #endif