BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
EvtSVPCP.cc
Go to the documentation of this file.
1//--------------------------------------------------------------------------
2//
3// Environment:
4// This software is part of the EvtGen package developed jointly
5// for the BaBar and CLEO collaborations. If you use all or part
6// of it, please give an appropriate acknowledgement.
7//
8// Copyright Information: See EvtGen/COPYRIGHT
9//
10// Module: EvtSVPCP.cc
11//
12// Description: Routine to decay scalar -> vectors+photon
13// including CP violation effects
14//
15// Modification history:
16//
17// Maurizio pierini Nov 11, 2003 Module created
18//
19//------------------------------------------------------------------------
20//
21#include "EvtSVPCP.hh"
35#include <stdlib.h>
36#include <string>
37
39
40void EvtSVPCP::getName( std::string& model_name ) { model_name = "SVP_CP"; }
41
43
45
46 setProbMax( 2 * ( getArg( 3 ) * getArg( 3 ) + getArg( 5 ) * getArg( 5 ) ) );
47}
48
50
51 // check that there are 7 arguments
52 checkNArg( 7 );
53 checkNDaug( 2 );
54
56
59}
60
62
63 static EvtId B0 = EvtPDL::getId( "B0" );
64 static EvtId B0B = EvtPDL::getId( "anti-B0" );
65
66 double t;
67 EvtId other_b;
68
69 EvtCPUtil::OtherB( p, t, other_b );
70
71 EvtComplex G1P, G1M, G1_T_even, G1_T_odd;
72
73 double norm = getArg( 3 ) * getArg( 3 ) + getArg( 5 ) * getArg( 5 );
74
75 G1P = EvtComplex( getArg( 3 ) * cos( getArg( 4 ) ) / norm,
76 getArg( 3 ) * sin( getArg( 4 ) ) / norm );
77 G1M = EvtComplex( getArg( 5 ) * cos( getArg( 6 ) ) / norm,
78 getArg( 5 ) * sin( getArg( 6 ) ) / norm );
79
80 G1_T_even = ( G1P + G1M ) / sqrt( 2.0 );
81 G1_T_odd = ( G1P - G1M ) / sqrt( 2.0 );
82
83 EvtComplex lambda_km = EvtComplex( cos( -2 * getArg( 0 ) ), sin( -2 * getArg( 0 ) ) );
84
85 double cdmt = cos( getArg( 1 ) * t / ( 2 * EvtConst::c ) );
86 double sdmt = sin( getArg( 1 ) * t / ( 2 * EvtConst::c ) );
87
88 EvtComplex cG1_T_even, cG1_T_odd;
89
90 if ( other_b == B0B )
91 {
92 cG1_T_even = G1_T_even * ( cdmt + lambda_km * EvtComplex( 0.0, getArg( 2 ) * sdmt ) );
93 cG1_T_odd = G1_T_odd * ( cdmt - lambda_km * EvtComplex( 0.0, getArg( 2 ) * sdmt ) );
94 }
95 if ( other_b == B0 )
96 {
97 cG1_T_even =
98 G1_T_even * ( cdmt + ( 1.0 / lambda_km ) * EvtComplex( 0.0, getArg( 2 ) * sdmt ) );
99 cG1_T_odd =
100 -G1_T_odd * ( cdmt - ( 1.0 / lambda_km ) * EvtComplex( 0.0, getArg( 2 ) * sdmt ) );
101 }
102
103 EvtComplex hp, hm, h0;
104
105 // This part is adopted from EvtSVVHel and since there is
106 // a photon that can not have helicity 0 this is put in by
107 // setting the h0 amplitude to 0.
108 hm = ( cG1_T_even - cG1_T_odd ) / sqrt( 2.0 );
109 hp = ( cG1_T_even + cG1_T_odd ) / sqrt( 2.0 );
110 h0 = EvtComplex( 0.0, 0.0 );
111
112 EvtParticle *v1, *ph;
113
115 v1 = p->getDaug( 0 );
116 ph = p->getDaug( 1 );
117 EvtVector4R momv1 = v1->getP4();
118 EvtVector4R momph = ph->getP4();
119
120 EvtTensor4C d, g;
121
122 g.setdiag( 1.0, -1.0, -1.0, -1.0 );
123
124 EvtVector4R v, vp;
125
126 v = momv1 / momv1.d3mag();
127 vp = ( momv1 + momph ) / ( momv1 + momph ).mass();
128
129 d = ( ( 1.0 / sqrt( 3.0 ) ) * ( h0 - ( hp + hm ) ) * ( -1.0 / sqrt( 3.0 ) ) ) * g +
130 ( ( 1.0 / sqrt( 2.0 ) ) * ( hp - hm ) * EvtComplex( 0.0, 1.0 ) *
131 ( sqrt( 1.0 / 2.0 ) ) ) *
132 dual( directProd( v, vp ) ) +
133 ( sqrt( 2.0 / 3.0 ) * ( h0 + 0.5 * ( hp + hm ) ) * sqrt( 3.0 / 2.0 ) ) *
134 ( directProd( v, v ) + ( 1.0 / 3.0 ) * g );
135
136 EvtVector4C ep0, ep1, ep2;
137
138 ep0 = d.cont1( v1->eps( 0 ).conj() );
139 ep1 = d.cont1( v1->eps( 1 ).conj() );
140 ep2 = d.cont1( v1->eps( 2 ).conj() );
141
142 EvtVector4C ep20, ep21, ep22;
143
144 ep20 = ph->epsParentPhoton( 0 ).conj();
145 ep21 = ph->epsParentPhoton( 1 ).conj();
146
147 vertex( 0, 0, ep0 * ep20 );
148 vertex( 0, 1, ep0 * ep21 );
149
150 vertex( 1, 0, ep1 * ep20 );
151 vertex( 1, 1, ep1 * ep21 );
152
153 vertex( 2, 0, ep2 * ep20 );
154 vertex( 2, 1, ep2 * ep21 );
155
156 return;
157}
Evt3Rank3C directProd(const EvtVector3C &c1, const EvtVector3C &c2, const EvtVector3C &c3)
EvtTensor4C dual(const EvtTensor4C &t2)
**********Class see also m_nmax DOUBLE PRECISION m_amel DOUBLE PRECISION m_x2 DOUBLE PRECISION m_alfinv DOUBLE PRECISION m_Xenph INTEGER m_KeyWtm INTEGER m_idyfs DOUBLE PRECISION m_zini DOUBLE PRECISION m_q2 DOUBLE PRECISION m_Wt_KF DOUBLE PRECISION m_WtCut INTEGER m_KFfin *COMMON c_KarLud $ !Input CMS energy[GeV] $ !CMS energy after beam spread beam strahlung[GeV] $ !Beam energy spread[GeV] $ !z boost due to beam spread $ !electron beam mass *ff pair spectrum $ !minimum v
Definition KarLud.h:35
static void OtherB(EvtParticle *p, double &t, EvtId &otherb)
Definition EvtCPUtil.cc:225
static const double c
Definition EvtConst.hh:31
void vertex(const EvtComplex &amp)
void checkSpinDaughter(int d1, EvtSpinType::spintype sp)
void checkSpinParent(EvtSpinType::spintype sp)
double getArg(int j)
void setProbMax(double prbmx)
void checkNDaug(int d1, int d2=-1)
EvtId * getDaugs()
void checkNArg(int a1, int a2=-1, int a3=-1, int a4=-1)
Definition EvtId.hh:27
static EvtId getId(const std::string &name)
Definition EvtPDL.cc:272
virtual EvtVector4C epsParentPhoton(int i)
const EvtVector4R & getP4() const
EvtParticle * getDaug(int i)
virtual EvtVector4C eps(int i) const
double initializePhaseSpace(int numdaughter, EvtId *daughters, double poleSize=-1., int whichTwo1=0, int whichTwo2=1)
EvtDecayBase * clone()
Definition EvtSVPCP.cc:42
void initProbMax()
Definition EvtSVPCP.cc:44
void init()
Definition EvtSVPCP.cc:49
void getName(std::string &name)
Definition EvtSVPCP.cc:40
virtual ~EvtSVPCP()
Definition EvtSVPCP.cc:38
void decay(EvtParticle *p)
Definition EvtSVPCP.cc:61
void setdiag(double t00, double t11, double t22, double t33)
EvtVector4C cont1(const EvtVector4C &v4) const
EvtVector4C conj() const
double mass() const
double d3mag() const
int t()
Definition t.c:1