44 std::cout <<
"Initializing EvtDsTophienu" << std::endl;
59 mw_phi = m_phi * w_phi;
60 m2_phi = m_phi * m_phi;
61 m2_rho = m_rho * m_rho;
70 Pi = atan2( 0.0, -1.0 );
72 root2d3 = sqrt( 2. / 3 );
73 root1d2 = sqrt( 0.5 );
74 root3d2 = sqrt( 1.5 );
118 if ( pid == -11 ) charm = 1;
120 double m2, q2, cosV, cosL, chi, s12, s13, s23, spin_V;
121 KinVGen( pip, pim, pi0, e, nu, charm,
m2, q2, cosV, cosL, chi, s12, s13, s23, spin_V );
122 double prob = calPDF(
m2, q2, cosV, cosL, chi, s12, s13, s23, spin_V );
129 double& q2,
double& cosV,
double& cosL,
double& chi,
double& s12,
130 double& s13,
double& s23,
double& spin_V ) {
139 s12 = vp4_rho0.
mass2();
140 s13 = vp4_rhop.
mass2();
141 s23 = vp4_rhom.
mass2();
144 boost.
set( vp4_3pi.
get( 0 ), -vp4_3pi.
get( 1 ), -vp4_3pi.
get( 2 ), -vp4_3pi.
get( 3 ) );
146 cosV = vp4_rhob.
dot( vp4_3pi ) / ( vp4_rhob.
d3mag() * vp4_3pi.
d3mag() );
153 boost.
set( vp4_W.
get( 0 ), -vp4_W.
get( 1 ), -vp4_W.
get( 2 ), -vp4_W.
get( 3 ) );
155 cosL = vp4_Lepp.
dot( vp4_W ) / ( vp4_Lepp.
d3mag() * vp4_W.
d3mag() );
162 double sinx =
C.cross( V ).dot( D );
163 double cosx =
C.dot( D );
164 chi = sinx > 0 ? acos( cosx ) : -acos( cosx );
165 if ( charm == -1 ) chi = -chi;
168double EvtDsTophienu::calPDF(
double m2,
double q2,
double cosV,
double cosL,
double chi,
169 double s12,
double s13,
double s23,
double spin_V ) {
170 double m = sqrt(
m2 );
171 double q = sqrt( q2 );
172 double m12 = sqrt( s12 );
173 double m13 = sqrt( s13 );
174 double m23 = sqrt( s23 );
178 EvtComplex A_rhopi( 0.0, 0.0 );
179 ResonanceV( s12, m12, s13, m13, s23, m23, A_rhopi );
180 double A2_phi = spin_V * spin_V *
abs2( A_rhopi );
184 EvtComplex f11( 0.0, 0.0 );
185 EvtComplex f21( 0.0, 0.0 );
186 EvtComplex f31( 0.0, 0.0 );
187 ResonanceP(
m2, m, q2,
q, s12, m12, s13, m13, s23, m23, f11, f21, f31 );
189 double cosV2 = cosV * cosV;
190 double sinV = sqrt( 1.0 - cosV2 );
191 double sinV2 = sinV * sinV;
193 EvtComplex F1 = f11 * cosV;
194 EvtComplex F2 = f21 * root1d2;
195 EvtComplex F3 = f31 * root1d2;
200 double I1 = 0.25 * (
abs2( F1 ) + 1.5 * sinV2 * (
abs2( F2 ) +
abs2( F3 ) ) );
201 double I2 = -0.25 * (
abs2( F1 ) - 0.5 * sinV2 * (
abs2( F2 ) +
abs2( F3 ) ) );
202 double I3 = -0.25 * (
abs2( F2 ) -
abs2( F3 ) ) * sinV2;
203 double I4 =
real(
conj( F1 ) * F2 ) * sinV * 0.5;
204 double I5 =
real(
conj( F1 ) * F3 ) * sinV;
205 double I6 =
real(
conj( F2 ) * F3 ) * sinV2;
209 double coschi =
cos( chi );
210 double sinchi =
sin( chi );
211 double sin2chi = 2.0 * sinchi * coschi;
212 double cos2chi = 1.0 - 2.0 * sinchi * sinchi;
214 double sinL = sqrt( 1. - cosL * cosL );
215 double sinL2 = sinL * sinL;
216 double sin2L = 2.0 * sinL * cosL;
217 double cos2L = 1.0 - 2.0 * sinL2;
219 double I = A2_phi * ( I1 + I2 * cos2L + I3 * sinL2 * cos2chi + I4 * sin2L * coschi +
220 I5 * sinL * coschi + I6 * cosL );
224void EvtDsTophienu::ResonanceV(
double s12,
double m12,
double s13,
double m13,
double s23,
228 pow( ( s12 - 4.0 * m2pi0 ) / ( m2_rho - 4.0 * m2pi0 ), 1.5 );
231 pow( ( s13 - 4.0 * m2pi ) / ( m2_rho - 4.0 * m2pi ), 1.5 );
234 pow( ( s23 - 4.0 * m2pi ) / ( m2_rho - 4.0 * m2pi ), 1.5 );
236 double AA0 = s12 / m2_rho - 1.0;
237 EvtComplex amp0 = EvtComplex( 1.0, 0.0 ) / EvtComplex( AA0, G_rho0 );
238 double AAp = s13 / m2_rho - 1.0;
239 EvtComplex ampp = EvtComplex( 1.0, 0.0 ) / EvtComplex( AAp, G_rhop );
240 double AAm = s23 / m2_rho - 1.0;
241 EvtComplex ampm = EvtComplex( 1.0, 0.0 ) / EvtComplex( AAm, G_rhom );
243 A_rhopi = amp0 + ampp + ampm;
246void EvtDsTophienu::ResonanceP(
double m2,
double m,
double q2,
double q,
double s12,
247 double m12,
double s13,
double m13,
double s23,
double m23,
249 double p_phi = getPStar( m2Ds,
m2, q2 );
250 double summDsm = mDs + m;
251 double V = V_0 / ( 1.0 - q2 / ( mV2 ) );
252 double A1 = A1_0 / ( 1.0 - q2 / ( mA2 ) );
253 double A2 = A2_0 / ( 1.0 - q2 / ( mA2 ) );
254 double A = summDsm * A1;
255 double B = 2.0 * mDs * p_phi / summDsm * V;
260 ( ( m2Ds -
m2 - q2 ) * summDsm * A1 - 4.0 * ( m2Ds * p_phi * p_phi ) / summDsm * A2 );
265 double pStar0 = getPStar( m2_phi, s12, m2pi0 );
267 double alpha = sqrt( 3. * Pi * 0.154 / ( pStar0 * w_phi ) );
269 double AA = m2_phi -
m2;
272 double F0 = getF1(
m2, m, s12, m2pi0 );
274 double width0 = getWidth1(
m2, m, s12, m2pi0, w_phi );
277 EvtComplex C0( mw_phi * F0, 0.0 );
278 double BB0 = -m_phi * width0;
279 EvtComplex amp0 = C0 / EvtComplex( AA, BB0 );
282 double Fp = getF1(
m2, m, s13, m2pi );
284 double widthp = getWidth1(
m2, m, s13, m2pi, w_phi );
287 EvtComplex Cp( mw_phi * Fp, 0.0 );
288 double BBp = -m_phi * widthp;
289 EvtComplex ampp = Cp / EvtComplex( AA, BBp );
292 double Fm = getF1(
m2, m, s23, m2pi );
294 double widthm = getWidth1(
m2, m, s23, m2pi, w_phi );
297 EvtComplex Cm( mw_phi * Fm, 0.0 );
298 double BBm = -m_phi * widthm;
299 EvtComplex ampm = Cm / EvtComplex( AA, BBm );
301 EvtComplex amp = amp0 + ampp + ampm;
303 double alpham2 =
alpha * 2.0;
304 F11 = amp * alpham2 *
q * H0 * root2;
305 F21 = amp * alpham2 *
q * ( Hp + Hm );
306 F31 = amp * alpham2 *
q * ( Hp - Hm );
309double EvtDsTophienu::getF1(
double sa,
double ma,
double sb,
double sc )
311 double pStar = getPStar( sa, sb, sc );
312 double pStar0 = getPStar( m2_phi, sb, sc );
313 double B = 1. / sqrt( 1. + rBW2 * pStar * pStar );
314 double B0 = 1. / sqrt( 1. + rBW2 * pStar0 * pStar0 );
315 double F = pStar / pStar0 *
B / B0;
319double EvtDsTophienu::getWidth1(
double sa,
double ma,
double sb,
double sc,
double width0 ) {
320 double pStar = getPStar( sa, sb, sc );
321 double pStar0 = getPStar( m2_phi, sb, sc );
322 double F = getF1( sa, ma, sb, sc );
323 double width = width0 * pStar / pStar0 * m_phi / ma * F * F;
327double EvtDsTophienu::getPStar(
double s,
double s1,
double s2 ) {
328 double x =
s + s1 - s2;
329 double t = 0.25 *
x *
x /
s - s1;
331 if (
t > 0.0 ) { p = sqrt(
t ); }
Evt3Rank3C conj(const Evt3Rank3C &t2)
double abs2(const EvtComplex &c)
EvtDiracSpinor boostTo(const EvtDiracSpinor &sp, const EvtVector4R p4)
double sin(const BesAngle a)
double cos(const BesAngle a)
****INTEGER imax DOUBLE PRECISION m_pi *DOUBLE PRECISION m_amfin DOUBLE PRECISION m_Chfin DOUBLE PRECISION m_Xenph DOUBLE PRECISION m_sinw2 DOUBLE PRECISION m_GFermi DOUBLE PRECISION m_MfinMin DOUBLE PRECISION m_ta2 INTEGER m_out INTEGER m_KeyFSR INTEGER m_KeyQCD *COMMON c_Semalib $ !copy of input $ !CMS energy $ !beam mass $ !final mass $ !beam charge $ !final charge $ !smallest final mass $ !Z mass $ !Z width $ !EW mixing angle $ !Gmu Fermi $ alphaQED at q
***************************************************************************************Pseudo Class RRes *****************************************************************************************Parameters and physical constants **Maarten sept ************************************************************************DOUBLE PRECISION xsmu **************************************************************************PARTICLE DATA all others are from PDG *Only resonances with known widths into electron pairs are sept ************************************************************************C Declarations C
void checkSpinDaughter(int d1, EvtSpinType::spintype sp)
void checkSpinParent(EvtSpinType::spintype sp)
void setProbMax(double prbmx)
void checkNDaug(int d1, int d2=-1)
void checkNArg(int a1, int a2=-1, int a3=-1, int a4=-1)
void setProb(double prob)
void decay(EvtParticle *p)
void getName(std::string &name)
static int getStdHep(EvtId id)
const EvtVector4R & getP4() const
EvtParticle * getDaug(int i)
double initializePhaseSpace(int numdaughter, EvtId *daughters, double poleSize=-1., int whichTwo1=0, int whichTwo2=1)
double dot(const EvtVector4R &v2) const
EvtVector4R cross(const EvtVector4R &v2)
void set(int i, double d)