evtgen is hosted by Hepforge, IPPP Durham
EvtGen  2.0.0
Monte Carlo generator of particle decays, in particular the weak decays of heavy flavour particles such as B mesons.
EvtCPUtil.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 
21 #include "EvtGenBase/EvtCPUtil.hh"
22 
23 #include "EvtGenBase/EvtConst.hh"
24 #include "EvtGenBase/EvtPDL.hh"
26 #include "EvtGenBase/EvtPatches.hh"
27 #include "EvtGenBase/EvtRandom.hh"
28 #include "EvtGenBase/EvtReport.hh"
31 
32 #include <assert.h>
33 #include <stdio.h>
34 #include <stdlib.h>
35 using std::endl;
36 
37 EvtCPUtil::EvtCPUtil( int mixingType )
38 {
39  _enableFlip = false;
40  _mixingType = mixingType;
41 }
42 
44 {
45  static EvtCPUtil* theCPUtil = 0;
46 
47  if ( theCPUtil == 0 ) {
48  theCPUtil = new EvtCPUtil( 1 );
49  }
50 
51  return theCPUtil;
52 }
53 
54 //added two functions for finding the fraction of B0 tags for decays into
55 //both CP eigenstates and non-CP eigenstates -- NK, Jan. 27th, 1998
56 
57 void EvtCPUtil::fractB0CP( EvtComplex Af, EvtComplex Abarf, double /*deltam*/,
58  double beta, double& fract )
59 {
60  //This function returns the number of B0 tags for decays into CP-eigenstates
61  //(the "probB0" in the new EvtOtherB)
62 
63  //double gamma_B = EvtPDL::getWidth(B0);
64  //double xd = deltam/gamma_B;
65  //double xd = 0.65;
66  double ratio = 1 / ( 1 + 0.65 * 0.65 );
67 
68  EvtComplex rf, rbarf;
69 
70  rf = EvtComplex( cos( 2.0 * beta ), sin( 2.0 * beta ) ) * Abarf / Af;
71  rbarf = EvtComplex( 1.0 ) / rf;
72 
73  double A2 = real( Af ) * real( Af ) + imag( Af ) * imag( Af );
74  double Abar2 = real( Abarf ) * real( Abarf ) + imag( Abarf ) * imag( Abarf );
75 
76  double rf2 = real( rf ) * real( rf ) + imag( rf ) * imag( rf );
77  double rbarf2 = real( rbarf ) * real( rbarf ) + imag( rbarf ) * imag( rbarf );
78 
79  fract = ( Abar2 * ( 1 + rbarf2 + ( 1 - rbarf2 ) * ratio ) ) /
80  ( Abar2 * ( 1 + rbarf2 + ( 1 - rbarf2 ) * ratio ) +
81  A2 * ( 1 + rf2 + ( 1 - rf2 ) * ratio ) );
82  return;
83 }
84 
86  EvtComplex Abarfbar, double deltam, double beta,
87  int flip, double& fract )
88 {
89  //this function returns the number of B0 tags for decays into non-CP eigenstates
90  //(the "probB0" in the new EvtOtherB)
91  //this needs more thought...
92 
93  //double gamma_B = EvtPDL::getWidth(B0);
94  //EvtGenReport(EVTGEN_INFO,"EvtGen") << "gamma " << gamma_B<< endl;
95  //double xd = deltam/gamma_B;
96 
97  //why is the width of B0 0 in PDL??
98 
99  double xd = 0.65;
100  double gamma_B = deltam / xd;
101  double IAf, IAfbar, IAbarf, IAbarfbar;
102  EvtComplex rf, rfbar, rbarf, rbarfbar;
103  double rf2, rfbar2, rbarf2, rbarfbar2;
104  double Af2, Afbar2, Abarf2, Abarfbar2;
105 
106  rf = EvtComplex( cos( 2.0 * beta ), sin( 2.0 * beta ) ) * Abarf / Af;
107  rfbar = EvtComplex( cos( 2.0 * beta ), sin( 2.0 * beta ) ) * Abarfbar / Afbar;
108  rbarf = EvtComplex( cos( -2.0 * beta ), sin( -2.0 * beta ) ) * Af / Abarf;
109  rbarfbar = EvtComplex( cos( -2.0 * beta ), sin( -2.0 * beta ) ) * Afbar /
110  Abarfbar;
111 
112  rf2 = real( rf ) * real( rf ) + imag( rf ) * imag( rf );
113  rfbar2 = real( rfbar ) * real( rfbar ) + imag( rfbar ) * imag( rfbar );
114  rbarf2 = real( rbarf ) * real( rbarf ) + imag( rbarf ) * imag( rbarf );
115  rbarfbar2 = real( rbarfbar ) * real( rbarfbar ) +
116  imag( rbarfbar ) * imag( rbarfbar );
117 
118  Af2 = real( Af ) * real( Af ) + imag( Af ) * imag( Af );
119  Afbar2 = real( Afbar ) * real( Afbar ) + imag( Afbar ) * imag( Afbar );
120  Abarf2 = real( Abarf ) * real( Abarf ) + imag( Abarf ) * imag( Abarf );
121  Abarfbar2 = real( Abarfbar ) * real( Abarfbar ) +
122  imag( Abarfbar ) * imag( Abarfbar );
123 
124  //
125  //IAf = integral(gamma(B0->f)), etc.
126  //
127 
128  IAf = ( Af2 / ( 2 * gamma_B ) ) * ( 1 + rf2 + ( 1 - rf2 ) / ( 1 + xd * xd ) );
129  IAfbar = ( Afbar2 / ( 2 * gamma_B ) ) *
130  ( 1 + rfbar2 + ( 1 - rfbar2 ) / ( 1 + xd * xd ) );
131  IAbarf = ( Abarf2 / ( 2 * gamma_B ) ) *
132  ( 1 + rbarf2 + ( 1 - rbarf2 ) / ( 1 + xd * xd ) );
133  IAbarfbar = ( Abarfbar2 / ( 2 * gamma_B ) ) *
134  ( 1 + rbarfbar2 + ( 1 - rbarfbar2 ) / ( 1 + xd * xd ) );
135 
136  //flip specifies the relative fraction of fbar events
137 
138  fract = IAbarf / ( IAbarf + IAf ) + flip * IAbarfbar / ( IAfbar + IAbarfbar );
139 
140  return;
141 }
142 
143 void EvtCPUtil::OtherB( EvtParticle* p, double& t, EvtId& otherb, double probB0 )
144 {
145  if ( _mixingType == EvtCPUtil::Coherent ) {
146  OtherCoherentB( p, t, otherb, probB0 );
147 
148  } else if ( _mixingType == EvtCPUtil::Incoherent ) {
149  OtherIncoherentB( p, t, otherb, probB0 );
150  }
151 }
152 
153 void EvtCPUtil::OtherCoherentB( EvtParticle* p, double& t, EvtId& otherb,
154  double probB0 )
155 {
156  //Can not call this recursively!!!
157  static int entryCount = 0;
158  entryCount++;
159 
160  //added by Lange Jan4,2000
161  static EvtId B0B = EvtPDL::getId( "anti-B0" );
162  static EvtId B0 = EvtPDL::getId( "B0" );
163  static EvtId BSB = EvtPDL::getId( "anti-B_s0" );
164  static EvtId BS = EvtPDL::getId( "B_s0" );
165 
166  static EvtId UPS4S = EvtPDL::getId( "Upsilon(4S)" );
167 
168  int isB0 = EvtRandom::Flat( 0.0, 1.0 ) < probB0;
169 
170  int idaug;
171 
172  p->setLifetime();
173 
174  // now get the time between the decay of this B and the other B!
175 
176  EvtParticle* parent = p->getParent();
177 
179 
180  bool incoherentmix = false;
181 
182  if ( ( parent != 0 ) && ( parent->getId() == B0 || parent->getId() == B0B ||
183  parent->getId() == BS || parent->getId() == BSB ) ) {
184  incoherentmix = true;
185  }
186 
187  if ( incoherentmix )
188  parent = parent->getParent();
189 
190  if ( parent == 0 || parent->getId() != UPS4S ) {
191  //Need to make this more general, but for now
192  //assume no parent. If we have parent of B we
193  //need to charge conj. full decay tree.
194 
195  if ( parent != 0 ) {
196  EvtGenReport( EVTGEN_INFO, "EvtGen" )
197  << "p=" << EvtPDL::name( p->getId() )
198  << " parent=" << EvtPDL::name( parent->getId() ) << endl;
199  }
200  assert( parent == 0 );
201  p->setLifetime();
202  t = p->getLifetime();
203  bool needToChargeConj = false;
204  if ( p->getId() == B0B && isB0 )
205  needToChargeConj = true;
206  if ( p->getId() == B0 && !isB0 )
207  needToChargeConj = true;
208  if ( p->getId() == BSB && isB0 )
209  needToChargeConj = true;
210  if ( p->getId() == BS && !isB0 )
211  needToChargeConj = true;
212 
213  if ( needToChargeConj ) {
214  p->setId( EvtPDL::chargeConj( p->getId() ) );
215  if ( incoherentmix ) {
216  p->getDaug( 0 )->setId(
217  EvtPDL::chargeConj( p->getDaug( 0 )->getId() ) );
218  }
219  }
220  otherb = EvtPDL::chargeConj( p->getId() );
221 
222  entryCount--;
223  return;
224  } else {
225  if ( parent->getDaug( 0 ) != p ) {
226  other = parent->getDaug( 0 );
227  idaug = 0;
228  } else {
229  other = parent->getDaug( 1 );
230  idaug = 1;
231  }
232  }
233 
234  if ( parent != 0 ) {
235  //if (entryCount>1){
236  // EvtGenReport(EVTGEN_INFO,"EvtGen") << "Double CP decay:"<<entryCount<<endl;
237  //}
238 
239  //kludge!! Lange Mar21, 2003
240  // if the other B is an alias... don't change the flavor..
241  if ( other->getId().isAlias() ) {
242  OtherB( p, t, otherb );
243  entryCount--;
244  return;
245  }
246 
247  if ( entryCount == 1 ) {
248  EvtVector4R p_init = other->getP4();
249  //int decayed=other->getNDaug()>0;
250  bool decayed = other->isDecayed();
251 
252  other->deleteTree();
253 
254  EvtScalarParticle* scalar_part;
255 
256  scalar_part = new EvtScalarParticle;
257  if ( isB0 ) {
258  scalar_part->init( B0, p_init );
259  } else {
260  scalar_part->init( B0B, p_init );
261  }
262  other = (EvtParticle*)scalar_part;
263  // other->set_type(EvtSpinType::SCALAR);
264  other->setDiagonalSpinDensity();
265 
266  parent->insertDaugPtr( idaug, other );
267 
268  if ( decayed ) {
269  //EvtGenReport(EVTGEN_INFO,"EvtGen") << "In CP Util calling decay \n";
270  other->decay();
271  }
272  }
273 
274  otherb = other->getId();
275 
276  other->setLifetime();
277  t = p->getLifetime() - other->getLifetime();
278 
279  otherb = other->getId();
280 
281  } else {
282  EvtGenReport( EVTGEN_INFO, "EvtGen" )
283  << "We have an error here!!!!" << endl;
284  otherb = EvtId( -1, -1 );
285  }
286 
287  entryCount--;
288  return;
289 }
290 
291 // ========================================================================
293 {
294  if ( !( p->getParent() ) )
295  return false;
296 
297  static EvtId BS0 = EvtPDL::getId( "B_s0" );
298  static EvtId BSB = EvtPDL::getId( "anti-B_s0" );
299 
300  if ( ( p->getId() != BS0 ) && ( p->getId() != BSB ) )
301  return false;
302 
303  if ( ( p->getParent()->getId() == BS0 ) || ( p->getParent()->getId() == BSB ) )
304  return true;
305 
306  return false;
307 }
308 
309 // ========================================================================
311 {
312  if ( !( p->getParent() ) )
313  return false;
314 
315  static EvtId B0 = EvtPDL::getId( "B0" );
316  static EvtId B0B = EvtPDL::getId( "anti-B0" );
317 
318  if ( ( p->getId() != B0 ) && ( p->getId() != B0B ) )
319  return false;
320 
321  if ( ( p->getParent()->getId() == B0 ) || ( p->getParent()->getId() == B0B ) )
322  return true;
323 
324  return false;
325 }
326 //============================================================================
327 // Return the tag of the event (ie the anti-flavour of the produced
328 // B meson). Flip the flavour of the event with probB probability
329 //============================================================================
330 void EvtCPUtil::OtherIncoherentB( EvtParticle* p, double& t, EvtId& otherb,
331  double probB )
332 {
333  //std::cout<<"New routine running"<<endl;
334  //if(p->getId() == B0 || p->getId() == B0B)
335  //added by liming Zhang
336  enableFlip();
337  if ( ( isB0Mixed( p ) ) || ( isBsMixed( p ) ) ) {
338  p->getParent()->setLifetime();
339  t = p->getParent()->getLifetime();
340  } else {
341  p->setLifetime();
342  t = p->getLifetime();
343  }
344 
345  if ( flipIsEnabled() ) {
346  //std::cout << " liming << flipIsEnabled " << std::endl;
347  // Flip the flavour of the particle with probability probB
348  bool isFlipped = ( EvtRandom::Flat( 0., 1. ) < probB );
349 
350  if ( isFlipped ) {
351  if ( ( isB0Mixed( p ) ) || ( isBsMixed( p ) ) ) {
352  p->getParent()->setId(
353  EvtPDL::chargeConj( p->getParent()->getId() ) );
354  p->setId( EvtPDL::chargeConj( p->getId() ) );
355  } else {
356  p->setId( EvtPDL::chargeConj( p->getId() ) );
357  }
358  }
359  }
360 
361  if ( ( isB0Mixed( p ) ) || ( isBsMixed( p ) ) ) {
362  // if B has mixed, tag flavour is charge conjugate of parent of B-meson
363  otherb = EvtPDL::chargeConj( p->getParent()->getId() );
364  } else {
365  // else it is opposite flavour than this B hadron
366  otherb = EvtPDL::chargeConj( p->getId() );
367  }
368 
369  return;
370 }
371 //============================================================================
372 void EvtCPUtil::OtherB( EvtParticle* p, double& t, EvtId& otherb )
373 {
374  static EvtId BSB = EvtPDL::getId( "anti-B_s0" );
375  static EvtId BS0 = EvtPDL::getId( "B_s0" );
376  static EvtId B0B = EvtPDL::getId( "anti-B0" );
377  static EvtId B0 = EvtPDL::getId( "B0" );
378  static EvtId D0B = EvtPDL::getId( "anti-D0" );
379  static EvtId D0 = EvtPDL::getId( "D0" );
380  static EvtId UPS4 = EvtPDL::getId( "Upsilon(4S)" );
381 
382  if ( p->getId() == BS0 || p->getId() == BSB ) {
383  static double ctauL = EvtPDL::getctau( EvtPDL::getId( "B_s0L" ) );
384  static double ctauH = EvtPDL::getctau( EvtPDL::getId( "B_s0H" ) );
385  static double ctau = ctauL < ctauH ? ctauH : ctauL;
386  t = -log( EvtRandom::Flat() ) * ctau;
387  EvtParticle* parent = p->getParent();
388  if ( parent != 0 && ( parent->getId() == BS0 || parent->getId() == BSB ) ) {
389  if ( parent->getId() == BS0 )
390  otherb = BSB;
391  if ( parent->getId() == BSB )
392  otherb = BS0;
393  parent->setLifetime( t );
394  return;
395  }
396  if ( p->getId() == BS0 )
397  otherb = BSB;
398  if ( p->getId() == BSB )
399  otherb = BS0;
400  p->setLifetime( t );
401  return;
402  }
403 
404  if ( p->getId() == D0 || p->getId() == D0B ) {
405  static double ctauL = EvtPDL::getctau( EvtPDL::getId( "D0L" ) );
406  static double ctauH = EvtPDL::getctau( EvtPDL::getId( "D0H" ) );
407  static double ctau = ctauL < ctauH ? ctauH : ctauL;
408  t = -log( EvtRandom::Flat() ) * ctau;
409  EvtParticle* parent = p->getParent();
410  if ( parent != 0 && ( parent->getId() == D0 || parent->getId() == D0B ) ) {
411  if ( parent->getId() == D0 )
412  otherb = D0B;
413  if ( parent->getId() == D0B )
414  otherb = D0;
415  parent->setLifetime( t );
416  return;
417  }
418  if ( p->getId() == D0 )
419  otherb = D0B;
420  if ( p->getId() == D0B )
421  otherb = D0;
422  p->setLifetime( t );
423  return;
424  }
425 
426  p->setLifetime();
427 
428  // now get the time between the decay of this B and the other B!
429 
430  EvtParticle* parent = p->getParent();
431 
432  if ( parent == 0 || parent->getId() != UPS4 ) {
433  //EvtGenReport(EVTGEN_ERROR,"EvtGen") <<
434  // "Warning CP violation with B having no parent!"<<endl;
435  t = p->getLifetime();
436  if ( p->getId() == B0 )
437  otherb = B0B;
438  if ( p->getId() == B0B )
439  otherb = B0;
440  if ( p->getId() == BS0 )
441  otherb = BSB;
442  if ( p->getId() == BSB )
443  otherb = BS0;
444  return;
445  } else {
446  if ( parent->getDaug( 0 ) != p ) {
447  otherb = parent->getDaug( 0 )->getId();
448  parent->getDaug( 0 )->setLifetime();
449  t = p->getLifetime() - parent->getDaug( 0 )->getLifetime();
450  } else {
451  otherb = parent->getDaug( 1 )->getId();
452  parent->getDaug( 1 )->setLifetime();
453  t = p->getLifetime() - parent->getDaug( 1 )->getLifetime();
454  }
455  }
456 
457  return;
458 }
459 
460 // No CP violation is assumed
461 void EvtCPUtil::incoherentMix( const EvtId id, double& t, int& mix )
462 {
463  int stdHepNum = EvtPDL::getStdHep( id );
464  stdHepNum = abs( stdHepNum );
465 
466  EvtId partId = EvtPDL::evtIdFromStdHep( stdHepNum );
467 
468  std::string partName = EvtPDL::name( partId );
469  std::string hname = partName + std::string( "H" );
470  std::string lname = partName + std::string( "L" );
471 
472  EvtId lId = EvtPDL::getId( lname );
473  EvtId hId = EvtPDL::getId( hname );
474 
475  double ctauL = EvtPDL::getctau( lId );
476  double ctauH = EvtPDL::getctau( hId );
477 
478  // Bug Fixed: Corrected the average as gamma is the relevent parameter
479  double ctau = 2.0 * ( ctauL * ctauH ) / ( ctauL + ctauH );
480  //double ctau=0.5*(ctauL+ctauH);
481 
482  // Bug Fixed: ctau definition changed above
483  //double y=(ctauH-ctauL)/(2*ctau);
484  double y = ( ctauH - ctauL ) / ( ctauH + ctauL );
485 
486  //deltam and qoverp defined in DECAY.DEC
487 
488  std::string qoverpParmName = std::string( "qoverp_incohMix_" ) + partName;
489  std::string mdParmName = std::string( "dm_incohMix_" ) + partName;
490  int ierr;
491  double qoverp = atof( EvtSymTable::get( qoverpParmName, ierr ).c_str() );
492  double x = atof( EvtSymTable::get( mdParmName, ierr ).c_str() ) * ctau /
493  EvtConst::c;
494  double fac;
495 
496  if ( id == partId ) {
497  fac = 1.0 / ( qoverp * qoverp );
498  } else {
499  fac = qoverp * qoverp;
500  }
501 
502  double mixprob = ( x * x + y * y ) /
503  ( x * x + y * y + fac * ( 2.0 + x * x - y * y ) );
504 
505  int mixsign;
506 
507  mixsign = ( mixprob > EvtRandom::Flat( 0.0, 1.0 ) ) ? -1 : 1;
508 
509  double prob;
510 
511  // Find the longest of the two lifetimes
512  double ctaulong = ctauL <= ctauH ? ctauH : ctauL;
513 
514  // Bug fixed: Ensure cosine argument is dimensionless so /ctau
515  do {
516  t = -log( EvtRandom::Flat() ) * ctaulong;
517  prob = 1.0 + exp( -2.0 * fabs( y ) * t / ctau ) +
518  mixsign * 2.0 * exp( -fabs( y ) * t / ctau ) * cos( x * t / ctau );
519  } while ( prob < 4.0 * EvtRandom::Flat() );
520 
521  mix = 0;
522 
523  if ( mixsign == -1 )
524  mix = 1;
525 
526  return;
527 }
528 
529 double EvtCPUtil::getDeltaGamma( const EvtId id )
530 {
531  int stdHepNum = EvtPDL::getStdHep( id );
532  stdHepNum = abs( stdHepNum );
533  EvtId partId = EvtPDL::evtIdFromStdHep( stdHepNum );
534 
535  std::string partName = EvtPDL::name( partId );
536  std::string hname = partName + std::string( "H" );
537  std::string lname = partName + std::string( "L" );
538 
539  EvtId lId = EvtPDL::getId( lname );
540  EvtId hId = EvtPDL::getId( hname );
541 
542  double ctauL = EvtPDL::getctau( lId );
543  double ctauH = EvtPDL::getctau( hId );
544 
545  double dGamma = ( 1 / ctauL - 1 / ctauH ) * EvtConst::c;
546  return dGamma;
547 }
548 
549 double EvtCPUtil::getDeltaM( const EvtId id )
550 {
551  int stdHepNum = EvtPDL::getStdHep( id );
552  stdHepNum = abs( stdHepNum );
553  EvtId partId = EvtPDL::evtIdFromStdHep( stdHepNum );
554 
555  std::string partName = EvtPDL::name( partId );
556  std::string parmName = std::string( "dm_incohMix_" ) + partName;
557 
558  int ierr;
559  double dM = atof( EvtSymTable::get( parmName, ierr ).c_str() );
560  return dM;
561 }
562 
564 {
565  return _enableFlip;
566 }
568 {
569  _enableFlip = true;
570 }
572 {
573  _enableFlip = false;
574 }
bool isB0Mixed(EvtParticle *)
Definition: EvtCPUtil.cpp:310
const char * c_str(Index i)
Definition: EvtCyclic3.cpp:323
void disableFlip()
Definition: EvtCPUtil.cpp:571
static std::string name(EvtId i)
Definition: EvtPDL.cpp:382
void OtherCoherentB(EvtParticle *p, double &t, EvtId &otherb, double probB0)
Definition: EvtCPUtil.cpp:153
EvtParticle * getParent() const
Definition: EvtParticle.cpp:96
void fractB0nonCP(EvtComplex Af, EvtComplex Abarf, EvtComplex Afbar, EvtComplex Abarfbar, double deltam, double beta, int flip, double &fract)
Definition: EvtCPUtil.cpp:85
bool _enableFlip
Definition: EvtCPUtil.hh:80
bool isBsMixed(EvtParticle *)
Definition: EvtCPUtil.cpp:292
void OtherIncoherentB(EvtParticle *p, double &t, EvtId &otherb, double probB0)
Definition: EvtCPUtil.cpp:330
std::ostream & EvtGenReport(EvtGenSeverity severity, const char *facility=0)
Definition: EvtReport.cpp:33
double getDeltaGamma(const EvtId id)
Definition: EvtCPUtil.cpp:529
void insertDaugPtr(int idaug, EvtParticle *partptr)
Definition: EvtParticle.hh:220
static double getctau(EvtId i)
Definition: EvtPDL.cpp:357
bool flipIsEnabled()
Definition: EvtCPUtil.cpp:563
EvtId getId() const
void OtherB(EvtParticle *p, double &t, EvtId &otherb)
Definition: EvtCPUtil.cpp:372
static std::string get(const std::string &name, int &ierr)
Definition: EvtSymTable.cpp:55
void setLifetime(double tau)
Definition: EvtId.hh:27
void fractB0CP(EvtComplex Af, EvtComplex Abarf, double deltam, double beta, double &fract)
Definition: EvtCPUtil.cpp:57
void incoherentMix(const EvtId id, double &t, int &mix)
Definition: EvtCPUtil.cpp:461
void setId(EvtId id)
Definition: EvtParticle.hh:385
static double Flat()
Definition: EvtRandom.cpp:72
static const double c
Definition: EvtConst.hh:30
double abs(const EvtComplex &c)
Definition: EvtComplex.hh:201
static EvtId evtIdFromStdHep(int stdhep)
Definition: EvtPDL.cpp:246
static EvtId getId(const std::string &name)
Definition: EvtPDL.cpp:287
double imag(const EvtComplex &c)
Definition: EvtComplex.hh:235
void init(EvtId part_n, double e, double px, double py, double pz)
EvtComplex exp(const EvtComplex &c)
Definition: EvtComplex.hh:240
static EvtCPUtil * getInstance()
Definition: EvtCPUtil.cpp:43
double getLifetime()
EvtParticle * getDaug(int i)
Definition: EvtParticle.cpp:91
EvtCPUtil(int mixingType)
Definition: EvtCPUtil.cpp:37
double getDeltaM(const EvtId id)
Definition: EvtCPUtil.cpp:549
void enableFlip()
Definition: EvtCPUtil.cpp:567
int _mixingType
Definition: EvtCPUtil.hh:81
static EvtId chargeConj(EvtId id)
Definition: EvtPDL.cpp:207
double real(const EvtComplex &c)
Definition: EvtComplex.hh:230
static int getStdHep(EvtId id)
Definition: EvtPDL.cpp:362
Index other(Index i, Index j)
Definition: EvtCyclic3.cpp:156