EvtGen 2.2.0
Monte Carlo generator of particle decays, in particular the weak decays of heavy flavour particles such as B mesons.
Loading...
Searching...
No Matches
EvtResonance2.cpp
Go to the documentation of this file.
1
2/***********************************************************************
3* Copyright 1998-2020 CERN for the benefit of the EvtGen authors *
4* *
5* This file is part of EvtGen. *
6* *
7* EvtGen is free software: you can redistribute it and/or modify *
8* it under the terms of the GNU General Public License as published by *
9* the Free Software Foundation, either version 3 of the License, or *
10* (at your option) any later version. *
11* *
12* EvtGen is distributed in the hope that it will be useful, *
13* but WITHOUT ANY WARRANTY; without even the implied warranty of *
14* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
15* GNU General Public License for more details. *
16* *
17* You should have received a copy of the GNU General Public License *
18* along with EvtGen. If not, see <https://www.gnu.org/licenses/>. *
19***********************************************************************/
20
22
26
27#include <cmath>
28
30{
31 if ( &n == this )
32 return *this;
33 m_p4_p = n.m_p4_p;
34 m_p4_d1 = n.m_p4_d1;
35 m_p4_d2 = n.m_p4_d2;
36 m_ampl = n.m_ampl;
37 m_theta = n.m_theta;
38 m_gamma = n.m_gamma;
39 m_spin = n.m_spin;
40 m_bwm = n.m_bwm;
44 return *this;
45}
46
48 const EvtVector4R& p4_d2, double ampl,
49 double theta, double gamma, double bwm, int spin,
50 bool invmass_angdenom, double barrier1,
51 double barrier2 ) :
52 m_p4_p( p4_p ),
53 m_p4_d1( p4_d1 ),
54 m_p4_d2( p4_d2 ),
55 m_ampl( ampl ),
56 m_theta( theta ),
57 m_gamma( gamma ),
58 m_bwm( bwm ),
59 m_barrier1( barrier1 ),
60 m_barrier2( barrier2 ),
61 m_spin( spin ),
62 m_invmass_angdenom( invmass_angdenom )
63{
64}
65
67{
68 double pi180inv = 1.0 / EvtConst::radToDegrees;
69
70 EvtComplex ampl;
72
73 //get cos of the angle between the daughters from their 4-momenta
74 //and the 4-momentum of the parent
75
76 //in general, EvtDecayAngle(parent, part1+part2, part1) gives the angle
77 //the missing particle (not listed in the arguments) makes
78 //with part2 in the rest frame of both
79 //listed particles (12)
80
81 //angle 3 makes with 2 in rest frame of 12 (CS3)
82 //double cos_phi_0 = EvtDecayAngle(m_p4_p, m_p4_d1+m_p4_d2, m_p4_d1);
83 //angle 3 makes with 1 in 12 is, of course, -cos_phi_0
84
85 //first compute several quantities...follow CLEO preprint 00-23
86
87 double mAB = ( m_p4_d1 + m_p4_d2 ).mass();
88 double mBC = ( m_p4_d2 + p4_d3 ).mass();
89 double mAC = ( m_p4_d1 + p4_d3 ).mass();
90 double mA = m_p4_d1.mass();
91 double mB = m_p4_d2.mass();
92 double mD = m_p4_p.mass();
93 double mC = p4_d3.mass();
94
95 double mR = m_bwm;
96 double gammaR = m_gamma;
97 double mdenom = m_invmass_angdenom ? mAB : mR;
98 double pAB = sqrt( ( ( ( mAB * mAB - mA * mA - mB * mB ) *
99 ( mAB * mAB - mA * mA - mB * mB ) / 4.0 ) -
100 mA * mA * mB * mB ) /
101 ( mAB * mAB ) );
102 double pR = sqrt( ( ( ( mR * mR - mA * mA - mB * mB ) *
103 ( mR * mR - mA * mA - mB * mB ) / 4.0 ) -
104 mA * mA * mB * mB ) /
105 ( mR * mR ) );
106
107 double pD = ( ( ( mD * mD - mR * mR - mC * mC ) *
108 ( mD * mD - mR * mR - mC * mC ) / 4.0 ) -
109 mR * mR * mC * mC ) /
110 ( mD * mD );
111 if ( pD > 0 ) {
112 pD = sqrt( pD );
113 } else {
114 pD = 0;
115 }
116 double pDAB = sqrt( ( ( ( mD * mD - mAB * mAB - mC * mC ) *
117 ( mD * mD - mAB * mAB - mC * mC ) / 4.0 ) -
118 mAB * mAB * mC * mC ) /
119 ( mD * mD ) );
120
121 double fR = 1;
122 double fD = 1;
123 int power = 0;
124 switch ( m_spin ) {
125 case 0:
126 fR = 1.0;
127 fD = 1.0;
128 power = 1;
129 break;
130 case 1:
131 fR = sqrt( 1.0 + m_barrier1 * m_barrier1 * pR * pR ) /
132 sqrt( 1.0 + m_barrier1 * m_barrier1 * pAB * pAB );
133 fD = sqrt( 1.0 + m_barrier2 * m_barrier2 * pD * pD ) /
134 sqrt( 1.0 + m_barrier2 * m_barrier2 * pDAB * pDAB );
135 power = 3;
136 break;
137 case 2:
138 fR = sqrt( ( 9 + 3 * pow( ( m_barrier1 * pR ), 2 ) +
139 pow( ( m_barrier1 * pR ), 4 ) ) /
140 ( 9 + 3 * pow( ( m_barrier1 * pAB ), 2 ) +
141 pow( ( m_barrier1 * pAB ), 4 ) ) );
142 fD = sqrt( ( 9 + 3 * pow( ( m_barrier2 * pD ), 2 ) +
143 pow( ( m_barrier2 * pD ), 4 ) ) /
144 ( 9 + 3 * pow( ( m_barrier2 * pDAB ), 2 ) +
145 pow( ( m_barrier2 * pDAB ), 4 ) ) );
146 power = 5;
147 break;
148 default:
149 EvtGenReport( EVTGEN_INFO, "EvtGen" )
150 << "Incorrect spin in EvtResonance2.cc\n";
151 }
152
153 double gammaAB = gammaR * pow( pAB / pR, power ) * ( mR / mAB ) * fR * fR;
154 switch ( m_spin ) {
155 case 0:
156 ampl = m_ampl *
157 EvtComplex( cos( m_theta * pi180inv ),
158 sin( m_theta * pi180inv ) ) *
159 fR * fD /
160 ( mR * mR - mAB * mAB - EvtComplex( 0.0, mR * gammaAB ) );
161 break;
162 case 1:
163 ampl = m_ampl *
164 EvtComplex( cos( m_theta * pi180inv ),
165 sin( m_theta * pi180inv ) ) *
166 ( fR * fD *
167 ( mAC * mAC - mBC * mBC +
168 ( ( mD * mD - mC * mC ) * ( mB * mB - mA * mA ) /
169 ( mdenom * mdenom ) ) ) /
170 ( mR * mR - mAB * mAB - EvtComplex( 0.0, mR * gammaAB ) ) );
171 break;
172 case 2:
173 ampl = m_ampl *
174 EvtComplex( cos( m_theta * pi180inv ),
175 sin( m_theta * pi180inv ) ) *
176 fR * fD /
177 ( mR * mR - mAB * mAB - EvtComplex( 0.0, mR * gammaAB ) ) *
178 ( pow( ( mBC * mBC - mAC * mAC +
179 ( mD * mD - mC * mC ) * ( mA * mA - mB * mB ) /
180 ( mdenom * mdenom ) ),
181 2 ) -
182 ( 1.0 / 3.0 ) *
183 ( mAB * mAB - 2 * mD * mD - 2 * mC * mC +
184 pow( ( mD * mD - mC * mC ) / mdenom, 2 ) ) *
185 ( mAB * mAB - 2 * mA * mA - 2 * mB * mB +
186 pow( ( mA * mA - mB * mB ) / mdenom, 2 ) ) );
187 break;
188
189 default:
190 EvtGenReport( EVTGEN_INFO, "EvtGen" )
191 << "Incorrect spin in EvtResonance2.cc\n";
192 }
193
194 return ampl;
195}
std::ostream & EvtGenReport(EvtGenSeverity severity, const char *facility=nullptr)
Definition EvtReport.cpp:32
@ EVTGEN_INFO
Definition EvtReport.hh:52
static const double radToDegrees
Definition EvtConst.hh:28
EvtResonance2(const EvtVector4R &p4_p, const EvtVector4R &p4_d1, const EvtVector4R &p4_d2, double ampl=1.0, double theta=0.0, double gamma=0.0, double bwm=0.0, int spin=0, bool invmass_angdenom=false, double barrier1=1.5, double barrier2=5.0)
EvtResonance2 & operator=(const EvtResonance2 &)
EvtVector4R m_p4_d1
int spin() const
double theta() const
EvtVector4R m_p4_p
const EvtVector4R & p4_d1() const
const EvtVector4R & p4_p() const
EvtComplex resAmpl() const
double gamma() const
EvtVector4R m_p4_d2
double bwm() const
const EvtVector4R & p4_d2() const
double mass() const