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.
EvtXPsiGamma.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"
31 
32 #include <iostream>
33 #include <stdlib.h>
34 #include <string>
35 
36 using namespace std;
37 
38 std::string EvtXPsiGamma::getName()
39 {
40  return "X38722-+_PSI_GAMMA";
41 }
42 
44 {
45  // cout<<" (* AVL: === EvtXPsiGamma::clone() ============ *)"<<endl;
46  return new EvtXPsiGamma;
47 }
48 
50  EvtVector4C epsEps, EvtVector4C epsEta )
51 {
52  // T2 term from [Bazi](10)
53  EvtTensor4C epsPQ =
54  EvtGenFunctions::directProd( q, p ); // e_{mu nu a b} p^a q^b;
55  epsPQ = dual( epsPQ );
56 
57  EvtVector4C tmp1 = epsPI.cont1( epsEps );
58  EvtVector4C tmp2 = epsPQ.cont1( tmp1 );
59  EvtComplex T2 =
60  tmp2 * epsEta; // epa^a pi_{a mu} e_{mu nu rho si} p_nu q_rho eta_si
61 
62  tmp1 = epsPI.cont1( epsEta );
63  tmp2 = epsPQ.cont1( tmp1 );
64  T2 += tmp2 *
65  epsEps; // T2 - eta^a pi_{a mu} e_{mu nu rho si} q_nu p_rhi eps_si
66 
67  return T2;
68 }
69 
71  EvtVector4C epsEps, EvtVector4C epsEta )
72 {
73  // T3 term from [Bazi](11)
74  EvtVector4R Q = p - q, P = p + q;
75  EvtVector4C tmp1 = epsPI.cont1( Q ); // Q_a pi_{a mu}
77  P, epsEps ) ); // e_{mu nu rho si} P^rho eps^si
78  EvtVector4C tmp4 = tmp3.cont1( tmp1 );
79  EvtComplex T3 =
80  tmp4 * epsEta; // Q_a pi_{a mu} e_{mu nu rho si} P^rho eps_si eta_nu
81  return T3;
82 }
83 
85 {
86  ncall++;
87  root->initializePhaseSpace( getNDaug(), getDaugs() );
88 
89  double gOmega = 1.58,
90  gPOmega = -0.74; // X -> omega psi couplings from table II
91  double gRho = 1.58, gPRho = -0.74; // X -> omega psi couplings from table II
92  double fRho = 0.121, mRho2 = 0.770 * 0.770, fOmega = 0.036,
93  mOmega2 = 0.782 * 0.782;
94 
95  EvtComplex amp;
96 
97  if ( _ID0 == EvtPDL::getId( "gamma" ) ) {
98  for ( int iPsi = 0; iPsi < 4; iPsi++ ) {
99  for ( int iGamma = 0; iGamma < 1; iGamma++ ) {
100  for ( int iChi = 0; iChi < 4; iChi++ ) {
101  EvtComplex T2 = fT2(
102  root->getDaug( 1 )->getP4(),
103  root->getDaug( 0 )->getP4(), root->epsTensor( iChi ),
104  root->getDaug( 1 )->epsParent( iPsi ).conj(),
105  root->getDaug( 0 )->epsParentPhoton( iGamma ).conj() );
106  EvtComplex T3 = fT3(
107  root->getDaug( 1 )->getP4(),
108  root->getDaug( 0 )->getP4(), root->epsTensor( iChi ),
109  root->getDaug( 1 )->epsParent( iPsi ).conj(),
110  root->getDaug( 0 )->epsParentPhoton( iGamma ).conj() );
111  amp = ( fOmega / mOmega2 * gOmega + fRho / mRho2 * gRho ) *
112  T2 +
113  ( fOmega / mOmega2 * gPOmega + fRho / mRho2 * gPRho ) *
114  T3;
115  vertex( iChi, iGamma, iPsi, amp );
116  };
117  };
118  };
119  } else if ( _ID0 == EvtPDL::getId( "omega" ) ) {
120  for ( int iPsi = 0; iPsi < 4; iPsi++ ) {
121  for ( int iGamma = 0; iGamma < 4; iGamma++ ) {
122  for ( int iChi = 0; iChi < 4; iChi++ ) {
123  EvtComplex T2 = fT2(
124  root->getDaug( 1 )->getP4(),
125  root->getDaug( 0 )->getP4(), root->epsTensor( iChi ),
126  root->getDaug( 1 )->epsParent( iPsi ).conj(),
127  root->getDaug( 0 )->epsParent( iGamma ).conj() );
128  EvtComplex T3 = fT3(
129  root->getDaug( 1 )->getP4(),
130  root->getDaug( 0 )->getP4(), root->epsTensor( iChi ),
131  root->getDaug( 1 )->epsParent( iPsi ).conj(),
132  root->getDaug( 0 )->epsParent( iGamma ).conj() );
133  // cout << "AVL:: omega"<<endl;
134  amp = gOmega * T2 + gPOmega * T3;
135  vertex( iChi, iGamma, iPsi, amp );
136  };
137  };
138  };
139  } else if ( _ID0 == EvtPDL::getId( "rho0" ) ) {
140  for ( int iPsi = 0; iPsi < 4; iPsi++ ) {
141  for ( int iGamma = 0; iGamma < 4; iGamma++ ) {
142  for ( int iChi = 0; iChi < 4; iChi++ ) {
143  EvtComplex T2 = fT2(
144  root->getDaug( 1 )->getP4(),
145  root->getDaug( 0 )->getP4(), root->epsTensor( iChi ),
146  root->getDaug( 1 )->epsParent( iPsi ).conj(),
147  root->getDaug( 0 )->epsParent( iGamma ).conj() );
148  EvtComplex T3 = fT3(
149  root->getDaug( 1 )->getP4(),
150  root->getDaug( 0 )->getP4(), root->epsTensor( iChi ),
151  root->getDaug( 1 )->epsParent( iPsi ).conj(),
152  root->getDaug( 0 )->epsParent( iGamma ).conj() );
153  // cout << "AVL:: rho"<<endl;
154  amp = gRho * T2 + gPRho * T3;
155  vertex( iChi, iGamma, iPsi, amp );
156  };
157  };
158  };
159  } else {
160  cout << "AVL:: Not realized yet" << endl;
161  };
162 }
163 
165 {
166  // cout<<" (* AVL: ==== EvtXPsiGamma::init() ============ *)"<<endl;
167 
168  ncall = 0;
169 
170  checkNArg( 0 );
171  checkNDaug( 2 );
172 
173  checkSpinParent( EvtSpinType::TENSOR );
174 
175  // checkSpinDaughter(0,EvtSpinType::PHOTON);
176  checkSpinDaughter( 1, EvtSpinType::VECTOR );
177 
178  _ID0 = getDaug( 0 );
179  /* if(_ID0 == EvtPDL::getId("gamma") ) {
180  cout << "AVL:: gamma"<<endl;
181  }
182  else if(_ID0 == EvtPDL::getId("omega") ) {
183  cout << "AVL:: omega"<<endl;
184  }
185  else if(_ID0 == EvtPDL::getId("rho0") ) {
186  cout << "AVL:: rho"<<endl;
187  };
188 */
189 }
190 
192 {
193  if ( _ID0 == EvtPDL::getId( "gamma" ) )
194  setProbMax( 2.400 );
195  else if ( _ID0 == EvtPDL::getId( "omega" ) )
196  setProbMax( 16. );
197  else if ( _ID0 == EvtPDL::getId( "rho0" ) )
198  setProbMax( 70. );
199 }
EvtTensor3C directProd(const EvtVector3C &c1, const EvtVector3C &c2)
void init() override
EvtDecayBase * clone() override
std::string getName() override
EvtTensor4C dual(const EvtTensor4C &t2)
EvtComplex fT3(EvtVector4R p, EvtVector4R q, EvtTensor4C epsPI, EvtVector4C epsEps, EvtVector4C epsEta)
void initProbMax() override
EvtVector4C cont1(const EvtVector4C &v4) const
virtual EvtVector4C epsParentPhoton(int i)
double initializePhaseSpace(unsigned int numdaughter, EvtId *daughters, bool forceResetMasses=false, double poleSize=-1., int whichTwo1=0, int whichTwo2=1)
virtual EvtVector4C epsParent(int i) const
void decay(EvtParticle *p) override
EvtComplex fT2(EvtVector4R p, EvtVector4R q, EvtTensor4C epsPI, EvtVector4C epsEps, EvtVector4C epsEta)
static EvtId getId(const std::string &name)
Definition: EvtPDL.cpp:287
const EvtVector4R & getP4() const
virtual EvtTensor4C epsTensor(int i) const
EvtParticle * getDaug(int i)
Definition: EvtParticle.cpp:91
EvtVector4C conj() const
Definition: EvtVector4C.hh:202