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.
EvtPhiDalitz.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/EvtGenKine.hh"
24 #include "EvtGenBase/EvtPDL.hh"
26 #include "EvtGenBase/EvtPatches.hh"
27 #include "EvtGenBase/EvtReport.hh"
29 
30 #include <math.h>
31 #include <stdlib.h>
32 #include <string>
33 
34 // Implementation of KLOE measurement
35 // PL B561: 55-60 (2003) + Erratum B609:449-450 (2005)
36 // or hep-ex/0303016v2
37 
38 std::string EvtPhiDalitz::getName()
39 {
40  return "PHI_DALITZ";
41 }
42 
44 {
45  return new EvtPhiDalitz;
46 }
47 
49 {
50  // check that there are 0 arguments
51  checkNArg( 0 );
52  checkNDaug( 3 );
53 
55 
59 
60  _mRho = 0.7758;
61  _gRho = 0.1439;
62  _aD = 0.78;
63  _phiD = -2.47;
64  _aOmega = 0.0071;
65  _phiOmega = -0.22;
66 
67  _locPip = -1;
68  _locPim = -1;
69  _locPi0 = -1;
70 
71  for ( int i = 0; i < 3; i++ ) {
72  if ( getDaug( i ) == EvtPDL::getId( "pi+" ) )
73  _locPip = i;
74  if ( getDaug( i ) == EvtPDL::getId( "pi-" ) )
75  _locPim = i;
76  if ( getDaug( i ) == EvtPDL::getId( "pi0" ) )
77  _locPi0 = i;
78  }
79  if ( _locPip == -1 || _locPim == -1 || _locPi0 == -1 ) {
80  EvtGenReport( EVTGEN_ERROR, "EvtGen" )
81  << getModelName()
82  << "generator expects daughters to be pi+ pi- pi0\n";
83  EvtGenReport( EVTGEN_ERROR, "EvtGen" )
84  << "Found " << EvtPDL::name( getDaug( 0 ) ) << " "
85  << EvtPDL::name( getDaug( 1 ) ) << " "
86  << EvtPDL::name( getDaug( 2 ) ) << std::endl;
87  }
88 }
89 
91 {
92  EvtId PIP = EvtPDL::getId( "pi+" );
93  EvtId PIM = EvtPDL::getId( "pi-" );
94  EvtId PIZ = EvtPDL::getId( "pi0" );
95  EvtId OMEGA = EvtPDL::getId( "omega" );
96 
98 
99  EvtVector4R Ppip = p->getDaug( _locPip )->getP4();
100  EvtVector4R Ppim = p->getDaug( _locPim )->getP4();
101  EvtVector4R Ppi0 = p->getDaug( _locPi0 )->getP4();
102  EvtVector4R Qp = ( Ppim + Ppi0 );
103  EvtVector4R Qm = ( Ppip + Ppi0 );
104  EvtVector4R Q0 = ( Ppip + Ppim );
105  double m2_pip = pow( EvtPDL::getMeanMass( PIP ), 2 );
106  double m2_pim = pow( EvtPDL::getMeanMass( PIM ), 2 );
107  double m2_pi0 = pow( EvtPDL::getMeanMass( PIZ ), 2 );
108  double M2rhop = pow( _mRho, 2 );
109  double M2rhom = pow( _mRho, 2 );
110  double M2rho0 = pow( _mRho, 2 );
111  double M2omega = pow( EvtPDL::getMeanMass( OMEGA ), 2 );
112 
113  double Wrhop = _gRho;
114  double Wrhom = _gRho;
115  double Wrho0 = _gRho;
116  double Womega = EvtPDL::getWidth( OMEGA );
117 
118  EvtComplex Atot( 0, 0 );
119 
120  //Rho+ Risonance Amplitude
121  double Gp = Wrhop *
122  pow( ( ( Qp.mass2() - m2_pim - m2_pi0 ) / 2 - M2rhop / 4 ) /
123  ( M2rhop / 4 - ( m2_pim + m2_pi0 ) / 2 ),
124  3 / 2 ) *
125  ( M2rhop / Qp.mass2() );
126  EvtComplex Drhop( ( Qp.mass2() - M2rhop ), Qp.mass() * Gp );
127  EvtComplex A1( M2rhop / Drhop );
128 
129  //Rho- Risonance Amplitude
130  double Gm = Wrhom *
131  pow( ( ( Qm.mass2() - m2_pip - m2_pi0 ) / 2 - M2rhom / 4 ) /
132  ( M2rhom / 4 - ( m2_pip + m2_pi0 ) / 2 ),
133  3 / 2 ) *
134  ( M2rhom / Qm.mass2() );
135  EvtComplex Drhom( ( Qm.mass2() - M2rhom ), Qm.mass() * Gm );
136  EvtComplex A2( M2rhom / Drhom );
137 
138  //Rho0 Risonance Amplitude
139  double G0 = Wrho0 *
140  pow( ( ( Q0.mass2() - m2_pip - m2_pim ) / 2 - M2rho0 / 4 ) /
141  ( M2rho0 / 4 - ( m2_pip + m2_pim ) / 2 ),
142  3 / 2 ) *
143  ( M2rho0 / Q0.mass2() );
144  EvtComplex Drho0( ( Q0.mass2() - M2rho0 ), Q0.mass() * G0 );
145  EvtComplex A3( M2rho0 / Drho0 );
146 
147  //Omega Risonance Amplitude
148  EvtComplex OmegaPhase( 0, _phiOmega );
149  EvtComplex DOmega( ( Q0.mass2() - M2omega ), Q0.mass() * Womega );
150  EvtComplex A4( _aOmega * M2omega * exp( OmegaPhase ) / DOmega );
151 
152  //Direct Decay Amplitude
153  EvtComplex DirPhase( 0, _phiD );
154  EvtComplex A5( _aD * exp( DirPhase ) );
155 
156  Atot = A1 + A2 + A3 + A4 + A5;
157 
158  vertex( 0, Atot );
159  vertex( 1, Atot );
160  vertex( 2, Atot );
161 
162  return;
163 }
void decay(EvtParticle *p) override
static std::string name(EvtId i)
Definition: EvtPDL.cpp:382
std::ostream & EvtGenReport(EvtGenSeverity severity, const char *facility=0)
Definition: EvtReport.cpp:33
EvtDecayBase * clone() override
double mass() const
Definition: EvtVector4R.cpp:49
double _aOmega
Definition: EvtPhiDalitz.hh:42
static double getMeanMass(EvtId i)
Definition: EvtPDL.cpp:314
double _phiOmega
Definition: EvtPhiDalitz.hh:43
EvtId * getDaugs()
Definition: EvtDecayBase.hh:66
Definition: EvtId.hh:27
double mass2() const
Definition: EvtVector4R.hh:100
void vertex(const EvtComplex &amp)
Definition: EvtDecayAmp.hh:37
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 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
std::string getName() override
std::string getModelName() const
Definition: EvtDecayBase.hh:79
void checkSpinDaughter(int d1, EvtSpinType::spintype sp)
static double getWidth(EvtId i)
Definition: EvtPDL.cpp:352
int getNDaug() const
Definition: EvtDecayBase.hh:65
EvtComplex exp(const EvtComplex &c)
Definition: EvtComplex.hh:240
void init() override
EvtParticle * getDaug(int i)
Definition: EvtParticle.cpp:91
EvtId getDaug(int i) const
Definition: EvtDecayBase.hh:67