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.
EvtDDalitz.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 
23 #include "EvtGenBase/EvtConst.hh"
25 #include "EvtGenBase/EvtFlatte.hh"
26 #include "EvtGenBase/EvtGenKine.hh"
27 #include "EvtGenBase/EvtPDL.hh"
29 #include "EvtGenBase/EvtPatches.hh"
30 #include "EvtGenBase/EvtReport.hh"
33 
34 #include <algorithm>
35 #include <stdlib.h>
36 #include <string>
37 #include <utility>
38 #include <vector>
39 
40 using std::endl;
41 
42 std::string EvtDDalitz::getName()
43 {
44  return "D_DALITZ";
45 }
46 
48 {
49  return new EvtDDalitz;
50 }
51 
52 bool isNeutralKaon( const EvtId& theId )
53 {
54  // See if the particle id matches that for a neutral kaon
55  bool result( false );
56 
57  static EvtId K0 = EvtPDL::getId( "K0" );
58  static EvtId KB = EvtPDL::getId( "anti-K0" );
59  static EvtId KL = EvtPDL::getId( "K_L0" );
60  static EvtId KS = EvtPDL::getId( "K_S0" );
61 
62  // Compare EvtId integers, which are unique for each particle type,
63  // corresponding to the order particles appear in the "evt.pdl" table.
64  // Aliased particles will have the same ids (but different "alias" values)
65  if ( theId == KB || theId == K0 || theId == KL || theId == KS ) {
66  result = true;
67  }
68 
69  return result;
70 }
71 
72 bool compareIds( const std::pair<EvtId, int>& left,
73  const std::pair<EvtId, int>& right )
74 {
75  // Compare id numbers to achieve the ordering KB/K0/KS/KL, KM, PIM, PI0, PIP, KP, i.e.
76  // neutral kaon first, then normal PDG id ordering for the other particles.
77 
78  // The current 12 decay modes do not use two or more neutral kaons. If in the future
79  // such modes are added, the ordering will be KM, KB, PIM, PI0, KL, PIP, KS, K0, KP
80 
81  bool result( false );
82 
83  if ( isNeutralKaon( left.first ) == true &&
84  isNeutralKaon( right.first ) == false ) {
85  // Left is a neutral kaon, right is not
86  result = true;
87 
88  } else if ( isNeutralKaon( left.first ) == false &&
89  isNeutralKaon( right.first ) == true ) {
90  // Right is a neutral kaon, left is not
91  result = false;
92 
93  } else {
94  // Just compare PDG integers to achieve ascending order
95  int leftPDGid = EvtPDL::getStdHep( left.first );
96  int rightPDGid = EvtPDL::getStdHep( right.first );
97 
98  if ( leftPDGid < rightPDGid ) {
99  result = true;
100  }
101  }
102 
103  return result;
104 }
105 
107 {
108  static EvtId DM = EvtPDL::getId( "D-" );
109  static EvtId DP = EvtPDL::getId( "D+" );
110  static EvtId D0 = EvtPDL::getId( "D0" );
111  static EvtId D0B = EvtPDL::getId( "anti-D0" );
112  static EvtId DSP = EvtPDL::getId( "D_s+" );
113  static EvtId DSM = EvtPDL::getId( "D_s-" );
114  static EvtId KM = EvtPDL::getId( "K-" );
115  static EvtId KP = EvtPDL::getId( "K+" );
116 
117  //static EvtId K0=EvtPDL::getId("K0");
118  //static EvtId KB=EvtPDL::getId("anti-K0");
119  //static EvtId KL=EvtPDL::getId("K_L0");
120  //static EvtId KS=EvtPDL::getId("K_S0");
121 
122  static EvtId PIM = EvtPDL::getId( "pi-" );
123  static EvtId PIP = EvtPDL::getId( "pi+" );
124  static EvtId PI0 = EvtPDL::getId( "pi0" );
125 
126  static double MPI = EvtPDL::getMeanMass( PI0 );
127  static double MKP = EvtPDL::getMeanMass( KP );
128 
129  // check that there are 0 arguments and 3 daughters
130  checkNArg( 0 );
131  checkNDaug( 3 );
132 
134 
138 
139  EvtId parnum = getParentId();
140 
141  /*
142  * To decide which decay we have, we take the list of daughters (or charge
143  * conjugate of daughters for D-, D0B or Ds-), sort these in the order
144  * KB/K0/KS/KL, KM, PIM, PI0, PIP, KP, keeping track which daughter is which,
145  * and at the end have a single if statement picking up the decay and assigning
146  * the correct order for the daughters (same condition used for charm and anti-charm).
147  * If we have two or more neutral kaons in the daughter list, then the compareIds()
148  * ordering will simply follow ascending PDG ids: KM, KB, PIM, PI0, KL, PIP, KS, K0, KP
149  */
150 
151  std::vector<std::pair<EvtId, int>> daughters;
152  if ( parnum == D0 || parnum == DP || parnum == DSP ) {
153  for ( int i = 0; i < 3; ++i ) {
154  daughters.push_back( std::make_pair( getDaug( i ), i ) );
155  }
156  } else {
157  for ( int i = 0; i < 3; ++i ) {
158  daughters.push_back(
159  std::make_pair( EvtPDL::chargeConj( getDaug( i ) ), i ) );
160  }
161  }
162 
163  // Sort daughters, they will end up in the order KB/K0/KS/KL, KM, PIM, PI0, PIP, KP
164  // for the current 12 decay modes
165  std::sort( daughters.begin(), daughters.end(), compareIds );
166 
167  /*
168  std::cout << "DDALITZ sorting: ";
169  for (int i=0; i<3; ++i ) {
170  std::cout << EvtPDL::getStdHep(daughters[i].first) << " ";
171  }
172  std::cout << std::endl;
173 */
174 
175  _flag = 0;
176 
177  // D0 or anti-D0 modes. We only need to check the particle modes, since anti-particle
178  // modes have their ordered daughter ids charged-conjugated above
179 
180  if ( parnum == D0 || parnum == D0B ) {
181  // Look for D0 to K- pi+ pi0
182  if ( daughters[0].first == KM && daughters[1].first == PI0 &&
183  daughters[2].first == PIP ) {
184  _flag = 4;
185  _d1 = daughters[0].second;
186  _d2 = daughters[2].second;
187  _d3 = daughters[1].second;
188  }
189 
190  // Look for D0 to KB pi- pi+
191  if ( isNeutralKaon( daughters[0].first ) == true &&
192  daughters[1].first == PIM && daughters[2].first == PIP ) {
193  _flag = 3;
194  _d1 = daughters[0].second;
195  _d2 = daughters[1].second;
196  _d3 = daughters[2].second;
197  }
198 
199  // Look for D0 to KB K+ K-
200  if ( isNeutralKaon( daughters[0].first ) == true &&
201  daughters[1].first == KM && daughters[2].first == KP ) {
202  _flag = 5;
203  _d1 = daughters[0].second;
204  _d2 = daughters[2].second;
205  _d3 = daughters[1].second;
206  }
207 
208  // Look for D0 to pi- pi+ pi0
209  if ( daughters[0].first == PIM && daughters[1].first == PI0 &&
210  daughters[2].first == PIP ) {
211  _flag = 12;
212  _d1 = daughters[0].second;
213  _d2 = daughters[2].second;
214  _d3 = daughters[1].second;
215  }
216  }
217 
218  // D+ (or D-) modes
219  if ( parnum == DP || parnum == DM ) {
220  // Look for D+ to KB pi+ pi0
221  if ( isNeutralKaon( daughters[0].first ) == true &&
222  daughters[1].first == PI0 && daughters[2].first == PIP ) {
223  _flag = 2;
224  _d1 = daughters[0].second;
225  _d2 = daughters[2].second;
226  _d3 = daughters[1].second;
227  }
228 
229  // Look for D+ to K- pi+ pi+
230  if ( daughters[0].first == KM && daughters[1].first == PIP &&
231  daughters[2].first == PIP ) {
232  _flag = 1;
233  _d1 = daughters[0].second;
234  _d2 = daughters[1].second;
235  _d3 = daughters[2].second;
236  }
237 
238  // Look for D+ to K- K+ pi+
239  if ( daughters[0].first == KM && daughters[1].first == PIP &&
240  daughters[2].first == KP ) {
241  _flag = 7;
242  _d1 = daughters[0].second;
243  _d2 = daughters[2].second;
244  _d3 = daughters[1].second;
245  }
246 
247  // Look for D+ to pi- pi+ K+
248  if ( daughters[0].first == PIM && daughters[1].first == PIP &&
249  daughters[2].first == KP ) {
250  _flag = 8;
251  _d1 = daughters[0].second;
252  _d2 = daughters[1].second;
253  _d3 = daughters[2].second;
254  }
255 
256  // Look for D+ to pi- pi+ pi+
257  if ( daughters[0].first == PIM && daughters[1].first == PIP &&
258  daughters[2].first == PIP ) {
259  _flag = 10;
260  _d1 = daughters[0].second;
261  _d2 = daughters[1].second;
262  _d3 = daughters[2].second;
263  }
264  }
265 
266  // Ds+ (or Ds-) modes
267  if ( parnum == DSP || parnum == DSM ) {
268  // Look for Ds+ to K- K+ pi+
269  if ( daughters[0].first == KM && daughters[1].first == PIP &&
270  daughters[2].first == KP ) {
271  _flag = 6;
272  _d1 = daughters[0].second;
273  _d2 = daughters[2].second;
274  _d3 = daughters[1].second;
275  }
276 
277  // Look for Ds+ to pi- pi+ K+
278  if ( daughters[0].first == PIM && daughters[1].first == PIP &&
279  daughters[2].first == KP ) {
280  _flag = 9;
281  _d1 = daughters[0].second;
282  _d2 = daughters[1].second;
283  _d3 = daughters[2].second;
284  }
285 
286  // Look for Ds+ to pi- pi+ pi+
287  if ( daughters[0].first == PIM && daughters[1].first == PIP &&
288  daughters[2].first == PIP ) {
289  _flag = 11;
290  _d1 = daughters[0].second;
291  _d2 = daughters[1].second;
292  _d3 = daughters[2].second;
293  }
294  }
295 
296  if ( _flag == 6 ) {
297  _kkpi_params.push_back( EvtFlatteParam( MPI, MPI, 0.406 ) );
298  _kkpi_params.push_back( EvtFlatteParam( MKP, MKP, 0.800 ) );
299  }
300 
301  if ( _flag == 0 ) {
302  EvtGenReport( EVTGEN_ERROR, "EvtGen" )
303  << "EvtDDaltiz: Invalid mode." << endl;
304  assert( 0 );
305  }
306 
307  /*
308  EvtGenReport(EVTGEN_INFO,"EvtGen") << "DDALITZ ordering for " << parnum.getName()
309  << " with mode = " << _flag << ": "
310  << getDaug(_d1).getName() << " "
311  << getDaug(_d2).getName() << " "
312  << getDaug(_d3).getName() << std::endl;
313  */
314 }
315 
317 {
318  // probmax different for different modes!
319 
320  if ( _flag == 1 ) {
321  setProbMax( 2500.0 );
322  }
323  if ( _flag == 2 ) {
324  setProbMax( 150.0 );
325  }
326  if ( _flag == 3 ) {
327  setProbMax( 3000.0 );
328  }
329  if ( _flag == 4 ) {
330  setProbMax( 600.0 );
331  }
332  if ( _flag == 5 ) {
333  setProbMax( 2500000.0 );
334  }
335  if ( _flag == 6 ) {
336  setProbMax( 45000.0 );
337  }
338  if ( _flag == 7 ) {
339  setProbMax( 35000.0 );
340  }
341  if ( _flag == 8 ) {
342  setProbMax( 2500.0 );
343  }
344  if ( _flag == 9 ) {
345  setProbMax( 1700.0 );
346  }
347  if ( _flag == 10 ) {
348  setProbMax( 1300.0 );
349  }
350  if ( _flag == 11 ) {
351  setProbMax( 2200.0 );
352  }
353  if ( _flag == 12 ) {
354  setProbMax( 1000.0 );
355  }
356 }
357 
359 {
360  static EvtId BP = EvtPDL::getId( "B+" );
361  static EvtId BM = EvtPDL::getId( "B-" );
362  static EvtId B0 = EvtPDL::getId( "B0" );
363  static EvtId B0B = EvtPDL::getId( "anti-B0" );
364 
365  static EvtId D0 = EvtPDL::getId( "D0" );
366 
367  double oneby2 = 0.707106782;
368 
369  bool isBToDK = false;
370  if ( p->getParent() ) {
371  EvtId parId = p->getParent()->getId();
372  if ( ( BP == parId ) || ( BM == parId ) || ( B0 == parId ) ||
373  ( B0B == parId ) )
375  ->getDecayFunc( p->getParent() )
376  ->getName() == "BTODDALITZCPK" )
377  isBToDK = true;
378  }
379 
380  //same structure for all of these decays
381 
383  EvtVector4R moms1 = p->getDaug( _d1 )->getP4();
384  EvtVector4R moms2 = p->getDaug( _d2 )->getP4();
385  EvtVector4R moms3 = p->getDaug( _d3 )->getP4();
386 
387  EvtVector4R p4_p;
388  p4_p.set( p->mass(), 0.0, 0.0, 0.0 );
389 
390  EvtComplex amp( 1.0, 0.0 );
391 
392  //now determine which D and which decay
393 
394  //data from Anjos et al, Phys.Rev.D 1993, v.48,num.1,p.56 (E691 resuls)
395  //for D+ -> K- pi+ pi+, and from Adler et al, Phys.Lett. B196 (1987), 107
396  //(Mark III results) for D+ -> K0bar pi+ pi0.
397  //CLEO results for D0->k-pi+pi0
398 
399  if ( _flag == 1 ) {
400  // D+ -> K- pi+ pi+ decay, or charge conjugate
401 
402  // //Anjos etal e691 - Phys Rev D48, 56 (1993)
403  // EvtResonance DplusRes11(p4_p,moms1,moms2,0.78,-60.0,0.0498,0.89610,1);
404  // EvtResonance DplusRes12(p4_p,moms3,moms1,0.78,-60.0,0.0498,0.89610,1);//K*(892)
405 
406  // EvtResonance DplusRes21(p4_p,moms1,moms2,0.53,132.0,0.287,1.429,0);
407  // EvtResonance DplusRes22(p4_p,moms3,moms1,0.53,132.0,0.287,1.429,0);//K*(1430)
408 
409  // EvtResonance DplusRes31(p4_p,moms1,moms2,0.47,-51.0,0.323,1.714,1);
410  // EvtResonance DplusRes32(p4_p,moms3,moms1,0.47,-51.0,0.323,1.714,1);//K*(1680)
411 
412  // amp = amp + oneby2*(-DplusRes11.resAmpl()+DplusRes12.resAmpl()) + oneby2*(DplusRes21.resAmpl() + DplusRes22.resAmpl()) + oneby2*(-DplusRes31.resAmpl()+ DplusRes32.resAmpl());
413 
414  // EvtResonance DplusRes11(p4_p,moms1,moms2,amp,phase,width,mass,L);
415  //CLEO-c p15,arxiv:0802.4214v2
416  EvtResonance2 DplusRes11( p4_p, moms1, moms2, 1.0, 0.0, 0.0503, 0.896,
417  1, true );
418  EvtResonance2 DplusRes12( p4_p, moms3, moms1, 1.0, 0.0, 0.0503, 0.896,
419  1, true ); //K*(892)
420  EvtResonance2 DplusRes21( p4_p, moms1, moms2, 3.0, 49.7 - 180.0, 0.164,
421  1.463, 0 );
422  EvtResonance2 DplusRes22( p4_p, moms3, moms1, 3.0, 49.7 - 180.0, 0.164,
423  1.463, 0 ); //K*(1430)
424  EvtResonance2 DplusRes31( p4_p, moms1, moms2, 0.96, -29.9 + 180.0,
425  0.109, 1.4324, 2, true );
426  EvtResonance2 DplusRes32( p4_p, moms3, moms1, 0.96, -29.9 + 180.0,
427  0.109, 1.4324, 2, true ); // K*_2(1430)
428  EvtResonance2 DplusRes41( p4_p, moms1, moms2, 6.5, 29.0, 0.323, 1.717,
429  1, true );
430  EvtResonance2 DplusRes42( p4_p, moms3, moms1, 6.5, 29.0, 0.323, 1.717,
431  1, true ); //K*(1680)
432  EvtResonance2 DplusRes51( p4_p, moms1, moms2, 5.01, -163.7 + 180.0,
433  0.470, 0.809, 0 );
434  EvtResonance2 DplusRes52( p4_p, moms3, moms1, 5.01, -163.7 + 180.0,
435  0.470, 0.809, 0 ); //kappa(800)
436  double pi180inv = 1.0 / EvtConst::radToDegrees;
437  amp = EvtComplex( 7.4 * cos( ( -18.4 + 180.0 ) * pi180inv ),
438  7.4 * sin( ( -18.4 + 180.0 ) * pi180inv ) ) +
439  oneby2 * ( -DplusRes11.resAmpl() + DplusRes12.resAmpl() ) +
440  oneby2 * ( DplusRes21.resAmpl() + DplusRes22.resAmpl() ) +
441  oneby2 * ( DplusRes31.resAmpl() + DplusRes32.resAmpl() ) +
442  oneby2 * ( -DplusRes41.resAmpl() + DplusRes42.resAmpl() ) +
443  oneby2 * ( DplusRes51.resAmpl() + DplusRes52.resAmpl() );
444  //amp = amp+oneby2*(-DplusRes11.resAmpl()+DplusRes12.resAmpl());
445  }
446 
447  if ( _flag == 2 ) {
448  //have a D+ -> K0bar pi+ pi0 decay
449  //adler etal MarkIII - Phys Lett B196, 107 (1987)
450  // Results in this paper:
451  // Kbar rho+ FitFraction = 68+/-8+/-12 Phase 0
452  // Kbar* pi+ 19+/-6+/-6 43+/-23
453  // nonres 13+/-7+/-8 250+/-19
454  // These numbers below seem not to be exactly the same
455  // the phases are equiv to -106=254 and 41
456  //
457  EvtResonance DplusKpipi0Res1( p4_p, moms2, moms3, 1.00, 0.00, 0.1512,
458  0.7699, 1 ); //rho+
459  EvtResonance DplusKpipi0Res2( p4_p, moms3, moms1, 0.8695, 0.7191,
460  0.0498, 0.89159, 1 ); //K*0
461 
462  amp = 0.9522 * EvtComplex( cos( -1.8565 ), sin( -1.8565 ) ) +
463  1.00 * DplusKpipi0Res1.relBrWig( 0 ) +
464  0.8695 * EvtComplex( cos( 0.7191 ), sin( 0.7191 ) ) *
465  DplusKpipi0Res2.relBrWig( 1 );
466  }
467 
468  if ( _flag == 3 ) {
469  // D0 -> K0bar pi- pi+ & CC
470  // If it does not come from a B->DK, decay it as D0 or D0bar separately
471  // if p4_p is D0, moms1 is K0, moms2 is pi-, moms3 is pi+
472  // if p4_p is D0bar, moms1 is K0, moms2 is pi+, moms3 is pi-
473 
474  if ( isBToDK ) {
475  // Gamma angle in rad.
476  double gamma = EvtDecayTable::getInstance()
477  ->getDecayFunc( p->getParent() )
478  ->getArg( 0 );
479  // Strong phase in rad.
480  double delta = EvtDecayTable::getInstance()
481  ->getDecayFunc( p->getParent() )
482  ->getArg( 1 );
483  // Ratio between B->D0K and B->D0barK
484  double A = EvtDecayTable::getInstance()
485  ->getDecayFunc( p->getParent() )
486  ->getArg( 2 );
487 
488  EvtComplex Factor( fabs( A ) * cos( delta ),
489  fabs( A ) * sin( delta ) );
490 
491  if ( ( p->getParent()->getId() == BP ) ||
492  ( p->getParent()->getId() == B0 ) ) {
493  // the ratio D/Dbar
494  Factor = Factor * EvtComplex( cos( gamma ), sin( gamma ) );
495  if ( p->getId() == D0 ) {
496  // the flavor of the particle has no meaning. But we need
497  // it to know which daughter is pi+ or pi-
498  // M( B+ or B0 ) = f(Dbar) + factor * f(D)
499  // f(Dbar) = amplDtoK0PiPi(pD, K0, pi+, pi-)
500  // f(D) = amplDtoK0PiPi(pD, K0, pi-, pi+)
501  // Then ...
502  amp = amplDtoK0PiPi( p4_p, moms1, moms3, moms2 ) +
503  Factor * amplDtoK0PiPi( p4_p, moms1, moms2, moms3 );
504  } else {
505  amp = amplDtoK0PiPi( p4_p, moms1, moms2, moms3 ) +
506  Factor * amplDtoK0PiPi( p4_p, moms1, moms3, moms2 );
507  }
508  } else if ( ( p->getParent()->getId() == BM ) ||
509  ( p->getParent()->getId() == B0B ) ) {
510  Factor = Factor * EvtComplex( cos( gamma ), -sin( gamma ) );
511  // here M( B- or B0bar ) = f(D) + factor * f(Dbar) then ...
512  if ( p->getId() == D0 ) {
513  amp = amplDtoK0PiPi( p4_p, moms1, moms2, moms3 ) +
514  Factor * amplDtoK0PiPi( p4_p, moms1, moms3, moms2 );
515  } else {
516  amp = amplDtoK0PiPi( p4_p, moms1, moms3, moms2 ) +
517  Factor * amplDtoK0PiPi( p4_p, moms1, moms2, moms3 );
518  }
519  }
520  } else {
521  amp = amplDtoK0PiPi( p4_p, moms1, moms2, moms3 );
522  }
523  }
524 
525  if ( _flag == 4 ) {
526  // D0 to K- pi+ pi0
527  EvtResonance2 DKpipi0Res1( p4_p, moms2, moms3, 1.0, 0.0, 0.1507, 0.770,
528  1 ); //rho
529  EvtResonance2 DKpipi0Res2( p4_p, moms1, moms2, 0.39, -0.2, 0.0505,
530  0.8961, 1 ); //k*0
531  EvtResonance2 DKpipi0Res3( p4_p, moms1, moms3, 0.44, 163.0, 0.050,
532  0.8915, 1 ); //k*-
533 
534  EvtResonance2 DKpipi0Res4( p4_p, moms1, moms3, 0.77, 55.5, 0.294, 1.412,
535  0 ); //k01430-
536  EvtResonance2 DKpipi0Res5( p4_p, moms1, moms2, 0.85, 166.0, 0.294,
537  1.412, 0 ); //k01430bar
538  EvtResonance2 DKpipi0Res6( p4_p, moms2, moms3, 2.5, 171.0, 0.240, 1.700,
539  1 ); //rho1700
540  EvtResonance2 DKpipi0Res7( p4_p, moms1, moms3, 2.5, 103.0, 0.322, 1.717,
541  1 ); //K*1680-
542 
543  double pi180inv = 1.0 / EvtConst::radToDegrees;
544 
545  amp = EvtComplex( 1.75 * cos( 31.2 * pi180inv ),
546  1.75 * sin( 31.2 * pi180inv ) ) +
547  DKpipi0Res1.resAmpl() + DKpipi0Res2.resAmpl() +
548  DKpipi0Res3.resAmpl() + DKpipi0Res4.resAmpl() +
549  DKpipi0Res5.resAmpl() + DKpipi0Res6.resAmpl() +
550  DKpipi0Res7.resAmpl();
551  }
552 
553  if ( _flag == 5 ) {
554  // D0 -> K0bar K+ K- & CC
555  // If it does not come from a B->DK, decay it as D0 or D0bar separately
556  // if p4_p is D0, moms1 is K0, moms2 is pi-, moms3 is pi+
557  // if p4_p is D0bar, moms1 is K0, moms2 is pi+, moms3 is pi-
558 
559  if ( isBToDK ) {
560  // Gamma angle in rad.
561  double gamma = EvtDecayTable::getInstance()
562  ->getDecayFunc( p->getParent() )
563  ->getArg( 0 );
564  // Strong phase in rad.
565  double delta = EvtDecayTable::getInstance()
566  ->getDecayFunc( p->getParent() )
567  ->getArg( 1 );
568  // Ratio between B->D0K and B->D0barK
569  double A = EvtDecayTable::getInstance()
570  ->getDecayFunc( p->getParent() )
571  ->getArg( 2 );
572 
573  EvtComplex Factor( fabs( A ) * cos( delta ),
574  fabs( A ) * sin( delta ) );
575 
576  if ( ( p->getParent()->getId() == BP ) ||
577  ( p->getParent()->getId() == B0 ) ) {
578  // the ratio D/Dbar
579  Factor = Factor * EvtComplex( cos( gamma ), sin( gamma ) );
580  if ( p->getId() == D0 ) {
581  // the flavor of the particle has no meaning. But we need
582  // it to know which daughter is pi+ or pi-
583  // M( B+ or B0 ) = f(Dbar) + factor * f(D)
584  // f(Dbar) = amplDtoK0PiPi(pD, K0, K+, K-)
585  // f(D) = amplDtoK0PiPi(pD, K0, K-, K+)
586  // Then ...
587  amp = amplDtoK0KK( p4_p, moms1, moms3, moms2 ) +
588  Factor * amplDtoK0KK( p4_p, moms1, moms2, moms3 );
589  } else {
590  amp = amplDtoK0KK( p4_p, moms1, moms2, moms3 ) +
591  Factor * amplDtoK0KK( p4_p, moms1, moms3, moms2 );
592  }
593  } else if ( ( p->getParent()->getId() == BM ) ||
594  ( p->getParent()->getId() == B0B ) ) {
595  Factor = Factor * EvtComplex( cos( gamma ), -sin( gamma ) );
596  // here M( B- or B0bar ) = f(D) + factor * f(Dbar) then ...
597  if ( p->getId() == D0 ) {
598  amp = amplDtoK0KK( p4_p, moms1, moms2, moms3 ) +
599  Factor * amplDtoK0KK( p4_p, moms1, moms3, moms2 );
600  } else {
601  amp = amplDtoK0KK( p4_p, moms1, moms3, moms2 ) +
602  Factor * amplDtoK0KK( p4_p, moms1, moms2, moms3 );
603  }
604  }
605  } else {
606  amp = amplDtoK0KK( p4_p, moms1, moms2, moms3 );
607  }
608  }
609 
610  // Ds+ -> K- K+ pi+
611  //Babar, arxiv:1011.4190
612  if ( _flag == 6 ) {
613  EvtResonance2 DsKKpiRes1( p4_p, moms3, moms1, 1.0, 0.0, 0.0455, 0.8944,
614  1, true ); // K*(892)
615  EvtResonance2 DsKKpiRes2( p4_p, moms3, moms1, 1.48, 138., 0.290, 1.414,
616  0 ); // K*_0(1430)
617  EvtFlatte DsKKpiRes3( p4_p, moms1, moms2, 5.07, 156., 0.965,
618  _kkpi_params ); // f_0(980)
619  EvtResonance2 DsKKpiRes4( p4_p, moms1, moms2, 1.15, -10., 0.00426,
620  1.019455, 1, true ); // phi(1020)
621  EvtResonance2 DsKKpiRes5( p4_p, moms1, moms2, 1.28, 53., 0.265, 1.350,
622  0 ); // f_0(1370)
623  EvtResonance2 DsKKpiRes6( p4_p, moms1, moms2, 1.19, 87., 0.137, 1.724,
624  0 ); // f_0(1710)
625  amp = DsKKpiRes1.resAmpl() + DsKKpiRes2.resAmpl() + DsKKpiRes3.resAmpl() +
626  DsKKpiRes4.resAmpl() + DsKKpiRes5.resAmpl() + DsKKpiRes6.resAmpl();
627  }
628 
629  //D+ -> K- K+ pi+
630  //CLEO PRD 78, 072003 (2008) Fit A
631  if ( _flag == 7 ) {
632  EvtResonance2 DpKKpiRes1( p4_p, moms3, moms1, 1.0, 0.0, 0.0503, 0.8960,
633  1, true ); // K*(892)
634  EvtResonance2 DpKKpiRes2( p4_p, moms3, moms1, 3.7, 73.0, 0.290, 1.414,
635  0 ); // K*_0(1430)
636  EvtResonance2 DpKKpiRes3( p4_p, moms1, moms2, 1.189, -179.0 + 180.0,
637  0.00426, 1.019455, 1, true ); // phi(1020)
638  EvtResonance2 DpKKpiRes4( p4_p, moms1, moms2, 1.72, 123., 0.265, 1.474,
639  0 ); // a_0(1450)
640  EvtResonance2 DpKKpiRes5( p4_p, moms1, moms2, 1.9, -52.0 + 180.0, 0.15,
641  1.68, 1, true ); // phi(1680)
642  EvtResonance2 DpKKpiRes6( p4_p, moms3, moms1, 6.4, 150., 0.109, 1.4324,
643  2, true ); // K*_2(1430)
644  double pi180inv = 1.0 / EvtConst::radToDegrees;
645  amp = EvtComplex( 5.1 * cos( ( 53.0 ) * pi180inv ),
646  5.1 * sin( ( 53.0 ) * pi180inv ) ) +
647  DpKKpiRes1.resAmpl() + DpKKpiRes2.resAmpl() + DpKKpiRes3.resAmpl() +
648  DpKKpiRes4.resAmpl() + DpKKpiRes5.resAmpl() + DpKKpiRes6.resAmpl();
649  }
650 
651  //D+ -> pi- pi+ K+ WS (DCS)
652  //FOCUS PLB 601 10 (2004) ; amplitudes there are individually normalized (although not explicit in the paper)
653  // thus the magnitudes appearing below come from dividing the ones appearing in the paper by the sqrt of the
654  // integral over the DP of the corresponding squared amplitude. Writing as pi- pi+ K+ so pipi resonances are (12)
655  // and Kpi resonances are (31); masses and widths corresponds to PDG 2010
656  if ( _flag == 8 ) {
657  EvtResonance2 DpKpipiDCSRes1( p4_p, moms1, moms2, 1.0, 0.0, 0.149,
658  0.775, 1, true ); // rho(770)
659  EvtResonance2 DpKpipiDCSRes2( p4_p, moms3, moms1, 1.0971, -167.1,
660  0.0487, 0.896, 1, true ); // K*(890)
661  EvtResonance2 DpKpipiDCSRes3( p4_p, moms1, moms2, 0.4738, -134.5, 0.059,
662  0.972, 0 ); // f0(980) as simple BW
663  EvtResonance2 DpKpipiDCSRes4( p4_p, moms3, moms1, 2.2688, 54.4, 0.109,
664  1.432, 2, true ); // K*2(1430)
665  amp = DpKpipiDCSRes1.resAmpl() + DpKpipiDCSRes2.resAmpl() +
666  DpKpipiDCSRes3.resAmpl() + DpKpipiDCSRes4.resAmpl();
667  }
668 
669  //Ds+ -> pi- pi+ K+ WS (CS)
670  //FOCUS PLB 601 10 (2004) ; amplitudes there are individually normalized (although not explicit in the paper)
671  // thus the magnitudes appearing below come from dividing the ones appearing in the paper by the sqrt of the
672  // integral over the DP of the corresponding squared amplitude. Writing as pi- pi+ K+ so pipi resonances are (12)
673  // and Kpi resonances are (31); masses and widths corresponds to PDG 2010
674  // PROBLEM: by simply doing the procedure for D+, the resulting DP and projections do not resemble what is
675  // in the paper; the best model is by adding 180 to the vector Kpi resonances
676  if ( _flag == 9 ) {
677  EvtResonance2 DsKpipiCSRes1( p4_p, moms1, moms2, 1.0, 0.0, 0.149, 0.775,
678  1, true ); // rho(770)
679  EvtResonance2 DsKpipiCSRes2( p4_p, moms3, moms1, 0.7236, -18.3, 0.0487,
680  0.896, 1, true ); // K*(890)
681  EvtResonance2 DsKpipiCSRes3( p4_p, moms3, moms1, 2.711, 145.2, 0.232,
682  1.414, 1, true ); // K*(1410)
683  EvtResonance2 DsKpipiCSRes4( p4_p, moms3, moms1, 1.7549, 59.3, 0.270,
684  1.425, 0 ); // K*0(1430)
685  EvtResonance2 DsKpipiCSRes5( p4_p, moms1, moms2, 7.0589, -151.7, 0.400,
686  1.465, 1, true ); // rho(1450)
687  double pi180inv = 1.0 / EvtConst::radToDegrees;
688  amp = EvtComplex( 3.98 * cos( 43.1 * pi180inv ),
689  3.98 * sin( 43.1 * pi180inv ) ) +
690  DsKpipiCSRes1.resAmpl() + DsKpipiCSRes2.resAmpl() +
691  DsKpipiCSRes3.resAmpl() + DsKpipiCSRes4.resAmpl() +
692  DsKpipiCSRes5.resAmpl();
693  }
694  // D+ -> pi- pi+ pi+ from E791 [PRL 86 770 (2001)]
695  // masses and widths below correspond to what they used; there, the amplitudes were individually normalized
696  // (although not explicit) so magnitudes here are obtained after correcting for that
697  // Breit-Wigner has a factor of (-1) there which changes the relative phase of the NR wrt to the resonances
698  // thus the NR magnitude is set as negative
699  if ( _flag == 10 ) {
700  EvtResonance2 DppipipiRes11( p4_p, moms1, moms2, 1.0, 0.0, 0.150, 0.769,
701  1, true ); // rho(770)
702  EvtResonance2 DppipipiRes12( p4_p, moms3, moms1, 1.0, 0.0, 0.150, 0.769,
703  1, true ); // rho(770)
704  EvtResonance2 DppipipiRes21( p4_p, moms1, moms2, 2.2811, 205.7, 0.324,
705  0.478, 0 ); // sigma(500)
706  EvtResonance2 DppipipiRes22( p4_p, moms3, moms1, 2.2811, 205.7, 0.324,
707  0.478, 0 ); // sigma(500)
708  EvtResonance2 DppipipiRes31( p4_p, moms1, moms2, 0.4265, 165.0, 0.044,
709  0.977, 0 ); // f0(980) simple BW
710  EvtResonance2 DppipipiRes32( p4_p, moms3, moms1, 0.4265, 165.0, 0.044,
711  0.977, 0 ); // f0(980) simple BW
712  EvtResonance2 DppipipiRes41( p4_p, moms1, moms2, 2.0321, 57.3, 0.185,
713  1.275, 2, true ); // f2(1270)
714  EvtResonance2 DppipipiRes42( p4_p, moms3, moms1, 2.0321, 57.3, 0.185,
715  1.275, 2, true ); // f2(1270)
716  EvtResonance2 DppipipiRes51( p4_p, moms1, moms2, 0.7888, 105.4, 0.173,
717  1.434, 0 ); // f0(1370)
718  EvtResonance2 DppipipiRes52( p4_p, moms3, moms1, 0.7888, 105.4, 0.173,
719  1.434, 0 ); // f0(1370)
720  EvtResonance2 DppipipiRes61( p4_p, moms1, moms2, 0.7363, 319.1, 0.310,
721  1.465, 1, true ); // rho(1450)
722  EvtResonance2 DppipipiRes62( p4_p, moms3, moms1, 0.7363, 319.1, 0.310,
723  1.465, 1, true ); // rho(1450)
724  double pi180inv = 1.0 / EvtConst::radToDegrees;
725  amp = EvtComplex( -3.98 * cos( 57.3 * pi180inv ),
726  -3.98 * sin( 57.3 * pi180inv ) ) +
727  ( DppipipiRes11.resAmpl() - DppipipiRes12.resAmpl() ) //spin1
728  + ( DppipipiRes21.resAmpl() + DppipipiRes22.resAmpl() ) +
729  ( DppipipiRes31.resAmpl() + DppipipiRes32.resAmpl() ) +
730  ( DppipipiRes41.resAmpl() + DppipipiRes42.resAmpl() ) +
731  ( DppipipiRes51.resAmpl() + DppipipiRes52.resAmpl() ) +
732  ( DppipipiRes61.resAmpl() - DppipipiRes62.resAmpl() ); //spin1
733  }
734  // Ds+ -> pi- pi+ pi+ from E791 [PRL 86 765 (2001)]
735  // masses and widths below correspond to what they used; there, the amplitudes were individually normalized
736  // (although not explicit) so magnitudes here are obtained after correcting for that
737  // Breit-Wigner has a factor of (-1) there which changes the relative phase of the NR wrt to the resonances
738  // thus the NR magnitude is set as negative
739  if ( _flag == 11 ) {
740  EvtResonance2 DspipipiRes11( p4_p, moms1, moms2, 0.288, 109., 0.150,
741  0.769, 1, true ); // rho(770)
742  EvtResonance2 DspipipiRes12( p4_p, moms3, moms1, 0.288, 109., 0.150,
743  0.769, 1, true ); // rho(770)
744  EvtResonance2 DspipipiRes21( p4_p, moms1, moms2, 1.0, 0.0, 0.044, 0.977,
745  0 ); // f0(980) simple BW
746  EvtResonance2 DspipipiRes22( p4_p, moms3, moms1, 1.0, 0.0, 0.044, 0.977,
747  0 ); // f0(980) simple BW
748  EvtResonance2 DspipipiRes31( p4_p, moms1, moms2, 1.075, 133., 0.185,
749  1.275, 2, true ); // f2(1270)
750  EvtResonance2 DspipipiRes32( p4_p, moms3, moms1, 1.075, 133., 0.185,
751  1.275, 2, true ); // f2(1270)
752  EvtResonance2 DspipipiRes41( p4_p, moms1, moms2, 2.225, 198., 0.173,
753  1.434, 0 ); // f0(1370)
754  EvtResonance2 DspipipiRes42( p4_p, moms3, moms1, 2.225, 198., 0.173,
755  1.434, 0 ); // f0(1370)
756  EvtResonance2 DspipipiRes51( p4_p, moms1, moms2, 1.107, 162., 0.310,
757  1.465, 1, true ); // rho(1450)
758  EvtResonance2 DspipipiRes52( p4_p, moms3, moms1, 1.107, 162., 0.310,
759  1.465, 1, true ); // rho(1450)
760  double pi180inv = 1.0 / EvtConst::radToDegrees;
761  amp = EvtComplex( -0.723 * cos( 181. * pi180inv ),
762  -0.723 * sin( 181. * pi180inv ) ) +
763  ( DspipipiRes11.resAmpl() - DspipipiRes12.resAmpl() ) //spin1
764  + ( DspipipiRes21.resAmpl() + DspipipiRes22.resAmpl() ) +
765  ( DspipipiRes31.resAmpl() + DspipipiRes32.resAmpl() ) +
766  ( DspipipiRes41.resAmpl() + DspipipiRes42.resAmpl() ) +
767  ( DspipipiRes51.resAmpl() - DspipipiRes52.resAmpl() ); //spin1
768  }
769 
770  //D0 -> pi- pi+ pi0
771  //PRL 99, 251801 (2007)
772  //arXiv:hep-ex/0703037
773  if ( _flag == 12 ) {
774  EvtResonance2 DpipipiRes1p( p4_p, moms2, moms3, 1.0, 0.0, 0.149, 0.775,
775  1, true ); //rho+(770)
776  EvtResonance2 DpipipiRes1( p4_p, moms1, moms2, 0.588, 16.2, 0.149,
777  0.775, 1, true ); //rho0(770)
778  EvtResonance2 DpipipiRes1m( p4_p, moms3, moms1, 0.714, -2.0, 0.149,
779  0.775, 1, true ); //rho-(770)
780  EvtResonance2 DpipipiRes2p( p4_p, moms2, moms3, 0.21, -146.0, 0.400,
781  1.465, 1, true ); //rho+(1450)
782  EvtResonance2 DpipipiRes2( p4_p, moms1, moms2, 0.33, 10.0, 0.400, 1.465,
783  1, true ); //rho0(1450)
784  EvtResonance2 DpipipiRes2m( p4_p, moms3, moms1, 0.82, 16.0, 0.400,
785  1.465, 1, true ); //rho-(1450)
786  EvtResonance2 DpipipiRes3p( p4_p, moms2, moms3, 2.25, -17.0, 0.250,
787  1.720, 1, true ); //rho+(1700)
788  EvtResonance2 DpipipiRes3( p4_p, moms1, moms2, 2.51, -17.0, 0.250,
789  1.720, 1, true ); //rho0(1700)
790  EvtResonance2 DpipipiRes3m( p4_p, moms3, moms1, 2.00, -50.0, 0.250,
791  1.720, 1, true ); //rho-(1700)
792  EvtResonance2 DpipipiRes4( p4_p, moms1, moms2, 0.015, -59.0, 0.07,
793  0.980, 0 ); //f0(980)
794  EvtResonance2 DpipipiRes5( p4_p, moms1, moms2, 0.063, 156.0, 0.350,
795  1.370, 0 ); //f0(1370)
796  EvtResonance2 DpipipiRes6( p4_p, moms1, moms2, 0.058, 12.0, 0.109,
797  1.505, 0 ); //f0(1500)
798  EvtResonance2 DpipipiRes7( p4_p, moms1, moms2, 0.112, 51.0, 0.135,
799  1.720, 0 ); //f0(1720)
800  EvtResonance2 DpipipiRes8( p4_p, moms1, moms2, 1.04, -171.0, 0.185,
801  1.275, 2, true ); //f2(1270)
802  EvtResonance2 DpipipiRes9( p4_p, moms1, moms2, 0.069, 8.0, 0.600, 0.400,
803  0 ); //sigma(400)
804 
805  double pi180inv = 1.0 / EvtConst::radToDegrees;
806  amp = EvtComplex( 0.57 * cos( -11.0 * pi180inv ),
807  0.57 * sin( -11.0 * pi180inv ) ) +
808  DpipipiRes1p.resAmpl() + DpipipiRes1.resAmpl() +
809  DpipipiRes1m.resAmpl() + DpipipiRes2p.resAmpl() +
810  DpipipiRes2.resAmpl() + DpipipiRes2m.resAmpl() +
811  DpipipiRes3p.resAmpl() + DpipipiRes3.resAmpl() +
812  DpipipiRes3m.resAmpl() + DpipipiRes4.resAmpl() +
813  DpipipiRes5.resAmpl() + DpipipiRes6.resAmpl() +
814  DpipipiRes7.resAmpl() + DpipipiRes8.resAmpl() +
815  DpipipiRes9.resAmpl();
816  }
817 
818  vertex( amp );
819 
820  return;
821 }
822 
824  EvtVector4R moms2, EvtVector4R moms3 )
825 {
826  //K*(892)-
827  EvtResonance2 DK2piRes1( p4_p, moms1, moms2, 1.418, -190.0, 0.0508, 0.89166,
828  1 );
829  //K0*(1430)-
830  EvtResonance2 DK2piRes2( p4_p, moms1, moms2, 1.818, -337.0, 0.294, 1.412, 0 );
831  //K2*(1430)-
832  EvtResonance2 DK2piRes3( p4_p, moms1, moms2, 0.909, -5.0, 0.0985, 1.4256, 2 );
833  //K*(1680)-
834  EvtResonance2 DK2piRes4( p4_p, moms1, moms2, 5.091, -166.0, 0.322, 1.717, 1 );
835  //DCS K*(892)+
836  EvtResonance2 DK2piRes5( p4_p, moms1, moms3, 0.100, -19.0, 0.0508, 0.89166,
837  1 );
838 
839  //Rho0
840  EvtResonance2 DK2piRes6( p4_p, moms3, moms2, 0.909, -340.0, 0.1502, 0.7693,
841  1 );
842  //Omega
843  EvtResonance2 DK2piRes7( p4_p, moms3, moms2, .0336, -226.0, 0.00844,
844  0.78257, 1 );
845  //f0(980)
846  EvtResonance2 DK2piRes8( p4_p, moms3, moms2, 0.309, -152.0, 0.05, 0.977, 0 );
847  //f0(1370)
848  EvtResonance2 DK2piRes9( p4_p, moms3, moms2, 1.636, -255.0, 0.272, 1.31, 0 );
849  //f2(1270)
850  EvtResonance2 DK2piRes10( p4_p, moms3, moms2, 0.636, -32.0, 0.1851, 1.2754,
851  2 );
852 
853  return EvtComplex( 1.0, 0.0 ) + DK2piRes1.resAmpl() + DK2piRes2.resAmpl() +
854  DK2piRes3.resAmpl() + DK2piRes4.resAmpl() + DK2piRes5.resAmpl() +
855  DK2piRes6.resAmpl() + DK2piRes7.resAmpl() + DK2piRes8.resAmpl() +
856  DK2piRes9.resAmpl() + DK2piRes10.resAmpl();
857 }
858 
859 //
860 // BaBar decay amplitudes for D0->Ks K+ K-
861 //
862 // p4_p is D0
863 // moms1 is K0s
864 // moms2 is K+
865 // moms3 is K-
866 // Amplitudes and phases are taken from BaBar hep-ex/0207089
867 // with convention : Non Resonant = Amp 1. / Phase 0.
868 
870  EvtVector4R moms2, EvtVector4R moms3 )
871 {
872  //phi
873  EvtResonance DK0KKRes1( p4_p, moms2, moms3, 113.75, -40.0, 0.0043, 1.019456,
874  1 );
875  //a0(980)
876  EvtResonance DK0KKRes2( p4_p, moms2, moms3, 152.25, 69.0, 0.1196, 0.9847, 0 );
877  //f0(980)
878  EvtResonance DK0KKRes3( p4_p, moms2, moms3, 30.5, -201.0, 0.05, 0.980, 0 );
879  //a0(980)+
880  EvtResonance DK0KKRes4( p4_p, moms1, moms2, 85.75, -93.0, 0.1196, 0.9847, 0 );
881  //a0(980)-
882  EvtResonance DK0KKRes5( p4_p, moms3, moms1, 8., -53.0, 0.1196, 0.9847, 0 );
883 
884  return EvtComplex( 1.0, 0.0 ) + DK0KKRes1.resAmpl() + DK0KKRes2.resAmpl() +
885  DK0KKRes3.resAmpl() + DK0KKRes4.resAmpl() + DK0KKRes5.resAmpl();
886 }
EvtComplex resAmpl() const
static EvtDecayTable * getInstance()
EvtParticle * getParent() const
Definition: EvtParticle.cpp:96
double getArg(unsigned int j)
void init() override
Definition: EvtDDalitz.cpp:106
bool isNeutralKaon(const EvtId &theId)
Definition: EvtDDalitz.cpp:52
std::ostream & EvtGenReport(EvtGenSeverity severity, const char *facility=0)
Definition: EvtReport.cpp:33
EvtComplex resAmpl()
static double getMeanMass(EvtId i)
Definition: EvtPDL.cpp:314
EvtId getId() const
EvtComplex amplDtoK0PiPi(EvtVector4R p4_p, EvtVector4R moms1, EvtVector4R moms2, EvtVector4R moms3)
Definition: EvtDDalitz.cpp:823
void set(int i, double d)
Definition: EvtVector4R.hh:167
EvtComplex resAmpl()
Definition: EvtFlatte.cpp:76
EvtId * getDaugs()
Definition: EvtDecayBase.hh:66
EvtComplex relBrWig(int i)
void setProbMax(double prbmx)
Definition: EvtId.hh:27
EvtComplex amplDtoK0KK(EvtVector4R p4_p, EvtVector4R moms1, EvtVector4R moms2, EvtVector4R moms3)
Definition: EvtDDalitz.cpp:869
EvtDecayBase * getDecayFunc(EvtParticle *p)
EvtId getParentId() const
Definition: EvtDecayBase.hh:61
void vertex(const EvtComplex &amp)
Definition: EvtDecayAmp.hh:37
vector< EvtFlatteParam > _kkpi_params
Definition: EvtDDalitz.hh:49
double initializePhaseSpace(unsigned int numdaughter, EvtId *daughters, bool forceResetMasses=false, double poleSize=-1., int whichTwo1=0, int whichTwo2=1)
void checkNDaug(int d1, int d2=-1)
void checkSpinParent(EvtSpinType::spintype sp)
void decay(EvtParticle *p) override
Definition: EvtDDalitz.cpp:358
void checkNArg(int a1, int a2=-1, int a3=-1, int a4=-1)
static EvtId getId(const std::string &name)
Definition: EvtPDL.cpp:287
const EvtVector4R & getP4() const
void checkSpinDaughter(int d1, EvtSpinType::spintype sp)
double mass() const
int getNDaug() const
Definition: EvtDecayBase.hh:65
static const double radToDegrees
Definition: EvtConst.hh:28
EvtParticle * getDaug(int i)
Definition: EvtParticle.cpp:91
void initProbMax() override
Definition: EvtDDalitz.cpp:316
static int first
Definition: EvtPDL.cpp:38
std::string getName() override
Definition: EvtDDalitz.cpp:42
EvtDecayBase * clone() override
Definition: EvtDDalitz.cpp:47
static EvtId chargeConj(EvtId id)
Definition: EvtPDL.cpp:207
static int getStdHep(EvtId id)
Definition: EvtPDL.cpp:362
bool compareIds(const std::pair< EvtId, int > &left, const std::pair< EvtId, int > &right)
Definition: EvtDDalitz.cpp:72
EvtId getDaug(int i) const
Definition: EvtDecayBase.hh:67