Belle II Software development
EvtD0Topippim2pi0.h
1// Model: EvtD0Topippim2pi0
2// This file is an amplitude model for D0 -> pi+ pi- pi0 pi0.
3// The model is from the BESIII Collaboration in Chin. Phys. C 48, 083001 (2024). DOI:  https://doi.org/10.1088/1674-1137/ad3d4d
4//
5// Permission to include these files in basf2 was generously granted by the BESIII Collaboration.
6//
7// Please cite the original reference for any public/published results where this model was used.
8
9#pragma once
10
11#include <EvtGenBase/EvtDecayProb.hh>
12#include <vector>
13#include <complex>
14
15#include <EvtGenBase/EvtParticle.hh>
16
17namespace Belle2 {
22 class EvtD0Topippim2pi0: public EvtDecayProb {
23
24 public:
25
26 EvtD0Topippim2pi0() {}
27 virtual ~EvtD0Topippim2pi0();
28
29 std::string getName();
30 EvtDecayBase* clone();
31
32 void init();
33 void initProbMax();
34 void decay(EvtParticle* p);
35
36 private:
37
38 double AmplitudeSquare(int charm, int tagmode);
39
40 EvtVector4R GetDaugMomLab(int i) {return _p4Lab[i];}
41 EvtVector4R GetDaugMomCM(int i) {return _p4CM[i];}
42 EvtVector4R GetDaugMomHel(int i) {return _p4Hel[i];}
43
44 EvtVector4R _p4Lab[10], _p4CM[10], _p4Hel[10];
45 int _nd;
46
47 int charm;
48 int tagmode;
49
50 void setInput(double* pip, double* pim, double* pi01, double* pi02);
51 int CalAmp();
52
53 std::complex<double> Get_AmpD0() {return m_AmpD0;}
54 std::complex<double> Get_AmpDb() {return m_AmpDb;}
55
56 double Get_strongPhase();
57 std::complex<double> Amp(std::vector<double> Pip1, std::vector<double> Pim1, std::vector<double> Pip2, std::vector<double> Pim2);
58 double arg(std::complex<double> x);
59 double mag2(std::complex<double> x);
60
61 std::complex<double> CalD0Amp();
62 std::complex<double> CalDbAmp();
63
64 std::vector<double> sum_tensor(std::vector<double> pa, std::vector<double> pb);
65 double contract_11_0(std::vector<double> pa, std::vector<double> pb);
66 double contract_22_0(std::vector<double> pa, std::vector<double> pb);
67 std::vector<double> contract_21_1(std::vector<double> pa, std::vector<double> pb);
68 std::vector<double> contract_22_2(std::vector<double> pa, std::vector<double> pb);
69 std::vector<double> contract_31_2(std::vector<double> pa, std::vector<double> pb);
70 std::vector<double> contract_41_3(std::vector<double> pa, std::vector<double> pb);
71 std::vector<double> contract_42_2(std::vector<double> pa, std::vector<double> pb);
72
73 std::vector<double> OrbitalTensors(std::vector<double> pa, std::vector<double> pb, std::vector<double> pc, double r, int rank);
74 std::vector<double> ProjectionTensors(std::vector<double> pa, int rank);
75
76 double fundecaymomentum(double mr2, double m1_2, double m2_2);
77 double fundecaymomentum2(double mr2, double m1_2, double m2_2);
78 std::complex<double> breitwigner(double mx2, double mr, double wr);
79 double h(double m, double q);
80 double dh(double m0, double q0);
81 double f(double m0, double sx, double q0, double q);
82 double d(double m0, double q0);
83 double wid(double mass, double sa, double sb, double sc, double r, int l);
84 double widT1260(int i, double g1, double g2);
85 double widT1300(int i);
86 double widT1640(int i);
87 double widT1170(int i);
88 double anywid1260(double sc, double g1, double g2);
89 double anywid1300(double sc);
90 double anywid1640(double sc);
91 double anywid1170(double sc);
92
93 std::complex<double> irho(double mr2, double m1_2, double m2_2);
94 std::complex<double> Flatte(double mx2, double mr, double g1, double g2, double m1a, double m1b, double m2a, double m2b);
95
96 std::complex<double> GS(double mx2, double mr, double wr, double m1_2, double m2_2, double r, int l);
97 std::complex<double> RBW(double mx2, double mr, double wr, double m1_2, double m2_2, double r, int l);
98 std::complex<double> RBWa1260(double mx2, double mr, double g1, double g2);
99 std::complex<double> RBWpi1300(double mx2, double mr, double wr);
100 std::complex<double> RBWa1640(double mx2, double mr, double wr);
101 std::complex<double> RBWh11170(double mx2, double mr, double wr);
102 double rho22(double sc);
103 std::complex<double> rhoMTX(int i, int j, double s);
104 std::complex<double> KMTX(int i, int j, double s);
105 std::complex<double> IMTX(int i, int j);
106 std::complex<double> FMTX(double Kijx, double Kijy, double rhojjx, double rhojjy, int i, int j);
107 double FINVMTX(double s, double* FINVx, double* FINVy);
108 std::complex<double> PVTR(int ID, double s);
109 std::complex<double> Fvector(double sa, double s0, int l);
110
111 std::vector<double> m_Pip;
112 std::vector<double> m_Pim;
113 std::vector<double> m_Pi01;
114 std::vector<double> m_Pi02;
115
116 std::vector<double> g_uv;
117 std::vector<double> epsilon_uvmn;
118 std::vector< std::complex<double> > fitpara;
119
120 double math_pi;
121 double mass_Pion;
122
123 double rRes;
124 double rD;
125 double m_Pi;
126 double m2_Pi;
127 double m_Pi0;
128 double m2_Pi0;
129 double m_Ka;
130 double m2_Ka;
131
132 double m0_f0980;
133 double g1_f0980;
134 double g2_f0980;
135
136 double m0_rho7700;
137 double w0_rho7700;
138
139 double m0_rho770p;
140 double w0_rho770p;
141
142 double m0_rho1450;
143 double w0_rho1450;
144
145 double m0_f21270;
146 double w0_f21270;
147
148 double m0_a11260;
149 double g1_a11260;
150 double g2_a11260;
151
152 double m0_pi1300;
153 double w0_pi1300;
154
155 double m0_a11420;
156 double w0_a11420;
157
158 double m0_a11640;
159 double w0_a11640;
160
161 double m0_a21320;
162 double w0_a21320;
163
164 double m0_pi11400;
165 double w0_pi11400;
166
167 double m0_h11170;
168 double w0_h11170;
169
170 double m0_pi21670;
171 double w0_pi21670;
172
173 double m0_omega;
174 double w0_omega;
175
176 double m0_phi;
177 double w0_phi;
178
179 double s0_prod;
180
181 std::complex<double> m_AmpD0;
182 std::complex<double> m_AmpDb;
183 std::complex<double> m_RAmp;
184
185 double delta;
186
187 };
188
190}
Abstract base class for different kinds of events.