106 {
107
109
110 EvtIdSet thePis( "pi+", "pi-", "pi0" );
111 EvtIdSet theKs( "K+", "K-" );
112
114
115 EvtParticle* nut;
117
118
119 EvtVector4C tau1, tau2;
120
121 if ( p->
getId() == TAUM )
122 {
125 }
126 else
127 {
130 }
131
132 EvtVector4C hadCurr;
133 bool foundHadCurr = false;
135 {
137 foundHadCurr = true;
138 }
140 {
141
142
143 if ( thePis.contains(
getDaug( 0 ) ) && thePis.contains(
getDaug( 1 ) ) )
144 {
145
148
149 hadCurr = Fpi( q1, q2 ) * ( q1 - q2 );
150
151 foundHadCurr = true;
152 }
153 }
155 {
156 if ( thePis.contains(
getDaug( 0 ) ) && thePis.contains(
getDaug( 1 ) ) &&
157 thePis.contains(
getDaug( 2 ) ) )
158 {
159 foundHadCurr = true;
160
161
162
163 int diffPi( 0 ), samePi1( 0 ), samePi2( 0 );
165 {
166 diffPi = 2;
167 samePi1 = 0;
168 samePi2 = 1;
169 }
171 {
172 diffPi = 1;
173 samePi1 = 0;
174 samePi2 = 2;
175 }
177 {
178 diffPi = 0;
179 samePi1 = 1;
180 samePi2 = 2;
181 }
182
186
187 EvtVector4R Q = q1 + q2 + q3;
188 double qMass2 = Q.
mass2();
189
190 double GA1 = _gammaA1 * pi3G( Q.
mass2(), samePi1 ) / pi3G( _mA1 * _mA1, samePi1 );
191
192 EvtComplex denBA1( _mA1 * _mA1 - Q.
mass2(), -1. * _mA1 * GA1 );
193 EvtComplex BA1 = _mA1 * _mA1 / denBA1;
194
195 hadCurr = BA1 * ( ( q1 - q3 ) - ( Q * ( Q * ( q1 - q3 ) ) / qMass2 ) * Fpi( q2, q3 ) +
196 ( q2 - q3 ) - ( Q * ( Q * ( q2 - q3 ) ) / qMass2 ) * Fpi( q1, q3 ) );
197 }
198 }
199
200 if ( !foundHadCurr )
201 {
202 report(
ERROR,
"EvtGen" ) <<
"Have not yet implemented this final state in TAUHADNU model"
203 << endl;
205 int id;
206 for (
id = 0;
id < (
getNDaug() - 1 );
id++ )
209 }
210
211 vertex( 0, tau1 * hadCurr );
212 vertex( 1, tau2 * hadCurr );
213
214 return;
215}
EvtVector4C EvtLeptonVACurrent(const EvtDiracSpinor &d, const EvtDiracSpinor &dp)
ostream & report(Severity severity, const char *facility)
void vertex(const EvtComplex &)
static std::string name(EvtId i)
static EvtId getId(const std::string &name)
virtual EvtDiracSpinor spParentNeutrino() const
const EvtVector4R & getP4() const
EvtParticle * getDaug(int i)
virtual EvtDiracSpinor sp(int) const
double initializePhaseSpace(int numdaughter, EvtId *daughters, double poleSize=-1., int whichTwo1=0, int whichTwo2=1)