EvtGen 2.2.0
Monte Carlo generator of particle decays, in particular the weak decays of heavy flavour particles such as B mesons.
Loading...
Searching...
No Matches
EvtBcVHad.cpp
Go to the documentation of this file.
1
2/***********************************************************************
3* Copyright 1998-2020 CERN for the benefit of the EvtGen authors *
4* *
5* This file is part of EvtGen. *
6* *
7* EvtGen is free software: you can redistribute it and/or modify *
8* it under the terms of the GNU General Public License as published by *
9* the Free Software Foundation, either version 3 of the License, or *
10* (at your option) any later version. *
11* *
12* EvtGen is distributed in the hope that it will be useful, *
13* but WITHOUT ANY WARRANTY; without even the implied warranty of *
14* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
15* GNU General Public License for more details. *
16* *
17* You should have received a copy of the GNU General Public License *
18* along with EvtGen. If not, see <https://www.gnu.org/licenses/>. *
19***********************************************************************/
20
22
24#include "EvtGenBase/EvtPDL.hh"
30
33
34#include <iostream>
35
36std::string EvtBcVHad::getName() const
37{
38 return "BC_VHAD";
39}
40
42{
43 return new EvtBcVHad;
44}
45
46//======================================================
47
49{
50 // The following decay m_outCodes are supported:
51 // 1: B_c+ -> V pi+
52 // 2: B_c+ -> V pi+ pi0
53 // 3: B_c+ -> V 2pi+ pi-
54 // 4: B_c+ -> V 2pi+ pi- pi0 (not implemented)
55 // 5: B_c+ -> V 3pi+ 2pi-
56 // 6: B_c+ -> V K+ K- pi+
57 // 7: B_c+ -> V K+ pi+ pi-
58 // 8: B_c+ -> V K_S0 K+
59 // 9: B_c+ -> V K+ K- 2pi+ pi-
60 // 10: B_c+ -> V 4pi+ 3pi-
61 // 11: B_c+ -> V K+ 2pi+ 2pi-
62
63 checkNArg( 1 );
66 for ( int i = 1; i <= ( getNDaug() - 1 ); i++ ) {
68 }
69
70 m_idVector = getDaug( 0 ).getId();
71 m_whichFit = int( getArg( 0 ) + 0.1 );
72 m_FFModel = std::make_unique<EvtBCVFF2>( m_idVector, m_whichFit );
73
74 m_WCurr = std::make_unique<EvtWHad>();
75
76 // Determine the code of the final hadronic state
77 parseDecay();
78}
79
80//======================================================
81
83{
84 const EvtIdSet BcPlusID{ "B_c+" }, BcMinusID{ "B_c-" };
85 const EvtIdSet theK{ "K+", "K-", "K_S0" };
86 const int cMode = BcMinusID.contains( getParentId() );
87
88 const EvtIdSet PiPlusID{ cMode == 0 ? "pi+" : "pi-" };
89 const EvtIdSet PiMinusID{ cMode == 0 ? "pi-" : "pi+" };
90 const EvtIdSet PiZeroID{ "pi0" };
91 const EvtIdSet KPlusID{ cMode == 0 ? "K+" : "K-" };
92 const EvtIdSet KMinusID{ cMode == 0 ? "K-" : "K+" };
93 EvtGenReport( EVTGEN_INFO, "EvtBcVHad" )
94 << "parentId = " << getParentId() << std::endl;
95
96 int PiPlusFound = 0, PiMinusFound = 0, PiZeroFound = 0, KPlusFound = 0,
97 KMinusFound = 0;
98 for ( int iDaughter = 0; iDaughter < getNDaug(); ++iDaughter ) {
99 const EvtId daugId = getDaug( iDaughter );
100 EvtGenReport( EVTGEN_INFO, "EvtBcVHad" )
101 << "iDaughter = " << iDaughter
102 << " id = " << getDaug( iDaughter ).getName() << std::endl;
103 if ( PiPlusID.contains( daugId ) && PiPlusFound < 4 ) {
104 m_iPiPlus[PiPlusFound] = iDaughter;
105 PiPlusFound++;
106 } else if ( PiMinusID.contains( daugId ) && PiMinusFound < 4 ) {
107 m_iPiMinus[PiMinusFound] = iDaughter;
108 PiMinusFound++;
109 } else if ( PiZeroID.contains( daugId ) && PiZeroFound < 4 ) {
110 m_iPiZero[PiZeroFound] = iDaughter;
111 PiZeroFound++;
112 } else if ( KPlusID.contains( daugId ) && KPlusFound < 4 ) {
113 m_iKPlus[KPlusFound] = iDaughter;
114 KPlusFound++;
115 } else if ( KMinusID.contains( daugId ) && KMinusFound < 4 ) {
116 m_iKMinus[KMinusFound] = iDaughter;
117 KMinusFound++;
118 }
119 }
120
121 if ( getNDaug() == 2 && PiPlusFound == 1 ) {
122 m_outCode = 1; // pi+
123 } else if ( getNDaug() == 3 && PiPlusFound == 1 && PiZeroFound == 1 ) {
124 m_outCode = 2; // pi+ pi0
125 } else if ( getNDaug() == 4 && PiPlusFound == 2 && PiMinusFound == 1 ) {
126 m_outCode = 3; // pi+ pi+ pi-
127 } else if ( getNDaug() == 5 && PiPlusFound == 2 && PiMinusFound == 1 &&
128 PiZeroFound == 1 ) {
129 m_outCode = 4; // pi+ pi+ pi- pi0
130 } else if ( getNDaug() == 6 && PiPlusFound == 3 && PiMinusFound == 2 ) {
131 m_outCode = 5; // 5pi
132 } else if ( getNDaug() == 4 && KPlusFound == 1 && KMinusFound == 1 &&
133 PiPlusFound == 1 ) {
134 m_outCode = 6; // KKpi
135 } else if ( getNDaug() == 4 && KPlusFound == 1 && PiPlusFound == 1 &&
136 PiMinusFound == 1 ) {
137 m_outCode = 7; // K+ pi+ pi-
138 } else if ( getNDaug() == 3 && theK.contains( getDaug( 1 ) ) &&
139 theK.contains( getDaug( 2 ) ) ) {
140 m_outCode = 8; // KK
141 } else if ( getNDaug() == 6 && KPlusFound == 1 && KMinusFound == 1 &&
142 PiPlusFound == 2 && PiMinusFound == 1 ) {
143 m_outCode = 9; // K+ K- pi+ pi+ pi-
144 } else if ( getNDaug() == 8 && PiPlusFound == 4 && PiMinusFound == 3 ) {
145 m_outCode = 10; // 7pi
146 } else if ( getNDaug() == 6 && KPlusFound == 1 && PiPlusFound == 2 &&
147 PiMinusFound == 2 ) {
148 m_outCode = 11; // K+ pi+ pi+ pi- pi-
149 } else {
150 EvtGenReport( EVTGEN_ERROR, "EvtBcVHad" )
151 << "Init: unknown decay" << std::endl;
152 }
153
154 EvtGenReport( EVTGEN_INFO, "EvtBcVHad" )
155 << "m_outCode = " << m_outCode << ", m_whichFit = " << m_whichFit
156 << std::endl;
157 for ( int i = 0; i < 4; ++i ) {
158 EvtGenReport( EVTGEN_INFO, "EvtBcVHad" )
159 << " i = " << i << ", m_iPiPlus = " << m_iPiPlus[i]
160 << ", m_iPiMinus = " << m_iPiMinus[i]
161 << ", m_iPiZero = " << m_iPiZero[i] << ", m_iKPlus = " << m_iKPlus[i]
162 << ", m_iKMinus = " << m_iKMinus[i] << std::endl;
163 }
164 EvtGenReport( EVTGEN_INFO, "EvtBcVHad" )
165 << "PiPlusFound = " << PiPlusFound << ", PiMinusFound = " << PiMinusFound
166 << ", PiZeroFound = " << PiZeroFound << ", KPlusFound = " << KPlusFound
167 << ", KMinusFound = " << KMinusFound << std::endl;
168}
169
170//======================================================
171
173{
174 if ( m_outCode == 1 ) {
175 if ( m_idVector == EvtPDL::getId( "J/psi" ).getId() &&
176 m_whichFit == 1 && getNDaug() == 2 )
177 setProbMax( 500. );
178 else if ( m_idVector == EvtPDL::getId( "J/psi" ).getId() &&
179 m_whichFit == 2 && getNDaug() == 2 )
180 setProbMax( 300. );
181 else if ( m_idVector == EvtPDL::getId( "psi(2S)" ).getId() &&
182 m_whichFit == 1 && getNDaug() == 2 )
183 setProbMax( 17. );
184 else if ( m_idVector == EvtPDL::getId( "psi(2S)" ).getId() &&
185 m_whichFit == 2 && getNDaug() == 2 )
186 setProbMax( 40. );
187 } else if ( m_outCode == 2 ) {
188 if ( m_idVector == EvtPDL::getId( "J/psi" ).getId() &&
189 m_whichFit == 1 && getNDaug() == 3 )
190 setProbMax( 10950. );
191 else if ( m_idVector == EvtPDL::getId( "J/psi" ).getId() &&
192 m_whichFit == 2 && getNDaug() == 3 )
193 setProbMax( 4200. );
194 else if ( m_idVector == EvtPDL::getId( "psi(2S)" ).getId() &&
195 m_whichFit == 1 && getNDaug() == 3 )
196 setProbMax( 500. );
197 else if ( m_idVector == EvtPDL::getId( "psi(2S)" ).getId() &&
198 m_whichFit == 2 && getNDaug() == 3 )
199 setProbMax( 700. );
200 } else if ( m_outCode == 3 ) {
201 if ( m_idVector == EvtPDL::getId( "J/psi" ).getId() &&
202 m_whichFit == 1 && getNDaug() == 4 )
203 setProbMax( 42000. );
204 else if ( m_idVector == EvtPDL::getId( "J/psi" ).getId() &&
205 m_whichFit == 2 && getNDaug() == 4 )
206 setProbMax( 90000. );
207 else if ( m_idVector == EvtPDL::getId( "psi(2S)" ).getId() &&
208 m_whichFit == 1 && getNDaug() == 4 )
209 setProbMax( 1660. );
210 else if ( m_idVector == EvtPDL::getId( "psi(2S)" ).getId() &&
211 m_whichFit == 2 && getNDaug() == 4 )
212 setProbMax( 2600. );
213 } else if ( m_outCode == 5 ) {
214 if ( m_idVector == EvtPDL::getId( "J/psi" ).getId() &&
215 m_whichFit == 1 && getNDaug() == 6 )
216 setProbMax( 720000. );
217 else if ( m_idVector == EvtPDL::getId( "J/psi" ).getId() &&
218 m_whichFit == 2 && getNDaug() == 6 )
219 setProbMax( 519753. );
220 else if ( m_idVector == EvtPDL::getId( "psi(2S)" ).getId() &&
221 m_whichFit == 1 && getNDaug() == 6 )
222 setProbMax( 40000. );
223 else if ( m_idVector == EvtPDL::getId( "psi(2S)" ).getId() &&
224 m_whichFit == 2 && getNDaug() == 6 )
225 setProbMax( 30000. );
226 } else if ( m_outCode == 6 ) {
227 if ( m_idVector == EvtPDL::getId( "J/psi" ).getId() && m_whichFit == 1 )
228 setProbMax( 50000. );
229 else if ( m_idVector == EvtPDL::getId( "J/psi" ).getId() &&
230 m_whichFit == 2 )
231 setProbMax( 22000.0 );
232 else if ( m_idVector == EvtPDL::getId( "psi(2S)" ).getId() &&
233 m_whichFit == 1 )
234 setProbMax( 2300.0 );
235 else if ( m_idVector == EvtPDL::getId( "psi(2S)" ).getId() &&
236 m_whichFit == 2 )
237 setProbMax( 1700.00 );
238 } else if ( m_outCode == 7 ) {
239 if ( m_idVector == EvtPDL::getId( "J/psi" ).getId() && m_whichFit == 1 )
240 setProbMax( 2.2e+06 );
241 else if ( m_idVector == EvtPDL::getId( "J/psi" ).getId() &&
242 m_whichFit == 2 )
243 setProbMax( 930000 );
244 else if ( m_idVector == EvtPDL::getId( "psi(2S)" ).getId() &&
245 m_whichFit == 1 )
246 setProbMax( 92000.0 );
247 else if ( m_idVector == EvtPDL::getId( "psi(2S)" ).getId() &&
248 m_whichFit == 2 )
249 setProbMax( 93000.0 );
250 } else if ( m_outCode == 8 ) {
251 if ( m_idVector == EvtPDL::getId( "J/psi" ).getId() && m_whichFit == 1 )
252 setProbMax( 2e2 );
253 else if ( m_idVector == EvtPDL::getId( "J/psi" ).getId() &&
254 m_whichFit == 2 )
255 setProbMax( 80 );
256 else if ( m_idVector == EvtPDL::getId( "psi(2S)" ).getId() &&
257 m_whichFit == 1 )
258 setProbMax( 10 );
259 else if ( m_idVector == EvtPDL::getId( "psi(2S)" ).getId() &&
260 m_whichFit == 2 )
261 setProbMax( 10 );
262 } else if ( m_outCode == 9 ) {
263 if ( m_idVector == EvtPDL::getId( "J/psi" ).getId() && m_whichFit == 1 )
264 setProbMax( 3e4 );
265 else if ( m_idVector == EvtPDL::getId( "J/psi" ).getId() &&
266 m_whichFit == 2 )
267 setProbMax( 18540 );
268 else if ( m_idVector == EvtPDL::getId( "psi(2S)" ).getId() &&
269 m_whichFit == 1 )
270 setProbMax( 0.15 * 1e4 );
271 else if ( m_idVector == EvtPDL::getId( "psi(2S)" ).getId() &&
272 m_whichFit == 2 )
273 setProbMax( 2 * 500 );
274 } else if ( m_outCode == 10 ) {
275 if ( m_idVector == EvtPDL::getId( "J/psi" ).getId() && m_whichFit == 1 )
276 setProbMax( 2e6 );
277 else if ( m_idVector == EvtPDL::getId( "J/psi" ).getId() &&
278 m_whichFit == 2 )
279 setProbMax( 5e6 );
280 else if ( m_idVector == EvtPDL::getId( "psi(2S)" ).getId() &&
281 m_whichFit == 1 )
282 setProbMax( 1.5e5 );
283 else if ( m_idVector == EvtPDL::getId( "psi(2S)" ).getId() &&
284 m_whichFit == 2 )
285 setProbMax( 1e5 );
286 } else if ( m_outCode == 11 ) {
287 if ( m_idVector == EvtPDL::getId( "J/psi" ).getId() && m_whichFit == 1 )
288 setProbMax( 2.5e8 );
289 else if ( m_idVector == EvtPDL::getId( "J/psi" ).getId() &&
290 m_whichFit == 2 )
291 setProbMax( 1.4e7 );
292 else if ( m_idVector == EvtPDL::getId( "psi(2S)" ).getId() &&
293 m_whichFit == 1 )
294 setProbMax( 2e6 );
295 else if ( m_idVector == EvtPDL::getId( "psi(2S)" ).getId() &&
296 m_whichFit == 2 )
297 setProbMax( 8e4 );
298 } else {
299 EvtGenReport( EVTGEN_ERROR, "EvtBcHad" )
300 << "probmax: Have not yet implemented this final state in BC_VHAD model, m_outCode = "
301 << m_outCode << std::endl;
302 for ( int id = 0; id < ( getNDaug() - 1 ); id++ ) {
303 EvtGenReport( EVTGEN_ERROR, "EvtBcVHad" )
304 << "Daug " << id << " " << EvtPDL::name( getDaug( id ) ).c_str()
305 << std::endl;
306 }
307 }
308}
309
310//======================================================
311
313{
314 EvtVector4C hardCur;
315
316 if ( m_outCode == 1 ) {
317 // pi+
318 hardCur = m_WCurr->WCurrent( parent->getDaug( m_iPiPlus[0] )->getP4() );
319
320 } else if ( m_outCode == 2 ) {
321 // pi+ pi0
322 hardCur = m_WCurr->WCurrent( parent->getDaug( m_iPiPlus[0] )->getP4(),
323 parent->getDaug( m_iPiZero[0] )->getP4() );
324
325 } else if ( m_outCode == 3 ) {
326 // pi+ pi+ pi-
327 hardCur = m_WCurr->WCurrent( parent->getDaug( m_iPiPlus[0] )->getP4(),
328 parent->getDaug( m_iPiPlus[1] )->getP4(),
329 parent->getDaug( m_iPiMinus[0] )->getP4() );
330 } else if ( m_outCode == 5 ) {
331 // Bc -> psi pi+ pi+ pi- pi- pi+ from Kuhn & Was, hep-ph/0602162
332 hardCur =
333 m_WCurr->WCurrent_5pi( parent->getDaug( m_iPiPlus[0] )->getP4(),
334 parent->getDaug( m_iPiPlus[1] )->getP4(),
335 parent->getDaug( m_iPiPlus[2] )->getP4(),
336 parent->getDaug( m_iPiMinus[0] )->getP4(),
337 parent->getDaug( m_iPiMinus[1] )->getP4() );
338
339 } else if ( m_outCode == 6 ) {
340 // K+ K- pi+
341 hardCur =
342 m_WCurr->WCurrent_KKP( parent->getDaug( m_iKPlus[0] )->getP4(),
343 parent->getDaug( m_iKMinus[0] )->getP4(),
344 parent->getDaug( m_iPiPlus[0] )->getP4() );
345
346 } else if ( m_outCode == 7 ) {
347 // K+ pi+ pi-
348 hardCur =
349 m_WCurr->WCurrent_KPP( parent->getDaug( m_iKPlus[0] )->getP4(),
350 parent->getDaug( m_iPiPlus[0] )->getP4(),
351 parent->getDaug( m_iPiMinus[0] )->getP4() );
352
353 } else if ( m_outCode == 8 ) {
354 // K_S0 K+
355 hardCur = m_WCurr->WCurrent_KSK( parent->getDaug( 1 )->getP4(),
356 parent->getDaug( 2 )->getP4() );
357
358 } else if ( m_outCode == 9 ) {
359 // K+ K- pi+ pi+ pi-
360 hardCur = m_WCurr->WCurrent_KKPPP(
361 parent->getDaug( m_iKPlus[0] )->getP4(), // K+
362 parent->getDaug( m_iKMinus[0] )->getP4(), // K-
363 parent->getDaug( m_iPiPlus[0] )->getP4(), // pi+
364 parent->getDaug( m_iPiPlus[1] )->getP4(), // pi+
365 parent->getDaug( m_iPiMinus[0] )->getP4() // pi-
366 );
367 } else if ( m_outCode == 10 ) {
368 // 1=pi+ 2=pi+ 3=pi+ 4=pi+ 5=pi- 6=pi- 7=pi- with symmetrization of identical particles
369 hardCur = m_WCurr->WCurrent_7pi(
370 parent->getDaug( m_iPiPlus[0] )->getP4(), // pi+
371 parent->getDaug( m_iPiPlus[1] )->getP4(), // pi+
372 parent->getDaug( m_iPiPlus[2] )->getP4(), // pi+
373 parent->getDaug( m_iPiPlus[3] )->getP4(), // pi+
374 parent->getDaug( m_iPiMinus[0] )->getP4(), // pi-
375 parent->getDaug( m_iPiMinus[1] )->getP4(), // pi-
376 parent->getDaug( m_iPiMinus[2] )->getP4() // pi-
377 );
378 } else if ( m_outCode == 11 ) {
379 // 1=K+ 2 = pi+ 3 = pi+ 4 = pi- 5 = pi- with symmetrization
380 hardCur = m_WCurr->WCurrent_K4pi(
381 parent->getDaug( m_iKPlus[0] )->getP4(), // K+
382 parent->getDaug( m_iPiPlus[0] )->getP4(), // pi+
383 parent->getDaug( m_iPiPlus[1] )->getP4(), // pi+
384 parent->getDaug( m_iPiMinus[0] )->getP4(), // pi-
385 parent->getDaug( m_iPiMinus[1] )->getP4() // pi-
386 );
387 }
388
389 return hardCur;
390}
391
392//======================================================
393
395{
396 parent->initializePhaseSpace( getNDaug(), getDaugs() );
397
398 // Calculate hadronic current
399 const EvtVector4C hardCur = hardCurr( parent );
400
401 EvtParticle* Jpsi = parent->getDaug( 0 );
402 //std::cout<<"4th comp: "<<Jpsi->eps(3)<<std::endl;
403
404 const EvtVector4R p4b( parent->mass(), 0., 0., 0. ), // Bc momentum
405 p4meson = Jpsi->getP4(), // J/psi momenta
406 Q = p4b - p4meson, p4Sum = p4meson + p4b;
407 const double Q2 = Q.mass2();
408
409 // Calculate Bc -> V W form-factors
410 double a1f( 0.0 ), a2f( 0.0 ), vf( 0.0 ), a0f( 0.0 );
411
412 const double mMeson = Jpsi->mass();
413 const double mB = parent->mass();
414 const double mVar = mB + mMeson;
415
416 m_FFModel->getvectorff( parent->getId(), Jpsi->getId(), Q2, mMeson, &a1f,
417 &a2f, &vf, &a0f );
418
419 const double a3f = ( mVar / ( 2.0 * mMeson ) ) * a1f -
420 ( ( mB - mMeson ) / ( 2.0 * mMeson ) ) * a2f;
421
422 // Calculate Bc -> V W current
423 EvtTensor4C H = a1f * mVar * EvtTensor4C::g();
424 H.addDirProd( ( -a2f / mVar ) * p4b, p4Sum );
425 H += EvtComplex( 0.0, vf / mVar ) *
426 dual( EvtGenFunctions::directProd( p4Sum, Q ) );
427 H.addDirProd( ( a0f - a3f ) * 2.0 * ( mMeson / Q2 ) * p4b, Q );
428 const EvtVector4C Heps = H.cont2( hardCur );
429
430 for ( int i = 0; i < 3; i++ ) {
431 const EvtVector4C eps =
432 Jpsi->epsParent( i ).conj(); // psi-meson polarization vector
433 const EvtComplex amp = eps * Heps;
434 vertex( i, amp );
435 }
436}
std::ostream & EvtGenReport(EvtGenSeverity severity, const char *facility=nullptr)
Definition EvtReport.cpp:32
@ EVTGEN_INFO
Definition EvtReport.hh:52
@ EVTGEN_ERROR
Definition EvtReport.hh:49
EvtTensor4C dual(const EvtTensor4C &t2)
void init() override
Definition EvtBcVHad.cpp:48
std::array< int, 4 > m_iKMinus
Definition EvtBcVHad.hh:81
std::array< int, 4 > m_iPiPlus
Definition EvtBcVHad.hh:77
std::array< int, 4 > m_iPiMinus
Definition EvtBcVHad.hh:78
std::string getName() const override
Definition EvtBcVHad.cpp:36
int m_outCode
Definition EvtBcVHad.hh:72
EvtVector4C hardCurr(EvtParticle *parent) const
std::unique_ptr< EvtWHad > m_WCurr
Definition EvtBcVHad.hh:75
void parseDecay()
Definition EvtBcVHad.cpp:82
EvtDecayBase * clone() const override
Definition EvtBcVHad.cpp:41
std::array< int, 4 > m_iKPlus
Definition EvtBcVHad.hh:80
void decay(EvtParticle *parent) override
int m_whichFit
Definition EvtBcVHad.hh:55
std::array< int, 4 > m_iPiZero
Definition EvtBcVHad.hh:79
std::unique_ptr< EvtBCVFF2 > m_FFModel
Definition EvtBcVHad.hh:74
int m_idVector
Definition EvtBcVHad.hh:58
void initProbMax() override
void vertex(const EvtComplex &amp)
void checkSpinDaughter(int d1, EvtSpinType::spintype sp)
EvtDecayBase()=default
int getNDaug() const
void checkSpinParent(EvtSpinType::spintype sp)
double getArg(unsigned int j)
void setProbMax(double prbmx)
EvtId getParentId() const
EvtId getDaug(int i) const
void checkNArg(int a1, int a2=-1, int a3=-1, int a4=-1)
const EvtId * getDaugs() const
bool contains(const EvtId &id) const
Definition EvtIdSet.cpp:46
Definition EvtId.hh:27
std::string getName() const
Definition EvtId.cpp:38
int getId() const
Definition EvtId.hh:41
static std::string name(EvtId i)
Definition EvtPDL.cpp:376
static EvtId getId(const std::string &name)
Definition EvtPDL.cpp:283
virtual EvtVector4C epsParent(int i) const
double initializePhaseSpace(size_t numdaughter, const EvtId *daughters, bool forceResetMasses=false, double poleSize=-1., int whichTwo1=0, int whichTwo2=1)
EvtId getId() const
const EvtVector4R & getP4() const
EvtParticle * getDaug(const int i)
double mass() const
static const EvtTensor4C & g()
EvtTensor4C & addDirProd(const EvtVector4R &p1, const EvtVector4R &p2)
EvtVector4C cont2(const EvtVector4C &v4) const
EvtVector4C conj() const
double mass2() const
EvtTensor3C directProd(const EvtVector3C &c1, const EvtVector3C &c2)