Line data Source code
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 0 : EvtSVVHelAmp::~EvtSVVHelAmp() {}
38 :
39 : std::string EvtSVVHelAmp::getName(){
40 :
41 0 : return "SVV_HELAMP";
42 :
43 : }
44 :
45 :
46 : EvtDecayBase* EvtSVVHelAmp::clone(){
47 :
48 0 : return new EvtSVVHelAmp;
49 :
50 0 : }
51 :
52 : void EvtSVVHelAmp::init(){
53 :
54 : // check that there are 6 arguments
55 0 : checkNArg(6);
56 0 : checkNDaug(2);
57 :
58 0 : checkSpinParent(EvtSpinType::SCALAR);
59 :
60 0 : checkSpinDaughter(0,EvtSpinType::VECTOR);
61 0 : checkSpinDaughter(1,EvtSpinType::VECTOR);
62 :
63 0 : }
64 :
65 :
66 : void EvtSVVHelAmp::initProbMax(){
67 :
68 0 : setProbMax(getArg(0)*getArg(0)+getArg(2)*getArg(2)+getArg(4)*getArg(4));
69 :
70 0 : }
71 :
72 :
73 : void EvtSVVHelAmp::decay( EvtParticle *p){
74 :
75 0 : SVVHel(p,_amp2,getDaug(0),getDaug(1),
76 0 : EvtComplex(getArg(0)*cos(getArg(1)),getArg(0)*sin(getArg(1))),
77 0 : EvtComplex(getArg(2)*cos(getArg(3)),getArg(2)*sin(getArg(3))),
78 0 : EvtComplex(getArg(4)*cos(getArg(5)),getArg(4)*sin(getArg(5))));
79 :
80 0 : 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 0 : EvtId tdaug[2];
94 0 : tdaug[0] = n_v1;
95 0 : tdaug[1] = n_v2;
96 :
97 :
98 0 : parent->initializePhaseSpace(tndaug,tdaug);
99 :
100 : EvtParticle *v1,*v2;
101 0 : v1 = parent->getDaug(0);
102 0 : v2 = parent->getDaug(1);
103 :
104 0 : EvtVector4R momv1 = v1->getP4();
105 : //EvtVector4R momv2 = v2->getP4();
106 :
107 0 : EvtVector3R v1dir(momv1.get(1),momv1.get(2),momv1.get(3));
108 0 : v1dir=v1dir/v1dir.d3mag();
109 :
110 0 : EvtComplex a=-0.5*(hp+hm);
111 0 : EvtComplex b=EvtComplex(0.0,0.5)*(hp-hm);
112 0 : EvtComplex c=h0+0.5*(hp+hm);
113 :
114 0 : EvtTensor3C M=a*EvtTensor3C::id()+
115 0 : b*EvtGenFunctions::eps(v1dir)+
116 0 : c*EvtGenFunctions::directProd(v1dir,v1dir);
117 :
118 0 : EvtVector3C t0=M.cont1(v1->eps(0).vec().conj());
119 0 : EvtVector3C t1=M.cont1(v1->eps(1).vec().conj());
120 0 : EvtVector3C t2=M.cont1(v1->eps(2).vec().conj());
121 :
122 0 : EvtVector3C eps0=v2->eps(0).vec().conj();
123 0 : EvtVector3C eps1=v2->eps(1).vec().conj();
124 0 : EvtVector3C eps2=v2->eps(2).vec().conj();
125 :
126 0 : amp.vertex(0,0,t0*eps0);
127 0 : amp.vertex(0,1,t0*eps1);
128 0 : amp.vertex(0,2,t0*eps2);
129 :
130 0 : amp.vertex(1,0,t1*eps0);
131 0 : amp.vertex(1,1,t1*eps1);
132 0 : amp.vertex(1,2,t1*eps2);
133 :
134 0 : amp.vertex(2,0,t2*eps0);
135 0 : amp.vertex(2,1,t2*eps1);
136 0 : amp.vertex(2,2,t2*eps2);
137 :
138 : return ;
139 :
140 0 : }
141 :
142 : std::string EvtSVVHelAmp::getParamName(int i) {
143 0 : switch(i) {
144 : case 0:
145 0 : return "plusHelAmp";
146 : case 1:
147 0 : return "plusHelAmpPhase";
148 : case 2:
149 0 : return "zeroHelAmp";
150 : case 3:
151 0 : return "zeroHelAmpPhase";
152 : case 4:
153 0 : return "minusHelAmp";
154 : case 5:
155 0 : return "minusHelAmpPhase";
156 : default:
157 0 : return "";
158 : }
159 0 : }
160 :
161 : std::string EvtSVVHelAmp::getParamDefault(int i) {
162 0 : switch(i) {
163 : case 0:
164 0 : return "1.0";
165 : case 1:
166 0 : return "0.0";
167 : case 2:
168 0 : return "1.0";
169 : case 3:
170 0 : return "0.0";
171 : case 4:
172 0 : return "1.0";
173 : case 5:
174 0 : return "0.0";
175 : default:
176 0 : return "";
177 : }
178 0 : }
|