StRoot  1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
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 2016/09/23 18:37:30 jwebb 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 
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