Line data Source code
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 0 : 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 0 : EvtDalitzReso() : _typeN(NON_RES) {};
56 :
57 0 : 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 0 : 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 0 : 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 :
|