Belle II Software  release-05-01-25
EvtPHSPBMix.cc
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) 2002 INFN-Pisa
10 //
11 // Module: EvtPHSPBMix.cc
12 //
13 // Description:
14 // Routine to decay vector-> particle particle with B0 mixing, coherent B0B0-like mixing if any.
15 // EvtPHSPBBMix: handle states with two neutral B
16 // EvtPHSPBMix : handles states with only one neutral B
17 // Phase-space kinematics, CP conservation, deltaGamma=0, p/q=1
18 //
19 // Based on EvtVSSBMixCPT
20 //
21 // Modification history:
22 //
23 // R. Louvot, EPFL, 2010/03/09 Module created
24 // C. MacQueen, 2016/10/03 Adapted to Belle II
25 //
26 //------------------------------------------------------------------------
27 //
28 #include <cmath>
29 #include <stdlib.h>
30 #include "EvtGenBase/EvtConst.hh"
31 #include "EvtGenBase/EvtParticle.hh"
32 #include "EvtGenBase/EvtPDL.hh"
33 #include "EvtGenBase/EvtReport.hh"
34 #include "EvtGenBase/EvtVector4C.hh"
35 #include "generators/evtgen/models/EvtPHSPBMix.h"
36 #include <generators/evtgen/EvtGenModelRegister.h>
37 #include "EvtGenBase/EvtId.hh"
38 #include <string>
39 #include <sstream>
40 #include "EvtGenBase/EvtRandom.hh"
41 
42 using std::endl;
43 
45 
46 
48 
49 std::string EvtPHSPBBMix::getName()
50 {
51  return "PHSP_BB_MIX";
52 }
53 
54 
55 EvtDecayBase* EvtPHSPBBMix::clone()
56 {
57  return new EvtPHSPBBMix;
58 }
59 
61 {
62  // check that there we are provided exactly one parameter
63  //One arg: Delta m
64  const unsigned short int narg(2);
65  if (getNArg() != narg) {
66  EvtGenReport(EVTGEN_ERROR, "EvtGen") << "EvtPHSPBBMix generator expected "
67  << " " << narg
68  << "argument(s) (deltam, C=-1, +1 or 0 (incoherent)) but found:"
69  << getNArg() << endl;
70  EvtGenReport(EVTGEN_ERROR, "EvtGen") << "Will terminate execution!" << endl;
71  ::abort();
72  }
73 
74 
75  //report(DEBUG,"EvtGen") << "EvtPHSPBBMIX::init point (2)"<<std::endl;
76  //usage: mixing P0-P0b : 2 arg. -> P0 P0b PHSP_BB_MIX dm -1;
77  // : mixing P0*-P0b + cc : 4 arg. -> P0* P0b P0*b P0 PHSP_BB_MIX dm +1;
78  // : mixing P0-P0b pi : 3 arg. -> P0 P0b pi0 PHSP_BB_MIX dm -1;
79  // : mixing P0*-P0b pi : 5 arg. -> P0* P0b pi0 P0*b P0 PHSP_BB_MIX dm +1;
80  // : mixing P0-P0b pi pi : 4 arg. -> P0 P0b pi pi PHSP_BB_MIX dm -1;
81 
82  if (getNDaug() < 2 || getNDaug() > 5) {
83  EvtGenReport(EVTGEN_ERROR, "EvtGen") << "PHSP_BB_MIX n daughters not ok :"
84  << getNDaug() << endl;
85  EvtGenReport(EVTGEN_ERROR, "EvtGen") << "Will terminate execution!" << endl;
86  ::abort();
87  }
88  // checkNDaug(2,3,4,5,6);
89  // report(DEBUG,"EvtGen") << "EvtPHSPBBMIX::init point (3)"<<std::endl;
90 
91 
92 
93  _BBpipi = false;
94 
95  if (getNDaug() == 4 && (EvtPDL::chargeConj(getDaug(0)) == getDaug(1)))
96  _BBpipi = true;
97 
98 
99  if (!_BBpipi && getNDaug() > 3) {
100  if (!(EvtPDL::chargeConj(getDaug(0)) == getDaug(getNDaug() - 2) && EvtPDL::chargeConj(getDaug(1)) == getDaug(getNDaug() - 1))) {
101  EvtGenReport(EVTGEN_ERROR, "EvtGen") << "EvtPHSPBBMix generator expected daughters "
102  << "to be charge conjugate." << endl
103  << " Found " << EvtPDL::name(getDaug(0)).c_str()
104  << "," << EvtPDL::name(getDaug(1)).c_str()
105  << "," << EvtPDL::name(getDaug(2)).c_str()
106  << " and "
107  << EvtPDL::name(getDaug(3)).c_str() << endl;
108  EvtGenReport(EVTGEN_ERROR, "EvtGen") << "Will terminate execution!" << endl;
109  ::abort();
110  }
111  } else {
112 
113  if (!(EvtPDL::chargeConj(getDaug(0)) == getDaug(1))) {
114  EvtGenReport(EVTGEN_ERROR, "EvtGen") << "EvtPHSPBBMix generator expected daughters "
115  << "to be charge conjugate." << endl
116  << " Found " << EvtPDL::name(getDaug(0)).c_str()
117  << " and "
118  << EvtPDL::name(getDaug(1)).c_str() << endl;
119  EvtGenReport(EVTGEN_ERROR, "EvtGen") << "Will terminate execution!" << endl;
120  ::abort();
121  }
122 
123  }
124  //report(DEBUG,"EvtGen") << "EvtPHSPBBMIX::init point (4)"<<std::endl;
125  // check that we are asked to decay a vector particle into a pair
126  // of scalar particles
127 
128  // checkSpinParent(EvtSpinType::VECTOR);
129 
130  // checkSpinDaughter(0,EvtSpinType::SCALAR);
131  // checkSpinDaughter(1,EvtSpinType::SCALAR);
132 
133  // check that our daughter particles are charge conjugates of each other
134 
135 
136  // check that both daughter particles have the same lifetime
137  if (EvtPDL::getctau(getDaug(0)) != EvtPDL::getctau(getDaug(1))) {
138  EvtGenReport(EVTGEN_ERROR, "EvtGen") << "EvtPHSPBBMix generator expected daughters "
139  << "to have the same lifetime." << endl
140  << " Found ctau = "
141  << EvtPDL::getctau(getDaug(0)) << " mm and "
142  << EvtPDL::getctau(getDaug(1)) << " mm" << endl;
143  EvtGenReport(EVTGEN_ERROR, "EvtGen") << "Will terminate execution!" << endl;
144  ::abort();
145  }
146  // precompute quantities that will be used to generate events
147  // and print out a summary of parameters for this decay
148  //report(DEBUG,"EvtGen") << "EvtPHSPBBMIX::init point (5)"<<std::endl;
149 
150  // mixing frequency in hbar/mm
151  _freq = getArg(0) / EvtConst::c;
152 
153  _C = getArg(1);
154 
155  // deltaG
156  //double gamma= 1/EvtPDL::getctau(getDaug(0)); // gamma/c (1/mm)
157  // q/p
158  // decay amplitudes
159  // CPT violation in mixing
160  // some printout
161  double tau = 1e12 * EvtPDL::getctau(getDaug(0)) / EvtConst::c; // in ps
162  double dm = 1e-12 * getArg(0); // B0/anti-B0 mass difference in hbar/ps
163  double x = dm * tau;
164 
165  //report(DEBUG,"EvtGen") << "EvtPHSPBBMIX::init point (6)"<<std::endl;
166 
167 
168  std::ostringstream sss;
169  sss << " " << EvtPDL::name(getParentId()).c_str() << " --> "
170  << EvtPDL::name(getDaug(0)).c_str() << " + "
171  << EvtPDL::name(getDaug(1)).c_str();
172  switch (getNDaug()) {
173  case 3:
174  case 5:
175  sss << " + " << EvtPDL::name(getDaug(2)).c_str();
176  break;
177  case 4:
178  if (_BBpipi)
179  sss << " + " << EvtPDL::name(getDaug(2)).c_str() << " + " << EvtPDL::name(getDaug(3)).c_str();
180  break;
181  default: ;
182  }
183  EvtGenReport(EVTGEN_INFO, "EvtGen") << "PHSP_BB_MIX will generate mixing :"
184  << endl << endl
185  << sss.str() << endl << endl
186  << "using parameters:" << endl << endl
187  << " delta(m) = " << dm << " hbar/ps" << endl
188  << " C (B0-B0b) = " << _C << endl
189  << " _freq = " << _freq << " hbar/mm" << endl
190  << " dgog = " << 0 << endl
191  << " dGamma = " << 0 << " hbar/mm" << endl
192  << " q/p = " << 1 << endl
193  << " tau = " << tau << " ps" << endl
194  << " x = " << x << endl
195  << endl;
196 
197 
198 
199 
200 
201 }
202 
204 {
205  if (getNDaug() > 3) {
206  if (_BBpipi)
207  return 4;
208  else
209  return getNDaug() - 2;
210  }
211  //else
212  return getNDaug();
213 
214 
215 }
216 
217 
219 {
220  // this value is ok for reasonable values of all the parameters
221  setProbMax(4.0);
222  //noProbMax();
223 }
224 
225 void EvtPHSPBBMix::prlp(int i) const
226 {
227  EvtGenReport(EVTGEN_INFO, "EvtGen") << "decay p" << i << endl;
228 }
229 
230 void EvtPHSPBBMix::decay(EvtParticle* p)
231 {
232  //p->initializePhaseSpace(getNDaug(),getDaugs());
233  //return;
234 
235  bool pr(false);
236  if (pr) prlp(1);
237 
238  static const EvtId B0(EvtPDL::getId("B0"));
239  static const EvtId B0B(EvtPDL::getId("anti-B0"));
240 
241  // generate a final state according to phase space
242 
243  // const bool ADaug(getNDaug()==4);//true if aliased Daugthers
244  if (pr) prlp(102);
245 
246  const bool NCC(getNDaug() >= 4 && !_BBpipi); //true if daughters not charged-conjugated
247  // const bool BBpi(getNDaug()==
248  if (pr) prlp(103);
249  if (NCC) {
250  if (pr) prlp(2);
251  std::vector<EvtId> tempDaug(getNDaug() - 2);
252  tempDaug[0] = getDaug(0);
253  tempDaug[1] = getDaug(1);
254  if (getNDaug() == 5)
255  tempDaug[2] = getDaug(2);
256 
257  p->initializePhaseSpace(getNDaug() - 2, tempDaug.data());
258 
259  if (pr) prlp(222);
260  } else { //nominal case.
261  p->initializePhaseSpace(getNDaug(), getDaugs());
262 
263  }
264  if (pr) prlp(3);
265  EvtParticle* s1, *s2;
266 
267  s1 = p->getDaug(0);
268  s2 = p->getDaug(1);
269  //delete any daughters - if there are daughters, they
270  //are from the initialization and will be redone later
271  if (s1->getNDaug() > 0) { s1->deleteDaughters();}
272  if (s2->getNDaug() > 0) { s2->deleteDaughters();}
273 
274  EvtVector4R p1 = s1->getP4();
275  EvtVector4R p2 = s2->getP4();
276 
277  // throw 2 random numbers to decide whether B1 and B2 are B0 or B0B
278  const EvtId B1(EvtRandom::random() > 0.5 ? B0 : B0B);
279  const EvtId B2(EvtRandom::random() > 0.5 ? B0 : B0B);
280  if (pr) prlp(5);
281 
282  if (NCC)
283 
284  {
285  if (getNDaug() == 4) {
286  s1->init(B1 == B0 ? getDaug(0) : getDaug(2), p1);
287  s2->init(B2 == B0 ? getDaug(3) : getDaug(1), p2);
288  }
289  if (getNDaug() == 5) {
290  s1->init(B1 == B0 ? getDaug(0) : getDaug(3), p1);
291  s2->init(B2 == B0 ? getDaug(4) : getDaug(1), p2);
292  }
293  } else {
294  s1->init(B1 == B0 ? getDaug(0) : getDaug(1), p1);
295  s2->init(B2 == B0 ? getDaug(0) : getDaug(1), p2);
296  }
297 
298  if (pr) prlp(6);
299 
300  // choose a decay time for each final state particle using the
301  // lifetime (which must be the same for both particles) in pdt.table
302  // and calculate the lifetime difference for this event
303  s1->setLifetime();
304  s2->setLifetime();
305 
306  const double t1(s1->getLifetime());
307  const double t2(s2->getLifetime());
308 
309  // calculate the oscillation amplitude, based on whether this event is mixed or not
310  EvtComplex osc_amp(Amplitude(t1, t2, B1 == B0, B2 == B0)); //Amplitude return <B0(B)B0(B)|B1B2>
311  if (pr) prlp(8);
312 
313 
314  // store the amplitudes for each parent spin basis state
315  double norm = 1.0 / p1.d3mag();
316  if (pr) prlp(9);
317  vertex(0, norm * osc_amp * p1 * (p->eps(0)));
318  vertex(1, norm * osc_amp * p1 * (p->eps(1)));
319  vertex(2, norm * osc_amp * p1 * (p->eps(2)));
320  if (pr) prlp(10);
321  return ;
322 }
323 
324 EvtComplex EvtPHSPBBMix::Amplitude(const double& t1, const double& t2, bool B1_is_B0, bool B2_is_B0) const
325 {
326  if (_C != 0 && _C != -1 && _C != 1)
327  return EvtComplex(0., 0.);
328 
329  const double f(_freq);
330  if (B1_is_B0 && !B2_is_B0) {
331  if (_C == 0)
332  return EvtComplex(cos(f * t1 / 2.) * cos(f * t2 / 2.), 0.);
333  else
334  return EvtComplex(cos(f * (t2 + _C * t1) / 2.) / sqrt(2.), 0.);
335  }
336  if (!B1_is_B0 && B2_is_B0) {
337  if (_C == 0)
338  return EvtComplex(-sin(f * t1 / 2.) * sin(f * t2 / 2.), 0.);
339  else
340  return EvtComplex(cos(f * (t2 + _C * t1) / 2.) * _C / sqrt(2.), 0.);
341  }
342  if (B1_is_B0 && B2_is_B0) {
343  if (_C == 0)
344  return EvtComplex(0., -cos(f * t1 / 2.) * sin(f * t2 / 2.));
345  else
346  return EvtComplex(0., -sin(f * (t2 + _C * t1) / 2.) / sqrt(2.));
347  }
348  if (!B1_is_B0 && !B2_is_B0) {
349  if (_C == 0)
350  return EvtComplex(0., -sin(f * t1 / 2.) * cos(f * t2 / 2.));
351  else
352  return EvtComplex(0., -sin(f * (t2 + _C * t1) / 2.) * _C / sqrt(2.));
353  }
354  // no way to reach this but compiler complains without a return statement
355  return EvtComplex(0., 0.);
356 }
357 
358 
361 
362 
364 
365 
367 
368 std::string EvtPHSPBMix::getName()
369 {
370  return "PHSP_B_MIX";
371 }
372 
373 
374 EvtDecayBase* EvtPHSPBMix::clone()
375 {
376  return new EvtPHSPBMix;
377 }
378 
380 {
381  // check that there we are provided exactly one parameter
382  //One arg: Delta m
383  const unsigned short int narg(1);
384  if (getNArg() != narg) {
385  EvtGenReport(EVTGEN_ERROR, "EvtGen") << "EvtPHSPBMix generator expected "
386  << " " << narg
387  << " argument(s) (delta m) but found:"
388  << getNArg() << endl;
389  EvtGenReport(EVTGEN_ERROR, "EvtGen") << "Will terminate execution!" << endl;
390  ::abort();
391  }
392 
393 
394  //report(DEBUG,"EvtGen") << "EvtPHSPBMIX::init point (2)"<<std::endl;
395  //usage: mixing P0 P- pi+ : 4 arg. -> P0 P- pi+ P0b PHSP_B_MIX dm;
396  // : mixing P0 P- pi+ pi : 5 arg. -> P0 P- pi+ pi0 P0b PHSP_B_MIX dm;
397 
398 
399  checkNDaug(4, 5);
400  // report(DEBUG,"EvtGen") << "EvtPHSPBMIX::init point (3)"<<std::endl;
401 
402  bool BBpipi(getNDaug() == 5);
403 
404  if (!(EvtPDL::chargeConj(getDaug(0)) == getDaug(getNDaug() - 1))) {
405  EvtGenReport(EVTGEN_ERROR, "EvtGen") << "EvtPHSPBMix generator expected two first particles "
406  << "to be charge conjugate." << endl
407  << " Found " << EvtPDL::name(getDaug(0)).c_str()
408  << "," << EvtPDL::name(getDaug(getNDaug() - 1)).c_str() << endl;
409  EvtGenReport(EVTGEN_ERROR, "EvtGen") << "Will terminate execution!" << endl;
410  ::abort();
411  }
412  //parameters for mixing of particle1
413 
414  _freq = getArg(0) / EvtConst::c;
415 
416  //double gamma= 1/EvtPDL::getctau(getDaug(0)); // gamma/c (1/mm)
417 
418  double tau = 1e12 * EvtPDL::getctau(getDaug(0)) / EvtConst::c; // in ps
419  double dm = 1e-12 * getArg(0); // B0/anti-B0 mass difference in hbar/ps
420  double x = dm * tau;
421 
422  std::ostringstream sss;
423  sss << " " << EvtPDL::name(getParentId()).c_str() << " --> "
424  << EvtPDL::name(getDaug(0)).c_str() << " + "
425  << EvtPDL::name(getDaug(1)).c_str();
426  sss << " + " << EvtPDL::name(getDaug(2)).c_str();
427  if (BBpipi)
428  sss << " + " << EvtPDL::name(getDaug(3)).c_str();
429 
430  EvtGenReport(EVTGEN_INFO, "EvtGen") << "PHSP_B_MIX will generate mixing :"
431  << endl << endl
432  << sss.str() << endl << endl
433  << "using parameters:" << endl << endl
434  << " delta(m) = " << dm << " hbar/ps" << endl
435  << " _freq = " << _freq << " hbar/mm" << endl
436  << " dgog = " << 0 << endl
437  << " dGamma = " << 0 << " hbar/mm" << endl
438  << " q/p = " << 1 << endl
439  << " tau = " << tau << " ps" << endl
440  << " x = " << x << endl
441  << endl;
442 
443 }
444 
446 {
447  return getNDaug() - 1;
448 }
449 
451 {
452  // this value is ok for reasonable values of all the parameters
453  setProbMax(4.0);
454  //noProbMax();
455 }
456 
457 void EvtPHSPBMix::decay(EvtParticle* p)
458 {
459 
460  bool pr(false);//prompt
461  // generate a final state according to phase space
462 
463  // const bool BBpipi(getNDaug()!=4);//true if BBpipi, if not BBpi
464  if (pr) std::cout << "decay B_MIX (0)" << std::endl;
465  std::vector<EvtId> tempDaug(getNDaug() - 1);
466  tempDaug[0] = getDaug(0);
467  tempDaug[1] = getDaug(1);
468  tempDaug[2] = getDaug(2);
469  if (getNDaug() == 5)
470  tempDaug[3] = getDaug(3);
471 
472  if (pr) std::cout << "decay B_MIX (1)" << std::endl;
473 
474 
475  p->initializePhaseSpace(getNDaug() - 1, tempDaug.data());
476 
477  EvtParticle* s1;
478 
479  s1 = p->getDaug(0);
480 
481  //delete any daughters - if there are daughters, they
482  //are from the initialization and will be redone later
483  if (s1->getNDaug() > 0) { s1->deleteDaughters();}
484 
485  EvtVector4R p1 = s1->getP4();
486 
487  // throw 1 random numbers to decide whether B1 is B0 or B0B
488  const bool changed_flavor(EvtRandom::random() > 0.5); //Daug(0) becomes Daug(1)
489  if (pr) std::cout << "decay B_MIX (3)" << std::endl;
490  s1->init(changed_flavor ? getDaug(getNDaug() - 1) : getDaug(0), p1);
491 
492  // choose a decay time for each final state particle using the
493  // lifetime (which must be the same for both particles) in pdt.table
494  // and calculate the lifetime difference for this event
495  s1->setLifetime();
496  if (pr) std::cout << "decay B_MIX (4)" << std::endl;
497  const double t1(s1->getLifetime());
498 
499  // calculate the oscillation amplitude, based on whether this event is mixed or not
500  EvtComplex osc_amp(changed_flavor ? EvtComplex(0,
501  -sin(_freq * t1 / 2.)) : EvtComplex(cos(_freq * t1 / 2.))); //Amplitude return <B0(B)|B1>
502  if (pr) std::cout << "decay B_MIX (5)" << std::endl;
503  // store the amplitudes for each parent spin basis state
504  double norm = 1.0 / p1.d3mag();
505  if (pr) std::cout << "decay B_MIX (6)" << std::endl;
506  vertex(0, norm * osc_amp * p1 * (p->eps(0)));
507  vertex(1, norm * osc_amp * p1 * (p->eps(1)));
508  vertex(2, norm * osc_amp * p1 * (p->eps(2)));
509  if (pr) std::cout << "decay B_MIX (7)" << std::endl;
510  return ;
511 }
512 
513 
514 
EvtPHSPBMix
The class provides routine to decay vector-> particle particle with B0 mixing, handles states with on...
Definition: EvtPHSPBMix.h:85
EvtPHSPBBMix::decay
void decay(EvtParticle *p)
Decay function.
Definition: EvtPHSPBMix.cc:230
EvtPHSPBBMix::getName
std::string getName()
Get function Name
Definition: EvtPHSPBMix.cc:49
EvtPHSPBBMix::_C
double _C
C eigenvalue, 0= incoherent.
Definition: EvtPHSPBMix.h:76
EvtPHSPBBMix::Amplitude
EvtComplex Amplitude(const double &t1, const double &t2, bool B1_is_B0, bool B2_is_B0) const
Calculate amplitude.
Definition: EvtPHSPBMix.cc:324
EvtPHSPBBMix
The class provides routine to decay vector-> particle particle with B0 mixing, coherent B0B0-like mix...
Definition: EvtPHSPBMix.h:36
EvtPHSPBBMix::clone
EvtDecayBase * clone()
Clone the decay
Definition: EvtPHSPBMix.cc:55
EvtPHSPBMix::getName
std::string getName()
Get function Name
Definition: EvtPHSPBMix.cc:368
EvtPHSPBBMix::_BBpipi
bool _BBpipi
Is BBpipi?
Definition: EvtPHSPBMix.h:79
EvtPHSPBBMix::_freq
double _freq
mixing frequency in hbar/mm
Definition: EvtPHSPBMix.h:73
EvtPHSPBBMix::nRealDaughters
int nRealDaughters()
Number of real daughters.
Definition: EvtPHSPBMix.cc:203
B2_EVTGEN_REGISTER_MODEL
#define B2_EVTGEN_REGISTER_MODEL(classname)
Class to register B2_EVTGEN_REGISTER_MODEL.
Definition: EvtGenModelRegister.h:77
EvtPHSPBMix::nRealDaughters
int nRealDaughters()
Number of real daughters.
Definition: EvtPHSPBMix.cc:445
EvtPHSPBMix::decay
void decay(EvtParticle *p)
Decay function.
Definition: EvtPHSPBMix.cc:457
EvtPHSPBMix::EvtPHSPBMix
EvtPHSPBMix()
Default constructor.
Definition: EvtPHSPBMix.h:90
EvtPHSPBBMix::prlp
void prlp(int) const
Number of real daughters.
Definition: EvtPHSPBMix.cc:225
EvtPHSPBBMix::~EvtPHSPBBMix
virtual ~EvtPHSPBBMix()
Default destructor.
Definition: EvtPHSPBMix.cc:47
EvtPHSPBBMix::initProbMax
void initProbMax()
Init maximal prob.
Definition: EvtPHSPBMix.cc:218
EvtPHSPBMix::init
void init()
Init function.
Definition: EvtPHSPBMix.cc:379
EvtPHSPBBMix::init
void init()
Init function.
Definition: EvtPHSPBMix.cc:60
EvtPHSPBMix::~EvtPHSPBMix
virtual ~EvtPHSPBMix()
Default destructor.
Definition: EvtPHSPBMix.cc:366
EvtPHSPBMix::initProbMax
void initProbMax()
Init maximal prob.
Definition: EvtPHSPBMix.cc:450
EvtPHSPBBMix::EvtPHSPBBMix
EvtPHSPBBMix()
Default constructor.
Definition: EvtPHSPBMix.h:41
EvtPHSPBMix::clone
EvtDecayBase * clone()
Clone the decay
Definition: EvtPHSPBMix.cc:374
EvtPHSPBMix::_freq
double _freq
mixing frequency in hbar/mm
Definition: EvtPHSPBMix.h:116