Catching up to NewIO -> Particle stores all passible PID and their probabilities
[u/mrichter/AliRoot.git] / HBTAN / AliHBTLLWeights.h
1 /* $Id$ */
2
3 // This class introduces the weight's calculation 
4 // according to the Lednicky's algorithm.
5 // The detailed description of the algorithm can be found 
6 // in comments to fortran code:
7 // fsiw.f, fsiini.f  
8 #ifndef ALIHBTLLWEIGHTS_H
9 #define ALIHBTLLWEIGHTS_H
10
11 #include <TObject.h>
12
13 class AliHBTPair;
14 class AliHBTLLWeights: public TObject
15 {
16  public:
17   virtual ~AliHBTLLWeights(){;}
18   AliHBTLLWeights(const AliHBTLLWeights &source) {
19     //Copy ctor needed by the coding conventions but not used
20     Fatal("AliHBTLLWeights","copy ctor not implemented");
21   }
22   AliHBTLLWeights & operator=(const AliHBTLLWeights &source) {
23     //Assignment operator needed by the coding conventions but not used
24     Fatal("AliHBTLLWeights","assignment operator not implemented");
25     return * this;
26   }
27   static AliHBTLLWeights* Instance();
28   
29   void Init(); //put the initial values in fortran commons fsiini, led_bldata
30   Double_t GetWeight(const AliHBTPair* partpair); //get weight calculated by Lednicky's algorithm
31
32   void SetTest(Bool_t rtest = kTRUE){ftest = rtest;} //if ftest=0: 
33   //physical values of the following  parameters are put automatically                       
34   //            in FSIINI (their values are not required)          
35   // ftest=1: any values of the following parameters are allowed,    
36   //the following parameters are required:                           
37
38   void SetColoumb(Bool_t col = kTRUE){
39     //(ICH in fortran code) Coulomb interaction between 
40     //the two particles ON (OFF)
41     fColoumbSwitch = col;
42   }
43   void SetQuantumStatistics(Bool_t qss = kTRUE){
44     //IQS: quantum statistics for the two particles ON (OFF)
45     //if non-identical particles automatically off
46     fQuantStatSwitch = qss;
47   }
48   void SetStrongInterSwitch(Bool_t sis = kTRUE){
49     //ISI: strong interaction between the two particles ON (OFF)
50     fStrongInterSwitch = sis;
51   }
52   void SetColWithResidNuclSwitch(Bool_t crn = kTRUE){
53     //I3C: Coulomb interaction with residual nucleus ON (OFF)
54     fColWithResidNuclSwitch = crn;
55   }
56   void SetApproxModel(Int_t ap){
57     //NS in Fortran code,
58     fApproximationModel=ap;
59   }
60   //   NS=1  Square well potential,
61   //   NS=3  not used
62   //   NS=4  scattered wave approximated by the spherical wave,
63   //   NS=2  same as NS=4 but the approx. of equal emission times in PRF
64   //         not required (t=0 approx. used in all other cases).    
65
66      
67   void SetRandomPosition(Bool_t rp = kTRUE){
68     //ON=kTRUE(OFF=kFALSE)
69     fRandomPosition = rp;
70   } 
71   // ON -- calculation of the Gauss source radii if the generator 
72   //       don't allows the source generation (for example MeVSim)
73   //if ON the following parameters are requested:
74   void SetR1dw(Double_t R){fRadius=R;}   //spherical source model radii
75   void SetLambdaw(Double_t la){flambda=la;}  //lambda=haoticity
76   void SetParticlesTypes(Int_t pid1, Int_t pid2){
77     //set AliRoot particles types   
78     fPID1 = pid1; fPID2 = pid2;
79   }
80     
81   void SetNucleusCharge(Double_t ch){
82     // not used now  (see comments in fortran code)
83     fNuclCharge=ch;
84   }
85   void SetNucleusMass(Double_t mass){
86     // (see comments in fortran code)
87     fNuclMass=mass;
88   }
89   
90   
91  protected:
92   
93   Bool_t ftest; // Switch for automatic setting of all parameters
94   Bool_t fColoumbSwitch; // Swith for Couloumb interaction in the pair
95   Bool_t fQuantStatSwitch; //Switch for quantum statistics
96   Bool_t fStrongInterSwitch;//Switches strong interactions TRUE=ON
97   Bool_t fColWithResidNuclSwitch;//Switches couloumb interaction 
98   //with residual nucleus TRUE=ON          
99   Double_t fNuclMass; //mass 
100   Double_t fNuclCharge; //charge        
101   
102   Bool_t  fRandomPosition; // Radius of Gaussian source
103   Double_t fRadius; // Raduis of spheric source
104   Double_t flambda; // Chaoticity
105   
106   
107   //  Double_t fWein;
108   
109   Int_t fApproximationModel; //approximation used to calculate 
110   //  Bethe-Salpeter amplitude
111   //   ==1  Square well potential,
112   //   ==3  not used
113   //   ==4  scattered wave approximated by the spherical wave,
114   //   ==2  same as NS=4 but the approx. of equal emission times in PRF
115   //         not required (t=0 approx. used in all other cases).
116   //  Note: if ==2,4, the B-S amplitude diverges at zero distance r* in
117   //         the two-particle c.m.s.; user can specify a cutoff AA in
118   //         SUBROUTINE FSIINI, for example:
119   //         IF(NS.EQ.2.OR.NS.EQ.4)AA=5.D0 !! in 1/GeV --> AA=1. fm
120   
121   Int_t fPID1; // Type of the first particle
122   Int_t fPID2; // Type of the second particle
123   
124   static  AliHBTLLWeights *fgLLWeights;// pointer to wrapper of Fortran Lednicky code
125   
126   
127   static Int_t GetPairCode(Int_t pid1,Int_t pid2);
128   static Int_t GetPairCode(const AliHBTPair* partpair);//calculate automatically internal FSIW
129   //----------------------------------------------------------------------
130   // LL        1  2  3  4   5    6   7  8  9 10  11  12  13  14 15 16 17
131   // part. 1:  n  p  n alfa pi+ pi0 pi+ n  p pi+ pi+ pi+ pi- K+ K+ K+ K-
132   // part. 2:  n  p  p alfa pi- pi0 pi+ d  d  K-  K+  p   p  K- K+ p  p
133   // NS=1 y/n: +  +  +  +   +    -   -  -  -  -   -   -   -  -  -  -  -
134   //----------------------------------------------------------------------
135   // LL       18  19 20  21  22 23 24 25 26    27     28
136   // part. 1:  d  d   t  t   K0 K0  d p  p      p      n
137   // part. 2:  d alfa t alfa K0 K0b t t alfa lambda lambda
138   // NS=1 y/n:  -  -   -  -   -  -   - -  -      +      +
139   //----------------------------------------------------------------------
140   
141   Double_t fsigma; //constants for spherical source model 
142   Double_t fwcons; //weight of final state interaction?
143   
144  private:
145   AliHBTLLWeights();
146   
147   ClassDef(AliHBTLLWeights,1)
148  };
149
150 #endif