]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - HBTAN/AliHBTLLWeights.h
Updated PaintContour() method
[u/mrichter/AliRoot.git] / HBTAN / AliHBTLLWeights.h
index a533dec72a6b27f88c75abd22d42eedddb0088f7..47561f75a9ee5cf61f6811656e2cd1bd08fae153 100644 (file)
 /* $Id$ */
 
+//_________________________________________________________________
+///////////////////////////////////////////////////////////////////////
+//
+// class AliHBTLLWeights
+//
 // This class introduces the weight's calculation 
 // according to the Lednicky's algorithm.
 // The detailed description of the algorithm can be found 
 // in comments to fortran code:
 // fsiw.f, fsiini.f  
+//
+// Source simulation: Particle position/distance randomization
+// This class has functionality of randomizing particle positions / pair distances
+// so obtained correlation function follows a given shape, 
+// depending on a value of fRandomPosition member
+// By default this feature is switched off: fRandomPosition == AliHBTLLWeights::kNone
+// It can be: kGaussianQInv - so 1D Qinv correlation function has a Gaussian shape 
+//                            (and also Qlong and Qside, but not Qout)
+//            kGaussianOSL - so 3D Qout-Qside-Qlong correlation function has a Gaussian shape
+//
+// Ludmila Malinina, Piotr Krzysztof Skowronski
+//
+///////////////////////////////////////////////////////////////////////
+
 #ifndef ALIHBTLLWEIGHTS_H
 #define ALIHBTLLWEIGHTS_H
 
-#include <TObject.h>
+#include "AliHBTWeights.h"
 
 class AliHBTPair;
-class AliHBTLLWeights: public TObject
-{
- public:
-  virtual ~AliHBTLLWeights(){;}
-  AliHBTLLWeights(const AliHBTLLWeights &source) {
-    //Copy ctor needed by the coding conventions but not used
-    Fatal("AliHBTLLWeights","copy ctor not implemented");
-  }
-  AliHBTLLWeights & operator=(const AliHBTLLWeights &source) {
-    //Assignment operator needed by the coding conventions but not used
-    Fatal("AliHBTLLWeights","assignment operator not implemented");
-    return * this;
-  }
-  static AliHBTLLWeights* Instance();
-  
-  void Init(); //put the initial values in fortran commons fsiini, led_bldata
-  Double_t GetWeight(const AliHBTPair* partpair); //get weight calculated by Lednicky's algorithm
+class AliVAODParticle;
+class AliHBTLLWeights: public AliHBTWeights
+ {
+   public:
+     AliHBTLLWeights();
+     virtual ~AliHBTLLWeights(){;}
+     static AliHBTLLWeights* Instance();
+     
+     void Set();
+     
+     Double_t GetWeight(AliHBTPair* partpair); //get weight calculated by Lednicky's algorithm
+
+     void Init(); //put the initial values in fortran commons fsiini, led_bldata
+     void SetTest(Bool_t rtest = kTRUE);//Sets fTest member
+
+     void SetColoumb(Bool_t col = kTRUE);//: (ICH in fortran code) Coulomb interaction between the two particles ON (OFF)
+     void SetQuantumStatistics(Bool_t qss = kTRUE);//IQS: quantum statistics for the two particles ON (OFF) //if non-identical particles automatically off
+     void SetStrongInterSwitch(Bool_t sis = kTRUE);//ISI: strong interaction between the two particles ON (OFF)
+     void SetColWithResidNuclSwitch(Bool_t crn = kTRUE);//I3C: Coulomb interaction with residual nucleus ON (OFF)  
+     void SetLambda(Double_t la){fOneMinusLambda=1.-la;}  //lambda=haoticity
+     void SetApproxModel(Int_t ap);//sets  Model of Approximation (NS in Fortran code)
+     void SetParticlesTypes(Int_t pid1, Int_t pid2); //set AliRoot particles types   
+     void SetNucleusCharge(Double_t ch); // not used now  (see comments in fortran code)
+     void SetNucleusMass(Double_t mass); // (see comments in fortran code)
+     
+     enum ERandomizationWay {kNone = 0, kGaussianQInv, kGaussianOSL};
+
+     void SetRandomPosition(ERandomizationWay rw = kNone); //Choose if, and if yes, how to randomize distance between particles
+     void SetR1dw(Double_t R);   //spherical source model radii                                                                                                                                                                                                
+     
+   protected:
+     
+     Bool_t fTest;           //flag indicating if parameters listed below are to be calculated automatically (0)
+                             //or 
+     Bool_t fColoumbSwitch;   //switches on/off Coulumb effect
+     Bool_t fQuantStatSwitch; //switches on/off Quantum Statistics effect
+     Bool_t fStrongInterSwitch;//Switches strong interactions TRUE=ON
+     Bool_t fColWithResidNuclSwitch;//Switches couloumb interaction 
+                                    //with residual nucleus TRUE=ON          
+     Double_t fNuclMass;   //mass of nucleus
+     Double_t fNuclCharge; //charge of nucleus
+     
+     ERandomizationWay   fRandomPosition;//flag indicating if positions of particles shuold be randomized according to parameters below
+     Double_t fRadius;        //radius used for randomizing particle vertex position
+     
+     Double_t fOneMinusLambda; //1 - intercept parameter
+     
+     Int_t fApproximationModel; //approximation used to calculate Bethe-Salpeter amplitude see SetApproxModel for more comments
+
+     Int_t fPID1;  //Pdg Code of the first particle in the pair
+     Int_t fPID2;  //Pdg Code of the second particle in the pair
+     Double_t fSigma; //constants for spherical source model in cm
+     static const Double_t fgkWcons; //constant for fm->GeV conversion 1/0.1973
 
-  void SetTest(Bool_t rtest = kTRUE){ftest = rtest;} //if ftest=0: 
-  //physical values of the following  parameters are put automatically                       
-  //            in FSIINI (their values are not required)          
-  // ftest=1: any values of the following parameters are allowed,    
-  //the following parameters are required:                           
+     static  AliHBTLLWeights *fgLLWeights;// pointer to wrapper of Fortran Lednicky code
 
-  void SetColoumb(Bool_t col = kTRUE){
-    //(ICH in fortran code) Coulomb interaction between 
-    //the two particles ON (OFF)
-    fColoumbSwitch = col;
-  }
-  void SetQuantumStatistics(Bool_t qss = kTRUE){
-    //IQS: quantum statistics for the two particles ON (OFF)
-    //if non-identical particles automatically off
-    fQuantStatSwitch = qss;
-  }
-  void SetStrongInterSwitch(Bool_t sis = kTRUE){
-    //ISI: strong interaction between the two particles ON (OFF)
-    fStrongInterSwitch = sis;
-  }
-  void SetColWithResidNuclSwitch(Bool_t crn = kTRUE){
-    //I3C: Coulomb interaction with residual nucleus ON (OFF)
-    fColWithResidNuclSwitch = crn;
-  }
-  void SetApproxModel(Int_t ap){
-    //NS in Fortran code,
-    fApproximationModel=ap;
-  }
-  //   NS=1  Square well potential,
-  //   NS=3  not used
-  //   NS=4  scattered wave approximated by the spherical wave,
-  //   NS=2  same as NS=4 but the approx. of equal emission times in PRF
-  //         not required (t=0 approx. used in all other cases).    
+     static Int_t GetPairCode(Int_t pid1,Int_t pid2);
+     static Int_t GetPairCode(const AliHBTPair* partpair);//calculate automatically internal code 
 
+   private:
+     AliHBTLLWeights(const AliHBTLLWeights &/*source*/);
+     AliHBTLLWeights & operator=(const AliHBTLLWeights& /*source*/);
+     
+     Int_t SetMomentaInLCMS(AliVAODParticle* part1, AliVAODParticle* part2);
+     void  RandomPairDistances();
      
-  void SetRandomPosition(Bool_t rp = kTRUE){
-    //ON=kTRUE(OFF=kFALSE)
-    fRandomPosition = rp;
-  } 
-  // ON -- calculation of the Gauss source radii if the generator 
-  //       don't allows the source generation (for example MeVSim)
-  //if ON the following parameters are requested:
-  void SetR1dw(Double_t R){fRadius=R;}   //spherical source model radii
-  void SetLambdaw(Double_t la){flambda=la;}  //lambda=haoticity
-  void SetParticlesTypes(Int_t pid1, Int_t pid2){
-    //set AliRoot particles types   
-    fPID1 = pid1; fPID2 = pid2;
-  }
-    
-  void SetNucleusCharge(Double_t ch){
-    // not used now  (see comments in fortran code)
-    fNuclCharge=ch;
-  }
-  void SetNucleusMass(Double_t mass){
-    // (see comments in fortran code)
-    fNuclMass=mass;
-  }
-  
-  
- protected:
-  
-  Bool_t ftest; // Switch for automatic setting of all parameters
-  Bool_t fColoumbSwitch; // Swith for Couloumb interaction in the pair
-  Bool_t fQuantStatSwitch; //Switch for quantum statistics
-  Bool_t fStrongInterSwitch;//Switches strong interactions TRUE=ON
-  Bool_t fColWithResidNuclSwitch;//Switches couloumb interaction 
-  //with residual nucleus TRUE=ON          
-  Double_t fNuclMass; //mass 
-  Double_t fNuclCharge; //charge       
-  
-  Bool_t  fRandomPosition; // Radius of Gaussian source
-  Double_t fRadius; // Raduis of spheric source
-  Double_t flambda; // Chaoticity
-  
-  
-  //  Double_t fWein;
-  
-  Int_t fApproximationModel; //approximation used to calculate 
-  //  Bethe-Salpeter amplitude
-  //   ==1  Square well potential,
-  //   ==3  not used
-  //   ==4  scattered wave approximated by the spherical wave,
-  //   ==2  same as NS=4 but the approx. of equal emission times in PRF
-  //         not required (t=0 approx. used in all other cases).
-  //  Note: if ==2,4, the B-S amplitude diverges at zero distance r* in
-  //         the two-particle c.m.s.; user can specify a cutoff AA in
-  //         SUBROUTINE FSIINI, for example:
-  //         IF(NS.EQ.2.OR.NS.EQ.4)AA=5.D0 !! in 1/GeV --> AA=1. fm
-  
-  Int_t fPID1; // Type of the first particle
-  Int_t fPID2; // Type of the second particle
-  
-  static  AliHBTLLWeights *fgLLWeights;// pointer to wrapper of Fortran Lednicky code
-  
-  
-  static Int_t GetPairCode(Int_t pid1,Int_t pid2);
-  static Int_t GetPairCode(const AliHBTPair* partpair);//calculate automatically internal FSIW
-  //----------------------------------------------------------------------
-  // LL        1  2  3  4   5    6   7  8  9 10  11  12  13  14 15 16 17
-  // part. 1:  n  p  n alfa pi+ pi0 pi+ n  p pi+ pi+ pi+ pi- K+ K+ K+ K-
-  // part. 2:  n  p  p alfa pi- pi0 pi+ d  d  K-  K+  p   p  K- K+ p  p
-  // NS=1 y/n: +  +  +  +   +    -   -  -  -  -   -   -   -  -  -  -  -
-  //----------------------------------------------------------------------
-  // LL       18  19 20  21  22 23 24 25 26    27     28
-  // part. 1:  d  d   t  t   K0 K0  d p  p      p      n
-  // part. 2:  d alfa t alfa K0 K0b t t alfa lambda lambda
-  // NS=1 y/n:  -  -   -  -   -  -   - -  -      +      +
-  //----------------------------------------------------------------------
-  
-  Double_t fsigma; //constants for spherical source model 
-  Double_t fwcons; //weight of final state interaction?
-  
- private:
-  AliHBTLLWeights();
-  
-  ClassDef(AliHBTLLWeights,1)
+          
+     void Rotate(Double_t x, Double_t y, Double_t sphi, Double_t cphi, Double_t& xr, Double_t& yr);
+     void Boost (Double_t z, Double_t t, Double_t beta, Double_t gamma, Double_t& zt, Double_t& yt);
+     ClassDef(AliHBTLLWeights,2)
  };
 
 #endif