]>
Commit | Line | Data |
---|---|---|
da0e9ce3 | 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 | // Copyright (C) 1998 Caltech, UCSB | |
10 | // | |
11 | // Module: EvtSVSNONCPEIGEN.cc | |
12 | // | |
13 | // Description: Routine to decay scalar -> vectors scalar | |
14 | // and has CP violation. | |
15 | // | |
16 | // Modification history: | |
17 | // | |
18 | // RYD April 26, 1997 Module created | |
19 | // | |
20 | //------------------------------------------------------------------------ | |
21 | // | |
22 | #include "EvtGenBase/EvtPatches.hh" | |
23 | #include <stdlib.h> | |
24 | #include "EvtGenBase/EvtParticle.hh" | |
25 | #include "EvtGenBase/EvtRandom.hh" | |
26 | #include "EvtGenBase/EvtGenKine.hh" | |
27 | #include "EvtGenBase/EvtCPUtil.hh" | |
28 | #include "EvtGenBase/EvtPDL.hh" | |
29 | #include "EvtGenBase/EvtReport.hh" | |
30 | #include "EvtGenBase/EvtVector4C.hh" | |
31 | #include "EvtGenModels/EvtSVSNONCPEIGEN.hh" | |
32 | #include <string> | |
33 | #include "EvtGenBase/EvtConst.hh" | |
34 | ||
35 | EvtSVSNONCPEIGEN::~EvtSVSNONCPEIGEN() {} | |
36 | ||
37 | std::string EvtSVSNONCPEIGEN::getName(){ | |
38 | ||
39 | return "SVS_NONCPEIGEN"; | |
40 | ||
41 | } | |
42 | ||
43 | ||
44 | EvtDecayBase* EvtSVSNONCPEIGEN::clone(){ | |
45 | ||
46 | return new EvtSVSNONCPEIGEN; | |
47 | ||
48 | } | |
49 | ||
50 | void EvtSVSNONCPEIGEN::init(){ | |
51 | ||
52 | // check that there are 11 arguments | |
53 | checkNArg(11,7); | |
54 | checkNDaug(2); | |
55 | ||
56 | checkSpinDaughter(0,EvtSpinType::VECTOR); | |
57 | checkSpinDaughter(1,EvtSpinType::SCALAR); | |
58 | ||
59 | _dm=getArg(1); | |
60 | _phickm=2*getArg(0)+getArg(2); | |
61 | ||
62 | _A_f=EvtComplex(getArg(3)*cos(getArg(4)),getArg(3)*sin(getArg(4))); | |
63 | _Abar_f=EvtComplex(getArg(5)*cos(getArg(6)),getArg(5)*sin(getArg(6))); | |
64 | ||
65 | _A_fbar=_Abar_f; | |
66 | _Abar_fbar=_A_f; | |
67 | ||
68 | if (getNArg()==11){ | |
69 | _A_fbar=EvtComplex(getArg(7)*cos(getArg(8)),getArg(7)*sin(getArg(8))); | |
70 | _Abar_fbar=EvtComplex(getArg(9)*cos(getArg(10)),getArg(9)*sin(getArg(10))); | |
71 | } | |
72 | } | |
73 | ||
74 | void EvtSVSNONCPEIGEN::initProbMax() { | |
75 | double theProbMax = | |
76 | abs(_A_f) * abs(_A_f) + | |
77 | abs(_Abar_f) * abs(_Abar_f) + | |
78 | abs(_A_fbar) * abs(_A_fbar) + | |
79 | abs(_Abar_fbar) * abs(_Abar_fbar); | |
80 | ||
81 | setProbMax(theProbMax); | |
82 | } | |
83 | ||
84 | void EvtSVSNONCPEIGEN::decay( EvtParticle *p){ | |
85 | ||
86 | //added by Lange Jan4,2000 | |
87 | static EvtId B0=EvtPDL::getId("B0"); | |
88 | static EvtId B0B=EvtPDL::getId("anti-B0"); | |
89 | ||
90 | double t; | |
91 | EvtId other_b; | |
92 | EvtId daugs[2]; | |
93 | ||
94 | // MB: flip selects the final of the decay | |
95 | int flip = ((p->getId() == B0) ? 0 : 1); | |
96 | daugs[0]=getDaug(0); | |
97 | daugs[1]=getDaug(1); | |
98 | p->initializePhaseSpace(2, daugs); | |
99 | ||
100 | EvtCPUtil::OtherB(p,t,other_b,0.5); | |
101 | ||
102 | EvtComplex amp; | |
103 | double dmt2 = (_dm * t) / (2 * EvtConst::c); | |
104 | EvtComplex ePlusIPhi(cos(_phickm), sin(_phickm)); | |
105 | EvtComplex eMinusIPhi(cos(-_phickm), -sin(_phickm)); | |
106 | ||
107 | // flip == 0 : D-rho+ | |
108 | // flip == 1 : D+rho- | |
109 | ||
110 | if (!flip) { | |
111 | if (other_b==B0B){ | |
112 | // At t=0 we have a B0 | |
113 | amp = cos(dmt2)*_A_f + eMinusIPhi*EvtComplex(0.0,sin(dmt2))*_Abar_f; | |
114 | } | |
115 | if (other_b==B0){ | |
116 | // At t=0 we have a B0bar | |
117 | amp = ePlusIPhi*EvtComplex(0.0,sin(dmt2))*_A_f + cos(dmt2)*_Abar_f; | |
118 | } | |
119 | } | |
120 | else{ | |
121 | if (other_b==B0B){ | |
122 | // At t=0 we have a B0 | |
123 | amp = cos(dmt2)*_A_fbar + eMinusIPhi*EvtComplex(0.0,sin(dmt2))*_Abar_fbar; | |
124 | } | |
125 | if (other_b==B0){ | |
126 | // At t=0 we have a B0bar | |
127 | amp = ePlusIPhi*EvtComplex(0.0,sin(dmt2))*_A_fbar + cos(dmt2)*_Abar_fbar; | |
128 | } | |
129 | } | |
130 | ||
131 | ||
132 | EvtParticle *v; | |
133 | v= p->getDaug(0); | |
134 | ||
135 | EvtVector4R momv = p->getDaug(0)->getP4(); | |
136 | EvtVector4R moms = p->getDaug(1)->getP4(); | |
137 | EvtVector4R p4_parent=momv+moms; | |
138 | ||
139 | double norm=momv.mass()/(momv.d3mag()*p->mass()); | |
140 | ||
141 | vertex(0,amp*norm*p4_parent*(v->epsParent(0))); | |
142 | vertex(1,amp*norm*p4_parent*(v->epsParent(1))); | |
143 | vertex(2,amp*norm*p4_parent*(v->epsParent(2))); | |
144 | ||
145 | return ; | |
146 | } | |
147 |