]> git.uio.no Git - u/mrichter/AliRoot.git/blob - TEvtGen/EvtGenBase/EvtDalitzReso.hh
Updates EvtGen Code
[u/mrichter/AliRoot.git] / TEvtGen / EvtGenBase / EvtDalitzReso.hh
1 /*****************************************************************************
2  * Project: BaBar detector at the SLAC PEP-II B-factory
3  * Package: EvtGenBase
4  *    File: $Id: EvtDalitzReso.hh,v 1.1 2009-03-16 16:50:49 robbep Exp $
5  *
6  * Description:
7  *   Class to compute Dalitz amplitudes based on many models that cannot be
8  *     handled with EvtResonance.
9  *
10  * Modification history:
11  *   Jordi Garra Ticó     2008/07/03         File created
12  *****************************************************************************/
13
14 #ifndef __EVTDALITZRESO_HH__
15 #define __EVTDALITZRESO_HH__
16
17 #include <string>
18 #include <vector>
19 #include <map>
20
21 #include "EvtGenBase/EvtComplex.hh"
22 #include "EvtGenBase/EvtCyclic3.hh"
23 #include "EvtGenBase/EvtSpinType.hh"
24 #include "EvtGenBase/EvtTwoBodyVertex.hh"
25 #include "EvtGenBase/EvtDalitzPoint.hh"
26 #include "EvtGenBase/EvtDecayAmp.hh"
27 #include "EvtGenBase/EvtBlattWeisskopf.hh"
28 #include "EvtGenBase/EvtFlatte.hh"
29
30 using std::vector;
31 using std::map;
32
33 class EvtBlattWeisskopf;
34
35 class EvtDalitzReso
36 {
37 public:
38   // Numerator type
39   enum NumType { NBW            = 0 , RBW_ZEMACH        = 1 , RBW_KUEHN  = 2 , RBW_CLEO        = 3 ,
40                  RBW_ZEMACH2    = 4 , GS_CLEO           = 5 , K_MATRIX   = 6 , RBW_CLEO_ZEMACH = 7 ,
41                  GS_CLEO_ZEMACH = 8 , LASS              = 9 , K_MATRIX_I = 10, K_MATRIX_II     = 11,
42                  GAUSS_CLEO     = 12, GAUSS_CLEO_ZEMACH = 13, FLATTE = 14, NON_RES = 15,
43      NON_RES_LIN    = 16, NON_RES_EXP       = 17 };
44
45   // Coupling type
46   //  ChgPion : pi+ pi-
47   //  NeuPion : pi0 pi0
48   //  Pion    : 0.5*[(pi+ pi-) + (pi0 pi0)]
49   //  ChgKaon : K+ K-
50   //  NeuKaon : K0 K0
51   //  Kaon    : 0.5*[(K+ K-) + (K0 K0)]
52   //  EtaPion : eta pi0
53   enum CouplingType {Undefined=0,PicPic=1,PizPiz,PiPi,KcKc,KzKz,KK,EtaPic,EtaPiz,PicPicKK,WA76};
54
55   EvtDalitzReso() : _typeN(NON_RES) {};
56
57   EvtDalitzReso(const EvtDalitzPlot& dp, EvtCyclic3::Pair pairRes, NumType typeN, double alpha=0.0) : _dp(dp), _pairRes(pairRes), _typeN(typeN), _alpha(alpha) {};
58
59   EvtDalitzReso(const EvtDalitzPlot& dp, EvtCyclic3::Pair pairAng, EvtCyclic3::Pair pairRes, 
60                 EvtSpinType::spintype spin, double m0, double g0, NumType typeN, double f_b=0.0, double f_d=1.5);
61
62   EvtDalitzReso(const EvtDalitzPlot& dp, EvtCyclic3::Pair pairAng, EvtCyclic3::Pair pairRes, 
63                 EvtSpinType::spintype spin, double m0, double g0, NumType typeN,
64                 double m0_mix, double g0_mix, double delta_mix, EvtComplex amp_mix);
65
66   EvtDalitzReso(const EvtDalitzPlot& dp, EvtCyclic3::Pair pairAng, EvtCyclic3::Pair pairRes, 
67                 EvtSpinType::spintype spin, double m0, NumType typeN, double g1, double g2, CouplingType coupling2);
68
69   // K-matrix
70   EvtDalitzReso(const EvtDalitzPlot& dp, EvtCyclic3::Pair pairRes, std::string nameIndex, NumType typeN,
71                 EvtComplex fr12prod, EvtComplex fr13prod, EvtComplex fr14prod, EvtComplex fr15prod, double s0prod);
72
73   // LASS
74   EvtDalitzReso(const EvtDalitzPlot& dp, EvtCyclic3::Pair pairRes, double m0, double g0,
75                 double a, double r, double B, double phiB, double R, double phiR, double cutoff=-1, bool scaleByMOverQ=false);
76
77   //Flatte
78   EvtDalitzReso(const EvtDalitzPlot& dp, EvtCyclic3::Pair pairRes, double m0);
79
80   EvtDalitzReso(const EvtDalitzReso& other);
81
82   ~EvtDalitzReso();
83
84   EvtDalitzReso* clone() const { return new EvtDalitzReso(*this); }
85
86   EvtComplex evaluate(const EvtDalitzPoint& p);
87
88   void set_fd( double R ) { _vd.set_f( R ); }
89   void set_fb( double R ) { _vb.set_f( R ); }
90
91   void addFlatteParam(const EvtFlatteParam& param) { _flatteParams.push_back(param); }
92
93 private:
94   EvtComplex psFactor(double& ma, double& mb, double& m);
95   EvtComplex psFactor(double& ma1, double& mb1, double& ma2, double& mb2, double& m);
96   EvtComplex propGauss(const double& m0, const double& s0, const double& m);
97   EvtComplex propBreitWigner(const double& m0, const double& g0, const double& m); 
98   EvtComplex propBreitWignerRel(const double& m0, const double& g0, const double& m);
99   EvtComplex propBreitWignerRel(const double& m0, const EvtComplex& g0, const double& m);
100   EvtComplex propBreitWignerRelCoupled(const double& m0, const EvtComplex& g1, const EvtComplex& g2, const double& m); 
101   EvtComplex propGounarisSakurai(const double& m0, const double& g0, const double& k0, 
102                                  const double& m, const double& g, const double& k);
103   inline double GS_f(const double& m0, const double& g0, const double& k0, const double& m, const double& k);
104   inline double GS_h(const double& m, const double& k);
105   inline double GS_dhods(const double& m0, const double& k0); 
106   inline double GS_d(const double& m0, const double& k0); 
107
108   EvtComplex numerator(const EvtDalitzPoint& p, const EvtTwoBodyKine& vb, const EvtTwoBodyKine& vd);
109   double angDep(const EvtDalitzPoint& p);
110   EvtComplex mixFactor(EvtComplex prop, EvtComplex prop_mix);
111   EvtComplex Fvector( double s, int index );
112   EvtComplex lass(double s);
113   EvtComplex flatte(const double& m);
114
115   inline EvtComplex sqrtCplx(double in) { return (in > 0) ? EvtComplex(sqrt(in), 0) : EvtComplex(0, sqrt(-in)); }
116
117   // Dalitz plot
118   EvtDalitzPlot _dp; 
119
120   // Pairing indices:
121   EvtCyclic3::Pair _pairAng;    // angular  
122   EvtCyclic3::Pair _pairRes;    // resonance
123
124   // Spin
125   EvtSpinType::spintype _spin;                                  
126
127   // Numerator type
128   NumType _typeN;
129
130   // Nominal mass and width
131   double _m0,_g0; 
132
133   // Vertices
134   EvtTwoBodyVertex _vb;
135   EvtTwoBodyVertex _vd;
136
137   // Daughter masses
138   double _massFirst,_massSecond;
139
140   // variables for electromagnetic mass mixing 
141   double _m0_mix,_g0_mix,_delta_mix;
142   EvtComplex _amp_mix;   
143
144   // variables for coupled Breit-Wigner
145   double _g1,_g2;
146   CouplingType _coupling2;
147
148   // variables for Blatt-Weisskopf form factors
149   double _f_b, _f_d;
150
151   // K-matrix 
152   int _kmatrix_index;
153   EvtComplex _fr12prod,_fr13prod,_fr14prod,_fr15prod;
154   double _s0prod;
155
156   // LASS
157   double _a;
158   double _r;
159   double _Blass;
160   double _phiB;
161   double _R;
162   double _phiR;
163   double _cutoff;
164   bool _scaleByMOverQ;
165
166   //Nonresonant
167   double _alpha;
168
169   // Flatte
170   std::vector<EvtFlatteParam> _flatteParams;
171
172 };
173
174 #endif
175