]>
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: EvtSVVHelAmp.cc | |
12 | // | |
13 | // Description: Routine to decay scalar -> 2 vectors | |
14 | // by specifying the helicity amplitudes | |
15 | // | |
16 | // Modification history: | |
17 | // | |
18 | // RYD November 24, 1996 Module created | |
19 | // | |
20 | //------------------------------------------------------------------------ | |
21 | // | |
22 | #include "EvtGenBase/EvtPatches.hh" | |
23 | #include <stdlib.h> | |
24 | #include "EvtGenBase/EvtParticle.hh" | |
25 | #include "EvtGenBase/EvtGenKine.hh" | |
26 | #include "EvtGenBase/EvtPDL.hh" | |
27 | #include "EvtGenBase/EvtVector4C.hh" | |
28 | #include "EvtGenBase/EvtTensor4C.hh" | |
29 | #include "EvtGenBase/EvtVector3C.hh" | |
30 | #include "EvtGenBase/EvtVector3R.hh" | |
31 | #include "EvtGenBase/EvtTensor3C.hh" | |
32 | #include "EvtGenBase/EvtReport.hh" | |
33 | #include "EvtGenModels/EvtSVVHelAmp.hh" | |
34 | #include "EvtGenBase/EvtId.hh" | |
35 | #include <string> | |
36 | ||
37 | EvtSVVHelAmp::~EvtSVVHelAmp() {} | |
38 | ||
39 | std::string EvtSVVHelAmp::getName(){ | |
40 | ||
41 | return "SVV_HELAMP"; | |
42 | ||
43 | } | |
44 | ||
45 | ||
46 | EvtDecayBase* EvtSVVHelAmp::clone(){ | |
47 | ||
48 | return new EvtSVVHelAmp; | |
49 | ||
50 | } | |
51 | ||
52 | void EvtSVVHelAmp::init(){ | |
53 | ||
54 | // check that there are 6 arguments | |
55 | checkNArg(6); | |
56 | checkNDaug(2); | |
57 | ||
58 | checkSpinParent(EvtSpinType::SCALAR); | |
59 | ||
60 | checkSpinDaughter(0,EvtSpinType::VECTOR); | |
61 | checkSpinDaughter(1,EvtSpinType::VECTOR); | |
62 | ||
63 | } | |
64 | ||
65 | ||
66 | void EvtSVVHelAmp::initProbMax(){ | |
67 | ||
68 | setProbMax(getArg(0)*getArg(0)+getArg(2)*getArg(2)+getArg(4)*getArg(4)); | |
69 | ||
70 | } | |
71 | ||
72 | ||
73 | void EvtSVVHelAmp::decay( EvtParticle *p){ | |
74 | ||
75 | SVVHel(p,_amp2,getDaug(0),getDaug(1), | |
76 | EvtComplex(getArg(0)*cos(getArg(1)),getArg(0)*sin(getArg(1))), | |
77 | EvtComplex(getArg(2)*cos(getArg(3)),getArg(2)*sin(getArg(3))), | |
78 | EvtComplex(getArg(4)*cos(getArg(5)),getArg(4)*sin(getArg(5)))); | |
79 | ||
80 | return ; | |
81 | ||
82 | } | |
83 | ||
84 | ||
85 | void EvtSVVHelAmp::SVVHel(EvtParticle *parent,EvtAmp& amp,EvtId n_v1,EvtId n_v2, | |
86 | const EvtComplex& hp,const EvtComplex& h0, | |
87 | const EvtComplex& hm){ | |
88 | ||
89 | // Routine to decay a vector into a vector and scalar. Started | |
90 | // by ryd on Oct 17, 1996. | |
91 | ||
92 | int tndaug = 2; | |
93 | EvtId tdaug[2]; | |
94 | tdaug[0] = n_v1; | |
95 | tdaug[1] = n_v2; | |
96 | ||
97 | ||
98 | parent->initializePhaseSpace(tndaug,tdaug); | |
99 | ||
100 | EvtParticle *v1,*v2; | |
101 | v1 = parent->getDaug(0); | |
102 | v2 = parent->getDaug(1); | |
103 | ||
104 | EvtVector4R momv1 = v1->getP4(); | |
105 | //EvtVector4R momv2 = v2->getP4(); | |
106 | ||
107 | EvtVector3R v1dir(momv1.get(1),momv1.get(2),momv1.get(3)); | |
108 | v1dir=v1dir/v1dir.d3mag(); | |
109 | ||
110 | EvtComplex a=-0.5*(hp+hm); | |
111 | EvtComplex b=EvtComplex(0.0,0.5)*(hp-hm); | |
112 | EvtComplex c=h0+0.5*(hp+hm); | |
113 | ||
114 | EvtTensor3C M=a*EvtTensor3C::id()+ | |
0ca57c2f | 115 | b*EvtGenFunctions::eps(v1dir)+ |
116 | c*EvtGenFunctions::directProd(v1dir,v1dir); | |
da0e9ce3 | 117 | |
118 | EvtVector3C t0=M.cont1(v1->eps(0).vec().conj()); | |
119 | EvtVector3C t1=M.cont1(v1->eps(1).vec().conj()); | |
120 | EvtVector3C t2=M.cont1(v1->eps(2).vec().conj()); | |
121 | ||
122 | EvtVector3C eps0=v2->eps(0).vec().conj(); | |
123 | EvtVector3C eps1=v2->eps(1).vec().conj(); | |
124 | EvtVector3C eps2=v2->eps(2).vec().conj(); | |
125 | ||
126 | amp.vertex(0,0,t0*eps0); | |
127 | amp.vertex(0,1,t0*eps1); | |
128 | amp.vertex(0,2,t0*eps2); | |
129 | ||
130 | amp.vertex(1,0,t1*eps0); | |
131 | amp.vertex(1,1,t1*eps1); | |
132 | amp.vertex(1,2,t1*eps2); | |
133 | ||
134 | amp.vertex(2,0,t2*eps0); | |
135 | amp.vertex(2,1,t2*eps1); | |
136 | amp.vertex(2,2,t2*eps2); | |
137 | ||
138 | return ; | |
139 | ||
140 | } | |
141 | ||
0ca57c2f | 142 | std::string EvtSVVHelAmp::getParamName(int i) { |
143 | switch(i) { | |
144 | case 0: | |
145 | return "plusHelAmp"; | |
146 | case 1: | |
147 | return "plusHelAmpPhase"; | |
148 | case 2: | |
149 | return "zeroHelAmp"; | |
150 | case 3: | |
151 | return "zeroHelAmpPhase"; | |
152 | case 4: | |
153 | return "minusHelAmp"; | |
154 | case 5: | |
155 | return "minusHelAmpPhase"; | |
156 | default: | |
157 | return ""; | |
158 | } | |
159 | } | |
da0e9ce3 | 160 | |
0ca57c2f | 161 | std::string EvtSVVHelAmp::getParamDefault(int i) { |
162 | switch(i) { | |
163 | case 0: | |
164 | return "1.0"; | |
165 | case 1: | |
166 | return "0.0"; | |
167 | case 2: | |
168 | return "1.0"; | |
169 | case 3: | |
170 | return "0.0"; | |
171 | case 4: | |
172 | return "1.0"; | |
173 | case 5: | |
174 | return "0.0"; | |
175 | default: | |
176 | return ""; | |
177 | } | |
178 | } |