diff --git a/EvtGenBase/Evt3Rank3C.hh b/EvtGenBase/Evt3Rank3C.hh
deleted file mode 100644
--- a/EvtGenBase/Evt3Rank3C.hh
+++ /dev/null
@@ -1,120 +0,0 @@
-
-/***********************************************************************
-* Copyright 1998-2020 CERN for the benefit of the EvtGen authors *
-* *
-* This file is part of EvtGen. *
-* *
-* EvtGen is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU General Public License as published by *
-* the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* EvtGen is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU General Public License for more details. *
-* *
-* You should have received a copy of the GNU General Public License *
-* along with EvtGen. If not, see . *
-***********************************************************************/
-
-#ifndef EVT3RANK3C_HH
-#define EVT3RANK3C_HH
-
-#include "EvtGenBase/EvtComplex.hh"
-
-#include
-
-class EvtTensor3C;
-class EvtVector3C;
-class EvtVector3R;
-
-class Evt3Rank3C;
-inline Evt3Rank3C operator*( const EvtComplex& c, const Evt3Rank3C& t2 );
-inline Evt3Rank3C operator*( const double d, const Evt3Rank3C& t2 );
-inline Evt3Rank3C operator*( const Evt3Rank3C& t2, const EvtComplex& c );
-inline Evt3Rank3C operator*( const Evt3Rank3C& t2, const double d );
-inline Evt3Rank3C operator+( const Evt3Rank3C& t1, const Evt3Rank3C& t2 );
-inline Evt3Rank3C operator-( const Evt3Rank3C& t1, const Evt3Rank3C& t2 );
-Evt3Rank3C directProd( const EvtVector3C& c1, const EvtVector3C& c2,
- const EvtVector3C& c3 );
-Evt3Rank3C conj( const Evt3Rank3C& t2 );
-
-class Evt3Rank3C final {
- friend Evt3Rank3C operator*( const EvtComplex& c, const Evt3Rank3C& t2 );
- friend Evt3Rank3C operator*( const double d, const Evt3Rank3C& t2 );
- friend Evt3Rank3C operator*( const Evt3Rank3C& t2, const EvtComplex& c );
- friend Evt3Rank3C operator*( const Evt3Rank3C& t2, const double d );
- friend Evt3Rank3C operator+( const Evt3Rank3C& t1, const Evt3Rank3C& t2 );
- friend Evt3Rank3C operator-( const Evt3Rank3C& t1, const Evt3Rank3C& t2 );
- friend Evt3Rank3C directProd( const EvtVector3C& c1, const EvtVector3C& c2,
- const EvtVector3C& c3 );
- friend Evt3Rank3C conj( const Evt3Rank3C& t2 );
-
- friend std::ostream& operator<<( std::ostream& s, const Evt3Rank3C& t2 );
-
- public:
- Evt3Rank3C();
- Evt3Rank3C( const Evt3Rank3C& t1 );
- Evt3Rank3C& operator=( const Evt3Rank3C& t1 );
- inline void set( int i, int j, int k, const EvtComplex& c );
- inline const EvtComplex& get( int i, int j, int k ) const;
- void zero();
-
- Evt3Rank3C& operator+=( const Evt3Rank3C& t2 );
- Evt3Rank3C& operator-=( const Evt3Rank3C& t2 );
- Evt3Rank3C& operator*=( const double d );
- Evt3Rank3C& operator*=( const EvtComplex& c );
- Evt3Rank3C conj() const;
- EvtTensor3C cont1( const EvtVector3C& v ) const;
- EvtTensor3C cont2( const EvtVector3C& v ) const;
- EvtTensor3C cont3( const EvtVector3C& v ) const;
- EvtTensor3C cont1( const EvtVector3R& v ) const;
- EvtTensor3C cont2( const EvtVector3R& v ) const;
- EvtTensor3C cont3( const EvtVector3R& v ) const;
-
- private:
- EvtComplex t[3][3][3];
-};
-
-inline Evt3Rank3C operator*( const EvtComplex& c, const Evt3Rank3C& t2 )
-{
- return Evt3Rank3C( t2 ) *= c;
-}
-
-inline Evt3Rank3C operator*( const double d, const Evt3Rank3C& t2 )
-{
- return Evt3Rank3C( t2 ) *= d;
-}
-
-inline Evt3Rank3C operator*( const Evt3Rank3C& t2, const EvtComplex& c )
-{
- return Evt3Rank3C( t2 ) *= c;
-}
-
-inline Evt3Rank3C operator*( const Evt3Rank3C& t2, const double d )
-{
- return Evt3Rank3C( t2 ) *= d;
-}
-
-inline Evt3Rank3C operator+( const Evt3Rank3C& t1, const Evt3Rank3C& t2 )
-{
- return Evt3Rank3C( t1 ) += t2;
-}
-
-inline Evt3Rank3C operator-( const Evt3Rank3C& t1, const Evt3Rank3C& t2 )
-{
- return Evt3Rank3C( t1 ) -= t2;
-}
-
-inline void Evt3Rank3C::set( int i, int j, int k, const EvtComplex& c )
-{
- t[i][j][k] = c;
-}
-
-inline const EvtComplex& Evt3Rank3C::get( int i, int j, int k ) const
-{
- return t[i][j][k];
-}
-
-#endif
diff --git a/EvtGenBase/EvtAbsBinning.hh b/EvtGenBase/EvtAbsBinning.hh
deleted file mode 100644
--- a/EvtGenBase/EvtAbsBinning.hh
+++ /dev/null
@@ -1,53 +0,0 @@
-
-/***********************************************************************
-* Copyright 1998-2020 CERN for the benefit of the EvtGen authors *
-* *
-* This file is part of EvtGen. *
-* *
-* EvtGen is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU General Public License as published by *
-* the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* EvtGen is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU General Public License for more details. *
-* *
-* You should have received a copy of the GNU General Public License *
-* along with EvtGen. If not, see . *
-***********************************************************************/
-
-#ifndef EVT_ABS_BINNING_HH
-#define EVT_ABS_BINNING_HH
-#define BIN_OUTSIDE -1
-
-#include
-
-/*
- * Data point to bin value mapping
- */
-
-template
-class EvtAbsBinning {
- public:
- EvtAbsBinning() {}
- EvtAbsBinning( const EvtAbsBinning& other ) {}
- virtual ~EvtAbsBinning() {}
-
- virtual EvtAbsBinning* clone() const = 0;
- virtual int getBin( const T& point ) const = 0;
- virtual T getBinPoint( int bin ) const = 0;
- virtual double size( int bin ) const = 0;
-
- virtual int nTypes() const = 0;
-
- virtual char* typeLabel( int i ) const
- {
- char* a = new char[128];
- sprintf( a, "%d", i );
- return a;
- }
-};
-
-#endif
diff --git a/EvtGenBase/EvtAmp.hh b/EvtGenBase/EvtAmp.hh
--- a/EvtGenBase/EvtAmp.hh
+++ b/EvtGenBase/EvtAmp.hh
@@ -80,7 +80,6 @@
private:
friend class EvtDecayAmp;
- friend class EvtKstarstargamma;
void setNDaug( int n );
void setNState( int parent_states, int* daug_states );
diff --git a/EvtGenBase/EvtAmpAmpPdf.hh b/EvtGenBase/EvtAmpAmpPdf.hh
deleted file mode 100644
--- a/EvtGenBase/EvtAmpAmpPdf.hh
+++ /dev/null
@@ -1,89 +0,0 @@
-
-/***********************************************************************
-* Copyright 1998-2020 CERN for the benefit of the EvtGen authors *
-* *
-* This file is part of EvtGen. *
-* *
-* EvtGen is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU General Public License as published by *
-* the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* EvtGen is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU General Public License for more details. *
-* *
-* You should have received a copy of the GNU General Public License *
-* along with EvtGen. If not, see . *
-***********************************************************************/
-
-#ifndef EVT_AMP_AMP_PDF_HH
-#define EVT_AMP_AMP_PDF_HH
-
-// From the product A1A2* four PDF terms can be constructed, by taking the positive
-// and the negative parts or the real and imaginary part of the product.
-
-#include "EvtGenBase/EvtAmplitude.hh"
-#include "EvtGenBase/EvtMacros.hh"
-#include "EvtGenBase/EvtPdf.hh"
-
-#include
-
-enum
-{
- POSRE = 0,
- NEGRE,
- POSIM,
- NEGIM
-};
-
-template
-class EvtAmpAmpPdf : public EvtPdf {
- public:
- EvtAmpAmpPdf() {}
- EvtAmpAmpPdf( int type, const EvtAmplitude& amp1,
- const EvtAmplitude& amp2 ) :
- EvtPdf(), _type( type ), _amp1( amp1.clone() ), _amp2( amp2.clone() )
- {
- }
- EvtAmpAmpPdf( const EvtAmpAmpPdf& other ) :
- EvtPdf( other ),
- _type( other._type ),
- COPY_PTR( _amp1 ),
- COPY_PTR( _amp2 )
- {
- }
- virtual ~EvtAmpAmpPdf()
- {
- delete _amp1;
- delete _amp2;
- }
-
- virtual EvtAmpAmpPdf* clone() const { return new EvtAmpAmpPdf( *this ); }
-
- virtual double pdf( const T& p ) const
- {
- EvtComplex amp1 = _amp1->evaluate( p );
- EvtComplex amp2 = _amp2->evaluate( p );
- EvtComplex pr = amp1 * conj( amp2 );
-
- if ( _type == POSRE )
- return real( pr ) > 0 ? real( pr ) : 0.;
- if ( _type == NEGRE )
- return real( pr ) < 0 ? -real( pr ) : 0.;
- if ( _type == POSIM )
- return imag( pr ) > 0 ? imag( pr ) : 0.;
- if ( _type == NEGIM )
- return imag( pr ) < 0 ? -imag( pr ) : 0.;
-
- assert( 0 );
- }
-
- private:
- int _type;
- EvtAmplitude* _amp1;
- EvtAmplitude* _amp2;
-};
-
-#endif
diff --git a/EvtGenBase/EvtAmpIndex.hh b/EvtGenBase/EvtAmpIndex.hh
deleted file mode 100644
--- a/EvtGenBase/EvtAmpIndex.hh
+++ /dev/null
@@ -1,45 +0,0 @@
-
-/***********************************************************************
-* Copyright 1998-2020 CERN for the benefit of the EvtGen authors *
-* *
-* This file is part of EvtGen. *
-* *
-* EvtGen is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU General Public License as published by *
-* the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* EvtGen is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU General Public License for more details. *
-* *
-* You should have received a copy of the GNU General Public License *
-* along with EvtGen. If not, see . *
-***********************************************************************/
-
-#ifndef EVTAMPINDEX_HH
-#define EVTAMPINDEX_HH
-
-#include
-
-class EvtAmpIndex {
- friend class EvtAmpSubIndex;
-
- public:
- EvtAmpIndex( std::vector ind );
- virtual ~EvtAmpIndex() {}
-
- void reset();
- bool next();
-
- int index();
-
- private:
- std::vector _ind;
- int _size;
- std::vector _state;
- std::vector _nstate;
-};
-
-#endif
diff --git a/EvtGenBase/EvtAmpSubIndex.hh b/EvtGenBase/EvtAmpSubIndex.hh
deleted file mode 100644
--- a/EvtGenBase/EvtAmpSubIndex.hh
+++ /dev/null
@@ -1,41 +0,0 @@
-
-/***********************************************************************
-* Copyright 1998-2020 CERN for the benefit of the EvtGen authors *
-* *
-* This file is part of EvtGen. *
-* *
-* EvtGen is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU General Public License as published by *
-* the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* EvtGen is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU General Public License for more details. *
-* *
-* You should have received a copy of the GNU General Public License *
-* along with EvtGen. If not, see . *
-***********************************************************************/
-
-#ifndef EVTAMPSUBINDEX_HH
-#define EVTAMPSUBINDEX_HH
-
-#include
-class EvtAmpIndex;
-
-class EvtAmpSubIndex {
- public:
- EvtAmpSubIndex( EvtAmpIndex* ind, std::vector sub );
- virtual ~EvtAmpSubIndex() {}
-
- int index();
-
- private:
- EvtAmpIndex* _ind;
- std::vector _sub;
- int _size;
- std::vector _nstate;
-};
-
-#endif
diff --git a/EvtGenBase/EvtBreitWignerPdf.hh b/EvtGenBase/EvtBreitWignerPdf.hh
deleted file mode 100644
--- a/EvtGenBase/EvtBreitWignerPdf.hh
+++ /dev/null
@@ -1,52 +0,0 @@
-
-/***********************************************************************
-* Copyright 1998-2020 CERN for the benefit of the EvtGen authors *
-* *
-* This file is part of EvtGen. *
-* *
-* EvtGen is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU General Public License as published by *
-* the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* EvtGen is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU General Public License for more details. *
-* *
-* You should have received a copy of the GNU General Public License *
-* along with EvtGen. If not, see . *
-***********************************************************************/
-
-#ifndef EVT_BREIT_WIGNER_PDF_HH
-#define EVT_BREIT_WIGNER_PDF_HH
-
-#include "EvtGenBase/EvtIntegPdf1D.hh"
-
-// Breit-Wigner PDF
-
-class EvtBreitWignerPdf : public EvtIntegPdf1D {
- public:
- EvtBreitWignerPdf( double min, double max, double m0, double g0 );
- EvtBreitWignerPdf( const EvtBreitWignerPdf& other );
-
- double pdf( const EvtPoint1D& x ) const override;
- EvtPdf* clone() const override
- {
- return new EvtBreitWignerPdf( *this );
- }
-
- double pdfIntegral( double m ) const override;
- double pdfIntegralInverse( double x ) const override;
-
- // accessors
-
- inline double m0() const { return _m0; }
- inline double g0() const { return _g0; }
-
- private:
- double _m0;
- double _g0;
-};
-
-#endif
diff --git a/EvtGenBase/EvtDecayParm.hh b/EvtGenBase/EvtDecayParm.hh
deleted file mode 100644
--- a/EvtGenBase/EvtDecayParm.hh
+++ /dev/null
@@ -1,56 +0,0 @@
-
-/***********************************************************************
-* Copyright 1998-2020 CERN for the benefit of the EvtGen authors *
-* *
-* This file is part of EvtGen. *
-* *
-* EvtGen is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU General Public License as published by *
-* the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* EvtGen is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU General Public License for more details. *
-* *
-* You should have received a copy of the GNU General Public License *
-* along with EvtGen. If not, see . *
-***********************************************************************/
-
-#ifndef EVTDECAYPARM_HH
-#define EVTDECAYPARM_HH
-
-#include
-
-// Description: Class to keep the arguments and daughters of a decay
-
-class EvtParticle;
-
-typedef void ( *fcnPtr )( EvtParticle*, int, int*, double* );
-
-class EvtDecayParm {
- public:
- EvtDecayParm();
- ~EvtDecayParm();
-
- void init( fcnPtr pfcn, int ndaug, int* daugs, int narg, double* args,
- std::string name );
-
- int getNDaug() { return itsndaug; }
- int getNArg() { return itsnarg; }
- int* getDaugs() { return itsdaugs; }
- double* getArgs() { return itsargs; }
- fcnPtr getfcnPtr() { return itsfcn; }
- std::string getModelName() { return modelname; }
-
- private:
- fcnPtr itsfcn;
- int itsndaug;
- int* itsdaugs;
- int itsnarg;
- double* itsargs;
- std::string modelname;
-};
-
-#endif
diff --git a/EvtGenBase/EvtIntegPdf1D.hh b/EvtGenBase/EvtIntegPdf1D.hh
deleted file mode 100644
--- a/EvtGenBase/EvtIntegPdf1D.hh
+++ /dev/null
@@ -1,48 +0,0 @@
-
-/***********************************************************************
-* Copyright 1998-2020 CERN for the benefit of the EvtGen authors *
-* *
-* This file is part of EvtGen. *
-* *
-* EvtGen is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU General Public License as published by *
-* the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* EvtGen is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU General Public License for more details. *
-* *
-* You should have received a copy of the GNU General Public License *
-* along with EvtGen. If not, see . *
-***********************************************************************/
-
-#ifndef EVT_INTEG_PDF_1D_HH
-#define EVT_INTEG_PDF_1D_HH
-
-#include "EvtGenBase/EvtPdf.hh"
-#include "EvtGenBase/EvtPoint1D.hh"
-
-// Analytically integrable one dimensional PDF.
-
-class EvtIntegPdf1D : public EvtPdf {
- public:
- EvtIntegPdf1D( double min, double max );
- EvtIntegPdf1D( const EvtIntegPdf1D& );
-
- // Pdf integral function and its inverse to be defined in subclasses
-
- virtual double pdfIntegral( double x ) const = 0;
- virtual double pdfIntegralInverse( double x ) const = 0;
-
- using EvtPdf::compute_integral;
- EvtValError compute_integral() const override;
- EvtPoint1D randomPoint() override;
-
- protected:
- double _min;
- double _max;
-};
-
-#endif
diff --git a/EvtGenBase/EvtMBreitWigner.hh b/EvtGenBase/EvtMBreitWigner.hh
deleted file mode 100644
--- a/EvtGenBase/EvtMBreitWigner.hh
+++ /dev/null
@@ -1,41 +0,0 @@
-
-/***********************************************************************
-* Copyright 1998-2020 CERN for the benefit of the EvtGen authors *
-* *
-* This file is part of EvtGen. *
-* *
-* EvtGen is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU General Public License as published by *
-* the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* EvtGen is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU General Public License for more details. *
-* *
-* You should have received a copy of the GNU General Public License *
-* along with EvtGen. If not, see . *
-***********************************************************************/
-
-#ifndef __EVTMBREITWIGNER_HH__
-#define __EVTMBREITWIGNER_HH__
-
-#include "EvtGenBase/EvtMRes.hh"
-
-class EvtMBreitWigner : public EvtMLineShape {
- public:
- EvtMBreitWigner( const EvtId& id, const vector& args );
- ~EvtMBreitWigner(){};
-
- EvtComplex shape( const vector& product ) const override;
-
- EvtMLineShape* duplicate() const override;
-
- private:
- EvtId _id;
-
- double _width, _resmass;
-};
-
-#endif
diff --git a/EvtGenBase/EvtMHelAmp.hh b/EvtGenBase/EvtMHelAmp.hh
deleted file mode 100644
--- a/EvtGenBase/EvtMHelAmp.hh
+++ /dev/null
@@ -1,40 +0,0 @@
-
-/***********************************************************************
-* Copyright 1998-2020 CERN for the benefit of the EvtGen authors *
-* *
-* This file is part of EvtGen. *
-* *
-* EvtGen is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU General Public License as published by *
-* the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* EvtGen is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU General Public License for more details. *
-* *
-* You should have received a copy of the GNU General Public License *
-* along with EvtGen. If not, see . *
-***********************************************************************/
-
-#ifndef __EVTMHELAMP_HH__
-#define __EVTMHELAMP_HH__
-
-#include "EvtGenBase/EvtMRes.hh"
-
-class EvtMHelAmp : public EvtMRes {
- public:
- EvtMHelAmp( const EvtId& id, EvtMLineShape*, const vector&,
- const vector& );
- ~EvtMHelAmp(){};
-
- EvtSpinAmp amplitude( const vector& product ) const override;
-
- EvtMNode* duplicate() const override;
-
- private:
- vector _elem;
-};
-
-#endif
diff --git a/EvtGenBase/EvtMNode.hh b/EvtGenBase/EvtMNode.hh
deleted file mode 100644
--- a/EvtGenBase/EvtMNode.hh
+++ /dev/null
@@ -1,90 +0,0 @@
-
-/***********************************************************************
-* Copyright 1998-2020 CERN for the benefit of the EvtGen authors *
-* *
-* This file is part of EvtGen. *
-* *
-* EvtGen is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU General Public License as published by *
-* the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* EvtGen is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU General Public License for more details. *
-* *
-* You should have received a copy of the GNU General Public License *
-* along with EvtGen. If not, see . *
-***********************************************************************/
-
-#ifndef __EVTMNODE_HH__
-#define __EVTMNODE_HH__
-
-#include "EvtGenBase/EvtComplex.hh"
-#include "EvtGenBase/EvtPDL.hh"
-#include "EvtGenBase/EvtSpinAmp.hh"
-#include "EvtGenBase/EvtSymTable.hh"
-#include "EvtGenBase/EvtVector4R.hh"
-
-#include
-using std::vector;
-
-#include
-using std::string;
-
-class EvtMNode {
- public:
- EvtMNode() {}
- virtual ~EvtMNode(){};
-
- // calculate the amplitude associated event this->children return a
- // vector of the form A_{\lambda this} and sum over allowed angular
- // momenta of the children
- virtual EvtSpinAmp amplitude( const vector& product ) const = 0;
-
- // get the 4 vector associated with this node
- EvtVector4R get4vector( const vector& product ) const;
-
- // get twice the spin of the particle
- int getspin() const { return _twospin; }
- EvtSpinType::spintype getspintype() const
- {
- return EvtPDL::getSpinType( _id );
- }
-
- // get the id of this node
- EvtId getid() const { return _id; }
-
- // return which particles this is a combination of
- const vector& getresonance() const { return _resonance; }
-
- void setparent( EvtMNode* parent ) { _parent = parent; }
- EvtMNode* getparent() const { return _parent; }
-
- // get the number of children that this node has
- virtual int getnchild() const = 0;
-
- // return the value of the resonance shape
- virtual EvtComplex line( const vector& product ) const = 0;
-
- // return a pointer node
- virtual EvtMNode* duplicate() const = 0;
-
- protected:
- // store the EvtId of the particle (just in case we need it to access
- // further informatoin about it)
- EvtId _id;
-
- // store TWICE the spin of this resonance (this is to deal with spin 1/2
- int _twospin;
-
- // store the particles that form this resonance, this should match up
- // with the child nodes from below, and is calculated internally
- vector _resonance;
-
- // store the parent node of this one
- EvtMNode* _parent;
-};
-
-#endif
diff --git a/EvtGenBase/EvtMParticle.hh b/EvtGenBase/EvtMParticle.hh
deleted file mode 100644
--- a/EvtGenBase/EvtMParticle.hh
+++ /dev/null
@@ -1,41 +0,0 @@
-
-/***********************************************************************
-* Copyright 1998-2020 CERN for the benefit of the EvtGen authors *
-* *
-* This file is part of EvtGen. *
-* *
-* EvtGen is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU General Public License as published by *
-* the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* EvtGen is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU General Public License for more details. *
-* *
-* You should have received a copy of the GNU General Public License *
-* along with EvtGen. If not, see . *
-***********************************************************************/
-
-#ifndef __EVTMPARTICLE_HH__
-#define __EVTMPARTICLE_HH__
-
-#include "EvtGenBase/EvtMNode.hh"
-
-class EvtMParticle : public EvtMNode {
- public:
- EvtMParticle( int label, const EvtId& id );
- ~EvtMParticle() {}
- EvtSpinAmp amplitude( const vector& product ) const override;
- int getnchild() const override { return 0; }
-
- EvtComplex line( const vector& /*product*/ ) const override
- {
- return EvtComplex( 1.0, 0.0 );
- }
-
- EvtMNode* duplicate() const override;
-};
-
-#endif
diff --git a/EvtGenBase/EvtMRes.hh b/EvtGenBase/EvtMRes.hh
deleted file mode 100644
--- a/EvtGenBase/EvtMRes.hh
+++ /dev/null
@@ -1,63 +0,0 @@
-
-/***********************************************************************
-* Copyright 1998-2020 CERN for the benefit of the EvtGen authors *
-* *
-* This file is part of EvtGen. *
-* *
-* EvtGen is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU General Public License as published by *
-* the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* EvtGen is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU General Public License for more details. *
-* *
-* You should have received a copy of the GNU General Public License *
-* along with EvtGen. If not, see . *
-***********************************************************************/
-
-#ifndef __EVTMRES_HH__
-#define __EVTMRES_HH__
-
-#include "EvtGenBase/EvtMNode.hh"
-
-class EvtMRes;
-
-class EvtMLineShape {
- public:
- virtual ~EvtMLineShape(){};
-
- void setres( EvtMRes* n ) { _node = n; }
- virtual EvtComplex shape( const vector& product ) const = 0;
-
- virtual EvtMLineShape* duplicate() const = 0;
-
- protected:
- EvtMRes* _node;
-};
-
-class EvtMRes : public EvtMNode {
- public:
- ~EvtMRes();
-
- int getnchild() const override { return _children.size(); }
-
- EvtComplex line( const vector& product ) const override
- {
- return _lineshape->shape( product );
- }
-
- protected:
- // store the child nodes
- vector _children;
-
- // store the parametrization amplitudes in some kind
- EvtSpinAmp _amp;
-
- // store the lineshape of the resonance
- EvtMLineShape* _lineshape;
-};
-
-#endif
diff --git a/EvtGenBase/EvtMTree.hh b/EvtGenBase/EvtMTree.hh
deleted file mode 100644
--- a/EvtGenBase/EvtMTree.hh
+++ /dev/null
@@ -1,80 +0,0 @@
-
-/***********************************************************************
-* Copyright 1998-2020 CERN for the benefit of the EvtGen authors *
-* *
-* This file is part of EvtGen. *
-* *
-* EvtGen is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU General Public License as published by *
-* the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* EvtGen is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU General Public License for more details. *
-* *
-* You should have received a copy of the GNU General Public License *
-* along with EvtGen. If not, see . *
-***********************************************************************/
-
-#ifndef __EVTMTREE_HH__
-#define __EVTMTREE_HH__
-
-#include "EvtGenBase/EvtComplex.hh"
-#include "EvtGenBase/EvtMNode.hh"
-#include "EvtGenBase/EvtMParticle.hh"
-#include "EvtGenBase/EvtMRes.hh"
-#include "EvtGenBase/EvtPDL.hh"
-#include "EvtGenBase/EvtSpinAmp.hh"
-#include "EvtGenBase/EvtVector4R.hh"
-
-#include
-using std::vector;
-
-#include
-using std::string;
-
-typedef string::const_iterator ptype;
-
-class EvtParticle;
-
-class EvtMTree {
- public:
- EvtMTree( const EvtId*, unsigned int );
- ~EvtMTree();
-
- // return the invariant amplitude of the entire tree
- EvtSpinAmp amplitude( EvtParticle* ) const;
-
- // add a decay tree to the list of trees that we posess
- void addtree( const string& );
-
- private:
- vector _root;
- vector _lbltbl;
- double _norm;
-
- bool parsecheck( char, const string& );
- void parseerror( bool, ptype&, ptype&, ptype& );
-
- string parseId( ptype&, ptype&, ptype& );
- string parseKey( ptype&, ptype&, ptype& );
- vector parseArg( ptype&, ptype&, ptype& );
- vector parseAmps( ptype&, ptype&, ptype& );
- vector duplicate( const vector& ) const;
- vector> unionChildren( const string&,
- vector>& );
- vector> parseChildren( ptype&, ptype&, ptype& );
- vector parsenode( const string&, bool );
- bool validTree( const EvtMNode* ) const;
-
- vector makeparticles( const string& );
- EvtMRes* makeresonance( const EvtId&, const string&, const vector&,
- const string&, const vector&,
- const vector& );
-
- EvtSpinAmp getrotation( EvtParticle* ) const;
-};
-
-#endif
diff --git a/EvtGenBase/EvtMTrivialLS.hh b/EvtGenBase/EvtMTrivialLS.hh
deleted file mode 100644
--- a/EvtGenBase/EvtMTrivialLS.hh
+++ /dev/null
@@ -1,36 +0,0 @@
-
-/***********************************************************************
-* Copyright 1998-2020 CERN for the benefit of the EvtGen authors *
-* *
-* This file is part of EvtGen. *
-* *
-* EvtGen is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU General Public License as published by *
-* the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* EvtGen is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU General Public License for more details. *
-* *
-* You should have received a copy of the GNU General Public License *
-* along with EvtGen. If not, see . *
-***********************************************************************/
-
-#ifndef __EVTMTRIVIALLS_H__
-#define __EVTMTRIVIALLS_H__
-
-#include "EvtGenBase/EvtMRes.hh"
-
-class EvtMTrivialLS : public EvtMLineShape {
- public:
- EvtMTrivialLS( const EvtId& /*id*/, const vector& /*args*/ ){};
- ~EvtMTrivialLS(){};
-
- EvtComplex shape( const vector& product ) const override;
-
- EvtMLineShape* duplicate() const override;
-};
-
-#endif
diff --git a/EvtGenBase/EvtPointPred.hh b/EvtGenBase/EvtPointPred.hh
deleted file mode 100644
--- a/EvtGenBase/EvtPointPred.hh
+++ /dev/null
@@ -1,38 +0,0 @@
-
-/***********************************************************************
-* Copyright 1998-2020 CERN for the benefit of the EvtGen authors *
-* *
-* This file is part of EvtGen. *
-* *
-* EvtGen is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU General Public License as published by *
-* the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* EvtGen is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU General Public License for more details. *
-* *
-* You should have received a copy of the GNU General Public License *
-* along with EvtGen. If not, see . *
-***********************************************************************/
-
-#ifndef EVT_POINT_PRED_HH
-#define EVT_POINT_PRED_HH
-
-// Predicate testing validity of a point. The point class must provide
-// bool isValid() method
-
-template
-class EvtPointPred {
- public:
- typedef Point argument_type;
- typedef bool result_type;
-
- EvtPointPred() {}
- EvtPointPred( const EvtPointPred& ) {}
- ~EvtPointPred() {}
-
- result_type operator()( argument_type x ) { return x.isValid(); }
-};
diff --git a/EvtGenBase/EvtPto3PAmpSmpResolution.hh b/EvtGenBase/EvtPto3PAmpSmpResolution.hh
deleted file mode 100644
--- a/EvtGenBase/EvtPto3PAmpSmpResolution.hh
+++ /dev/null
@@ -1,54 +0,0 @@
-
-/***********************************************************************
-* Copyright 1998-2020 CERN for the benefit of the EvtGen authors *
-* *
-* This file is part of EvtGen. *
-* *
-* EvtGen is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU General Public License as published by *
-* the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* EvtGen is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU General Public License for more details. *
-* *
-* You should have received a copy of the GNU General Public License *
-* along with EvtGen. If not, see . *
-***********************************************************************/
-
-#ifndef EVT_PTO3P_AMP_SMPRSL_HH
-#define EVT_PTO3P_AMP_SMPRSL_HH
-
-#include "EvtGenBase/EvtCyclic3.hh"
-#include "EvtGenBase/EvtPto3PAmp.hh"
-
-class EvtComplex;
-
-class EvtPto3PAmpSmpResolution : public EvtPto3PAmp {
- public:
- EvtPto3PAmpSmpResolution( EvtDalitzPlot dp, EvtCyclic3::Pair pairAng,
- EvtCyclic3::Pair pairRes,
- EvtSpinType::spintype spin,
- const EvtPropagator& prop, NumType typeN );
-
- EvtAmplitude* clone() const override
- {
- return new EvtPto3PAmpSmpResolution( *this );
- }
-
- EvtComplex evalPropagator( double m ) const override;
-
- void setResolution( double bias, double sigma )
- {
- _bias = bias;
- _sigma = sigma;
- }
-
- private:
- double _bias;
- double _sigma;
-};
-
-#endif
diff --git a/EvtGenBase/EvtSpinAmp.hh b/EvtGenBase/EvtSpinAmp.hh
deleted file mode 100644
--- a/EvtGenBase/EvtSpinAmp.hh
+++ /dev/null
@@ -1,110 +0,0 @@
-
-/***********************************************************************
-* Copyright 1998-2020 CERN for the benefit of the EvtGen authors *
-* *
-* This file is part of EvtGen. *
-* *
-* EvtGen is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU General Public License as published by *
-* the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* EvtGen is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU General Public License for more details. *
-* *
-* You should have received a copy of the GNU General Public License *
-* along with EvtGen. If not, see . *
-***********************************************************************/
-
-#ifndef __EVTSPINAMP_HH__
-#define __EVTSPINAMP_HH__
-
-#include "EvtGenBase/EvtComplex.hh"
-#include "EvtGenBase/EvtSpinType.hh"
-
-#include
-using std::vector;
-
-#include
-
-class EvtSpinAmp;
-EvtSpinAmp operator*( const EvtComplex&, const EvtSpinAmp& );
-EvtSpinAmp operator*( const EvtSpinAmp&, const EvtComplex& );
-EvtSpinAmp operator/( const EvtSpinAmp&, const EvtComplex& );
-
-class EvtSpinAmp {
- friend EvtSpinAmp operator*( const EvtComplex&, const EvtSpinAmp& );
- friend EvtSpinAmp operator*( const EvtSpinAmp&, const EvtComplex& );
- friend EvtSpinAmp operator/( const EvtSpinAmp&, const EvtComplex& );
- friend std::ostream& operator<<( std::ostream&, const EvtSpinAmp& );
-
- public:
- EvtSpinAmp(){};
- EvtSpinAmp( const vector& );
- EvtSpinAmp( const vector&, const EvtComplex& );
- EvtSpinAmp( const vector&, const vector& );
- EvtSpinAmp( const EvtSpinAmp& );
-
- ~EvtSpinAmp(){};
-
- // Input to the index functions are twice the magnetic quantum number
- EvtComplex& operator()( const vector& );
- const EvtComplex& operator()( const vector& ) const;
- EvtComplex& operator()( int, ... );
- const EvtComplex& operator()( int, ... ) const;
-
- EvtSpinAmp& operator=( const EvtSpinAmp& );
-
- EvtSpinAmp operator+( const EvtSpinAmp& ) const;
- EvtSpinAmp& operator+=( const EvtSpinAmp& );
-
- EvtSpinAmp operator-( const EvtSpinAmp& ) const;
- EvtSpinAmp& operator-=( const EvtSpinAmp& );
-
- // Direct Product
- EvtSpinAmp operator*( const EvtSpinAmp& ) const;
- EvtSpinAmp& operator*=( const EvtSpinAmp& );
-
- EvtSpinAmp& operator*=( const EvtComplex& );
- EvtSpinAmp& operator/=( const EvtComplex& );
-
- // Contraction of amplitudes
- void intcont( size_t, size_t );
- void extcont( const EvtSpinAmp&, int, int );
-
- // assign this value to every member in the container
- void assign( const EvtComplex& val ) { _elem.assign( _elem.size(), val ); }
-
- // get the order of the container
- size_t rank() const { return _twospin.size(); }
-
- // get the dimension vector of the container
- const vector& dims() const { return _twospin; }
-
- // set the elements and the dimensions of the vector - useful for something
- // things eventough it is usually not the cleanest solution
- void addspin( int twospin ) { _twospin.push_back( twospin ); }
- void setelem( const vector& elem ) { _elem = elem; }
-
- bool iterate( vector& index ) const;
- vector iterinit() const;
-
- bool allowed( const vector& index ) const;
- bool iterateallowed( vector& index ) const;
- vector iterallowedinit() const;
-
- private:
- void checkindexargs( const vector& index ) const;
- void checktwospin( const vector& twospin ) const;
- int findtrueindex( const vector& index ) const;
- vector calctwospin(
- const vector& type ) const;
-
- vector _type;
- vector _twospin;
- vector _elem;
-};
-
-#endif // __EVTSPINAMP__
diff --git a/EvtGenModels/EvtBHadronic.hh b/EvtGenModels/EvtBHadronic.hh
deleted file mode 100644
--- a/EvtGenModels/EvtBHadronic.hh
+++ /dev/null
@@ -1,37 +0,0 @@
-
-/***********************************************************************
-* Copyright 1998-2020 CERN for the benefit of the EvtGen authors *
-* *
-* This file is part of EvtGen. *
-* *
-* EvtGen is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU General Public License as published by *
-* the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* EvtGen is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU General Public License for more details. *
-* *
-* You should have received a copy of the GNU General Public License *
-* along with EvtGen. If not, see . *
-***********************************************************************/
-
-#ifndef EVTBHADRONIC_HH
-#define EVTBHADRONIC_HH
-
-#include "EvtGenBase/EvtDecayAmp.hh"
-
-class EvtParticle;
-
-class EvtBHadronic : public EvtDecayAmp {
- public:
- std::string getName() override;
- EvtBHadronic* clone() override;
-
- void init() override;
- void decay( EvtParticle* p ) override;
-};
-
-#endif
diff --git a/EvtGenModels/EvtKstarstargamma.hh b/EvtGenModels/EvtKstarstargamma.hh
deleted file mode 100644
--- a/EvtGenModels/EvtKstarstargamma.hh
+++ /dev/null
@@ -1,38 +0,0 @@
-
-/***********************************************************************
-* Copyright 1998-2020 CERN for the benefit of the EvtGen authors *
-* *
-* This file is part of EvtGen. *
-* *
-* EvtGen is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU General Public License as published by *
-* the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* EvtGen is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU General Public License for more details. *
-* *
-* You should have received a copy of the GNU General Public License *
-* along with EvtGen. If not, see . *
-***********************************************************************/
-
-#ifndef EVTKSTARSTARGAMMA_HH
-#define EVTKSTARSTARGAMMA_HH
-
-#include "EvtGenBase/EvtDecayAmp.hh"
-
-class EvtParticle;
-
-class EvtKstarstargamma : public EvtDecayAmp {
- public:
- std::string getName() override;
- EvtDecayBase* clone() override;
-
- void decay( EvtParticle* p ) override;
- void init() override;
- void initProbMax() override;
-};
-
-#endif
diff --git a/EvtGenModels/EvtLambdaB2LambdaV.hh b/EvtGenModels/EvtLambdaB2LambdaV.hh
deleted file mode 100644
--- a/EvtGenModels/EvtLambdaB2LambdaV.hh
+++ /dev/null
@@ -1,180 +0,0 @@
-
-/***********************************************************************
-* Copyright 1998-2020 CERN for the benefit of the EvtGen authors *
-* *
-* This file is part of EvtGen. *
-* *
-* EvtGen is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU General Public License as published by *
-* the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* EvtGen is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU General Public License for more details. *
-* *
-* You should have received a copy of the GNU General Public License *
-* along with EvtGen. If not, see . *
-***********************************************************************/
-
-#ifndef EVTLAMBDAB2LAMBDAV_HH
-#define EVTLAMBDAB2LAMBDAV_HH
-
-#include "EvtGenBase/EvtDecayProb.hh"
-#include "EvtGenBase/EvtPDL.hh"
-#include "EvtGenBase/EvtParticle.hh"
-
-#include
-#include
-
-namespace VID {
- enum VectorMesonType
- {
- JPSI,
- OMEGA,
- RHO,
- RHO_OMEGA_MIXING
- };
-}
-
-// Description:
-// Class to generate LambdaB -> Lambda(p pi) V(Vp Vm) decays
-// with V a vector meson such as J/psi (mu+mu-)
-// Rho (pi+pi-)
-// Omega (pi+pi-)
-// Rho-omega mixing (pi+pi-)
-//
-// DECAY : LambdaB -> Lambda + vector meson
-//
-// d(Sigma)
-// -------- = 1 + A*B*cos(theta) + 2*A*Re(C*exp(i*phi))*sin(theta)
-// d(Omega)
-//
-// with A (real) : lambdaB helicity asymmetry parameter
-// B (real) : lambdaB polarisation
-// C (complex) : lambdaB density matrix element rho+-
-//
-// cf : O. Leitner, Z.J Ajaltouni, E. Conte,
-// PCCF RI 0601, ECT-05-15, LPNHE/2006-01, hep-ph/0602043
-
-class EvtLambdaB2LambdaV : public EvtDecayProb {
- public:
- EvtLambdaB2LambdaV();
-
- EvtDecayBase* clone() override;
-
- std::string getName() override;
- void init() override;
- void initProbMax() override;
- void decay( EvtParticle* lambdab ) override;
-
- private:
- //class name for report method
- std::string fname;
-
- //meson vector identity
- VID::VectorMesonType Vtype;
-
- //decay dynamics parameters
- double A;
- double B;
- EvtComplex C;
-
- //V mass generator method
- double getVMass( double MASS_LAMBDAB, double MASS_LAMBDA );
-
- //PDF generator method
- double BreitWignerRelPDF( double m, double _m0, double _g0 );
- double RhoOmegaMixingPDF( double m, double _mr, double _gr, double _mo,
- double _go );
-};
-
-//*******************************************************************
-//* *
-//* Class EvtLambda2PPiForLambdaB2LambdaV *
-//* *
-//*******************************************************************
-//
-// DECAY : Lambda -> p + pi-
-//
-// d(Sigma)
-// -------- = 1 + A*B*cos(theta) + 2*A*Re(D*exp(i*phi))*sin(theta)
-// d(Omega)
-//
-// with A (real) : lambda asymmetry parameter
-// B (real) : lambda polarisation
-// C (real) : lambdaB polarisation
-// D (complex) : lambda density matrix element rho+-
-//
-// cf : O. Leitner, Z.J Ajaltouni, E. Conte
-// PCCF RI 0601, ECT-05-15, LPNHE/2006-01, hep-ph/0602043
-
-class EvtLambda2PPiForLambdaB2LambdaV : public EvtDecayProb {
- public:
- EvtLambda2PPiForLambdaB2LambdaV();
- EvtDecayBase* clone() override;
-
- std::string getName() override;
- void init() override;
- void initProbMax() override;
- void decay( EvtParticle* lambda ) override;
-
- private:
- //class name for report method
- std::string fname;
-
- //meson vector identity
- VID::VectorMesonType Vtype;
-
- //decay dynamics parameters
- double A;
- double B;
- double C;
- EvtComplex D;
-};
-
-//*******************************************************************
-//* *
-//* Class EvtV2VpVmForLambdaB2LambdaV *
-//* *
-//*******************************************************************
-//
-// DECAY : vector meson V -> Vp + Vm
-//
-// d(Sigma)
-// -------- = (1-3A)*cos(theta)^2 + (1+A) //leptonic decays
-// d(Omega)
-//
-// d(Sigma)
-// -------- = (3A-1)*cos(theta)^2 + (1-A) //hadronic decays
-// d(Omega)
-//
-// with A (real) : V density matrix element indicating the
-// probability to be longitudinally polarized
-//
-// cf : O. Leitner, Z.J Ajaltouni, E. Conte
-// PCCF RI 0601, ECT-05-15, LPNHE/2006-01, hep-ph/0602043
-
-class EvtV2VpVmForLambdaB2LambdaV : public EvtDecayProb {
- public:
- EvtV2VpVmForLambdaB2LambdaV();
-
- EvtDecayBase* clone() override;
-
- std::string getName() override;
- void init() override;
- void initProbMax() override;
- void decay( EvtParticle* V ) override;
-
- private:
- //class name for report method
- std::string fname;
-
- //meson vector identity
- VID::VectorMesonType Vtype;
- //decay dynamics parameters
- double A;
-};
-
-#endif
diff --git a/EvtGenModels/EvtLb2Lll.hh b/EvtGenModels/EvtLb2Lll.hh
deleted file mode 100644
--- a/EvtGenModels/EvtLb2Lll.hh
+++ /dev/null
@@ -1,63 +0,0 @@
-
-/***********************************************************************
-* Copyright 1998-2020 CERN for the benefit of the EvtGen authors *
-* *
-* This file is part of EvtGen. *
-* *
-* EvtGen is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU General Public License as published by *
-* the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* EvtGen is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU General Public License for more details. *
-* *
-* You should have received a copy of the GNU General Public License *
-* along with EvtGen. If not, see . *
-***********************************************************************/
-
-#ifndef EVTLB2LLL_HH
-#define EVTLB2LLL_HH
-
-#include "EvtGenBase/EvtDecayAmp.hh"
-#include "EvtGenBase/EvtDiracSpinor.hh"
-#include "EvtGenBase/EvtTensor4C.hh"
-
-#include "EvtGenModels/EvtWilsonCoefficients.hh"
-
-// Desription: Routine to implement Lambda_b0 -> Lambda_0 l+ l- decays accroding to
-// several models: Chen. Geng.
-// Aliev. Ozpineci. Savci.
-
-class EvtLb2Lll : public EvtDecayAmp {
- public:
- std::string getName() override;
- EvtDecayBase* clone() override;
-
- void decay( EvtParticle* p ) override;
- void init() override;
- void initProbMax() override;
- void calcAmp( EvtAmp* amp, EvtParticle* parent );
-
- EvtTensor4C EvtLeptonTG5Current( const EvtDiracSpinor& d,
- const EvtDiracSpinor& dp );
-
- private:
- double m_polarizationLambdab0;
- double m_maxProbability;
- double m_poleSize;
- long m_noTries;
- double m_omega;
-
- std::string m_decayName;
- std::string m_polarizationIntroduction;
- std::string m_HEPmodel;
- std::string m_FFtype;
- std::string m_effectContribution;
-
- EvtWilsonCoefficients m_WC;
-};
-
-#endif
diff --git a/EvtGenModels/EvtMultibody.hh b/EvtGenModels/EvtMultibody.hh
deleted file mode 100644
--- a/EvtGenModels/EvtMultibody.hh
+++ /dev/null
@@ -1,50 +0,0 @@
-
-/***********************************************************************
-* Copyright 1998-2020 CERN for the benefit of the EvtGen authors *
-* *
-* This file is part of EvtGen. *
-* *
-* EvtGen is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU General Public License as published by *
-* the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* EvtGen is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU General Public License for more details. *
-* *
-* You should have received a copy of the GNU General Public License *
-* along with EvtGen. If not, see . *
-***********************************************************************/
-
-#ifndef EVTMULTIBODY_HH
-#define EVTMULTIBODY_HH
-
-#include "EvtGenBase/EvtDecayAmp.hh"
-#include "EvtGenBase/EvtMTree.hh"
-#include "EvtGenBase/EvtSpinAmp.hh"
-
-class EvtMultibody : public EvtDecayAmp {
- public:
- EvtMultibody()
- {
- _decayTree = nullptr;
- _ilist = nullptr;
- }
- ~EvtMultibody();
-
- std::string getName() override;
- EvtDecayBase* clone() override;
-
- void init() override;
- void initProbMax() override;
-
- void decay( EvtParticle* p ) override;
-
- private:
- EvtMTree* _decayTree;
- int* _ilist;
-};
-
-#endif
diff --git a/EvtGenModels/EvtPropSLPole.hh b/EvtGenModels/EvtPropSLPole.hh
deleted file mode 100644
--- a/EvtGenModels/EvtPropSLPole.hh
+++ /dev/null
@@ -1,67 +0,0 @@
-
-/***********************************************************************
-* Copyright 1998-2020 CERN for the benefit of the EvtGen authors *
-* *
-* This file is part of EvtGen. *
-* *
-* EvtGen is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU General Public License as published by *
-* the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* EvtGen is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU General Public License for more details. *
-* *
-* You should have received a copy of the GNU General Public License *
-* along with EvtGen. If not, see . *
-***********************************************************************/
-
-#ifndef EVTPROPSLPOLE_HH
-#define EVTPROPSLPOLE_HH
-
-#include "EvtGenBase/EvtDecayAmp.hh"
-#include "EvtGenBase/EvtPoint1D.hh"
-#include "EvtGenBase/EvtSemiLeptonicAmp.hh"
-#include "EvtGenBase/EvtSemiLeptonicFF.hh"
-
-#include
-
-class Evtparticle;
-
-// Description:Semileptonic decays with pole form form factors
-
-class EvtPropSLPole : public EvtDecayAmp {
- public:
- std::string getName() override;
- EvtDecayBase* clone() override;
-
- void decay( EvtParticle* p ) override;
- void initProbMax() override;
- void init() override;
-
- double calBreitWigner( EvtParticle* pmeson, EvtPoint1D point );
- double calBreitWignerBasic( double maxMass );
-
- double calcMaxProb( EvtId parent, EvtId meson, EvtId lepton, EvtId nudaug,
- EvtSemiLeptonicFF* FormFactors );
-
- private:
- bool _includeDecayFact;
- bool _includeBirthFact;
- double _mass;
- double _massMin;
- double _massMax;
- double _width;
- double _maxRange;
- EvtSpinType::spintype _spin;
-
- double _blatt;
- bool _isProbMaxSet;
-
- std::unique_ptr SLPoleffmodel;
- std::unique_ptr calcamp;
-};
-
-#endif
diff --git a/EvtGenModels/EvtVPHOtoV.hh b/EvtGenModels/EvtVPHOtoV.hh
deleted file mode 100644
--- a/EvtGenModels/EvtVPHOtoV.hh
+++ /dev/null
@@ -1,38 +0,0 @@
-
-/***********************************************************************
-* Copyright 1998-2020 CERN for the benefit of the EvtGen authors *
-* *
-* This file is part of EvtGen. *
-* *
-* EvtGen is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU General Public License as published by *
-* the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* EvtGen is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU General Public License for more details. *
-* *
-* You should have received a copy of the GNU General Public License *
-* along with EvtGen. If not, see . *
-***********************************************************************/
-
-#ifndef EVTVPHOTOV_HH
-#define EVTVPHOTOV_HH
-
-#include "EvtGenBase/EvtDecayAmp.hh"
-
-class EvtParticle;
-
-class EvtVPHOtoV : public EvtDecayAmp {
- public:
- std::string getName() override;
- EvtDecayBase* clone() override;
-
- void decay( EvtParticle* p ) override;
- void init() override;
- void initProbMax() override;
-};
-
-#endif
diff --git a/EvtGenModels/EvtVPHOtoVISR.hh b/EvtGenModels/EvtVPHOtoVISR.hh
deleted file mode 100644
--- a/EvtGenModels/EvtVPHOtoVISR.hh
+++ /dev/null
@@ -1,38 +0,0 @@
-
-/***********************************************************************
-* Copyright 1998-2020 CERN for the benefit of the EvtGen authors *
-* *
-* This file is part of EvtGen. *
-* *
-* EvtGen is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU General Public License as published by *
-* the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* EvtGen is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU General Public License for more details. *
-* *
-* You should have received a copy of the GNU General Public License *
-* along with EvtGen. If not, see . *
-***********************************************************************/
-
-#ifndef EVTVPHOTOVISR_HH
-#define EVTVPHOTOVISR_HH
-
-#include "EvtGenBase/EvtDecayAmp.hh"
-
-class EvtParticle;
-
-class EvtVPHOtoVISR : public EvtDecayAmp {
- public:
- std::string getName() override;
- EvtDecayBase* clone() override;
-
- void decay( EvtParticle* p ) override;
- void init() override;
- void initProbMax() override;
-};
-
-#endif
diff --git a/EvtGenModels/EvtVubAC.hh b/EvtGenModels/EvtVubAC.hh
deleted file mode 100644
--- a/EvtGenModels/EvtVubAC.hh
+++ /dev/null
@@ -1,81 +0,0 @@
-
-/***********************************************************************
-* Copyright 1998-2020 CERN for the benefit of the EvtGen authors *
-* *
-* This file is part of EvtGen. *
-* *
-* EvtGen is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU General Public License as published by *
-* the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* EvtGen is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU General Public License for more details. *
-* *
-* You should have received a copy of the GNU General Public License *
-* along with EvtGen. If not, see . *
-***********************************************************************/
-
-#ifndef EVTVUBAC_HH
-#define EVTVUBAC_HH
-
-#include "EvtGenBase/EvtDecayIncoherent.hh"
-
-#include
-
-class EvtParticle;
-
-// Analytic Coupling Model (based on hep-ph/0608047 by Aglietti, Ferrera and Ricciardi)
-
-class EvtVubAC : public EvtDecayIncoherent {
- public:
- std::string getName() override;
-
- EvtDecayBase* clone() override;
-
- void initProbMax() override;
-
- void init() override;
-
- void decay( EvtParticle* Bmeson ) override;
-
- private:
- // Input parameters
- double mB;
-
- double alphaSmZ;
- double alphaSmB;
- double c;
- double q;
- double k;
-
- double CF;
- double CA;
-
- double beta0;
-
- std::vector gvars;
-
- double rate( double u, double w, double xb );
- double wreg( double w );
- double alphaS( double Q );
- double PolyLog( double v, double z );
- double ureg( double u );
- double ularge( double u );
- double Coeff( double u, double w, double xb );
- double Coeff1( double w, double xb );
- double Coeff0( double w, double xb );
- double Sigma( double x1, double x2 );
- double max( double ub, double lb );
- double d1( double u, double w, double xb );
- double d( double u, double w, double xb );
- double f( double w );
- double Lambda2( double x, double alphaSmZ );
- int Bisect( double x1, double x2, double precision, double& root,
- const double alphaSmZ );
- double FindRoot( const double alphaSmZ );
-};
-
-#endif
diff --git a/EvtGenModels/EvtbsToLLLL.hh b/EvtGenModels/EvtbsToLLLL.hh
deleted file mode 100644
--- a/EvtGenModels/EvtbsToLLLL.hh
+++ /dev/null
@@ -1,49 +0,0 @@
-
-/***********************************************************************
-* Copyright 1998-2020 CERN for the benefit of the EvtGen authors *
-* *
-* This file is part of EvtGen. *
-* *
-* EvtGen is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU General Public License as published by *
-* the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* EvtGen is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU General Public License for more details. *
-* *
-* You should have received a copy of the GNU General Public License *
-* along with EvtGen. If not, see . *
-***********************************************************************/
-
-#ifndef EVTBSTOLLLL_HH
-#define EVTBSTOLLLL_HH
-
-#include "EvtGenBase/EvtDecayAmp.hh"
-
-class EvtParticle;
-class Evtbs2llGammaFF; // my class with ff for rare semileptonic B-decays
-class EvtbsToLLLLAmp; // my class with amplitudes for rare four-leptonic B-decays
-class EvtbTosllWilsCoeffNLO; // my class with Wilson coefficients in NLO
-
-class EvtbsToLLLL : public EvtDecayAmp {
- public:
- EvtbsToLLLL(){};
- virtual ~EvtbsToLLLL();
-
- std::string getName() override;
- EvtDecayBase* clone() override;
-
- void init() override;
- void initProbMax() override;
- void decay( EvtParticle* p ) override;
-
- private:
- Evtbs2llGammaFF* _mntffmodel;
- EvtbsToLLLLAmp* _calcamp;
- EvtbTosllWilsCoeffNLO* _wilscoeff;
-};
-
-#endif
diff --git a/EvtGenModels/EvtbsToLLLLAmp.hh b/EvtGenModels/EvtbsToLLLLAmp.hh
deleted file mode 100644
--- a/EvtGenModels/EvtbsToLLLLAmp.hh
+++ /dev/null
@@ -1,51 +0,0 @@
-
-/***********************************************************************
-* Copyright 1998-2020 CERN for the benefit of the EvtGen authors *
-* *
-* This file is part of EvtGen. *
-* *
-* EvtGen is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU General Public License as published by *
-* the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* EvtGen is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU General Public License for more details. *
-* *
-* You should have received a copy of the GNU General Public License *
-* along with EvtGen. If not, see . *
-***********************************************************************/
-
-#ifndef EVTBSTOLLLL_AMP_HH
-#define EVTBSTOLLLL_AMP_HH
-
-class EvtId;
-class EvtAmp;
-class EvtParticle;
-class Evtbs2llGammaFF;
-class EvtbTosllWilsCoeffNLO;
-
-class EvtbsToLLLLAmp {
- public:
- void CalcAmp( EvtParticle* parent, EvtAmp& amp, Evtbs2llGammaFF* formFactors,
- EvtbTosllWilsCoeffNLO* WilsCoeff, double mu, int Nf,
- int res_swch, int ias, double CKM_A, double CKM_lambda,
- double CKM_barrho, double CKM_bareta );
-
- double CalcMaxProb(
- // EvtId parnum,
- // EvtId l1num, EvtId l2num,
- // EvtId l3num, EvtId l4num,
- // Evtbs2llGammaFF *formFactors,
- // EvtbTosllWilsCoeffNLO *WilsCoeff,
- // double mu, int Nf, int res_swch, int ias,
- // double CKM_A, double CKM_lambda,
- // double CKM_barrho, double CKM_bareta
- );
-
- double lambda( double a, double b, double c );
-};
-
-#endif
diff --git a/EvtGenModels/EvtbsToLLLLHyperCP.hh b/EvtGenModels/EvtbsToLLLLHyperCP.hh
deleted file mode 100644
--- a/EvtGenModels/EvtbsToLLLLHyperCP.hh
+++ /dev/null
@@ -1,45 +0,0 @@
-
-/***********************************************************************
-* Copyright 1998-2020 CERN for the benefit of the EvtGen authors *
-* *
-* This file is part of EvtGen. *
-* *
-* EvtGen is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU General Public License as published by *
-* the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* EvtGen is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU General Public License for more details. *
-* *
-* You should have received a copy of the GNU General Public License *
-* along with EvtGen. If not, see . *
-***********************************************************************/
-
-#ifndef EVTBSTOLLLL_HYPERCP_HH
-#define EVTBSTOLLLL_HYPERCP_HH
-
-#include "EvtGenBase/EvtDecayAmp.hh"
-
-class EvtParticle;
-class EvtbsToLLLLHyperCPAmp; // my class with amplitudes for rare four-leptonic B-decays
-
-class EvtbsToLLLLHyperCP : public EvtDecayAmp {
- public:
- EvtbsToLLLLHyperCP(){};
- virtual ~EvtbsToLLLLHyperCP();
-
- std::string getName() override;
- EvtDecayBase* clone() override;
-
- void init() override;
- void initProbMax() override;
- void decay( EvtParticle* p ) override;
-
- private:
- EvtbsToLLLLHyperCPAmp* _calcamp;
-};
-
-#endif
diff --git a/EvtGenModels/EvtbsToLLLLHyperCPAmp.hh b/EvtGenModels/EvtbsToLLLLHyperCPAmp.hh
deleted file mode 100644
--- a/EvtGenModels/EvtbsToLLLLHyperCPAmp.hh
+++ /dev/null
@@ -1,54 +0,0 @@
-
-/***********************************************************************
-* Copyright 1998-2020 CERN for the benefit of the EvtGen authors *
-* *
-* This file is part of EvtGen. *
-* *
-* EvtGen is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU General Public License as published by *
-* the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* EvtGen is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU General Public License for more details. *
-* *
-* You should have received a copy of the GNU General Public License *
-* along with EvtGen. If not, see . *
-***********************************************************************/
-
-#ifndef EVTBSTOLLLL_HYPERCPAMP_HH
-#define EVTBSTOLLLL_HYPERCPAMP_HH
-
-class EvtId;
-class EvtAmp;
-class EvtParticle;
-
-// Description: Preparation of the decay amplitude for the process:
-// B^0_{q}(p,M1) -> ell^+(k1,m) ell^-(k2,m) ell^+(k3,m) ell^-(k4,m)
-// in the HyperCP model.
-//
-// [1] D.S.Gorbunov, Nucl.Phys.B602, pp.213-237 (2001);
-// [2] S.V. Demidov, D.S.Gorbunov, hep-ph/1112.5230v2, 17 April 2012.
-//
-// Note: The code of this module is based on the EvtbsToLLLLAmp.cpp module code.
-
-class EvtbsToLLLLHyperCPAmp {
- public:
- void CalcAmp( EvtParticle* parent, EvtAmp& amp, double mS, double mP,
- double gammaS, double gammaP, double mLiiLR, double Fc,
- double mD23LL, double mD23RR, double mD32LL, double mD32RR,
- double mD13LL, double mD13RR, double mD31LL, double mD31RR );
-
- double CalcMaxProb( EvtId parnum, EvtId l1num, EvtId l2num, EvtId l3num,
- EvtId l4num, double mS, double mP, double gammaS,
- double gammaP, double mLiiLR, double Fc, double mD23LL,
- double mD23RR, double mD32LL, double mD32RR,
- double mD13LL, double mD13RR, double mD31LL,
- double mD31RR );
-
- double lambda( double a, double b, double c );
-};
-
-#endif
diff --git a/History.md b/History.md
--- a/History.md
+++ b/History.md
@@ -11,6 +11,41 @@
===
## R02-0X-00
+11 Apr 2024 Thomas Latham
+* D109: Remove broken or obsolete models
+ - Models removed:
+ * BHADRONIC
+ * BQTOLLLLHYPERCP
+ * BQTOLLLL
+ * D\_MULTIBODY
+ * KSTARSTARGAMMA
+ * LAMBDAB2LAMBDAV and subsidiary models LAMBDA2PPIFORLAMBDAB2LAMBDAV and V2VPVMFORLAMBDAB2LAMBDAV
+ * Lb2Lhh
+ * PROPSLPOLE
+ * VPHOTOV
+ * VPHOTOVISR
+ * VUB\_AC
+ - Classes in EvtGenBase already unused or used only by the above models also removed
+ * Evt3Rank3C
+ * EvtAbsBinning
+ * EvtAmpAmpPdf
+ * EvtAmpIndex
+ * EvtAmpSubIndex
+ * EvtBreitWignerPdf
+ * EvtDecayParm
+ * EvtIntegPdf1D
+ * EvtMBreitWigner
+ * EvtMHelAmp
+ * EvtMNode
+ * EvtMParticle
+ * EvtMLineShape
+ * EvtMRes
+ * EvtMTree
+ * EvtMTrivialLS
+ * EvtPointPred
+ * EvtPto3PAmpSmpResolution
+ * EvtSpinAmp
+
9 Apr 2024 Fernando Abudinen
* D111: Added tests for decays with FSR and implemented const correctness for getP4LabBeforeFSR() function.
diff --git a/doc/evt_models.tex b/doc/evt_models.tex
--- a/doc/evt_models.tex
+++ b/doc/evt_models.tex
@@ -12,19 +12,6 @@
what the arguments mean and one or more examples are given. For
further examples of use please see the decay table, {\tt DECAY.DEC}
-\Model{BHADRONIC}
-
-\label{bhadronic}
-
-\Auth{Ryd}
-
-\Usage{P1 P2 ... PN}{JH JW;}
-
-\Expl
-This is an experimental model for hadronic $B$ decays. Until
-further developed this is not recommended to be used. For
-questions ask Anders Ryd.
-
\Model{BTO3PI\_CP}
\label{bto3picp}
diff --git a/src/EvtGenBase/Evt3Rank3C.cpp b/src/EvtGenBase/Evt3Rank3C.cpp
deleted file mode 100644
--- a/src/EvtGenBase/Evt3Rank3C.cpp
+++ /dev/null
@@ -1,282 +0,0 @@
-
-/***********************************************************************
-* Copyright 1998-2020 CERN for the benefit of the EvtGen authors *
-* *
-* This file is part of EvtGen. *
-* *
-* EvtGen is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU General Public License as published by *
-* the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* EvtGen is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU General Public License for more details. *
-* *
-* You should have received a copy of the GNU General Public License *
-* along with EvtGen. If not, see . *
-***********************************************************************/
-
-#include "EvtGenBase/Evt3Rank3C.hh"
-
-#include "EvtGenBase/EvtComplex.hh"
-#include "EvtGenBase/EvtPatches.hh"
-#include "EvtGenBase/EvtReport.hh"
-#include "EvtGenBase/EvtTensor3C.hh"
-#include "EvtGenBase/EvtVector3C.hh"
-
-#include
-#include
-
-Evt3Rank3C::Evt3Rank3C( const Evt3Rank3C& t1 )
-{
- int i, j, k;
-
- for ( i = 0; i < 3; i++ ) {
- for ( j = 0; j < 3; j++ ) {
- for ( k = 0; k < 3; k++ ) {
- t[i][j][k] = t1.t[i][j][k];
- }
- }
- }
-}
-
-Evt3Rank3C& Evt3Rank3C::operator=( const Evt3Rank3C& t1 )
-{
- int i, j, k;
-
- for ( i = 0; i < 3; i++ ) {
- for ( j = 0; j < 3; j++ ) {
- for ( k = 0; k < 3; k++ ) {
- t[i][j][k] = t1.t[i][j][k];
- }
- }
- }
- return *this;
-}
-
-Evt3Rank3C Evt3Rank3C::conj() const
-{
- Evt3Rank3C temp;
-
- int i, j, k;
-
- for ( i = 0; i < 3; i++ ) {
- for ( j = 0; j < 3; j++ ) {
- for ( k = 0; k < 3; k++ ) {
- temp.set( i, j, k, ::conj( t[i][j][k] ) );
- }
- }
- }
- return temp;
-}
-
-void Evt3Rank3C::zero()
-{
- int i, j, k;
- for ( i = 0; i < 3; i++ ) {
- for ( j = 0; j < 3; j++ ) {
- for ( k = 0; k < 3; k++ ) {
- t[i][j][k] = EvtComplex( 0.0, 0.0 );
- }
- }
- }
-}
-
-Evt3Rank3C::Evt3Rank3C()
-{
- int i, j, k;
-
- for ( i = 0; i < 3; i++ ) {
- for ( j = 0; j < 3; j++ ) {
- for ( k = 0; k < 3; k++ ) {
- t[i][j][k] = EvtComplex( 0.0, 0.0 );
- }
- }
- }
-}
-
-std::ostream& operator<<( std::ostream& s, const Evt3Rank3C& t2 )
-{
- int i, j, k;
- for ( k = 0; k < 3; k++ ) {
- for ( i = 0; i < 3; i++ ) {
- for ( j = 0; j < 3; j++ ) {
- EvtGenReport( EVTGEN_INFO, "EvtGen" ) << t2.t[k][i][j];
- }
- EvtGenReport( EVTGEN_INFO, "EvtGen" ) << "\n";
- }
- }
- return s;
-}
-
-Evt3Rank3C& Evt3Rank3C::operator+=( const Evt3Rank3C& t2 )
-{
- int i, j, k;
-
- for ( i = 0; i < 3; i++ ) {
- for ( j = 0; j < 3; j++ ) {
- for ( k = 0; k < 3; k++ ) {
- t[i][j][k] += t2.t[i][j][k];
- }
- }
- }
- return *this;
-}
-
-Evt3Rank3C& Evt3Rank3C::operator-=( const Evt3Rank3C& t2 )
-{
- int i, j, k;
-
- for ( i = 0; i < 3; i++ ) {
- for ( j = 0; j < 3; j++ ) {
- for ( k = 0; k < 3; k++ ) {
- t[i][j][k] -= t2.t[i][j][k];
- }
- }
- }
-
- return *this;
-}
-
-Evt3Rank3C& Evt3Rank3C::operator*=( const EvtComplex& c )
-{
- int i, j, k;
-
- for ( i = 0; i < 3; i++ ) {
- for ( j = 0; j < 3; j++ ) {
- for ( k = 0; k < 3; k++ ) {
- t[i][j][k] *= c;
- }
- }
- }
- return *this;
-}
-
-Evt3Rank3C& Evt3Rank3C::operator*=( const double c )
-{
- int i, j, k;
-
- for ( i = 0; i < 3; i++ ) {
- for ( j = 0; j < 3; j++ ) {
- for ( k = 0; k < 3; k++ ) {
- t[i][j][k] *= c;
- }
- }
- }
-
- return *this;
-}
-
-Evt3Rank3C conj( const Evt3Rank3C& t2 )
-{
- Evt3Rank3C temp;
-
- int i, j, k;
-
- for ( i = 0; i < 3; i++ ) {
- for ( j = 0; j < 3; j++ ) {
- for ( k = 0; k < 3; k++ ) {
- temp.t[i][j][k] = ::conj( t2.t[i][j][k] );
- }
- }
- }
- return temp;
-}
-
-EvtTensor3C Evt3Rank3C::cont1( const EvtVector3C& v ) const
-{
- EvtTensor3C temp;
-
- int i, k;
-
- for ( i = 0; i < 3; i++ ) {
- for ( k = 0; k < 3; k++ ) {
- temp.set( i, k,
- t[0][i][k] * v.get( 0 ) + t[1][i][k] * v.get( 1 ) +
- t[2][i][k] * v.get( 2 ) );
- }
- }
- return temp;
-}
-
-EvtTensor3C Evt3Rank3C::cont2( const EvtVector3C& v ) const
-{
- EvtTensor3C temp;
-
- int i, k;
-
- for ( i = 0; i < 3; i++ ) {
- for ( k = 0; k < 3; k++ ) {
- temp.set( i, k,
- t[i][0][k] * v.get( 0 ) + t[i][1][k] * v.get( 1 ) +
- t[i][2][k] * v.get( 2 ) );
- }
- }
- return temp;
-}
-
-EvtTensor3C Evt3Rank3C::cont3( const EvtVector3C& v ) const
-{
- EvtTensor3C temp;
-
- int i, k;
-
- for ( i = 0; i < 3; i++ ) {
- for ( k = 0; k < 3; k++ ) {
- temp.set( i, k,
- t[i][k][0] * v.get( 0 ) + t[i][k][1] * v.get( 1 ) +
- t[i][k][2] * v.get( 2 ) );
- }
- }
- return temp;
-}
-
-EvtTensor3C Evt3Rank3C::cont1( const EvtVector3R& v ) const
-{
- EvtTensor3C temp;
-
- int i, k;
-
- for ( i = 0; i < 3; i++ ) {
- for ( k = 0; k < 3; k++ ) {
- temp.set( i, k,
- t[0][i][k] * v.get( 0 ) + t[1][i][k] * v.get( 1 ) +
- t[2][i][k] * v.get( 2 ) );
- }
- }
- return temp;
-}
-
-EvtTensor3C Evt3Rank3C::cont2( const EvtVector3R& v ) const
-{
- EvtTensor3C temp;
-
- int i, k;
-
- for ( i = 0; i < 3; i++ ) {
- for ( k = 0; k < 3; k++ ) {
- temp.set( i, k,
- t[i][0][k] * v.get( 0 ) + t[i][1][k] * v.get( 1 ) +
- t[i][2][k] * v.get( 2 ) );
- }
- }
- return temp;
-}
-
-EvtTensor3C Evt3Rank3C::cont3( const EvtVector3R& v ) const
-{
- EvtTensor3C temp;
-
- int i, k;
-
- for ( i = 0; i < 3; i++ ) {
- for ( k = 0; k < 3; k++ ) {
- temp.set( i, k,
- t[i][k][0] * v.get( 0 ) + t[i][k][1] * v.get( 1 ) +
- t[i][k][2] * v.get( 2 ) );
- }
- }
- return temp;
-}
diff --git a/src/EvtGenBase/EvtAmpIndex.cpp b/src/EvtGenBase/EvtAmpIndex.cpp
deleted file mode 100644
--- a/src/EvtGenBase/EvtAmpIndex.cpp
+++ /dev/null
@@ -1,75 +0,0 @@
-
-/***********************************************************************
-* Copyright 1998-2020 CERN for the benefit of the EvtGen authors *
-* *
-* This file is part of EvtGen. *
-* *
-* EvtGen is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU General Public License as published by *
-* the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* EvtGen is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU General Public License for more details. *
-* *
-* You should have received a copy of the GNU General Public License *
-* along with EvtGen. If not, see . *
-***********************************************************************/
-
-#include "EvtGenBase/EvtAmpIndex.hh"
-
-#include "EvtGenBase/EvtPatches.hh"
-
-#include
-using std::vector;
-
-EvtAmpIndex::EvtAmpIndex( std::vector ind ) :
- _ind( ind ), _size( ind.size() ), _state( ind.size() ), _nstate( ind.size() )
-{
- int i;
-
- for ( i = 0; i < _size; i++ ) {
- _state[i] = 0;
- if ( i == 0 ) {
- _nstate[i] = 1;
- } else {
- _nstate[i] = _nstate[i - 1] * _ind[i];
- }
- }
-}
-
-void EvtAmpIndex::reset()
-{
- int i;
- for ( i = 0; i < _size; i++ ) {
- _state[i] = 0;
- }
-}
-
-bool EvtAmpIndex::next()
-{
- int i;
- for ( i = 0; i < _size; i++ ) {
- _state[i]++;
- if ( _state[i] < _ind[i] ) {
- return true;
- } else {
- _state[i] = 0;
- }
- }
- return false;
-}
-
-int EvtAmpIndex::index()
-{
- int i;
- int ind = 0;
-
- for ( i = 0; i < _size; i++ ) {
- ind += _state[i] * _nstate[i];
- }
-
- return ind;
-}
diff --git a/src/EvtGenBase/EvtAmpSubIndex.cpp b/src/EvtGenBase/EvtAmpSubIndex.cpp
deleted file mode 100644
--- a/src/EvtGenBase/EvtAmpSubIndex.cpp
+++ /dev/null
@@ -1,53 +0,0 @@
-
-/***********************************************************************
-* Copyright 1998-2020 CERN for the benefit of the EvtGen authors *
-* *
-* This file is part of EvtGen. *
-* *
-* EvtGen is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU General Public License as published by *
-* the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* EvtGen is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU General Public License for more details. *
-* *
-* You should have received a copy of the GNU General Public License *
-* along with EvtGen. If not, see . *
-***********************************************************************/
-
-#include "EvtGenBase/EvtAmpSubIndex.hh"
-
-#include "EvtGenBase/EvtAmpIndex.hh"
-#include "EvtGenBase/EvtPatches.hh"
-
-#include
-using std::vector;
-
-EvtAmpSubIndex::EvtAmpSubIndex( EvtAmpIndex* ind, std::vector sub ) :
- _ind( ind ), _sub( sub ), _size( sub.size() ), _nstate( sub.size() )
-{
- int i;
-
- for ( i = 0; i < _size; i++ ) {
- if ( i == 0 ) {
- _nstate[i] = 1;
- } else {
- _nstate[i] = _nstate[i - 1] * _ind->_ind[sub[i - 1]];
- }
- }
-}
-
-int EvtAmpSubIndex::index()
-{
- int i;
- int ind = 0;
-
- for ( i = 0; i < _size; i++ ) {
- ind += _ind->_state[_ind->_ind[i]] * _nstate[i];
- }
-
- return ind;
-}
diff --git a/src/EvtGenBase/EvtBreitWignerPdf.cpp b/src/EvtGenBase/EvtBreitWignerPdf.cpp
deleted file mode 100644
--- a/src/EvtGenBase/EvtBreitWignerPdf.cpp
+++ /dev/null
@@ -1,83 +0,0 @@
-
-/***********************************************************************
-* Copyright 1998-2020 CERN for the benefit of the EvtGen authors *
-* *
-* This file is part of EvtGen. *
-* *
-* EvtGen is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU General Public License as published by *
-* the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* EvtGen is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU General Public License for more details. *
-* *
-* You should have received a copy of the GNU General Public License *
-* along with EvtGen. If not, see . *
-***********************************************************************/
-
-#include "EvtGenBase/EvtBreitWignerPdf.hh"
-
-#include "EvtGenBase/EvtConst.hh"
-#include "EvtGenBase/EvtPatches.hh"
-
-#include
-#include
-#include
-
-EvtBreitWignerPdf::EvtBreitWignerPdf( double min, double max, double m0,
- double g0 ) :
- EvtIntegPdf1D( min, max ), _m0( m0 ), _g0( g0 )
-{
-}
-
-EvtBreitWignerPdf::EvtBreitWignerPdf( const EvtBreitWignerPdf& other ) :
- EvtIntegPdf1D( other ), _m0( other._m0 ), _g0( other._g0 )
-{
-}
-
-double EvtBreitWignerPdf::pdf( const EvtPoint1D& x ) const
-{
- double m = x.value();
- if ( ( 0 == ( m - _m0 ) ) && ( 0. == _g0 ) ) {
- printf( "Delta function Breit-Wigner\n" );
- assert( 0 );
- }
-
- double ret = _g0 / EvtConst::twoPi /
- ( ( m - _m0 ) * ( m - _m0 ) + _g0 * _g0 / 4 );
-
- return ret;
-}
-
-double EvtBreitWignerPdf::pdfIntegral( double m ) const
-{
- double itg = 0;
- if ( _g0 == 0 ) {
- if ( m > _m0 )
- itg = 1.;
- else if ( m < _m0 )
- itg = 0.;
- else
- itg = 0.5;
- } else
- itg = atan( ( m - _m0 ) / ( _g0 / 2. ) ) / EvtConst::pi + 0.5;
-
- return itg;
-}
-
-double EvtBreitWignerPdf::pdfIntegralInverse( double x ) const
-{
- if ( x < 0 || x > 1 ) {
- printf( "Invalid integral value %f\n", x );
- assert( 0 );
- }
-
- double m = _m0;
- if ( _g0 != 0 )
- m = _m0 + ( _g0 / 2. ) * tan( EvtConst::pi * ( x - 0.5 ) );
-
- return m;
-}
diff --git a/src/EvtGenBase/EvtDecayParm.cpp b/src/EvtGenBase/EvtDecayParm.cpp
deleted file mode 100644
--- a/src/EvtGenBase/EvtDecayParm.cpp
+++ /dev/null
@@ -1,72 +0,0 @@
-
-/***********************************************************************
-* Copyright 1998-2020 CERN for the benefit of the EvtGen authors *
-* *
-* This file is part of EvtGen. *
-* *
-* EvtGen is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU General Public License as published by *
-* the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* EvtGen is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU General Public License for more details. *
-* *
-* You should have received a copy of the GNU General Public License *
-* along with EvtGen. If not, see . *
-***********************************************************************/
-
-#include "EvtGenBase/EvtDecayParm.hh"
-
-#include "EvtGenBase/EvtPatches.hh"
-
-#include
-#include
-#include
-#include
-#include
-using std::fstream;
-
-void EvtDecayParm::init( fcnPtr pfcn, int ndaug, int* daugs, int narg,
- double* args, std::string name )
-{
- int i;
-
- itsfcn = pfcn;
- itsndaug = ndaug;
- itsnarg = narg;
-
- itsdaugs = new int[itsndaug];
- for ( i = 0; i < itsndaug; i++ ) {
- itsdaugs[i] = daugs[i];
- }
- itsargs = new double[itsnarg];
- for ( i = 0; i < itsnarg; i++ ) {
- itsargs[i] = args[i];
- }
- modelname = name;
-}
-
-EvtDecayParm::EvtDecayParm()
-{
- itsfcn = nullptr;
- itsndaug = 0;
- itsnarg = 0;
- itsdaugs = nullptr;
- itsargs = nullptr;
-
- modelname = "**********";
-}
-
-EvtDecayParm::~EvtDecayParm()
-{
- if ( itsdaugs != nullptr ) {
- delete[] itsdaugs;
- }
-
- if ( itsargs != nullptr ) {
- delete[] itsargs;
- }
-}
diff --git a/src/EvtGenBase/EvtIntegPdf1D.cpp b/src/EvtGenBase/EvtIntegPdf1D.cpp
deleted file mode 100644
--- a/src/EvtGenBase/EvtIntegPdf1D.cpp
+++ /dev/null
@@ -1,53 +0,0 @@
-
-/***********************************************************************
-* Copyright 1998-2020 CERN for the benefit of the EvtGen authors *
-* *
-* This file is part of EvtGen. *
-* *
-* EvtGen is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU General Public License as published by *
-* the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* EvtGen is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU General Public License for more details. *
-* *
-* You should have received a copy of the GNU General Public License *
-* along with EvtGen. If not, see . *
-***********************************************************************/
-
-#include "EvtGenBase/EvtIntegPdf1D.hh"
-
-#include "EvtGenBase/EvtMacros.hh"
-#include "EvtGenBase/EvtPatches.hh"
-
-#include
-
-EvtIntegPdf1D::EvtIntegPdf1D( double min, double max ) :
- EvtPdf(), _min( min ), _max( max )
-{
- assert( min <= max );
-}
-
-EvtIntegPdf1D::EvtIntegPdf1D( const EvtIntegPdf1D& other ) :
- EvtPdf( other ), _min( other._min ), _max( other._max )
-{
-}
-
-EvtValError EvtIntegPdf1D::compute_integral() const
-{
- double x1 = pdfIntegral( _min );
- double x2 = pdfIntegral( _max );
- return EvtValError( x2 - x1, 0. );
-}
-
-EvtPoint1D EvtIntegPdf1D::randomPoint()
-{
- double itgmin = pdfIntegral( _min );
- double itgmax = pdfIntegral( _max );
- double itgrnd = EvtRandom::Flat( itgmin, itgmax );
-
- return EvtPoint1D( _min, _max, pdfIntegralInverse( itgrnd ) );
-}
diff --git a/src/EvtGenBase/EvtMBreitWigner.cpp b/src/EvtGenBase/EvtMBreitWigner.cpp
deleted file mode 100644
--- a/src/EvtGenBase/EvtMBreitWigner.cpp
+++ /dev/null
@@ -1,57 +0,0 @@
-
-/***********************************************************************
-* Copyright 1998-2020 CERN for the benefit of the EvtGen authors *
-* *
-* This file is part of EvtGen. *
-* *
-* EvtGen is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU General Public License as published by *
-* the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* EvtGen is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU General Public License for more details. *
-* *
-* You should have received a copy of the GNU General Public License *
-* along with EvtGen. If not, see . *
-***********************************************************************/
-
-#include "EvtGenBase/EvtMBreitWigner.hh"
-
-#include "EvtGenBase/EvtPatches.hh"
-#include "EvtGenBase/EvtReport.hh"
-
-#include
-
-using std::endl;
-
-EvtMBreitWigner::EvtMBreitWigner( const EvtId& id, const vector& args )
-{
- if ( args.size() != 0 ) {
- EvtGenReport( EVTGEN_ERROR, "EvtGen" )
- << "Unknown input arguments passed in to lineshape." << endl;
- ::abort();
- }
-
- _id = id;
- _width = EvtPDL::getWidth( id );
- _resmass = EvtPDL::getMeanMass( id );
-}
-
-EvtComplex EvtMBreitWigner::shape( const vector& product ) const
-{
- static EvtComplex I( 0.0, 1.0 );
- double mass = _node->get4vector( product ).mass();
-
- return sqrt( _width / ( EvtConst::twoPi ) ) * 1 /
- ( mass - _resmass - I * _width / 2 );
-}
-
-EvtMLineShape* EvtMBreitWigner::duplicate() const
-{
- vector args;
- EvtMLineShape* tmp = new EvtMBreitWigner( _id, args );
- return tmp;
-}
diff --git a/src/EvtGenBase/EvtMHelAmp.cpp b/src/EvtGenBase/EvtMHelAmp.cpp
deleted file mode 100644
--- a/src/EvtGenBase/EvtMHelAmp.cpp
+++ /dev/null
@@ -1,148 +0,0 @@
-
-/***********************************************************************
-* Copyright 1998-2020 CERN for the benefit of the EvtGen authors *
-* *
-* This file is part of EvtGen. *
-* *
-* EvtGen is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU General Public License as published by *
-* the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* EvtGen is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU General Public License for more details. *
-* *
-* You should have received a copy of the GNU General Public License *
-* along with EvtGen. If not, see . *
-***********************************************************************/
-
-#include "EvtGenBase/EvtMHelAmp.hh"
-
-#include "EvtGenBase/EvtKine.hh"
-#include "EvtGenBase/EvtPatches.hh"
-#include "EvtGenBase/EvtReport.hh"
-
-#include
-
-using std::endl;
-
-EvtMHelAmp::EvtMHelAmp( const EvtId& id, EvtMLineShape* lineshape,
- const vector& children,
- const vector& elem )
-{
- _id = id;
- _twospin = EvtSpinType::getSpin2( EvtPDL::getSpinType( id ) );
- _parent = nullptr;
- _lineshape = lineshape;
-
- _elem = elem;
-
- vector type;
- for ( size_t i = 0; i < children.size(); ++i ) {
- _children.push_back( children[i] );
- type.push_back( children[i]->getspintype() );
- const vector& res = children[i]->getresonance();
- for ( size_t j = 0; j < res.size(); ++j )
- _resonance.push_back( res[j] );
- children[i]->setparent( this );
- }
-
- // XXX New code - bugs could appear here XXX
- _amp = EvtSpinAmp( type );
- vector index = _amp.iterinit();
- size_t i = 0;
- do {
- if ( !_amp.allowed( index ) )
- _amp( index ) = 0.0;
- else if ( abs( index[0] - index[1] ) > _twospin )
- _amp( index ) = 0.0;
- else {
- _amp( index ) = elem[i];
- ++i;
- }
- } while ( _amp.iterate( index ) );
- if ( elem.size() != i ) {
- EvtGenReport( EVTGEN_ERROR, "EvtGen" )
- << "Wrong number of elements input in helicity amplitude." << endl;
- ::abort();
- }
-
- if ( children.size() > 2 ) {
- EvtGenReport( EVTGEN_ERROR, "EvtGen" )
- << "Helicity amplitude formalism can only handle two body resonances"
- << endl;
- ::abort();
- }
-}
-
-EvtSpinAmp EvtMHelAmp::amplitude( const vector& product ) const
-{
- EvtVector4R d = _children[0]->get4vector( product );
- double phi, theta;
-
- if ( _parent == nullptr ) {
- // This means that we're calculating the first level and we need to just
- // calculate the polar and azymuthal angles daughters in rest frame of
- // this (root) particle (this is automatic).
- phi = atan2( d.get( 1 ), d.get( 2 ) );
- theta = acos( d.get( 3 ) / d.d3mag() );
-
- } else {
- // We have parents therefore calculate things in correct coordinate
- // system
- EvtVector4R p = _parent->get4vector( product );
- EvtVector4R q = get4vector( product );
-
- // See if we have a grandparent - if no then the z-axis is defined by
- // the z-axis of the root particle
- EvtVector4R g = _parent->getparent() == nullptr
- ? EvtVector4R( 0.0, 0.0, 0.0, 1.0 )
- : _parent->getparent()->get4vector( product );
-
- theta = acos( EvtDecayAngle( p, q, d ) );
- phi = EvtDecayAnglePhi( g, p, q, d );
- }
-
- vector types( 3 );
- types[0] = getspintype();
- types[1] = _children[0]->getspintype();
- types[2] = _children[1]->getspintype();
- EvtSpinAmp amp( types, EvtComplex( 0.0, 0.0 ) );
- vector index = amp.iterallowedinit();
-
- do {
- if ( abs( index[1] - index[2] ) > _twospin )
- continue;
- amp( index ) += conj( wignerD( _twospin, index[0], index[1] - index[2],
- phi, theta, 0.0 ) ) *
- _amp( index[1], index[2] );
- } while ( amp.iterateallowed( index ) );
-
- EvtSpinAmp amp0 = _children[0]->amplitude( product );
- EvtSpinAmp amp1 = _children[1]->amplitude( product );
-
- amp.extcont( amp0, 1, 0 );
- amp.extcont( amp1, 1, 0 );
-
- amp *= sqrt( ( _twospin + 1 ) / ( 2 * EvtConst::twoPi ) ) *
- _children[0]->line( product ) * _children[1]->line( product );
-
- return amp;
-}
-
-EvtMNode* EvtMHelAmp::duplicate() const
-{
- vector children;
-
- for ( size_t i = 0; i < _children.size(); ++i ) {
- children.push_back( _children[i]->duplicate() );
- }
-
- EvtMLineShape* lineshape = _lineshape->duplicate();
- EvtMHelAmp* ret = new EvtMHelAmp( _id, lineshape, children, _elem );
- lineshape->setres( ret );
-
- return ret;
-}
diff --git a/src/EvtGenBase/EvtMNode.cpp b/src/EvtGenBase/EvtMNode.cpp
deleted file mode 100644
--- a/src/EvtGenBase/EvtMNode.cpp
+++ /dev/null
@@ -1,34 +0,0 @@
-
-/***********************************************************************
-* Copyright 1998-2020 CERN for the benefit of the EvtGen authors *
-* *
-* This file is part of EvtGen. *
-* *
-* EvtGen is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU General Public License as published by *
-* the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* EvtGen is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU General Public License for more details. *
-* *
-* You should have received a copy of the GNU General Public License *
-* along with EvtGen. If not, see . *
-***********************************************************************/
-
-#include "EvtGenBase/EvtMNode.hh"
-
-#include "EvtGenBase/EvtPatches.hh"
-
-EvtVector4R EvtMNode::get4vector( const vector& product ) const
-{
- EvtVector4R res( 0.0, 0.0, 0.0, 0.0 );
- vector::const_iterator iter;
-
- for ( iter = _resonance.begin(); iter != _resonance.end(); ++iter )
- res += product[*iter];
-
- return res;
-}
diff --git a/src/EvtGenBase/EvtMParticle.cpp b/src/EvtGenBase/EvtMParticle.cpp
deleted file mode 100644
--- a/src/EvtGenBase/EvtMParticle.cpp
+++ /dev/null
@@ -1,47 +0,0 @@
-
-/***********************************************************************
-* Copyright 1998-2020 CERN for the benefit of the EvtGen authors *
-* *
-* This file is part of EvtGen. *
-* *
-* EvtGen is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU General Public License as published by *
-* the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* EvtGen is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU General Public License for more details. *
-* *
-* You should have received a copy of the GNU General Public License *
-* along with EvtGen. If not, see . *
-***********************************************************************/
-
-#include "EvtGenBase/EvtMParticle.hh"
-
-#include "EvtGenBase/EvtPatches.hh"
-#include "EvtGenBase/EvtSpinType.hh"
-
-EvtMParticle::EvtMParticle( int label, const EvtId& id )
-{
- _id = id;
- _twospin = EvtSpinType::getSpin2( EvtPDL::getSpinType( id ) );
- _resonance.push_back( label );
-}
-
-EvtSpinAmp EvtMParticle::amplitude( const vector& /*product*/ ) const
-{
- vector types( 2, getspintype() );
- EvtSpinAmp amp( types, EvtComplex( 0.0, 0.0 ) );
-
- for ( int i = -_twospin; i <= _twospin; i += 2 )
- amp( i, i ) = EvtComplex( 1.0, 0.0 );
-
- return amp;
-}
-
-EvtMNode* EvtMParticle::duplicate() const
-{
- return new EvtMParticle( _resonance[0], _id );
-}
diff --git a/src/EvtGenBase/EvtMRes.cpp b/src/EvtGenBase/EvtMRes.cpp
deleted file mode 100644
--- a/src/EvtGenBase/EvtMRes.cpp
+++ /dev/null
@@ -1,29 +0,0 @@
-
-/***********************************************************************
-* Copyright 1998-2020 CERN for the benefit of the EvtGen authors *
-* *
-* This file is part of EvtGen. *
-* *
-* EvtGen is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU General Public License as published by *
-* the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* EvtGen is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU General Public License for more details. *
-* *
-* You should have received a copy of the GNU General Public License *
-* along with EvtGen. If not, see . *
-***********************************************************************/
-
-#include "EvtGenBase/EvtMRes.hh"
-
-#include "EvtGenBase/EvtPatches.hh"
-
-EvtMRes::~EvtMRes()
-{
- for ( size_t i = 0; i < _children.size(); ++i )
- delete _children[i];
-}
diff --git a/src/EvtGenBase/EvtMTree.cpp b/src/EvtGenBase/EvtMTree.cpp
deleted file mode 100644
--- a/src/EvtGenBase/EvtMTree.cpp
+++ /dev/null
@@ -1,470 +0,0 @@
-
-/***********************************************************************
-* Copyright 1998-2020 CERN for the benefit of the EvtGen authors *
-* *
-* This file is part of EvtGen. *
-* *
-* EvtGen is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU General Public License as published by *
-* the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* EvtGen is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU General Public License for more details. *
-* *
-* You should have received a copy of the GNU General Public License *
-* along with EvtGen. If not, see . *
-***********************************************************************/
-
-#include "EvtGenBase/EvtMTree.hh"
-
-#include "EvtGenBase/EvtConst.hh"
-#include "EvtGenBase/EvtKine.hh"
-#include "EvtGenBase/EvtMBreitWigner.hh"
-#include "EvtGenBase/EvtMHelAmp.hh"
-#include "EvtGenBase/EvtMTrivialLS.hh"
-#include "EvtGenBase/EvtParticle.hh"
-#include "EvtGenBase/EvtReport.hh"
-
-#include
-#include
-#include
-
-using std::endl;
-
-EvtMTree::EvtMTree( const EvtId* idtbl, unsigned int ndaug )
-{
- for ( size_t i = 0; i < ndaug; ++i ) {
- _lbltbl.push_back( EvtPDL::name( idtbl[i] ) );
- }
-}
-
-EvtMTree::~EvtMTree()
-{
- for ( size_t i = 0; i < _root.size(); ++i )
- delete _root[i];
-}
-
-bool EvtMTree::parsecheck( char arg, const string& chars )
-{
- bool ret = false;
-
- for ( size_t i = 0; i < chars.size(); ++i ) {
- ret = ret || ( chars[i] == arg );
- }
-
- return ret;
-}
-
-vector EvtMTree::makeparticles( const string& strid )
-{
- vector particles;
- vector labels;
-
- for ( size_t i = 0; i < _lbltbl.size(); ++i ) {
- if ( _lbltbl[i] == strid )
- labels.push_back( i );
- }
-
- if ( labels.size() == 0 ) {
- EvtGenReport( EVTGEN_ERROR, "EvtGen" )
- << "Error unknown particle label " << strid << endl;
- ::abort();
- }
-
- for ( size_t i = 0; i < labels.size(); ++i )
- particles.push_back(
- new EvtMParticle( labels[i], EvtPDL::getId( strid ) ) );
-
- return particles;
-}
-
-EvtMRes* EvtMTree::makeresonance( const EvtId& id, const string& ls,
- const vector& lsarg, const string& type,
- const vector& amps,
- const vector& children )
-{
- EvtMRes* resonance = nullptr;
- EvtMLineShape* lineshape = nullptr;
-
- if ( ls == "BREITWIGNER" ) {
- lineshape = new EvtMBreitWigner( id, lsarg );
- } else if ( ls == "TRIVIAL" ) {
- lineshape = new EvtMTrivialLS( id, lsarg );
- } else {
- EvtGenReport( EVTGEN_ERROR, "EvtGen" )
- << "Lineshape " << lineshape << " not recognized." << endl;
- ::abort();
- }
-
- if ( type == "HELAMP" ) {
- resonance = new EvtMHelAmp( id, lineshape, children, amps );
- } else {
- EvtGenReport( EVTGEN_ERROR, "EvtGen" )
- << "Model " << type << " not recognized." << endl;
- ::abort();
- }
-
- lineshape->setres( resonance );
-
- return resonance;
-}
-
-void EvtMTree::parseerror( bool flag, ptype& c_iter, ptype& c_begin, ptype& c_end )
-{
- if ( !flag )
- return;
-
- string error;
-
- while ( c_begin != c_end ) {
- if ( c_begin == c_iter ) {
- error += '_';
- error += *c_begin;
- error += '_';
- } else
- error += *c_begin;
-
- ++c_begin;
- }
-
- EvtGenReport( EVTGEN_ERROR, "EvtGen" ) << "Parse error at: " << error << endl;
- ::abort();
-}
-
-string EvtMTree::parseId( ptype& c_iter, ptype& c_begin, ptype& c_end )
-{
- string strid;
-
- while ( c_iter != c_end ) {
- parseerror( parsecheck( *c_iter, ")[]," ), c_iter, c_begin, c_end );
- if ( *c_iter == '(' ) {
- ++c_iter;
- return strid;
- }
-
- strid += *c_iter;
- ++c_iter;
- }
-
- return strid;
-}
-
-string EvtMTree::parseKey( ptype& c_iter, ptype& c_begin, ptype& c_end )
-{
- string key;
-
- while ( *c_iter != ',' ) {
- parseerror( c_iter == c_end || parsecheck( *c_iter, "()[]" ), c_iter,
- c_begin, c_end );
- key += *c_iter;
- ++c_iter;
- }
-
- ++c_iter;
-
- parseerror( c_iter == c_end, c_iter, c_begin, c_end );
-
- return key;
-}
-
-vector EvtMTree::parseArg( ptype& c_iter, ptype& c_begin, ptype& c_end )
-{
- vector arg;
-
- if ( *c_iter != '[' )
- return arg;
- ++c_iter;
-
- string temp;
- while ( true ) {
- parseerror( c_iter == c_end || parsecheck( *c_iter, "[()" ), c_iter,
- c_begin, c_end );
-
- if ( *c_iter == ']' ) {
- ++c_iter;
- if ( temp.size() > 0 )
- arg.push_back( temp );
- break;
- }
-
- if ( *c_iter == ',' ) {
- arg.push_back( temp );
- temp.clear();
- ++c_iter;
- continue;
- }
-
- temp += *c_iter;
- ++c_iter;
- }
- parseerror( c_iter == c_end || *c_iter != ',', c_iter, c_begin, c_end );
- ++c_iter;
-
- return arg;
-}
-
-vector EvtMTree::parseAmps( ptype& c_iter, ptype& c_begin,
- ptype& c_end )
-{
- vector parg = parseArg( c_iter, c_begin, c_end );
- parseerror( parg.size() == 0, c_iter, c_begin, c_end );
-
- // Get parametrization amplitudes
- vector::iterator amp_iter = parg.begin();
- vector::iterator amp_end = parg.end();
- vector amps;
-
- while ( amp_iter != amp_end ) {
- const char* nptr;
- char* endptr = nullptr;
- double amp = 0.0, phase = 0.0;
-
- nptr = ( *amp_iter ).c_str();
- amp = strtod( nptr, &endptr );
- parseerror( nptr == endptr, c_iter, c_begin, c_end );
-
- ++amp_iter;
- parseerror( amp_iter == amp_end, c_iter, c_begin, c_end );
-
- nptr = ( *amp_iter ).c_str();
- phase = strtod( nptr, &endptr );
- parseerror( nptr == endptr, c_iter, c_begin, c_end );
-
- amps.push_back( amp * exp( EvtComplex( 0.0, phase ) ) );
-
- ++amp_iter;
- }
-
- return amps;
-}
-
-vector EvtMTree::duplicate( const vector& list ) const
-{
- vector newlist;
-
- for ( size_t i = 0; i < list.size(); ++i )
- newlist.push_back( list[i]->duplicate() );
-
- return newlist;
-}
-
-// XXX Warning it is unsafe to use cl1 after a call to this function XXX
-vector> EvtMTree::unionChildren( const string& nodestr,
- vector>& cl1 )
-{
- vector cl2 = parsenode( nodestr, false );
- vector> cl;
-
- if ( cl1.size() == 0 ) {
- for ( size_t i = 0; i < cl2.size(); ++i ) {
- vector temp( 1, cl2[i] );
- cl.push_back( temp );
- }
-
- return cl;
- }
-
- for ( size_t i = 0; i < cl1.size(); ++i ) {
- for ( size_t j = 0; j < cl2.size(); ++j ) {
- vector temp;
- temp = duplicate( cl1[i] );
- temp.push_back( cl2[j]->duplicate() );
-
- cl.push_back( temp );
- }
- }
-
- for ( size_t i = 0; i < cl1.size(); ++i )
- for ( size_t j = 0; j < cl1[i].size(); ++j )
- delete cl1[i][j];
- for ( size_t i = 0; i < cl2.size(); ++i )
- delete ( cl2[i] );
-
- return cl;
-}
-
-vector> EvtMTree::parseChildren( ptype& c_iter,
- ptype& c_begin, ptype& c_end )
-{
- bool test = true;
- int pcount = 0;
- string nodestr;
- vector> children;
-
- parseerror( c_iter == c_end || *c_iter != '[', c_iter, c_begin, c_end );
- ++c_iter;
-
- while ( test ) {
- parseerror( c_iter == c_end || pcount < 0, c_iter, c_begin, c_end );
-
- switch ( *c_iter ) {
- case ')':
- --pcount;
- nodestr += *c_iter;
- break;
- case '(':
- ++pcount;
- nodestr += *c_iter;
- break;
- case ']':
- if ( pcount == 0 ) {
- children = unionChildren( nodestr, children );
- test = false;
- } else {
- nodestr += *c_iter;
- }
- break;
- case ',':
- if ( pcount == 0 ) {
- children = unionChildren( nodestr, children );
- nodestr.clear();
- } else {
- nodestr += *c_iter;
- }
- break;
- default:
- nodestr += *c_iter;
- break;
- }
-
- ++c_iter;
- }
-
- return children;
-}
-
-vector EvtMTree::parsenode( const string& args, bool rootnode )
-{
- ptype c_iter, c_begin, c_end;
-
- c_iter = c_begin = args.begin();
- c_end = args.end();
-
- string strid = parseId( c_iter, c_begin, c_end );
-
- // Case 1: Particle
- if ( c_iter == c_end )
- return makeparticles( strid );
-
- // Case 2: Resonance - parse further
- EvtId id = EvtPDL::getId( strid );
- parseerror( EvtId( -1, -1 ) == id, c_iter, c_begin, c_end );
-
- string ls;
- vector lsarg;
-
- if ( rootnode ) {
- ls = "TRIVIAL";
- } else {
- // Get lineshape (e.g. BREITWIGNER)
- ls = parseKey( c_iter, c_begin, c_end );
- lsarg = parseArg( c_iter, c_begin, c_end );
- }
-
- // Get resonance parametrization type (e.g. HELAMP)
- string type = parseKey( c_iter, c_begin, c_end );
- vector amps = parseAmps( c_iter, c_begin, c_end );
-
- // Children
- vector> children = parseChildren( c_iter, c_begin, c_end );
-
- EvtGenReport( EVTGEN_ERROR, "EvtGen" ) << children.size() << endl;
- vector resonances;
- for ( size_t i = 0; i < children.size(); ++i ) {
- resonances.push_back(
- makeresonance( id, ls, lsarg, type, amps, children[i] ) );
- }
-
- parseerror( c_iter == c_end || *c_iter != ')', c_iter, c_begin, c_end );
-
- return resonances;
-}
-
-bool EvtMTree::validTree( const EvtMNode* root ) const
-{
- vector res = root->getresonance();
- vector check( res.size(), false );
-
- for ( size_t i = 0; i < res.size(); ++i ) {
- check[res[i]] = true;
- }
-
- bool ret = true;
-
- for ( size_t i = 0; i < check.size(); ++i ) {
- ret = ret && check[i];
- }
-
- // Function appears to check child integer indices, but this fails if they are
- // not always the first and second ones, so just return true for all cases
- ret = true;
-
- return ret;
-}
-
-void EvtMTree::addtree( const string& str )
-{
- // vector roots = parsenode( str, true );
- // Edit previous line to allow the creation of node resonances:
- vector roots = parsenode( str, false );
- _norm = 0;
-
- for ( size_t i = 0; i < roots.size(); ++i ) {
- if ( validTree( roots[i] ) ) {
- _root.push_back( roots[i] );
- _norm = _norm + 1;
- } else
- delete roots[i];
- }
-
- _norm = 1.0 / sqrt( _norm );
-}
-EvtSpinAmp EvtMTree::getrotation( EvtParticle* p ) const
-{
- // Set up the rotation matrix for the root particle (for now)
- EvtSpinDensity sd = p->rotateToHelicityBasis();
- EvtSpinType::spintype type = EvtPDL::getSpinType( _root[0]->getid() );
- int twospin = EvtSpinType::getSpin2( type );
-
- vector types( 2, type );
- EvtSpinAmp rot( types, EvtComplex( 0.0, 0.0 ) );
- vector index = rot.iterallowedinit();
- do {
- rot( index ) = sd.get( ( index[0] + twospin ) / 2,
- ( index[1] + twospin ) / 2 );
- } while ( rot.iterateallowed( index ) );
-
- return rot;
-}
-
-EvtSpinAmp EvtMTree::amplitude( EvtParticle* p ) const
-{
- vector product;
- for ( size_t i = 0; i < p->getNDaug(); ++i )
- product.push_back( p->getDaug( i )->getP4Lab() );
-
- if ( _root.size() == 0 ) {
- EvtGenReport( EVTGEN_ERROR, "EvtGen" )
- << "No decay tree present." << endl;
- ::abort();
- }
-
- EvtSpinAmp amp = _root[0]->amplitude( product );
- for ( size_t i = 1; i < _root.size(); ++i ) {
- // Assume that helicity amplitude is returned
- amp += _root[i]->amplitude( product );
- }
- amp = _norm * amp;
-
- //ryd
- return amp;
-
- // Do Rotation to Proper Frame
- EvtSpinAmp newamp = getrotation( p );
- newamp.extcont( amp, 1, 0 );
-
- return newamp;
-}
diff --git a/src/EvtGenBase/EvtMTrivialLS.cpp b/src/EvtGenBase/EvtMTrivialLS.cpp
deleted file mode 100644
--- a/src/EvtGenBase/EvtMTrivialLS.cpp
+++ /dev/null
@@ -1,37 +0,0 @@
-
-/***********************************************************************
-* Copyright 1998-2020 CERN for the benefit of the EvtGen authors *
-* *
-* This file is part of EvtGen. *
-* *
-* EvtGen is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU General Public License as published by *
-* the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* EvtGen is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU General Public License for more details. *
-* *
-* You should have received a copy of the GNU General Public License *
-* along with EvtGen. If not, see . *
-***********************************************************************/
-
-#include "EvtGenBase/EvtMTrivialLS.hh"
-
-#include "EvtGenBase/EvtPatches.hh"
-
-EvtComplex EvtMTrivialLS::shape( const vector& /*product*/ ) const
-{
- return EvtComplex( 1.0, 0.0 );
-}
-
-EvtMLineShape* EvtMTrivialLS::duplicate() const
-{
- EvtId temp1;
- vector temp2;
-
- EvtMLineShape* tmp = new EvtMTrivialLS( temp1, temp2 );
- return tmp;
-}
diff --git a/src/EvtGenBase/EvtPto3PAmpSmpResolution.cpp b/src/EvtGenBase/EvtPto3PAmpSmpResolution.cpp
deleted file mode 100644
--- a/src/EvtGenBase/EvtPto3PAmpSmpResolution.cpp
+++ /dev/null
@@ -1,68 +0,0 @@
-
-/***********************************************************************
-* Copyright 1998-2020 CERN for the benefit of the EvtGen authors *
-* *
-* This file is part of EvtGen. *
-* *
-* EvtGen is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU General Public License as published by *
-* the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* EvtGen is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU General Public License for more details. *
-* *
-* You should have received a copy of the GNU General Public License *
-* along with EvtGen. If not, see . *
-***********************************************************************/
-
-#include "EvtGenBase/EvtPto3PAmpSmpResolution.hh"
-
-#include "EvtGenBase/EvtComplex.hh"
-#include "EvtGenBase/EvtCyclic3.hh"
-#include "EvtGenBase/EvtDalitzCoord.hh"
-#include "EvtGenBase/EvtPatches.hh"
-#include "EvtGenBase/EvtPto3PAmp.hh"
-
-#include
-#include
-#include
-using EvtCyclic3::Index;
-using EvtCyclic3::Pair;
-using std::cout;
-using std::endl;
-
-EvtPto3PAmpSmpResolution::EvtPto3PAmpSmpResolution( EvtDalitzPlot dp,
- Pair pairAng, Pair pairRes,
- EvtSpinType::spintype spin,
- const EvtPropagator& prop,
- NumType typeN ) :
- EvtPto3PAmp( dp, pairAng, pairRes, spin, prop, typeN )
-{
-}
-
-EvtComplex EvtPto3PAmpSmpResolution::evalPropagator( double m ) const
-{
- EvtComplex prop( 0, 0 );
-
- if ( _sigma > 0 ) { // convolved
- int nconv = 20;
- double min = m + _bias - _sigma * 2.5;
- double max = m + _bias + _sigma * 2.5;
- double dm = ( max - min ) / nconv;
- static double sqrt2pi = sqrt( 2 * 3.14159 );
- double ifact = 1. / ( sqrt2pi * _sigma );
- for ( int i = 0; i < nconv; i++ ) {
- double mprime = min + dm * ( i + 0.5 );
- double t = ( mprime - m ) / _sigma;
- prop += ifact * exp( -0.5 * t * t ) *
- EvtPto3PAmp::evalPropagator( m ) * dm;
- }
- } else {
- prop = EvtPto3PAmp::evalPropagator( m );
- }
-
- return prop;
-}
diff --git a/src/EvtGenBase/EvtSpinAmp.cpp b/src/EvtGenBase/EvtSpinAmp.cpp
deleted file mode 100644
--- a/src/EvtGenBase/EvtSpinAmp.cpp
+++ /dev/null
@@ -1,528 +0,0 @@
-
-/***********************************************************************
-* Copyright 1998-2020 CERN for the benefit of the EvtGen authors *
-* *
-* This file is part of EvtGen. *
-* *
-* EvtGen is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU General Public License as published by *
-* the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* EvtGen is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU General Public License for more details. *
-* *
-* You should have received a copy of the GNU General Public License *
-* along with EvtGen. If not, see . *
-***********************************************************************/
-
-#include "EvtGenBase/EvtSpinAmp.hh"
-
-#include "EvtGenBase/EvtPatches.hh"
-#include "EvtGenBase/EvtReport.hh"
-
-#include
-
-using std::endl;
-
-std::ostream& operator<<( std::ostream& os, const EvtSpinAmp& amp )
-{
- vector index = amp.iterinit();
-
- os << ":";
- do {
- os << "<";
- for ( size_t i = 0; i < index.size() - 1; ++i ) {
- os << index[i];
- }
- os << index[index.size() - 1] << ">" << amp( index ) << ":";
- } while ( amp.iterate( index ) );
-
- return os;
-}
-
-EvtSpinAmp operator*( const EvtComplex& real, const EvtSpinAmp& cont )
-{
- EvtSpinAmp ret( cont );
-
- for ( size_t i = 0; i < ret._elem.size(); ++i ) {
- ret._elem[i] *= real;
- }
-
- return ret;
-}
-
-EvtSpinAmp operator*( const EvtSpinAmp& cont, const EvtComplex& real )
-{
- return real * cont;
-}
-
-EvtSpinAmp operator/( const EvtSpinAmp& cont, const EvtComplex& real )
-{
- EvtSpinAmp ret( cont );
-
- for ( size_t i = 0; i < ret._elem.size(); ++i ) {
- ret._elem[i] /= real;
- }
-
- return ret;
-}
-
-vector EvtSpinAmp::calctwospin(
- const vector& type ) const
-{
- vector twospin;
-
- for ( size_t i = 0; i < type.size(); ++i ) {
- twospin.push_back( EvtSpinType::getSpin2( type[i] ) );
- }
-
- return twospin;
-}
-
-EvtSpinAmp::EvtSpinAmp( const vector& type )
-{
- int num = 1;
- _type = type;
- _twospin = calctwospin( type );
-
- for ( size_t i = 0; i < _twospin.size(); ++i )
- num *= _twospin[i] + 1;
-
- _elem = vector( num );
-}
-
-EvtSpinAmp::EvtSpinAmp( const vector& type,
- const EvtComplex& val )
-{
- int num = 1;
- _type = type;
- _twospin = calctwospin( type );
-
- for ( size_t i = 0; i < _twospin.size(); ++i )
- num *= _twospin[i] + 1;
-
- _elem = vector( num, val );
-}
-
-EvtSpinAmp::EvtSpinAmp( const vector& type,
- const vector& elem )
-{
- size_t num = 1;
-
- _type = type;
- _twospin = calctwospin( type );
- _elem = elem;
-
- for ( size_t i = 0; i < _twospin.size(); ++i ) {
- num *= ( _twospin[i] + 1 );
- }
-
- if ( _elem.size() != num ) {
- EvtGenReport( EVTGEN_ERROR, "EvtGen" )
- << "Wrong number of elements input:" << _elem.size() << " vs. "
- << num << endl;
- ::abort();
- }
-}
-
-EvtSpinAmp::EvtSpinAmp( const EvtSpinAmp& copy )
-{
- _twospin = copy._twospin;
- _elem = copy._elem;
- _type = copy._type;
-}
-
-void EvtSpinAmp::checktwospin( const vector& twospin ) const
-{
- if ( _twospin == twospin )
- return;
-
- EvtGenReport( EVTGEN_ERROR, "EvtGen" )
- << "Dimension or order of tensors being operated on does not match"
- << endl;
- ::abort();
-}
-
-void EvtSpinAmp::checkindexargs( const vector& index ) const
-{
- if ( index.size() == 0 ) {
- EvtGenReport( EVTGEN_ERROR, "EvtGen" )
- << "EvtSpinAmp can't handle no indices" << endl;
- ::abort();
- }
-
- if ( index.size() != _twospin.size() ) {
- EvtGenReport( EVTGEN_ERROR, "EvtGen" )
- << "Rank of EvtSpinAmp index does not match: " << _twospin.size()
- << " expected " << index.size() << " input." << endl;
- ::abort();
- }
-
- for ( size_t i = 0; i < _twospin.size(); ++i ) {
- if ( static_cast( _twospin[i] ) >= abs( index[i] ) &&
- static_cast( _twospin[i] ) % 2 == index[i] % 2 )
- continue;
- EvtGenReport( EVTGEN_ERROR, "EvtGen" )
- << "EvtSpinAmp index out of range" << endl;
- EvtGenReport( EVTGEN_ERROR, "EvtGen" ) << " Index: ";
- for ( size_t j = 0; j < _twospin.size(); ++j )
- EvtGenReport( EVTGEN_ERROR, " " ) << _twospin[j];
-
- EvtGenReport( EVTGEN_ERROR, " " ) << endl << " Index: ";
- for ( size_t j = 0; j < index.size(); ++j )
- EvtGenReport( EVTGEN_ERROR, " " ) << index[j];
- EvtGenReport( EVTGEN_ERROR, " " ) << endl;
- ::abort();
- }
-}
-
-int EvtSpinAmp::findtrueindex( const vector& index ) const
-{
- int trueindex = 0;
-
- for ( size_t i = index.size() - 1; i > 0; --i ) {
- trueindex += ( index[i] + _twospin[i] ) / 2;
- trueindex *= _twospin[i - 1] + 1;
- }
-
- trueindex += ( index[0] + _twospin[0] ) / 2;
-
- return trueindex;
-}
-
-EvtComplex& EvtSpinAmp::operator()( const vector& index )
-{
- checkindexargs( index );
-
- size_t trueindex = findtrueindex( index );
- if ( trueindex >= _elem.size() ) {
- EvtGenReport( EVTGEN_ERROR, "EvtGen" )
- << "indexing error " << trueindex << " " << _elem.size() << endl;
- for ( size_t i = 0; i < _twospin.size(); ++i ) {
- EvtGenReport( EVTGEN_ERROR, "" ) << _twospin[i] << " ";
- }
- EvtGenReport( EVTGEN_ERROR, "" ) << endl;
-
- for ( size_t i = 0; i < index.size(); ++i ) {
- EvtGenReport( EVTGEN_ERROR, "" ) << index[i] << " ";
- }
- EvtGenReport( EVTGEN_ERROR, "" ) << endl;
-
- ::abort();
- }
-
- return _elem[trueindex];
-}
-
-const EvtComplex& EvtSpinAmp::operator()( const vector& index ) const
-{
- checkindexargs( index );
-
- size_t trueindex = findtrueindex( index );
- if ( trueindex >= _elem.size() ) {
- EvtGenReport( EVTGEN_ERROR, "EvtGen" )
- << "indexing error " << trueindex << " " << _elem.size() << endl;
- for ( size_t i = 0; i < _twospin.size(); ++i ) {
- EvtGenReport( EVTGEN_ERROR, "" ) << _twospin[i] << " ";
- }
- EvtGenReport( EVTGEN_ERROR, "" ) << endl;
-
- for ( size_t i = 0; i < index.size(); ++i ) {
- EvtGenReport( EVTGEN_ERROR, "" ) << index[i] << " ";
- }
- EvtGenReport( EVTGEN_ERROR, "" ) << endl;
-
- ::abort();
- }
-
- return _elem[trueindex];
-}
-
-EvtComplex& EvtSpinAmp::operator()( int i, ... )
-{
- va_list ap;
- vector index( _twospin.size() );
-
- va_start( ap, i );
-
- index[0] = i;
- for ( size_t n = 1; n < _twospin.size(); ++n )
- index[n] = va_arg( ap, int );
-
- va_end( ap );
-
- return (*this)( index );
-}
-
-const EvtComplex& EvtSpinAmp::operator()( int i, ... ) const
-{
- vector index( _twospin.size() );
- va_list ap;
-
- va_start( ap, i );
-
- index[0] = i;
- for ( size_t n = 1; n < _twospin.size(); ++n )
- index[n] = va_arg( ap, int );
-
- va_end( ap );
-
- return (*this)( index );
-}
-
-EvtSpinAmp& EvtSpinAmp::operator=( const EvtSpinAmp& cont )
-{
- _twospin = cont._twospin;
- _elem = cont._elem;
- _type = cont._type;
-
- return *this;
-}
-
-EvtSpinAmp EvtSpinAmp::operator+( const EvtSpinAmp& cont ) const
-{
- checktwospin( cont._twospin );
-
- EvtSpinAmp ret( cont );
- for ( size_t i = 0; i < ret._elem.size(); ++i ) {
- ret._elem[i] += _elem[i];
- }
-
- return ret;
-}
-
-EvtSpinAmp& EvtSpinAmp::operator+=( const EvtSpinAmp& cont )
-{
- checktwospin( cont._twospin );
-
- for ( size_t i = 0; i < _elem.size(); ++i )
- _elem[i] += cont._elem[i];
-
- return *this;
-}
-
-EvtSpinAmp EvtSpinAmp::operator-( const EvtSpinAmp& cont ) const
-{
- checktwospin( cont._twospin );
-
- EvtSpinAmp ret( *this );
- for ( size_t i = 0; i < ret._elem.size(); ++i )
- ret._elem[i] -= cont._elem[i];
-
- return ret;
-}
-
-EvtSpinAmp& EvtSpinAmp::operator-=( const EvtSpinAmp& cont )
-{
- checktwospin( cont._twospin );
-
- for ( size_t i = 0; i < _elem.size(); ++i )
- _elem[i] -= cont._elem[i];
-
- return *this;
-}
-
-// amp = amp1 * amp2
-EvtSpinAmp EvtSpinAmp::operator*( const EvtSpinAmp& amp2 ) const
-{
- vector index( rank() + amp2.rank() );
- vector index1( rank() ), index2( amp2.rank() );
- EvtSpinAmp amp;
-
- amp._twospin = _twospin;
- amp._type = _type;
-
- for ( size_t i = 0; i < amp2._twospin.size(); ++i ) {
- amp._twospin.push_back( amp2._twospin[i] );
- amp._type.push_back( amp2._type[i] );
- }
-
- amp._elem = vector( _elem.size() * amp2._elem.size() );
-
- for ( size_t i = 0; i < index1.size(); ++i )
- index[i] = index1[i] = -_twospin[i];
-
- for ( size_t i = 0; i < index2.size(); ++i )
- index[i + rank()] = index2[i] = -amp2._twospin[i];
-
- while ( true ) {
- amp( index ) = (*this)(index1)*amp2( index2 );
- if ( !amp.iterate( index ) )
- break;
-
- for ( size_t i = 0; i < index1.size(); ++i )
- index1[i] = index[i];
-
- for ( size_t i = 0; i < index2.size(); ++i )
- index2[i] = index[i + rank()];
- }
-
- return amp;
-}
-
-EvtSpinAmp& EvtSpinAmp::operator*=( const EvtSpinAmp& cont )
-{
- EvtSpinAmp ret = ( *this ) * cont;
- *this = ret;
- return *this;
-}
-
-EvtSpinAmp& EvtSpinAmp::operator*=( const EvtComplex& real )
-{
- for ( size_t i = 0; i < _elem.size(); ++i )
- _elem[i] *= real;
-
- return *this;
-}
-
-EvtSpinAmp& EvtSpinAmp::operator/=( const EvtComplex& real )
-{
- for ( size_t i = 0; i < _elem.size(); ++i )
- _elem[i] /= real;
-
- return *this;
-}
-
-vector EvtSpinAmp::iterinit() const
-{
- vector init( _twospin.size() );
-
- for ( size_t i = 0; i < _twospin.size(); ++i )
- init[i] = -_twospin[i];
-
- return init;
-}
-
-bool EvtSpinAmp::iterate( vector& index ) const
-{
- int last = _twospin.size() - 1;
-
- index[0] += 2;
- for ( size_t j = 0; static_cast( j ) < last; ++j ) {
- if ( index[j] > static_cast( _twospin[j] ) ) {
- index[j] = -_twospin[j];
- index[j + 1] += 2;
- }
- }
-
- return ( abs( index[last] ) ) <= ( (int)_twospin[last] );
-}
-
-// Test whether a particular index is an allowed one (specifically to deal with
-// photons and possibly neutrinos)
-bool EvtSpinAmp::allowed( const vector& index ) const
-{
- if ( index.size() != _type.size() ) {
- EvtGenReport( EVTGEN_ERROR, "EvtGen" )
- << "Wrong dimensino index input to allowed." << endl;
- ::abort();
- }
-
- for ( size_t i = 0; i < index.size(); ++i ) {
- switch ( _type[i] ) {
- case EvtSpinType::PHOTON:
- if ( abs( index[i] ) != 2 )
- return false;
- break;
- case EvtSpinType::NEUTRINO:
- EvtGenReport( EVTGEN_ERROR, "EvtGen" )
- << "EvMultibody currently cannot handle neutrinos." << endl;
- ::abort();
- default:
- break;
- }
- }
-
- return true;
-}
-
-bool EvtSpinAmp::iterateallowed( vector& index ) const
-{
- while ( true ) {
- if ( !iterate( index ) )
- return false;
- if ( allowed( index ) )
- return true;
- }
-}
-
-vector EvtSpinAmp::iterallowedinit() const
-{
- vector init = iterinit();
- while ( !allowed( init ) ) {
- iterate( init );
- }
-
- return init;
-}
-
-void EvtSpinAmp::intcont( size_t a, size_t b )
-{
- if ( rank() <= 2 ) {
- EvtGenReport( EVTGEN_ERROR, "EvtGen" )
- << "EvtSpinAmp can't handle no indices" << endl;
- ::abort();
- }
-
- size_t newrank = rank() - 2;
-
- if ( _twospin[a] != _twospin[b] ) {
- EvtGenReport( EVTGEN_ERROR, "EvtGen" )
- << "Contaction called on indices of different dimension" << endl;
- EvtGenReport( EVTGEN_ERROR, "EvtGen" )
- << "Called on " << _twospin[a] << " and " << _twospin[b] << endl;
- ::abort();
- }
-
- vector newtwospin( newrank );
- vector newtype( newrank );
-
- for ( size_t i = 0, j = 0; i < _twospin.size(); ++i ) {
- if ( i == a || i == b )
- continue;
-
- newtwospin[j] = _twospin[i];
- newtype[j] = _type[i];
- ++j;
- }
-
- EvtSpinAmp newamp( newtype );
- vector index( rank() ), newindex = newamp.iterinit();
-
- for ( size_t i = 0; i < newrank; ++i )
- newindex[i] = -newtwospin[i];
-
- while ( true ) {
- for ( size_t i = 0, j = 0; i < rank(); ++i ) {
- if ( i == a || i == b )
- continue;
- index[i] = newindex[j];
- ++j;
- }
-
- index[b] = index[a] = -_twospin[a];
- newamp( newindex ) = (*this)( index );
- for ( size_t i = -_twospin[a] + 2; i <= _twospin[a]; i += 2 ) {
- index[b] = index[a] = i;
- newamp( newindex ) += (*this)( index );
- }
-
- if ( !newamp.iterate( newindex ) )
- break;
- }
-
- *this = newamp;
-}
-
-// In A.extcont(B), a is the index in A and b is the index in B - note that this
-// routine can be extremely improved!
-void EvtSpinAmp::extcont( const EvtSpinAmp& cont, int a, int b )
-{
- EvtSpinAmp ret = ( *this ) * cont;
- ret.intcont( a, rank() + b );
-
- *this = ret;
-}
diff --git a/src/EvtGenModels/EvtBHadronic.cpp b/src/EvtGenModels/EvtBHadronic.cpp
deleted file mode 100644
--- a/src/EvtGenModels/EvtBHadronic.cpp
+++ /dev/null
@@ -1,299 +0,0 @@
-
-/***********************************************************************
-* Copyright 1998-2020 CERN for the benefit of the EvtGen authors *
-* *
-* This file is part of EvtGen. *
-* *
-* EvtGen is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU General Public License as published by *
-* the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* EvtGen is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU General Public License for more details. *
-* *
-* You should have received a copy of the GNU General Public License *
-* along with EvtGen. If not, see . *
-***********************************************************************/
-
-#include "EvtGenModels/EvtBHadronic.hh"
-
-#include "EvtGenBase/EvtGenKine.hh"
-#include "EvtGenBase/EvtPDL.hh"
-#include "EvtGenBase/EvtParticle.hh"
-#include "EvtGenBase/EvtPatches.hh"
-#include "EvtGenBase/EvtReport.hh"
-#include "EvtGenBase/EvtTensor4C.hh"
-#include "EvtGenBase/EvtVector4C.hh"
-#include "EvtGenBase/EvtVector4R.hh"
-
-#include "EvtGenModels/EvtISGW2FF.hh"
-
-#include
-#include
-using std::endl;
-
-std::string EvtBHadronic::getName()
-{
- return "BHADRONIC";
-}
-
-EvtBHadronic* EvtBHadronic::clone()
-{
- return new EvtBHadronic;
-}
-
-void EvtBHadronic::init()
-{
- // check that there are 2 argument
- checkNArg( 2 );
-}
-
-void EvtBHadronic::decay( EvtParticle* p )
-{
- //added by Lange Jan4,2000
- static EvtId B0 = EvtPDL::getId( "B0" );
- static EvtId D0 = EvtPDL::getId( "D0" );
- static EvtId DST0 = EvtPDL::getId( "D*0" );
- static EvtId D3P10 = EvtPDL::getId( "D'_10" );
- static EvtId D3P20 = EvtPDL::getId( "D_2*0" );
- static EvtId D3P00 = EvtPDL::getId( "D_0*0" );
- static EvtId D1P10 = EvtPDL::getId( "D_10" );
-
- static EvtISGW2FF ffmodel;
-
- p->initializePhaseSpace( getNDaug(), getDaugs() );
-
- EvtVector4R p4[MAX_DAUG];
- p->mass();
-
- int i, j;
-
- for ( i = 0; i < getNDaug(); i++ ) {
- p4[i] = p->getDaug( i )->getP4();
- }
-
- int bcurrent, wcurrent;
- int nbcurrent = 0;
- int nwcurrent = 0;
-
- bcurrent = (int)getArg( 0 );
- wcurrent = (int)getArg( 1 );
-
- EvtVector4C jb[5], jw[5];
- EvtTensor4C g, tds;
-
- EvtVector4R p4b;
- p4b.set( p->mass(), 0.0, 0.0, 0.0 );
-
- EvtVector4R q;
- double q2;
-
- EvtComplex ep_meson_bb[5];
- double f, gf, ap, am;
- double fp, fm;
- double hf, kf, bp, bm;
- EvtVector4R pp, pm;
- EvtVector4C ep_meson_b[5];
-
- switch ( bcurrent ) {
- // D0
- case 1:
- q = p4b - p4[0];
- q2 = q * q;
- nbcurrent = 1;
- ffmodel.getscalarff( B0, D0, EvtPDL::getMeanMass( D0 ),
- EvtPDL::getMeanMass( getDaugs()[1] ), &fp, &fm );
- jb[0] = EvtVector4C( fp * ( p4b + p4[0] ) - fm * q );
- break;
- // D*
- case 2:
- q = p4b - p4[0];
- q2 = q * q;
- nbcurrent = 3;
- ffmodel.getvectorff( B0, DST0, EvtPDL::getMeanMass( DST0 ), q2, &f,
- &gf, &ap, &am );
-
- g.setdiag( 1.0, -1.0, -1.0, -1.0 );
- tds = -f * g -
- ap * ( EvtGenFunctions::directProd( p4b, p4b ) +
- EvtGenFunctions::directProd( p4b, p4[0] ) ) -
- gf * EvtComplex( 0.0, 1.0 ) *
- dual( EvtGenFunctions::directProd( p4[0] + p4b,
- p4b - p4[0] ) ) -
- am * ( ( EvtGenFunctions::directProd( p4b, p4b ) -
- EvtGenFunctions::directProd( p4b, p4[0] ) ) );
- jb[0] = tds.cont1( p->getDaug( 0 )->epsParent( 0 ).conj() );
- jb[1] = tds.cont1( p->getDaug( 0 )->epsParent( 1 ).conj() );
- jb[2] = tds.cont1( p->getDaug( 0 )->epsParent( 2 ).conj() );
- break;
- // D1
- case 3:
- q = p4b - p4[0];
- q2 = q * q;
- nbcurrent = 3;
- ffmodel.getvectorff( B0, D3P10, EvtPDL::getMeanMass( D3P10 ), q2,
- &f, &gf, &ap, &am );
-
- g.setdiag( 1.0, -1.0, -1.0, -1.0 );
- tds = -f * g -
- ap * ( EvtGenFunctions::directProd( p4b, p4b ) +
- EvtGenFunctions::directProd( p4b, p4[0] ) ) -
- gf * EvtComplex( 0.0, 1.0 ) *
- dual( EvtGenFunctions::directProd( p4[0] + p4b,
- p4b - p4[0] ) ) -
- am * ( ( EvtGenFunctions::directProd( p4b, p4b ) -
- EvtGenFunctions::directProd( p4b, p4[0] ) ) );
- jb[0] = tds.cont1( p->getDaug( 0 )->epsParent( 0 ).conj() );
- jb[1] = tds.cont1( p->getDaug( 0 )->epsParent( 1 ).conj() );
- jb[2] = tds.cont1( p->getDaug( 0 )->epsParent( 2 ).conj() );
-
- break;
- // D2*
- case 4:
- q = p4b - p4[0];
- q2 = q * q;
- nbcurrent = 5;
- ffmodel.gettensorff( B0, D3P20, EvtPDL::getMeanMass( D3P20 ), q2,
- &hf, &kf, &bp, &bm );
- g.setdiag( 1.0, -1.0, -1.0, -1.0 );
-
- ep_meson_b[0] =
- ( ( p->getDaug( 0 )->epsTensorParent( 0 ) ).cont2( p4b ) ).conj();
- ep_meson_b[1] =
- ( ( p->getDaug( 0 )->epsTensorParent( 1 ) ).cont2( p4b ) ).conj();
- ep_meson_b[2] =
- ( ( p->getDaug( 0 )->epsTensorParent( 2 ) ).cont2( p4b ) ).conj();
- ep_meson_b[3] =
- ( ( p->getDaug( 0 )->epsTensorParent( 3 ) ).cont2( p4b ) ).conj();
- ep_meson_b[4] =
- ( ( p->getDaug( 0 )->epsTensorParent( 4 ) ).cont2( p4b ) ).conj();
-
- pp = p4b + p4[0];
- pm = p4b - p4[0];
-
- ep_meson_bb[0] = ep_meson_b[0] * ( p4b );
- ep_meson_bb[1] = ep_meson_b[1] * ( p4b );
- ep_meson_bb[2] = ep_meson_b[2] * ( p4b );
- ep_meson_bb[3] = ep_meson_b[3] * ( p4b );
- ep_meson_bb[4] = ep_meson_b[4] * ( p4b );
-
- jb[0] = EvtComplex( 0.0, ( 1.0 ) * hf ) *
- dual( EvtGenFunctions::directProd( pp, pm ) )
- .cont2( ep_meson_b[0] ) -
- kf * ep_meson_b[0] - bp * ep_meson_bb[0] * pp -
- bm * ep_meson_bb[0] * pm;
-
- jb[1] = EvtComplex( 0.0, ( 1.0 ) * hf ) *
- dual( EvtGenFunctions::directProd( pp, pm ) )
- .cont2( ep_meson_b[1] ) -
- kf * ep_meson_b[1] - bp * ep_meson_bb[1] * pp -
- bm * ep_meson_bb[1] * pm;
-
- jb[2] = EvtComplex( 0.0, ( 1.0 ) * hf ) *
- dual( EvtGenFunctions::directProd( pp, pm ) )
- .cont2( ep_meson_b[2] ) -
- kf * ep_meson_b[2] - bp * ep_meson_bb[2] * pp -
- bm * ep_meson_bb[2] * pm;
-
- jb[3] = EvtComplex( 0.0, ( 1.0 ) * hf ) *
- dual( EvtGenFunctions::directProd( pp, pm ) )
- .cont2( ep_meson_b[3] ) -
- kf * ep_meson_b[3] - bp * ep_meson_bb[3] * pp -
- bm * ep_meson_bb[3] * pm;
-
- jb[4] = EvtComplex( 0.0, ( 1.0 ) * hf ) *
- dual( EvtGenFunctions::directProd( pp, pm ) )
- .cont2( ep_meson_b[4] ) -
- kf * ep_meson_b[4] - bp * ep_meson_bb[4] * pp -
- bm * ep_meson_bb[4] * pm;
- break;
- // D_0*
- case 5:
- q = p4b - p4[0];
- q2 = q * q;
- double f, gf, ap, am;
- nbcurrent = 3;
- ffmodel.getvectorff( B0, D1P10, EvtPDL::getMeanMass( D1P10 ), q2,
- &f, &gf, &ap, &am );
- g.setdiag( 1.0, -1.0, -1.0, -1.0 );
- tds = -f * g -
- ap * ( EvtGenFunctions::directProd( p4b, p4b ) +
- EvtGenFunctions::directProd( p4b, p4[0] ) ) +
- gf * EvtComplex( 0.0, 1.0 ) *
- dual( EvtGenFunctions::directProd( p4[0] + p4b,
- p4b - p4[0] ) ) -
- am * ( ( EvtGenFunctions::directProd( p4b, p4b ) -
- EvtGenFunctions::directProd( p4b, p4[0] ) ) );
- jb[0] = tds.cont1( p->getDaug( 0 )->epsParent( 0 ).conj() );
- jb[1] = tds.cont1( p->getDaug( 0 )->epsParent( 1 ).conj() );
- jb[2] = tds.cont1( p->getDaug( 0 )->epsParent( 2 ).conj() );
- break;
- // D_1
- case 6:
- q = p4b - p4[0];
- q2 = q * q;
- nbcurrent = 1;
- ffmodel.getscalarff( B0, D3P00, EvtPDL::getMeanMass( D3P00 ), q2,
- &fp, &fm );
- jb[0] = fp * ( p4b + p4[0] ) + fm * q;
- break;
- default:
- EvtGenReport( EVTGEN_ERROR, "EvtGen" )
- << "In EvtBHadronic, unknown hadronic current." << endl;
- }
-
- double norm;
-
- switch ( wcurrent ) {
- case 1:
- case 3:
- case 4:
- nwcurrent = 1;
- jw[0] = p4[getNDaug() - 1];
- break;
-
- case 2:
- case 5:
- case 6:
- nwcurrent = 3;
- norm = 1.0 /
- sqrt( p4[1].get( 0 ) * p4[1].get( 0 ) / p4[1].mass2() - 1.0 );
- jw[0] = norm * p->getDaug( getNDaug() - 1 )->epsParent( 0 );
- jw[1] = norm * p->getDaug( getNDaug() - 1 )->epsParent( 1 );
- jw[2] = norm * p->getDaug( getNDaug() - 1 )->epsParent( 2 );
- break;
-
- default:
- EvtGenReport( EVTGEN_ERROR, "EvtGen" )
- << "In EvtBHadronic, unknown W current." << endl;
- }
-
- if ( nbcurrent == 1 && nwcurrent == 1 ) {
- vertex( jb[0] * jw[0] );
- return;
- }
-
- if ( nbcurrent == 1 ) {
- for ( j = 0; j < nwcurrent; j++ ) {
- vertex( j, jb[0] * jw[j] );
- }
- return;
- }
-
- if ( nwcurrent == 1 ) {
- for ( j = 0; j < nbcurrent; j++ ) {
- vertex( j, jb[j] * jw[0] );
- }
- return;
- }
-
- for ( j = 0; j < nbcurrent; j++ ) {
- for ( i = 0; i < nwcurrent; i++ ) {
- vertex( j, i, jb[j] * jw[i] );
- }
- }
- return;
-}
diff --git a/src/EvtGenModels/EvtKstarstargamma.cpp b/src/EvtGenModels/EvtKstarstargamma.cpp
deleted file mode 100644
--- a/src/EvtGenModels/EvtKstarstargamma.cpp
+++ /dev/null
@@ -1,178 +0,0 @@
-
-/***********************************************************************
-* Copyright 1998-2020 CERN for the benefit of the EvtGen authors *
-* *
-* This file is part of EvtGen. *
-* *
-* EvtGen is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU General Public License as published by *
-* the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* EvtGen is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU General Public License for more details. *
-* *
-* You should have received a copy of the GNU General Public License *
-* along with EvtGen. If not, see . *
-***********************************************************************/
-
-#include "EvtGenModels/EvtKstarstargamma.hh"
-
-#include "EvtGenBase/EvtEvalHelAmp.hh"
-#include "EvtGenBase/EvtGenKine.hh"
-#include "EvtGenBase/EvtPDL.hh"
-#include "EvtGenBase/EvtParticle.hh"
-#include "EvtGenBase/EvtPatches.hh"
-#include "EvtGenBase/EvtPhotonParticle.hh"
-#include "EvtGenBase/EvtPropBreitWignerRel.hh"
-#include "EvtGenBase/EvtReport.hh"
-#include "EvtGenBase/EvtScalarParticle.hh"
-#include "EvtGenBase/EvtTensorParticle.hh"
-#include "EvtGenBase/EvtTwoBodyVertex.hh"
-#include "EvtGenBase/EvtVector4C.hh"
-#include "EvtGenBase/EvtVector4R.hh"
-#include "EvtGenBase/EvtVectorParticle.hh"
-
-#include
-#include
-
-std::string EvtKstarstargamma::getName()
-{
- return "KSTARSTARGAMMA";
-}
-
-EvtDecayBase* EvtKstarstargamma::clone()
-{
- return new EvtKstarstargamma;
-}
-
-void EvtKstarstargamma::init()
-{
- // check that there are 0 arguments
- checkNArg( 0 );
-
- // check that there are 3 daughters
- checkNDaug( 3 );
-
- // check the parent and daughter spins
- checkSpinParent( EvtSpinType::SCALAR );
- checkSpinDaughter( 0, EvtSpinType::SCALAR );
- checkSpinDaughter( 1, EvtSpinType::SCALAR );
- checkSpinDaughter( 2, EvtSpinType::PHOTON );
-}
-
-void EvtKstarstargamma::initProbMax()
-{
- //setProbMax(1.0);
-}
-
-void EvtKstarstargamma::decay( EvtParticle* /*p*/ )
-{
- /*
-
- The EvtEvalHelAmp is completely broken...
-
- p->initializePhaseSpace(getNDaug(),getDaugs());
-
- EvtParticle* kaon = p->getDaug(0);
- EvtParticle* pion = p->getDaug(1);
- EvtParticle* photon = p->getDaug(2);
-
-
- EvtComplexPtrPtr Hd1=new EvtComplexPtr[5];
- Hd1[0]=new EvtComplex[2];
- Hd1[1]=new EvtComplex[2];
- Hd1[2]=new EvtComplex[2];
- Hd1[3]=new EvtComplex[2];
- Hd1[4]=new EvtComplex[2];
-
- Hd1[0][0]=0.0;
- Hd1[0][1]=0.0;
- Hd1[1][0]=0.0;
- Hd1[1][1]=0.0;
- Hd1[2][0]=0.0;
- Hd1[2][1]=0.0;
- Hd1[3][0]=0.0;
- Hd1[3][1]=1.0;
- Hd1[4][0]=0.0;
- Hd1[4][1]=0.0;
-
- EvtEvalHelAmp d1(EvtSpinType::SCALAR,EvtSpinType::TENSOR,
- EvtSpinType::PHOTON,Hd1);
-
- EvtScalarParticle theB;
-
- theB.init(p->getId(),p->getP4Restframe());
-
- EvtVector4R theKstarP4=kaon->getP4()+pion->getP4();
-
- EvtTensorParticle theKstar;
- theKstar.init(EvtPDL::getId(std::string("K_2*0")),theKstarP4);
-
- EvtPhotonParticle thePhoton;
- thePhoton.init(EvtPDL::getId(std::string("K_2*0")),photon->getP4());
-
- theKstar.addDaug(&theB);
- thePhoton.addDaug(&theB);
-
- EvtAmp amp1;
-
- d1.evalAmp(&theB,amp1);
-
- EvtComplexPtrPtr Hd2=new EvtComplexPtr[1];
- Hd2[0]=new EvtComplex[1];
-
- Hd2[0][0]=1.0;
-
-
- EvtEvalHelAmp d2(EvtSpinType::TENSOR,EvtSpinType::SCALAR,
- EvtSpinType::SCALAR,Hd2);
-
-
- EvtVector4R theKstarP4boost(theKstarP4.get(0),-theKstarP4.get(1),-theKstarP4.get(2),-theKstarP4.get(3));
-
- EvtScalarParticle theKaon;
- theKaon.init(EvtPDL::getId(std::string("K+")),boostTo(kaon->getP4(),theKstarP4boost));
-
- EvtScalarParticle thePion;
- thePion.init(EvtPDL::getId(std::string("pi+")),boostTo(pion->getP4(),theKstarP4boost));
-
- theKaon.addDaug(&theKstar);
- thePion.addDaug(&theKstar);
-
- // Calculate the propagator
-
- double m = theKstarP4.mass();
- EvtTwoBodyVertex v(0.5,0.14,1.4,2);
- EvtTwoBodyKine v1(0.5,0.14,m);
- EvtPropBreitWignerRel prop(1.4,0.2);
-
- // Mass-dependent width correction and amplitude calculation
-
- double width = prop.g0() * v.widthFactor(v1);
- prop.set_g0(width);
- EvtComplex bwamp = prop.evaluate(m);
-
-
- EvtAmp amp2;
-
- d2.evalAmp(&theKstar,amp2);
-
- vertex(0,bwamp*(amp1._amp[0]*amp2._amp[0]+
- amp1._amp[1]*amp2._amp[1]+
- amp1._amp[2]*amp2._amp[2]+
- amp1._amp[3]*amp2._amp[3]+
- amp1._amp[4]*amp2._amp[4]));
-
- vertex(1,bwamp*(amp1._amp[5]*amp2._amp[0]+
- amp1._amp[6]*amp2._amp[1]+
- amp1._amp[7]*amp2._amp[2]+
- amp1._amp[8]*amp2._amp[3]+
- amp1._amp[9]*amp2._amp[4]));
-
-*/
-
- return;
-}
diff --git a/src/EvtGenModels/EvtLambdaB2LambdaV.cpp b/src/EvtGenModels/EvtLambdaB2LambdaV.cpp
deleted file mode 100644
--- a/src/EvtGenModels/EvtLambdaB2LambdaV.cpp
+++ /dev/null
@@ -1,1409 +0,0 @@
-
-/***********************************************************************
-* Copyright 1998-2020 CERN for the benefit of the EvtGen authors *
-* *
-* This file is part of EvtGen. *
-* *
-* EvtGen is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU General Public License as published by *
-* the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* EvtGen is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU General Public License for more details. *
-* *
-* You should have received a copy of the GNU General Public License *
-* along with EvtGen. If not, see . *
-***********************************************************************/
-
-#include "EvtGenModels/EvtLambdaB2LambdaV.hh"
-
-#include "EvtGenBase/EvtGenKine.hh"
-#include "EvtGenBase/EvtPDL.hh"
-#include "EvtGenBase/EvtParticle.hh"
-#include "EvtGenBase/EvtPatches.hh"
-#include "EvtGenBase/EvtRandom.hh"
-#include "EvtGenBase/EvtReport.hh"
-
-#include
-#include
-#include
-#include
-
-using std::fstream;
-//************************************************************************
-//* *
-//* Class EvtLambdaB2LambdaV *
-//* *
-//************************************************************************
-//DECLARE_COMPONENT( EvtLambdaB2LambdaV );
-
-EvtLambdaB2LambdaV::EvtLambdaB2LambdaV()
-{
- //set facility name
- fname = "EvtGen.EvtLambdaB2LambdaV";
-}
-
-//------------------------------------------------------------------------
-// Method 'getName'
-//------------------------------------------------------------------------
-std::string EvtLambdaB2LambdaV::getName()
-{
- return "LAMBDAB2LAMBDAV";
-}
-
-//------------------------------------------------------------------------
-// Method 'clone'
-//------------------------------------------------------------------------
-EvtDecayBase* EvtLambdaB2LambdaV::clone()
-{
- return new EvtLambdaB2LambdaV;
-}
-
-//------------------------------------------------------------------------
-// Method 'initProbMax'
-//------------------------------------------------------------------------
-void EvtLambdaB2LambdaV::initProbMax()
-{
- //maximum (case where C=0)
- double Max = 1.0 + fabs( A * B ) + 2.0 * fabs( A * abs( C ) );
- if ( verbose() ) {
- EvtGenReport( EVTGEN_DEBUG, fname.c_str() )
- << " PDF max value : " << Max << std::endl;
- }
- setProbMax( Max );
-}
-
-//------------------------------------------------------------------------
-// Method 'init'
-//------------------------------------------------------------------------
-void EvtLambdaB2LambdaV::init()
-{
- bool antiparticle = false;
-
- //introduction
- if ( verbose() ) {
- EvtGenReport( EVTGEN_DEBUG, fname.c_str() )
- << "*************************************************" << std::endl;
- EvtGenReport( EVTGEN_DEBUG, fname.c_str() )
- << "* Event Model Class : EvtLambdaB2LambdaV *" << std::endl;
- EvtGenReport( EVTGEN_DEBUG, fname.c_str() )
- << "*************************************************" << std::endl;
- }
-
- //check the number of arguments
- checkNArg( 2 );
-
- //check the number of daughters
- checkNDaug( 2 );
-
- const EvtId Id_mother = getParentId();
- const EvtId Id_daug1 = getDaug( 0 );
- const EvtId Id_daug2 = getDaug( 1 );
-
- //lambdab identification
- if ( Id_mother == EvtPDL::getId( "Lambda_b0" ) ) {
- antiparticle = false;
- } else if ( Id_mother == EvtPDL::getId( "anti-Lambda_b0" ) ) {
- antiparticle = true;
- } else {
- EvtGenReport( EVTGEN_ERROR, fname.c_str() )
- << " Mother is not a Lambda_b0 or an anti-Lambda_b0, but a "
- << EvtPDL::name( Id_mother ) << std::endl;
- abort();
- }
-
- //lambda
- if ( !( Id_daug1 == EvtPDL::getId( "Lambda0" ) && !antiparticle ) &&
- !( Id_daug1 == EvtPDL::getId( "anti-Lambda0" ) && antiparticle ) ) {
- if ( !antiparticle ) {
- EvtGenReport( EVTGEN_ERROR, fname.c_str() )
- << " Daughter1 is not a Lambda0, but a "
- << EvtPDL::name( Id_daug1 ) << std::endl;
- } else {
- EvtGenReport( EVTGEN_ERROR, fname.c_str() )
- << " Daughter1 is not an anti-Lambda0, but a "
- << EvtPDL::name( Id_daug1 ) << std::endl;
- }
- abort();
- }
-
- //identification meson V
- if ( getArg( 1 ) == 1 )
- Vtype = VID::JPSI;
- else if ( getArg( 1 ) == 2 )
- Vtype = VID::RHO;
- else if ( getArg( 1 ) == 3 )
- Vtype = VID::OMEGA;
- else if ( getArg( 1 ) == 4 )
- Vtype = VID::RHO_OMEGA_MIXING;
- else {
- EvtGenReport( EVTGEN_ERROR, fname.c_str() )
- << " Vtype " << getArg( 1 ) << " is unknown" << std::endl;
- abort();
- }
-
- //check vector meson V
- if ( Id_daug2 == EvtPDL::getId( "J/psi" ) && Vtype == VID::JPSI ) {
- if ( !antiparticle )
- EvtGenReport( EVTGEN_DEBUG, fname.c_str() )
- << " Decay mode successfully initialized : Lambda_b0 -> Lambda J/psi"
- << std::endl;
- else
- EvtGenReport( EVTGEN_DEBUG, fname.c_str() )
- << " Decay mode successfully initialized : anti-Lambda_b0 -> anti-Lambda J/psi"
- << std::endl;
- } else if ( Id_daug2 == EvtPDL::getId( "rho0" ) && Vtype == VID::RHO ) {
- if ( !antiparticle )
- EvtGenReport( EVTGEN_DEBUG, fname.c_str() )
- << " Decay mode successfully initialized : Lambda_b0 -> Lambda rho0"
- << std::endl;
- else
- EvtGenReport( EVTGEN_DEBUG, fname.c_str() )
- << " Decay mode successfully initialized : anti-Lambda_b0 -> anti-Lambda rho0"
- << std::endl;
- } else if ( Id_daug2 == EvtPDL::getId( "omega" ) && Vtype == VID::OMEGA ) {
- if ( !antiparticle )
- EvtGenReport( EVTGEN_DEBUG, fname.c_str() )
- << " Decay mode successfully initialized : Lambda_b0 -> Lambda omega"
- << std::endl;
- else
- EvtGenReport( EVTGEN_DEBUG, fname.c_str() )
- << " Decay mode successfully initialized : anti-Lambda_b0 -> anti-Lambda omega"
- << std::endl;
- } else if ( ( Id_daug2 == EvtPDL::getId( "omega" ) ||
- Id_daug2 == EvtPDL::getId( "rho0" ) ) &&
- Vtype == VID::RHO_OMEGA_MIXING ) {
- if ( !antiparticle )
- EvtGenReport( EVTGEN_DEBUG, fname.c_str() )
- << " Decay mode successfully initialized : "
- << "Lambda_b0 -> Lambda rho-omega-mixing" << std::endl;
- else
- EvtGenReport( EVTGEN_DEBUG, fname.c_str() )
- << " Decay mode successfully initialized : "
- << "anti-Lambda_b0 -> anti-Lambda rho-omega-mixing" << std::endl;
- }
-
- else {
- EvtGenReport( EVTGEN_ERROR, fname.c_str() )
- << " Daughter2 is not a J/psi, phi or rho0 but a "
- << EvtPDL::name( Id_daug2 ) << std::endl;
- abort();
- }
-
- //fix dynamics parameters
- B = (double)getArg( 0 );
- C = EvtComplex( ( sqrt( 2. ) / 2. ), ( sqrt( 2. ) / 2. ) );
- switch ( Vtype ) {
- case VID::JPSI:
- A = 0.490;
- break;
- case VID::RHO:
- case VID::OMEGA:
- case VID::RHO_OMEGA_MIXING:
- A = 0.194;
- break;
- default:
- A = 0;
- break;
- }
-
- if ( verbose() ) {
- EvtGenReport( EVTGEN_DEBUG, fname.c_str() )
- << " LambdaB decay parameters : " << std::endl;
- EvtGenReport( EVTGEN_DEBUG, fname.c_str() )
- << " - lambda asymmetry A = " << A << std::endl;
- EvtGenReport( EVTGEN_DEBUG, fname.c_str() )
- << " - lambdab polarisation B = " << B << std::endl;
- EvtGenReport( EVTGEN_DEBUG, fname.c_str() )
- << " - lambdab density matrix rho+- C = " << C << std::endl;
- }
-}
-
-//------------------------------------------------------------------------
-// Method 'decay'
-//------------------------------------------------------------------------
-void EvtLambdaB2LambdaV::decay( EvtParticle* lambdab )
-{
- // Using formulae from hep-ph/0602043
-
- lambdab->makeDaughters( getNDaug(), getDaugs() );
-
- //get lambda and V particles
- EvtParticle* lambda = lambdab->getDaug( 0 );
- EvtParticle* V = lambdab->getDaug( 1 );
-
- //get resonance masses
- // - LAMBDAB -> mass given by the preceding class
- // - LAMBDA -> nominal mass
- // - V -> getVmass method
- double MASS_LAMBDAB = lambdab->mass();
- double MASS_LAMBDA = EvtPDL::getMeanMass( EvtPDL::getId( "Lambda0" ) );
- double MASS_V = getVMass( MASS_LAMBDAB, MASS_LAMBDA );
-
- //generate random angles
- double phi = EvtRandom::Flat( 0, 2 * EvtConst::pi );
- double theta = acos( EvtRandom::Flat( -1, +1 ) );
-
- // Get 4-vectors
- double E_lambda = ( MASS_LAMBDAB * MASS_LAMBDAB +
- MASS_LAMBDA * MASS_LAMBDA - MASS_V * MASS_V ) /
- ( 2 * MASS_LAMBDAB );
- double E_V = ( MASS_LAMBDAB * MASS_LAMBDAB + MASS_V * MASS_V -
- MASS_LAMBDA * MASS_LAMBDA ) /
- ( 2 * MASS_LAMBDAB );
- double P = sqrt( E_lambda * E_lambda - lambda->mass() * lambda->mass() );
-
- EvtVector4R P_lambdab = lambdab->getP4();
-
- double px = P_lambdab.get( 1 );
- double py = P_lambdab.get( 2 );
- double pz = P_lambdab.get( 3 );
- double E = P_lambdab.get( 0 );
-
- const double pxSq = px * px;
- const double pySq = py * py;
- const double pT = sqrt( pxSq + pySq );
- const double invPT = pT > 0.0 ? 1.0 / pT : 0.0;
- EvtVector4R q_lambdab2( E, pT, 0.0, pz );
-
- EvtVector4R q_lambdab3( E, q_lambdab2.get( 3 ), q_lambdab2.get( 1 ),
- q_lambdab2.get( 2 ) );
-
- EvtVector4R q_lambda0( E_lambda, P * sin( theta ) * cos( phi ),
- P * sin( theta ) * sin( phi ), P * cos( theta ) );
-
- EvtVector4R q_V0( E_V, -P * sin( theta ) * cos( phi ),
- -P * sin( theta ) * sin( phi ), -P * cos( theta ) );
-
- EvtVector4R q_lambda1( E_lambda, q_lambda0.get( 2 ), q_lambda0.get( 3 ),
- q_lambda0.get( 1 ) );
-
- EvtVector4R q_V1( E_V, q_V0.get( 2 ), q_V0.get( 3 ), q_V0.get( 1 ) );
-
- EvtVector4R q_lambda(
- E_lambda, invPT * ( px * q_lambda1.get( 1 ) - py * q_lambda1.get( 2 ) ),
- invPT * ( py * q_lambda1.get( 1 ) + px * q_lambda1.get( 2 ) ),
- q_lambda1.get( 3 ) );
-
- EvtVector4R q_V( E_V, invPT * ( px * q_V1.get( 1 ) - py * q_V1.get( 2 ) ),
- invPT * ( py * q_V1.get( 1 ) + px * q_V1.get( 2 ) ),
- q_V1.get( 3 ) );
-
- // Set particle 4-vectors
- lambda->init( getDaugs()[0], q_lambda );
- V->init( getDaugs()[1], q_V );
-
- // Find pdf (eq 11 in paper)
- double pdf = 1.0 + A * B * cos( theta ) +
- 2.0 * A * real( C * EvtComplex( cos( phi ), sin( phi ) ) ) *
- sin( theta );
-
- //set probability
- setProb( pdf );
-
- if ( verbose() ) {
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Angular angles : theta = " << theta << " ; phi = " << phi
- << std::endl;
-
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << "E of lambdab: " << P_lambdab.get( 0 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << "E of lambdab: " << E << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " LambdaB px: " << px << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " LambdaB py: " << py << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " LambdaB pz: " << pz << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " LambdaB E: " << E << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Lambdab3 E: " << q_lambdab3.get( 0 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Lambda 0 px: " << q_lambda0.get( 1 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Lambda 0 py: " << q_lambda0.get( 2 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Lambda 0 pz: " << q_lambda0.get( 3 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Lambda 0 E: " << q_lambda0.get( 0 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Lambda 1 px: " << q_lambda1.get( 1 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Lambda 1 py: " << q_lambda1.get( 2 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Lambda 1 pz: " << q_lambda1.get( 3 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Lambda 1 E: " << q_lambda1.get( 0 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Lambda px: " << q_lambda.get( 1 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Lambda py: " << q_lambda.get( 2 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Lambda pz: " << q_lambda.get( 3 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Lambda E: " << q_lambda0.get( 3 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " V 0 px: " << q_V0.get( 1 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " V 0 py: " << q_V0.get( 2 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " V 0 pz: " << q_V0.get( 3 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " V 0 E: " << q_V0.get( 0 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " V 1 px: " << q_V1.get( 1 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " V 1 py: " << q_V1.get( 2 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " V 1 pz: " << q_V1.get( 3 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " V 1 E: " << q_V1.get( 0 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " V px: " << q_V.get( 1 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " V py: " << q_V.get( 2 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " V pz: " << q_V.get( 3 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " V E: " << q_V0.get( 3 ) << std::endl;
- EvtGenReport( EVTGEN_DEBUG, fname.c_str() )
- << " LambdaB decay pdf value : " << pdf << std::endl;
- }
-}
-
-//------------------------------------------------------------------------
-// Method 'BreitWignerRelPDF'
-//------------------------------------------------------------------------
-double EvtLambdaB2LambdaV::BreitWignerRelPDF( double m, double _m0, double _g0 )
-{
- double a = ( _m0 * _g0 ) * ( _m0 * _g0 );
- double b = ( m * m - _m0 * _m0 ) * ( m * m - _m0 * _m0 );
- return a / ( b + a );
-}
-
-//------------------------------------------------------------------------
-// Method 'RhoOmegaMixingPDF'
-//------------------------------------------------------------------------
-double EvtLambdaB2LambdaV::RhoOmegaMixingPDF( double m, double _mr, double _gr,
- double _mo, double _go )
-{
- double a = m * m - _mr * _mr;
- double b = m * m - _mo * _mo;
- double c = _gr * _mr;
- double d = _go * _mo;
- double re_pi = -3500e-6; //GeV^2
- double im_pi = -300e-6; //GeV^2
- double va_pi = re_pi + im_pi;
-
- //compute pdf value
- double f = 1 / ( a * a + c * c ) *
- ( 1 + ( va_pi * va_pi + 2 * b * re_pi + 2 * d * im_pi ) /
- ( b * b + d * d ) );
-
- //compute pdf max value
- a = 0;
- b = _mr * _mr - _mo * _mo;
-
- double maxi = 1 / ( a * a + c * c ) *
- ( 1 + ( va_pi * va_pi + 2 * b * re_pi + 2 * d * im_pi ) /
- ( b * b + d * d ) );
-
- return f / maxi;
-}
-
-//------------------------------------------------------------------------
-// Method 'getVMass'
-//------------------------------------------------------------------------
-double EvtLambdaB2LambdaV::getVMass( double MASS_LAMBDAB, double MASS_LAMBDA )
-{
- //JPSI case
- if ( Vtype == VID::JPSI ) {
- return EvtPDL::getMass( EvtPDL::getId( "J/psi" ) );
- }
-
- //RHO,OMEGA,MIXING case
- else {
- //parameters
- double MASS_RHO = EvtPDL::getMeanMass( EvtPDL::getId( "rho0" ) );
- double MASS_OMEGA = EvtPDL::getMeanMass( EvtPDL::getId( "omega" ) );
- double WIDTH_RHO = EvtPDL::getWidth( EvtPDL::getId( "rho0" ) );
- double WIDTH_OMEGA = EvtPDL::getWidth( EvtPDL::getId( "omega" ) );
- double MASS_PION = EvtPDL::getMeanMass( EvtPDL::getId( "pi-" ) );
- double _max = MASS_LAMBDAB - MASS_LAMBDA;
- double _min = 2 * MASS_PION;
-
- double mass = 0;
- bool test = false;
- int ntimes = 10000;
- do {
- double y = EvtRandom::Flat( 0, 1 );
-
- //generate mass
- mass = ( _max - _min ) * EvtRandom::Flat( 0, 1 ) + _min;
-
- //pdf calculate
- double f = 0;
- switch ( Vtype ) {
- case VID::RHO:
- f = BreitWignerRelPDF( mass, MASS_RHO, WIDTH_RHO );
- break;
- case VID::OMEGA:
- f = BreitWignerRelPDF( mass, MASS_OMEGA, WIDTH_OMEGA );
- break;
- case VID::RHO_OMEGA_MIXING:
- f = RhoOmegaMixingPDF( mass, MASS_RHO, WIDTH_RHO,
- MASS_OMEGA, WIDTH_OMEGA );
- break;
- default:
- f = 1;
- break;
- }
-
- ntimes--;
- if ( y < f )
- test = true;
- } while ( ntimes && !test );
-
- //looping 10000 times
- if ( ntimes == 0 ) {
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << "Tried accept/reject:10000"
- << " times, and rejected all the times!" << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << "Is therefore accepting the last event!" << std::endl;
- }
-
- //return V particle mass
- return mass;
- }
-}
-
-//************************************************************************
-//* *
-//* Class EvtLambda2PPiForLambdaB2LambdaV *
-//* *
-//************************************************************************
-
-//------------------------------------------------------------------------
-// Constructor
-//------------------------------------------------------------------------
-EvtLambda2PPiForLambdaB2LambdaV::EvtLambda2PPiForLambdaB2LambdaV()
-{
- //set facility name
- fname = "EvtGen.EvtLambda2PPiForLambdaB2LambdaV";
-}
-
-//------------------------------------------------------------------------
-// Method 'getName'
-//------------------------------------------------------------------------
-std::string EvtLambda2PPiForLambdaB2LambdaV::getName()
-{
- return "LAMBDA2PPIFORLAMBDAB2LAMBDAV";
-}
-
-//------------------------------------------------------------------------
-// Method 'clone'
-//------------------------------------------------------------------------
-EvtDecayBase* EvtLambda2PPiForLambdaB2LambdaV::clone()
-{
- return new EvtLambda2PPiForLambdaB2LambdaV;
-}
-
-//------------------------------------------------------------------------
-// Method 'initProbMax'
-//------------------------------------------------------------------------
-void EvtLambda2PPiForLambdaB2LambdaV::initProbMax()
-{
- double Max = 1.0 + fabs( A * B ) + 2.0 * fabs( A * abs( D ) );
- if ( verbose() ) {
- EvtGenReport( EVTGEN_DEBUG, fname.c_str() )
- << " PDF max value : " << Max << std::endl;
- }
- setProbMax( Max );
-}
-
-//------------------------------------------------------------------------
-// Method 'init'
-//------------------------------------------------------------------------
-void EvtLambda2PPiForLambdaB2LambdaV::init()
-{
- bool antiparticle = false;
-
- if ( verbose() ) {
- //introduction
- EvtGenReport( EVTGEN_DEBUG, fname.c_str() )
- << " ***********************************************************"
- << std::endl;
- EvtGenReport( EVTGEN_DEBUG, fname.c_str() )
- << " * Event Model Class : EvtLambda2PPiForLambdaB2LambdaV *"
- << std::endl;
- EvtGenReport( EVTGEN_DEBUG, fname.c_str() )
- << " ***********************************************************"
- << std::endl;
- }
-
- //check the number of arguments
- checkNArg( 2 );
-
- //check the number of daughters
- checkNDaug( 2 );
-
- const EvtId Id_mother = getParentId();
- const EvtId Id_daug1 = getDaug( 0 );
- const EvtId Id_daug2 = getDaug( 1 );
-
- //lambda identification
- if ( Id_mother == EvtPDL::getId( "Lambda0" ) ) {
- antiparticle = false;
- } else if ( Id_mother == EvtPDL::getId( "anti-Lambda0" ) ) {
- antiparticle = true;
- } else {
- EvtGenReport( EVTGEN_ERROR, fname.c_str() )
- << " Mother is not a Lambda0 or an anti-Lambda0, but a "
- << EvtPDL::name( Id_mother ) << std::endl;
- abort();
- }
-
- //proton identification
- if ( !( Id_daug1 == EvtPDL::getId( "p+" ) && !antiparticle ) &&
- !( Id_daug1 == EvtPDL::getId( "anti-p-" ) && antiparticle ) ) {
- if ( !antiparticle ) {
- EvtGenReport( EVTGEN_ERROR, fname.c_str() )
- << " Daughter1 is not a p+, but a " << EvtPDL::name( Id_daug1 )
- << std::endl;
- } else {
- EvtGenReport( EVTGEN_ERROR, fname.c_str() )
- << " Daughter1 is not an anti-p-, but a "
- << EvtPDL::name( Id_daug1 ) << std::endl;
- }
- abort();
- }
-
- //pion identification
- if ( !( Id_daug2 == EvtPDL::getId( "pi-" ) && !antiparticle ) &&
- !( Id_daug2 == EvtPDL::getId( "pi+" ) && antiparticle ) ) {
- if ( !antiparticle ) {
- EvtGenReport( EVTGEN_ERROR, fname.c_str() )
- << " Daughter2 is not a p-, but a " << EvtPDL::name( Id_daug1 )
- << std::endl;
- } else {
- EvtGenReport( EVTGEN_ERROR, fname.c_str() )
- << " Daughter2 is not an p+, but a " << EvtPDL::name( Id_daug1 )
- << std::endl;
- }
- abort();
- }
- if ( !antiparticle )
- EvtGenReport( EVTGEN_DEBUG, fname.c_str() )
- << " Decay mode successfully initialized : Lambda0 -> p+ pi-"
- << std::endl;
- else
- EvtGenReport( EVTGEN_DEBUG, fname.c_str() )
- << " Decay mode successfully initialized : Anti-Lambda0 -> anti-p- pi+"
- << std::endl;
-
- //identification meson V
- if ( getArg( 1 ) == 1 ) {
- Vtype = VID::JPSI;
- if ( !antiparticle )
- EvtGenReport( EVTGEN_DEBUG, fname.c_str() )
- << " From : Lambda_b0 -> Lambda J/psi" << std::endl;
- else
- EvtGenReport( EVTGEN_DEBUG, fname.c_str() )
- << " From : anti-Lambda_b0 -> anti-Lambda J/psi" << std::endl;
- } else if ( getArg( 1 ) == 2 ) {
- Vtype = VID::RHO;
- if ( !antiparticle )
- EvtGenReport( EVTGEN_DEBUG, fname.c_str() )
- << " From : Lambda_b0 -> Lambda rho0" << std::endl;
- else
- EvtGenReport( EVTGEN_DEBUG, fname.c_str() )
- << " From : anti-Lambda_b0 -> anti-Lambda rho0" << std::endl;
- } else if ( getArg( 1 ) == 3 ) {
- Vtype = VID::OMEGA;
- if ( !antiparticle )
- EvtGenReport( EVTGEN_DEBUG, fname.c_str() )
- << " From : Lambda_b0 -> Lambda omega" << std::endl;
- else
- EvtGenReport( EVTGEN_DEBUG, fname.c_str() )
- << " From : anti-Lambda_b0 -> anti-Lambda omega" << std::endl;
- } else if ( getArg( 1 ) == 4 ) {
- Vtype = VID::RHO_OMEGA_MIXING;
- } else {
- EvtGenReport( EVTGEN_ERROR, fname.c_str() )
- << " Vtype " << getArg( 1 ) << " is unknown" << std::endl;
- if ( !antiparticle ) {
- EvtGenReport( EVTGEN_DEBUG, fname.c_str() )
- << " From : Lambda_b0 -> Lambda rho-omega-mixing" << std::endl;
- } else {
- EvtGenReport( EVTGEN_DEBUG, fname.c_str() )
- << " From : anti-Lambda_b0 -> anti-Lambda rho-omega-mixing"
- << std::endl;
- }
- abort();
- }
-
- //constants
- A = 0.642;
- C = (double)getArg( 0 );
- switch ( Vtype ) {
- case VID::JPSI:
- B = -0.167;
- D = EvtComplex( 0.25, 0.0 );
- break;
- case VID::RHO:
- case VID::OMEGA:
- case VID::RHO_OMEGA_MIXING:
- B = -0.21;
- D = EvtComplex( 0.31, 0.0 );
- break;
- default:
- B = 0;
- D = EvtComplex( 0, 0 );
- break;
- }
-
- if ( verbose() ) {
- EvtGenReport( EVTGEN_DEBUG, fname.c_str() )
- << " Lambda decay parameters : " << std::endl;
- EvtGenReport( EVTGEN_DEBUG, fname.c_str() )
- << " - proton asymmetry A = " << A << std::endl;
- EvtGenReport( EVTGEN_DEBUG, fname.c_str() )
- << " - lambda polarisation B = " << B << std::endl;
- EvtGenReport( EVTGEN_DEBUG, fname.c_str() )
- << " - lambdaB polarisation C = " << C << std::endl;
- EvtGenReport( EVTGEN_DEBUG, fname.c_str() )
- << " - lambda density matrix rho+- D = " << D << std::endl;
- }
-
- // Update max prob
- initProbMax();
-}
-
-//------------------------------------------------------------------------
-// Method 'decay'
-//------------------------------------------------------------------------
-void EvtLambda2PPiForLambdaB2LambdaV::decay( EvtParticle* lambda )
-{
- lambda->makeDaughters( getNDaug(), getDaugs() );
-
- //get proton and pion particles
- EvtParticle* proton = lambda->getDaug( 0 );
- EvtParticle* pion = lambda->getDaug( 1 );
-
- //get resonance masses
- // - LAMBDA -> mass given by EvtLambdaB2LambdaV class
- // - PROTON & PION -> nominal mass
- double MASS_LAMBDA = lambda->mass();
- double MASS_PROTON = EvtPDL::getMeanMass( EvtPDL::getId( "p+" ) );
- double MASS_PION = EvtPDL::getMeanMass( EvtPDL::getId( "pi-" ) );
-
- //generate random angles
- double phi = EvtRandom::Flat( 0.0, 2.0 * EvtConst::pi );
- double theta = acos( EvtRandom::Flat( -1.0, 1.0 ) );
-
- // Find 4-vectors
- double E_proton = ( MASS_LAMBDA * MASS_LAMBDA + MASS_PROTON * MASS_PROTON -
- MASS_PION * MASS_PION ) /
- ( 2 * MASS_LAMBDA );
- double E_pion = ( MASS_LAMBDA * MASS_LAMBDA + MASS_PION * MASS_PION -
- MASS_PROTON * MASS_PROTON ) /
- ( 2 * MASS_LAMBDA );
- double P = sqrt( E_proton * E_proton - proton->mass() * proton->mass() );
-
- EvtVector4R P_lambda = lambda->getP4();
- EvtParticle* Mother_lambda = lambda->getParent();
- EvtVector4R lambdab = Mother_lambda->getP4();
-
- double E_lambda = P_lambda.get( 0 );
- double px_M = lambdab.get( 1 );
- double py_M = lambdab.get( 2 );
- double pz_M = lambdab.get( 3 );
- double E_M = lambdab.get( 0 );
-
- const double px_MSq = px_M * px_M;
- const double py_MSq = py_M * py_M;
- const double pT_M = sqrt( px_MSq + py_MSq );
- const double invPT_M = pT_M > 0.0 ? 1.0 / pT_M : 0.0;
-
- EvtVector4R q_lambdab2( E_M, pT_M, 0.0, pz_M );
-
- EvtVector4R q_lambdab3( E_M, q_lambdab2.get( 3 ), q_lambdab2.get( 1 ),
- q_lambdab2.get( 2 ) );
-
- EvtVector4R q_lambda1(
- E_lambda,
- invPT_M * ( px_M * P_lambda.get( 1 ) + py_M * P_lambda.get( 2 ) ),
- invPT_M * ( -py_M * P_lambda.get( 1 ) + px_M * P_lambda.get( 2 ) ),
- P_lambda.get( 3 ) );
-
- EvtVector4R q_lambda2( E_lambda, q_lambda1.get( 3 ), q_lambda1.get( 1 ),
- q_lambda1.get( 2 ) );
-
- const double E = q_lambda2.get( 0 );
- const double px = q_lambda2.get( 1 );
- const double py = q_lambda2.get( 2 );
- const double pz = q_lambda2.get( 3 );
- const double pxSq = px * px;
- const double pySq = py * py;
- const double pzSq = pz * pz;
- const double pTSq = pxSq + pySq;
- const double p = sqrt( pTSq + pzSq );
- const double invP = p > 0.0 ? 1.0 / p : 0.0;
- const double invPSq = invP * invP;
- const double pT = sqrt( pTSq );
-
- //EvtVector4R q_lambda4( E, 0.0, 0.0, p );
- EvtVector4R q_lambda4( E, pT, 0.0, pz );
-
- EvtVector4R q_proton1( E_proton, P * sin( theta ) * cos( phi ),
- P * sin( theta ) * sin( phi ), P * cos( theta ) );
- EvtVector4R q_pion1( E_pion, -P * sin( theta ) * cos( phi ),
- -P * sin( theta ) * sin( phi ), -P * cos( theta ) );
-
- const double qx_proton1 = q_proton1.get( 1 );
- const double qy_proton1 = q_proton1.get( 2 );
- const double qz_proton1 = q_proton1.get( 3 );
-
- EvtVector4R q_proton3( E_proton,
- invPSq * ( qx_proton1 * px * pz - qy_proton1 * py * p +
- qz_proton1 * pT * px ),
- invPSq * ( qx_proton1 * py * pz + qy_proton1 * px * p +
- qz_proton1 * pT * py ),
- invP * ( -qx_proton1 * pT + qz_proton1 * pz ) );
-
- const double qx_pion1 = q_pion1.get( 1 );
- const double qy_pion1 = q_pion1.get( 2 );
- const double qz_pion1 = q_pion1.get( 3 );
-
- EvtVector4R q_pion3(
- E_pion,
- invPSq * ( qx_pion1 * px * pz - qy_pion1 * py * p + qz_pion1 * pT * px ),
- invPSq * ( qx_pion1 * py * pz + qy_pion1 * px * p + qz_pion1 * pT * py ),
- invP * ( -qx_pion1 * pT + qz_pion1 * pz ) );
-
- EvtVector4R q_proton5( q_proton3.get( 0 ), q_proton3.get( 2 ),
- q_proton3.get( 3 ), q_proton3.get( 1 ) );
-
- EvtVector4R q_pion5( q_pion3.get( 0 ), q_pion3.get( 2 ), q_pion3.get( 3 ),
- q_pion3.get( 1 ) );
-
- EvtVector4R q_proton(
- q_proton5.get( 0 ),
- invPT_M * ( px_M * q_proton5.get( 1 ) - py_M * q_proton5.get( 2 ) ),
- invPT_M * ( py_M * q_proton5.get( 1 ) + px_M * q_proton5.get( 2 ) ),
- q_proton5.get( 3 ) );
-
- EvtVector4R q_pion(
- q_pion5.get( 0 ),
- invPT_M * ( px_M * q_pion5.get( 1 ) - py_M * q_pion5.get( 2 ) ),
- invPT_M * ( py_M * q_pion5.get( 1 ) + px_M * q_pion5.get( 2 ) ),
- q_pion5.get( 3 ) );
-
- // Set particle 4 vectors
- proton->init( getDaugs()[0], q_proton );
- pion->init( getDaugs()[1], q_pion );
-
- //compute pdf
- double pdf = 1.0 + A * B * cos( theta ) +
- 2.0 * A * real( D * EvtComplex( cos( phi ), sin( phi ) ) ) *
- sin( theta );
- //set probability
- setProb( pdf );
-
- if ( verbose() ) {
- EvtGenReport( EVTGEN_DEBUG, fname.c_str() )
- << " Angular angles : theta = " << theta << " ; phi = " << phi
- << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Lambdab px: " << px_M << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Lambdab py: " << py_M << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Lambdab pz: " << pz_M << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Lambdab E: " << E_M << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Lambdab2 px: " << q_lambdab2.get( 1 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Lambdab2 py: " << q_lambdab2.get( 2 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Lambdab2 pz: " << q_lambdab2.get( 3 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Lambdab2 E: " << q_lambdab2.get( 0 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Lambdab3 px: " << q_lambdab3.get( 1 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Lambdab3 py: " << q_lambdab3.get( 2 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Lambdab3 pz: " << q_lambdab3.get( 3 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Lambdab3 E: " << q_lambdab3.get( 0 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Lambda 0 px: " << P_lambda.get( 1 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Lambda 0 py: " << P_lambda.get( 2 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Lambda 0 pz: " << P_lambda.get( 3 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Lambda 0 E: " << P_lambda.get( 0 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Lambda 1 px: " << q_lambda1.get( 1 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Lambda 1 py: " << q_lambda1.get( 2 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Lambda 1 pz: " << q_lambda1.get( 3 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Lambda 1 E: " << q_lambda1.get( 0 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Lambda 2 px: " << q_lambda2.get( 1 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Lambda 2 py: " << q_lambda2.get( 2 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Lambda 2 pz: " << q_lambda2.get( 3 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Lambda 2 E: " << q_lambda2.get( 0 ) << std::endl;
-
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Lambda px: " << px << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Lambda py: " << py << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Lambda pz: " << pz << std::endl;
-
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " pion 1 px: " << q_pion1.get( 1 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " pion 1 py: " << q_pion1.get( 2 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " pion 1 pz: " << q_pion1.get( 3 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " pion 1 E: " << q_pion1.get( 0 ) << std::endl;
-
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " pion 3 px: " << q_pion3.get( 1 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " pion 3 px: " << q_pion3.get( 1 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " pion 3 py: " << q_pion3.get( 2 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " pion 3 pz: " << q_pion3.get( 3 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " pion 3 E: " << q_pion3.get( 0 ) << std::endl;
-
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " pion 5 px: " << q_pion5.get( 1 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " pion 5 py: " << q_pion5.get( 2 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " pion 5 pz: " << q_pion5.get( 3 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " pion 5 E: " << q_pion5.get( 0 ) << std::endl;
-
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " proton 1 px: " << q_proton1.get( 1 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " proton 1 py: " << q_proton1.get( 2 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " proton 1 pz: " << q_proton1.get( 3 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " proton 1 E: " << q_proton1.get( 0 ) << std::endl;
-
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " proton 3 px: " << q_proton3.get( 1 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " proton 3 py: " << q_proton3.get( 2 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " proton 3 pz: " << q_proton3.get( 3 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " proton 3 E: " << q_proton3.get( 0 ) << std::endl;
-
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " proton 5 px: " << q_proton5.get( 1 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " proton 5 py: " << q_proton5.get( 2 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " proton 5 pz: " << q_proton5.get( 3 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " proton 5 E: " << q_proton5.get( 0 ) << std::endl;
-
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " proton px: " << q_proton.get( 1 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " proton py: " << q_proton.get( 2 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << "proton pz: " << q_proton.get( 3 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " pion px: " << q_pion.get( 1 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " pion py: " << q_pion.get( 2 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " pion pz: " << q_pion.get( 3 ) << std::endl;
-
- EvtGenReport( EVTGEN_DEBUG, fname.c_str() )
- << " Lambda decay pdf value : " << pdf << std::endl;
- }
-}
-
-//************************************************************************
-//* *
-//* Class EvtV2VpVmForLambdaB2LambdaV *
-//* *
-//************************************************************************
-
-//------------------------------------------------------------------------
-// Constructor
-//------------------------------------------------------------------------
-EvtV2VpVmForLambdaB2LambdaV::EvtV2VpVmForLambdaB2LambdaV()
-{
- //set facility name
- fname = "EvtGen.EvtV2VpVmForLambdaB2LambdaV";
-}
-
-//------------------------------------------------------------------------
-// Method 'getName'
-//------------------------------------------------------------------------
-std::string EvtV2VpVmForLambdaB2LambdaV::getName()
-{
- return "V2VPVMFORLAMBDAB2LAMBDAV";
-}
-
-//------------------------------------------------------------------------
-// Method 'clone'
-//------------------------------------------------------------------------
-EvtDecayBase* EvtV2VpVmForLambdaB2LambdaV::clone()
-{
- return new EvtV2VpVmForLambdaB2LambdaV;
-}
-
-//------------------------------------------------------------------------
-// Method 'initProbMax'
-//------------------------------------------------------------------------
-void EvtV2VpVmForLambdaB2LambdaV::initProbMax()
-{
- //maximum
- double Max = 0.0;
- if ( Vtype == VID::JPSI ) {
- if ( ( 1.0 - 3.0 * A ) > 0.0 )
- Max = 2.0 * ( 1.0 - A );
- else
- Max = 1.0 + A;
- } else {
- if ( ( 3.0 * A - 1.0 ) >= 0.0 )
- Max = 2.0 * A;
- else
- Max = 1.0 - A;
- }
-
- if ( verbose() ) {
- EvtGenReport( EVTGEN_DEBUG, fname.c_str() )
- << " PDF max value : " << Max << std::endl;
- }
- setProbMax( Max );
-}
-
-//------------------------------------------------------------------------
-// Method 'init'
-//------------------------------------------------------------------------
-void EvtV2VpVmForLambdaB2LambdaV::init()
-{
- if ( verbose() ) {
- //introduction
- EvtGenReport( EVTGEN_DEBUG, fname.c_str() )
- << " ***********************************************************"
- << std::endl;
- EvtGenReport( EVTGEN_DEBUG, fname.c_str() )
- << " * Event Model Class : EvtV2VpVmForLambdaB2LambdaV *"
- << std::endl;
- EvtGenReport( EVTGEN_DEBUG, fname.c_str() )
- << " ***********************************************************"
- << std::endl;
- }
-
- //check the number of arguments
- checkNArg( 2 );
-
- //check the number of daughters
- checkNDaug( 2 );
-
- const EvtId Id_mother = getParentId();
- const EvtId Id_daug1 = getDaug( 0 );
- const EvtId Id_daug2 = getDaug( 1 );
-
- //identification meson V
- if ( getArg( 1 ) == 1 )
- Vtype = VID::JPSI;
- else if ( getArg( 1 ) == 2 )
- Vtype = VID::RHO;
- else if ( getArg( 1 ) == 3 )
- Vtype = VID::OMEGA;
- else if ( getArg( 1 ) == 4 )
- Vtype = VID::RHO_OMEGA_MIXING;
- else {
- EvtGenReport( EVTGEN_ERROR, fname.c_str() )
- << " Vtype " << getArg( 1 ) << " is unknown" << std::endl;
- abort();
- }
-
- //vector meson V
- if ( Id_mother == EvtPDL::getId( "J/psi" ) && Vtype == VID::JPSI ) {
- } else if ( Id_mother == EvtPDL::getId( "omega" ) && Vtype == VID::OMEGA ) {
- } else if ( Id_mother == EvtPDL::getId( "rho0" ) && Vtype == VID::RHO ) {
- } else if ( ( Id_mother == EvtPDL::getId( "rho0" ) ||
- Id_mother == EvtPDL::getId( "omega" ) ) &&
- Vtype == VID::RHO_OMEGA_MIXING ) {
- } else {
- EvtGenReport( EVTGEN_ERROR, fname.c_str() )
- << " Mother is not a J/psi, phi or rho0 but a "
- << EvtPDL::name( Id_mother ) << std::endl;
- abort();
- }
-
- //daughters for each V possibility
- switch ( Vtype ) {
- case VID::JPSI:
- if ( Id_daug1 != EvtPDL::getId( "mu+" ) ) {
- EvtGenReport( EVTGEN_ERROR, fname.c_str() )
- << " Daughter1 is not a mu+, but a "
- << EvtPDL::name( Id_daug1 ) << std::endl;
- abort();
- }
- if ( Id_daug2 != EvtPDL::getId( "mu-" ) ) {
- EvtGenReport( EVTGEN_ERROR, fname.c_str() )
- << " Daughter2 is not a mu-, but a "
- << EvtPDL::name( Id_daug2 ) << std::endl;
- abort();
- }
- EvtGenReport( EVTGEN_DEBUG, fname.c_str() )
- << " Decay mode successfully initialized : J/psi -> mu+ mu-"
- << std::endl;
- break;
-
- case VID::RHO:
- case VID::OMEGA:
- case VID::RHO_OMEGA_MIXING:
- if ( Id_daug1 != EvtPDL::getId( "pi+" ) ) {
- EvtGenReport( EVTGEN_ERROR, fname.c_str() )
- << " Daughter1 is not a pi+, but a "
- << EvtPDL::name( Id_daug1 ) << std::endl;
- abort();
- }
- if ( Id_daug2 != EvtPDL::getId( "pi-" ) ) {
- EvtGenReport( EVTGEN_ERROR, fname.c_str() )
- << " Daughter2 is not a pi-, but a "
- << EvtPDL::name( Id_daug2 ) << std::endl;
- abort();
- }
- if ( Vtype == VID::RHO )
- EvtGenReport( EVTGEN_DEBUG, fname.c_str() )
- << " Decay mode successfully initialized : rho0 -> pi+ pi-"
- << std::endl;
- if ( Vtype == VID::OMEGA )
- EvtGenReport( EVTGEN_DEBUG, fname.c_str() )
- << " Decay mode successfully initialized : omega -> pi+ pi-"
- << std::endl;
- if ( Vtype == VID::RHO_OMEGA_MIXING )
- EvtGenReport( EVTGEN_DEBUG, fname.c_str() )
- << " Decay mode successfully initialized : rho-omega mixing -> pi+ pi-"
- << std::endl;
- break;
-
- default:
- EvtGenReport( EVTGEN_ERROR, fname.c_str() )
- << "No decay mode chosen ! " << std::endl;
- abort();
- break;
- }
-
- //fix dynamics parameters
- switch ( Vtype ) {
- case VID::JPSI:
- A = 0.66;
- break;
- case VID::RHO:
- case VID::OMEGA:
- case VID::RHO_OMEGA_MIXING:
- A = 0.79;
- break;
- default:
- A = 0;
- break;
- }
-
- if ( verbose() ) {
- EvtGenReport( EVTGEN_DEBUG, fname.c_str() )
- << " V decay parameters : " << std::endl;
- EvtGenReport( EVTGEN_DEBUG, fname.c_str() )
- << " - V density matrix rho00 A = " << A << std::endl;
- }
-}
-
-//------------------------------------------------------------------------
-// Method 'decay'
-//------------------------------------------------------------------------
-void EvtV2VpVmForLambdaB2LambdaV::decay( EvtParticle* V )
-{
- V->makeDaughters( getNDaug(), getDaugs() );
-
- //get Vp and Vm particles
- EvtParticle* Vp = V->getDaug( 0 );
- EvtParticle* Vm = V->getDaug( 1 );
-
- //get resonance masses
- // - V -> mass given by EvtLambdaB2LambdaV class
- // - Vp & Vm -> nominal mass
- double MASS_V = V->mass();
- double MASS_VM = 0;
- switch ( Vtype ) {
- case VID::JPSI:
- MASS_VM = EvtPDL::getMeanMass( EvtPDL::getId( "mu-" ) );
- break;
- case VID::RHO:
- case VID::OMEGA:
- case VID::RHO_OMEGA_MIXING:
- MASS_VM = EvtPDL::getMeanMass( EvtPDL::getId( "pi-" ) );
- break;
- default:
- MASS_VM = 0;
- break;
- }
- double MASS_VP = MASS_VM;
-
- //generate random angles
- double phi = EvtRandom::Flat( 0, 2 * EvtConst::pi );
- double theta = acos( EvtRandom::Flat( -1, +1 ) );
-
- // Get resonance 4-vectors
- double E_Vp = ( MASS_V * MASS_V + MASS_VP * MASS_VP - MASS_VM * MASS_VM ) /
- ( 2 * MASS_V );
- double E_Vm = ( MASS_V * MASS_V + MASS_VM * MASS_VM - MASS_VP * MASS_VP ) /
- ( 2 * MASS_V );
- double P = sqrt( E_Vp * E_Vp - Vp->mass() * Vp->mass() );
-
- EvtVector4R P_V = V->getP4();
- EvtParticle* Mother_V = V->getParent();
- EvtVector4R lambdab = Mother_V->getP4();
-
- const double E_V = ( P_V.get( 0 ) );
- const double px_M = lambdab.get( 1 );
- const double py_M = lambdab.get( 2 );
- const double pz_M = lambdab.get( 3 );
- const double E_M = lambdab.get( 0 );
- const double px_MSq = px_M * px_M;
- const double py_MSq = py_M * py_M;
- const double pT_MSq = px_MSq + py_MSq;
- const double pT_M = sqrt( pT_MSq );
- const double invPT_M = pT_M > 0.0 ? 1.0 / pT_M : 0.0;
-
- EvtVector4R q_lambdab2( E_M, pT_M, 0.0, pz_M );
-
- EvtVector4R q_lambdab3( E_M, q_lambdab2.get( 3 ), q_lambdab2.get( 1 ),
- q_lambdab2.get( 2 ) );
-
- EvtVector4R q_V1( E_V,
- invPT_M * ( px_M * P_V.get( 1 ) + py_M * P_V.get( 2 ) ),
- invPT_M * ( -py_M * P_V.get( 1 ) + px_M * P_V.get( 2 ) ),
- P_V.get( 3 ) );
-
- EvtVector4R q_V2( E_V, q_V1.get( 3 ), q_V1.get( 1 ), q_V1.get( 2 ) );
-
- const double px = -q_V2.get( 1 );
- const double py = -q_V2.get( 2 );
- const double pz = -q_V2.get( 3 );
- const double pxSq = px * px;
- const double pySq = py * py;
- const double pzSq = pz * pz;
- const double pTSq = pxSq + pySq;
- const double pSq = pTSq + pzSq;
- const double p = sqrt( pSq );
- const double invP = p > 0.0 ? 1.0 / p : 0.0;
- const double pT = sqrt( pTSq );
- const double invPT = pT > 0.0 ? 1.0 / pT : 0.0;
-
- EvtVector4R q_V4( q_V2.get( 0 ), 0.0, pT, p );
-
- EvtVector4R q_Vp1( E_Vp, P * sin( theta ) * cos( phi ),
- P * sin( theta ) * sin( phi ), P * cos( theta ) );
- EvtVector4R q_Vm1( E_Vm, -P * sin( theta ) * cos( phi ),
- -P * sin( theta ) * sin( phi ), -P * cos( theta ) );
-
- EvtVector4R q_Vp3( q_Vp1.get( 0 ),
- invP * invPT *
- ( q_Vp1.get( 1 ) * px * pz + q_Vp1.get( 2 ) * py * p -
- q_Vp1.get( 3 ) * pT * px ),
- invP * invPT *
- ( q_Vp1.get( 1 ) * py * pz - q_Vp1.get( 2 ) * px * p -
- q_Vp1.get( 3 ) * pT * py ),
- -invP * ( q_Vp1.get( 1 ) * pT + q_Vp1.get( 3 ) * pz ) );
-
- EvtVector4R q_Vm3( q_Vm1.get( 0 ),
- invP * invPT *
- ( q_Vm1.get( 1 ) * px * pz + q_Vm1.get( 2 ) * py * p -
- q_Vm1.get( 3 ) * pT * px ),
- invP * invPT *
- ( q_Vm1.get( 1 ) * py * pz - q_Vm1.get( 2 ) * px * p -
- q_Vm1.get( 3 ) * pT * py ),
- -invP * ( q_Vm1.get( 1 ) * pT + q_Vm1.get( 3 ) * pz ) );
-
- EvtVector4R q_Vp5( q_Vp3.get( 0 ), q_Vp3.get( 2 ), q_Vp3.get( 3 ),
- q_Vp3.get( 1 ) );
-
- EvtVector4R q_Vm5( q_Vm3.get( 0 ), q_Vm3.get( 2 ), q_Vm3.get( 3 ),
- q_Vm3.get( 1 ) );
-
- EvtVector4R q_Vp( q_Vp5.get( 0 ),
- invPT_M * ( px_M * q_Vp5.get( 1 ) - py_M * q_Vp5.get( 2 ) ),
- invPT_M * ( py_M * q_Vp5.get( 1 ) + px_M * q_Vp5.get( 2 ) ),
- q_Vp5.get( 3 ) );
-
- EvtVector4R q_Vm( q_Vm5.get( 0 ),
- invPT_M * ( px_M * q_Vm5.get( 1 ) - py_M * q_Vm5.get( 2 ) ),
- invPT_M * ( py_M * q_Vm5.get( 1 ) + px_M * q_Vm5.get( 2 ) ),
- q_Vm5.get( 3 ) );
-
- // Set particle 4-momenta
- Vp->init( getDaugs()[0], q_Vp );
- Vm->init( getDaugs()[1], q_Vm );
-
- //compute pdf
- double pdf = 0.0;
- if ( Vtype == VID::JPSI ) {
- //leptonic case
- pdf = ( 1.0 - 3.0 * A ) * cos( theta ) * cos( theta ) + ( 1.0 + A );
- } else {
- //hadronic case
- pdf = ( 3.0 * A - 1.0 ) * cos( theta ) * cos( theta ) + ( 1.0 - A );
- }
-
- //set probability
- setProb( pdf );
-
- if ( verbose() ) {
- EvtGenReport( EVTGEN_DEBUG, fname.c_str() )
- << " Angular angles : theta = " << theta << " ; phi = " << phi
- << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Lambdab px: " << px_M << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Lambdab py: " << py_M << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Lambdab pz: " << pz_M << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Lambdab E: " << E_M << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Lambdab2 px: " << q_lambdab2.get( 1 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Lambdab2 py: " << q_lambdab2.get( 2 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Lambdab2 pz: " << q_lambdab2.get( 3 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Lambdab2 E: " << q_lambdab2.get( 0 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Lambdab3 px: " << q_lambdab3.get( 1 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Lambdab3 py: " << q_lambdab3.get( 2 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Lambdab3 pz: " << q_lambdab3.get( 3 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Lambdab3 E: " << q_lambdab3.get( 0 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " V 0 px: " << P_V.get( 1 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " V 0 py: " << P_V.get( 2 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " V 0 pz: " << P_V.get( 3 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " V 0 E: " << P_V.get( 0 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " V 1 px: " << q_V1.get( 1 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " V 1 py: " << q_V1.get( 2 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " V 1 pz: " << q_V1.get( 3 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " V 1 E: " << q_V1.get( 0 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " V 2 px: " << q_V2.get( 1 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " V 2 py: " << q_V2.get( 2 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " V 2 pz: " << q_V2.get( 3 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " V 2 E: " << q_V2.get( 0 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " V px: " << px << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " V py: " << py << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " V pz: " << pz << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Vm 1 px: " << q_Vm1.get( 1 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Vm 1 py: " << q_Vm1.get( 2 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Vm 1 pz: " << q_Vm1.get( 3 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Vm 1 E: " << q_Vm1.get( 0 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Vm 3 px: " << q_Vm3.get( 1 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Vm 3 px: " << q_Vm3.get( 1 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Vm 3 py: " << q_Vm3.get( 2 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Vm 3 pz: " << q_Vm3.get( 3 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Vm 3 E: " << q_Vm3.get( 0 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Vm 5 px: " << q_Vm5.get( 1 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Vm 5 py: " << q_Vm5.get( 2 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Vm 5 pz: " << q_Vm5.get( 3 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Vm 5 E: " << q_Vm5.get( 0 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Vp 1 px: " << q_Vp1.get( 1 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Vp 1 py: " << q_Vp1.get( 2 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Vp 1 pz: " << q_Vp1.get( 3 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Vp 1 E: " << q_Vp1.get( 0 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Vp 3 px: " << q_Vp3.get( 1 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Vp 3 py: " << q_Vp3.get( 2 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Vp 3 pz: " << q_Vp3.get( 3 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Vp 3 E: " << q_Vp3.get( 0 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Vp 5 px: " << q_Vp5.get( 1 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Vp 5 py: " << q_Vp5.get( 2 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Vp 5 pz: " << q_Vp5.get( 3 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Vp 5 E: " << q_Vp5.get( 0 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Vp px: " << q_Vp.get( 1 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Vp py: " << q_Vp.get( 2 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << "Vp pz: " << q_Vp.get( 3 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Vm px: " << q_Vm.get( 1 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Vm py: " << q_Vm.get( 2 ) << std::endl;
- EvtGenReport( EVTGEN_INFO, fname.c_str() )
- << " Vm pz: " << q_Vm.get( 3 ) << std::endl;
- EvtGenReport( EVTGEN_DEBUG, fname.c_str() )
- << " V decay pdf value : " << pdf << std::endl;
- }
-}
diff --git a/src/EvtGenModels/EvtLb2Lll.cpp b/src/EvtGenModels/EvtLb2Lll.cpp
deleted file mode 100644
--- a/src/EvtGenModels/EvtLb2Lll.cpp
+++ /dev/null
@@ -1,909 +0,0 @@
-
-/***********************************************************************
-* Copyright 1998-2020 CERN for the benefit of the EvtGen authors *
-* *
-* This file is part of EvtGen. *
-* *
-* EvtGen is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU General Public License as published by *
-* the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* EvtGen is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU General Public License for more details. *
-* *
-* You should have received a copy of the GNU General Public License *
-* along with EvtGen. If not, see . *
-***********************************************************************/
-
-#include "EvtGenModels/EvtLb2Lll.hh"
-
-#include "EvtGenBase/EvtComplex.hh"
-#include "EvtGenBase/EvtDiracParticle.hh"
-#include "EvtGenBase/EvtDiracSpinor.hh"
-#include "EvtGenBase/EvtGammaMatrix.hh"
-#include "EvtGenBase/EvtPDL.hh"
-#include "EvtGenBase/EvtParticle.hh"
-#include "EvtGenBase/EvtTensor4C.hh"
-#include "EvtGenBase/EvtVector4C.hh"
-#include "EvtGenBase/EvtVector4R.hh"
-
-#include
-#include
-
-EvtDecayBase* EvtLb2Lll::clone()
-{
- return new EvtLb2Lll;
-}
-
-std::string EvtLb2Lll::getName()
-{
- return "Lb2Lll";
-}
-
-void EvtLb2Lll::init()
-{
- if ( getNArg() > 8 ) { // Decay parameters
- EvtGenReport( EVTGEN_ERROR, "EvtGen" )
- << " ERROR: EvtLb2Lll generator expected max. 8 arguments but found: "
- << getNArg() << std::endl;
- EvtGenReport( EVTGEN_INFO, "EvtGen" )
- << " 1. Lambda_b0 polarization - zero is default" << std::endl;
- EvtGenReport( EVTGEN_INFO, "EvtGen" )
- << " 2. Model type - \"SM\" for Standard Model is default"
- << std::endl;
- EvtGenReport( EVTGEN_INFO, "EvtGen" )
- << " 3. Form-Factors - \"HQET\" is used by default" << std::endl;
- EvtGenReport( EVTGEN_INFO, "EvtGen" )
- << " 4. How to set polarization - \"ModifiedSpinors\" is default"
- << std::endl;
- EvtGenReport( EVTGEN_INFO, "EvtGen" )
- << " 5. Include long distance (LD) effects - \"SD\" (no) is default"
- << std::endl;
- EvtGenReport( EVTGEN_INFO, "EvtGen" )
- << " 6. NonFactorizable contribution (omega) to b->sg decay at q2=0 "
- << std::endl;
- EvtGenReport( EVTGEN_INFO, "EvtGen" )
- << " 7. Note on every x-th decay" << std::endl;
- EvtGenReport( EVTGEN_INFO, "EvtGen" )
- << " 8. Maximum probability - automatic by default" << std::endl;
- ::abort();
- }
-
- if ( getNDaug() != 3 ) { // Check that there are 3 daughters only
- EvtGenReport( EVTGEN_ERROR, "EvtGen" )
- << " ERROR: EvtLb2Lll generator expected 3 daughters but found: "
- << getNDaug() << std::endl;
- ::abort();
- }
-
- EvtId LbID = EvtPDL::getId( std::string( "Lambda_b0" ) );
- EvtId aLbID = EvtPDL::getId( std::string( "anti-Lambda_b0" ) );
- EvtId eID = EvtPDL::getId( std::string( "e-" ) );
- EvtId aeID = EvtPDL::getId( std::string( "e+" ) );
- EvtId muID = EvtPDL::getId( std::string( "mu-" ) );
- EvtId amuID = EvtPDL::getId( std::string( "mu+" ) );
- EvtId tauID = EvtPDL::getId( std::string( "tau-" ) );
- EvtId atauID = EvtPDL::getId( std::string( "tau+" ) );
-
- // TODO: better check based on spin and falvour is needed to allow usage of aliases !
- if ( getParentId() == LbID ) { // Check daughters of Lambda_b0
- EvtGenReport( EVTGEN_INFO, "EvtGen" )
- << " EvtLb2Lll generator found Lambda_b0" << std::endl;
- //if(EvtPDL::name(getDaug(0))!="Lambda0"){
- // EvtGenReport(EVTGEN_ERROR,"EvtGen") << " ERROR: EvtLb2Lll generator expected Lambda0 daughter but found: " << EvtPDL::name(getDaug(0)) << std::endl;
- // ::abort();
- //}
- if ( getDaug( 1 ) == eID && getDaug( 2 ) == aeID ) {
- m_decayName = "Lambda_b0 -> Lambda0 e- e+";
- EvtGenReport( EVTGEN_INFO, "EvtGen" )
- << " EvtLb2Lll generator found decay: Lambda_b0 -> Lambda0 e- e+"
- << std::endl;
- } else if ( getDaug( 1 ) == muID && getDaug( 2 ) == amuID ) {
- m_decayName = "Lambda_b0 -> Lambda0 mu- mu+";
- EvtGenReport( EVTGEN_INFO, "EvtGen" )
- << " EvtLb2Lll generator found decay: Lambda_b0 -> Lambda0 mu- mu+"
- << std::endl;
- } else if ( getDaug( 1 ) == tauID && getDaug( 2 ) == atauID ) {
- m_decayName = "Lambda_b0 -> Lambda0 tau- tau+";
- EvtGenReport( EVTGEN_INFO, "EvtGen" )
- << " EvtLb2Lll generator found decay: Lambda_b0 -> Lambda0 tau- tau+"
- << std::endl;
- } else {
- EvtGenReport( EVTGEN_ERROR, "EvtGen" )
- << " ERROR: EvtLb2Lll generator expected lepton pair daughters but found: "
- << EvtPDL::name( getDaug( 1 ) ) << " "
- << EvtPDL::name( getDaug( 2 ) ) << std::endl;
- ::abort();
- }
- //TODO: The model is known not to work correctly for anti-Lambda_b0 (A_FB does not change its sign)
- } else if ( getParentId() == aLbID ) { // Check daughters of anti-Lambda_b0
- EvtGenReport( EVTGEN_INFO, "EvtGen" )
- << " EvtLb2Lll generator found anti-Lambda_b0" << std::endl;
- //if(EvtPDL::name(getDaug(0))!="anti-Lambda0"){
- // EvtGenReport(EVTGEN_ERROR,"EvtGen") << " ERROR: EvtLb2Lll generator expected anti-Lambda0 daughter but found: " << EvtPDL::name(getDaug(0)) << std::endl;
- // ::abort();
- //}
- if ( getDaug( 1 ) == aeID && getDaug( 2 ) == eID ) {
- m_decayName = "anti-Lambda_b0 -> anti-Lambda0 e+ e-";
- EvtGenReport( EVTGEN_INFO, "EvtGen" )
- << " EvtLb2Lll generator found decay: anti-Lambda_b0 -> anti-Lambda0 e+ e-"
- << std::endl;
- } else if ( getDaug( 1 ) == amuID && getDaug( 2 ) == muID ) {
- m_decayName = "anti-Lambda_b0 -> anti-Lambda0 mu+ mu-";
- EvtGenReport( EVTGEN_INFO, "EvtGen" )
- << " EvtLb2Lll generator found decay: anti-Lambda_b0 -> anti-Lambda0 mu+ mu-"
- << std::endl;
- } else if ( getDaug( 1 ) == atauID && getDaug( 2 ) == tauID ) {
- m_decayName = "anti-Lambda_b0 -> anti-Lambda0 tau+ tau-";
- EvtGenReport( EVTGEN_INFO, "EvtGen" )
- << " EvtLb2Lll generator found decay: anti-Lambda_b0 -> anti-Lambda0 tau+ tau-"
- << std::endl;
- } else {
- EvtGenReport( EVTGEN_ERROR, "EvtGen" )
- << " ERROR: EvtLb2Lll generator expected lepton pair daughters but found: "
- << EvtPDL::name( getDaug( 1 ) ) << " "
- << EvtPDL::name( getDaug( 2 ) ) << std::endl;
- ::abort();
- }
- } else { // This model is not intended for decay of anything else than (anti-)Lambda_b0
- EvtGenReport( EVTGEN_ERROR, "EvtGen" )
- << " ERROR: EvtLb2Lll generator expected (anti-)Lambda_b0 parent but found: "
- << EvtPDL::name( getParentId() ) << std::endl;
- ::abort();
- }
-
- // Read and check all parameters
- if ( getNArg() > 0 ) {
- if ( getArg( 0 ) > 1. || getArg( 0 ) < -1. ) {
- EvtGenReport( EVTGEN_ERROR, "EvtGen" )
- << " ERROR: EvtLb2Lll expects polarization to be in interval <-1,1>, not "
- << getArg( 0 ) << std::endl;
- ::abort();
- }
- m_polarizationLambdab0 = getArg( 0 );
- } else {
- m_polarizationLambdab0 = 0;
- }
- EvtGenReport( EVTGEN_INFO, "EvtGen" )
- << " EvtLb2Lll set Lambda_b0 polarization to " << m_polarizationLambdab0
- << std::endl;
-
- if ( getNArg() > 1 ) {
- if ( getArgStr( 1 ).substr( 1, getArgStr( 1 ).size() - 2 ) != "SM" &&
- getArgStr( 1 ).substr( 1, getArgStr( 1 ).size() - 2 ) != "-C7_SM" &&
- getArgStr( 1 ).substr( 1, getArgStr( 1 ).size() - 2 ) !=
- "SUSY-ChenGeng" ) {
- EvtGenReport( EVTGEN_ERROR, "EvtGen" )
- << " ERROR: EvtLb2Lll doesn't know this physics model: "
- << getArgStr( 1 ) << std::endl;
- ::abort();
- }
- m_HEPmodel = getArgStr( 1 ).substr( 1, getArgStr( 1 ).size() - 2 );
- } else {
- m_HEPmodel = "SM";
- }
- EvtGenReport( EVTGEN_INFO, "EvtGen" )
- << " EvtLb2Lll will use this physics model: " << m_HEPmodel << std::endl;
-
- if ( getNArg() > 2 ) {
- if ( getArgStr( 2 ).substr( 1, getArgStr( 2 ).size() - 2 ) != "HQET" &&
- getArgStr( 2 ).substr( 1, getArgStr( 2 ).size() - 2 ) != "HQET-noF2" &&
- getArgStr( 2 ).substr( 1, 11 ) != "HQET-delta=" ) {
- EvtGenReport( EVTGEN_ERROR, "EvtGen" )
- << " ERROR: EvtLb2Lll doesn't know this Form-Factors model: "
- << getArgStr( 2 ) << std::endl;
- ::abort();
- }
- m_FFtype = getArgStr( 2 ).substr( 1, getArgStr( 2 ).size() - 2 );
- } else {
- m_FFtype = "HQET";
- }
- EvtGenReport( EVTGEN_INFO, "EvtGen" )
- << " EvtLb2Lll will use this Form-Factors model: " << m_FFtype
- << std::endl;
-
- if ( getNArg() > 3 ) {
- if ( getArgStr( 3 ).substr( 1, getArgStr( 3 ).size() - 2 ) !=
- "Unpolarized" ) {
- EvtGenReport( EVTGEN_ERROR, "EvtGen" )
- << " ERROR: EvtLb2Lll doesn't know kind of introducing polarization: "
- << getArgStr( 3 ) << std::endl;
- ::abort();
- }
- m_polarizationIntroduction =
- getArgStr( 3 ).substr( 1, getArgStr( 3 ).size() - 2 );
- } else {
- m_polarizationIntroduction = "Unpolarized";
- }
- EvtGenReport( EVTGEN_INFO, "EvtGen" )
- << " EvtLb2Lll will use this kind of introducing polarization: "
- << m_polarizationIntroduction << std::endl;
-
- if ( getNArg() > 4 ) {
- if ( getArgStr( 4 ).substr( 1, getArgStr( 4 ).size() - 2 ) != "SD" &&
- getArgStr( 4 ).substr( 1, getArgStr( 4 ).size() - 2 ) != "LD" ) {
- EvtGenReport( EVTGEN_ERROR, "EvtGen" )
- << " ERROR: EvtLb2Lll didn't find SD or LD parameter: "
- << getArgStr( 4 ) << std::endl;
- ::abort();
- }
- m_effectContribution = getArgStr( 5 ).substr( 1, getArgStr( 4 ).size() -
- 2 );
- } else {
- m_effectContribution = "SD";
- }
- EvtGenReport( EVTGEN_INFO, "EvtGen" )
- << " EvtLb2Lll will include contribution from these effects: "
- << m_effectContribution << std::endl;
-
- if ( getNArg() > 5 ) {
- if ( fabs( getArg( 5 ) ) > 0.15 ) {
- EvtGenReport( EVTGEN_WARNING, "EvtGen" )
- << " WARNING: EvtLb2Lll found very high contribution to b->sg decay at q2=0: "
- << getArg( 5 ) << std::endl;
- }
- m_omega = getArg( 5 );
- } else {
- m_omega = 0;
- }
- EvtGenReport( EVTGEN_INFO, "EvtGen" )
- << " EvtLb2Lll will use this contribution to b->sg decay at q2=0: "
- << m_omega << std::endl;
-
- if ( getNArg() > 6 )
- m_noTries = (long)( getArg( 6 ) );
- else
- m_noTries = 0;
-
- if ( getNArg() > 7 ) {
- if ( getArg( 7 ) < 0. ) {
- EvtGenReport( EVTGEN_ERROR, "EvtGen" )
- << " ERROR: EvtLb2Lll expects positive maximum probability not : "
- << getArg( 7 ) << std::endl;
- ::abort();
- }
- m_maxProbability = getArg( 7 );
- } else {
- m_maxProbability = 0.;
- }
- EvtGenReport( EVTGEN_INFO, "EvtGen" )
- << " EvtLb2Lll maximum probability was set to " << m_maxProbability
- << std::endl;
- m_poleSize = 0;
-
- // Initialize Wilson coefficients by Buras and Munz
- // TODO: should have common W.C. source for all decays in EvtGen
- m_WC.CalculateAllCoefficients();
-}
-
-void EvtLb2Lll::initProbMax()
-{
- EvtGenReport( EVTGEN_INFO, "EvtGen" )
- << " EvtLb2Lll is finding maximum probability ... " << std::endl;
-
- if ( m_maxProbability < 1e-10 ) {
- EvtDiracParticle* parent = new EvtDiracParticle;
- parent->noLifeTime();
- parent->init( getParentId(),
- EvtVector4R( EvtPDL::getMass( getParentId() ), 0, 0, 0 ) );
- parent->setDiagonalSpinDensity();
-
- EvtAmp amp;
- EvtId daughters[3] = { getDaug( 0 ), getDaug( 1 ), getDaug( 2 ) };
- amp.init( getParentId(), 3, daughters );
- parent->makeDaughters( 3, daughters );
- EvtParticle* lambda = parent->getDaug( 0 );
- EvtParticle* lep1 = parent->getDaug( 1 );
- EvtParticle* lep2 = parent->getDaug( 2 );
- lambda->noLifeTime();
- lep1->noLifeTime();
- lep2->noLifeTime();
-
- EvtSpinDensity rho;
- rho.setDiag( parent->getSpinStates() );
-
- double M0 = EvtPDL::getMass( getParentId() );
- double mL = EvtPDL::getMass( getDaug( 0 ) );
- double m1 = EvtPDL::getMass( getDaug( 1 ) );
- double m2 = EvtPDL::getMass( getDaug( 2 ) );
-
- double q2, pstar, elambda, theta;
- double q2min = ( m1 + m2 ) * ( m1 + m2 );
- double q2max = ( M0 - mL ) * ( M0 - mL );
-
- EvtVector4R p4lambda, p4lep1, p4lep2, boost;
-
- EvtGenReport( EVTGEN_INFO, "EvtGen" )
- << " EvtLb2Lll is probing whole phase space ..." << std::endl;
-
- int i, j;
- double prob = 0;
- for ( i = 0; i <= 100; i++ ) {
- q2 = q2min + i * ( q2max - q2min ) / 100.;
- elambda = ( M0 * M0 + mL * mL - q2 ) / 2 / M0;
- if ( i == 0 )
- pstar = 0;
- else
- pstar = sqrt( q2 - ( m1 + m2 ) * ( m1 + m2 ) ) *
- sqrt( q2 - ( m1 - m2 ) * ( m1 - m2 ) ) / 2 / sqrt( q2 );
- boost.set( M0 - elambda, 0, 0, +sqrt( elambda * elambda - mL * mL ) );
- if ( i != 100 ) {
- p4lambda.set( elambda, 0, 0,
- -sqrt( elambda * elambda - mL * mL ) );
- } else {
- p4lambda.set( mL, 0, 0, 0 );
- }
- for ( j = 0; j <= 45; j++ ) {
- theta = j * EvtConst::pi / 45;
- p4lep1.set( sqrt( pstar * pstar + m1 * m1 ), 0,
- +pstar * sin( theta ), +pstar * cos( theta ) );
- p4lep2.set( sqrt( pstar * pstar + m2 * m2 ), 0,
- -pstar * sin( theta ), -pstar * cos( theta ) );
- if ( i != 100 ) // At maximal q2 we are already in correct frame as Lambda and W/Zvirtual are at rest
- {
- p4lep1 = boostTo( p4lep1, boost );
- p4lep2 = boostTo( p4lep2, boost );
- }
- calcAmp( &, parent );
- prob = rho.normalizedProb( amp.getSpinDensity() );
- //std::cout << "q2: " << q2 << " \t theta: " << theta << " \t prob: " << prob << std::endl;
- //std::cout << "p1: " << p4lep1 << " p2: " << p4lep2 << " q2-q2min: " << q2-(m1+m2)*(m1+m2) << std::endl;
- if ( prob > m_maxProbability ) {
- EvtGenReport( EVTGEN_INFO, "EvtGen" )
- << " - probability " << prob << " found at q2 = " << q2
- << " (" << 100 * ( q2 - q2min ) / ( q2max - q2min )
- << " %) and theta = " << theta * 180 / EvtConst::pi
- << std::endl;
- m_maxProbability = prob;
- }
- }
- //::abort();
- }
-
- //m_poleSize = 0.04*q2min;
- m_maxProbability *= 1.2;
- delete parent;
- }
-
- if ( m_maxProbability < 1e-10 ) {
- EvtGenReport( EVTGEN_INFO, "EvtLb2Lll" )
- << "EvtLb2Lll found zero max prob, setting to 1.5e6" << std::endl;
- m_maxProbability = 1.5e6;
- }
-
- setProbMax( m_maxProbability );
- EvtGenReport( EVTGEN_INFO, "EvtGen" )
- << " EvtLb2Lll set up maximum probability to " << m_maxProbability
- << std::endl;
-}
-
-void EvtLb2Lll::decay( EvtParticle* parent )
-{
- //setWeight(parent->initializePhaseSpace(getNDaug(),getDaugs(),m_poleSize,1,2));
- parent->initializePhaseSpace( getNDaug(), getDaugs() );
- calcAmp( &_amp2, parent );
-}
-
-void EvtLb2Lll::calcAmp( EvtAmp* amp, EvtParticle* parent )
-{
- static long noTries = 0;
- static double delta = 0;
-
- EvtComplex Matrix[2][2][2][2];
-
- EvtComplex i1( 0, 1 );
-
- int i, j, spins[4];
- char ch;
-
- double r, M_L, M_Lb, M_s, M_c, M_b, q2, alpha, M_W, M_t;
- double M_psi[2] = { 0, 0 }, Gamma_psi[2] = { 0, 0 }, k_psi[2] = { 0, 0 };
- double F0_1, F0_2, a_F1, a_F2, b_F1, b_F2, F1, F2;
- double f_1, f_2, f_3, g_1, g_2, g_3, f_1T, f_2T, f_3T, g_1T, g_2T, g_3T,
- f_TV, f_TS, g_TV( 0.0 ), g_TS, f_T, g_T;
- EvtComplex A1, A2, A3, B1, B2, B3, D1, D2, D3, E1, E2, E3, N1, N2, H1, H2;
- EvtComplex C_SL, C_BR, C_LLtot, C_LRtot, C_LL, C_LR, C_RL, C_RR, C_LRLR,
- C_RLLR, C_LRRL, C_RLRL, C_T, C_TE;
- EvtComplex Yld, C_7eff, C_9eff;
- EvtComplex V_ts, V_tb;
-
- EvtVector4C lbar_Gmu_l[2][2], lbar_GmuG5_l[2][2], hbar_GmuPlusG5_h[2][2],
- hbar_GmuMinusG5_h[2][2], hbar_Gmu_h[2][2];
- EvtComplex lbar_l[2][2], lbar_G5_l[2][2], hbar_1PlusG5_h[2][2],
- hbar_1MinusG5_h[2][2], hbar_G5_h[2][2], hbar_h[2][2];
- EvtTensor4C lbar_Smunu_l[2][2], lbar_ESmunu_l[2][2],
- hbar_SmunuPlusG5_h[2][2], hbar_SmunuMinusG5_h[2][2], hbar_Smunu_h[2][2];
- EvtVector4R q_mu, P_mu;
-
- EvtDiracSpinor parent__spParent[2];
-
- M_Lb = parent->mass();
- M_L = parent->getDaug( 0 )->mass();
- M_s = 0.13;
- M_c = 1.35;
- M_b = 4.8;
- alpha = 1. / 137.036;
- M_W = 80.425;
- M_t = 174.3;
- M_psi[0] = 3.096916;
- M_psi[1] = 3.686093;
- if ( m_decayName == "Lambda_b0 -> Lambda0 e- e+" ||
- m_decayName == "anti-Lambda_b0 -> anti-Lambda0 e+ e-" ) {
- Gamma_psi[0] = 5.40;
- Gamma_psi[1] = 2.12;
- }
- if ( m_decayName == "Lambda_b0 -> Lambda0 mu- mu+" ||
- m_decayName == "anti-Lambda_b0 -> anti-Lambda0 mu+ mu-" ) {
- Gamma_psi[0] = 5.35;
- Gamma_psi[1] = 2.05;
- }
- if ( m_decayName == "Lambda_b0 -> Lambda0 tau- tau+" ||
- m_decayName == "anti-Lambda_b0 -> anti-Lambda0 tau+ tau-" ) {
- Gamma_psi[0] = 0.00;
- Gamma_psi[1] = 0.79;
- }
- if ( m_effectContribution == "LD" ) {
- k_psi[0] = 1.65;
- k_psi[1] = 1.65;
- }
- //G_F = 1.16637e-5;
- //V_tb = sqrt(1-pow(0.0413,2))*sqrt(1-pow(0.0037,2));
- //V_ts = -sqrt(1-pow(0.2243,2))*0.0413-0.2243*sqrt(1-pow(0.0413,2))*0.0037*(cos(60*EvtConst::pi/180)+i1*sin(60*EvtConst::pi/180));
-
- P_mu = parent->getP4Restframe() + parent->getDaug( 0 )->getP4();
- q_mu = parent->getP4Restframe() - parent->getDaug( 0 )->getP4();
- q2 = q_mu.mass2();
-
- if ( m_noTries > 0 )
- if ( !( ( ++noTries ) % m_noTries ) )
- EvtGenReport( EVTGEN_DEBUG, "EvtGen" )
- << " EvtLb2Lll already finished " << noTries
- << " matrix element calculations" << std::endl;
-
- if ( m_FFtype == "HQET" ) {
- r = M_L * M_L / M_Lb / M_Lb;
- F0_1 = +0.462;
- F0_2 = -0.077;
- a_F1 = -0.0182;
- a_F2 = -0.0685;
- b_F1 = -0.000176;
- b_F2 = +0.001460;
- F1 = F0_1 / ( 1.0 - ( q2 / M_Lb / M_Lb ) *
- ( a_F1 - b_F1 * ( q2 / M_Lb / M_Lb ) ) );
- F2 = F0_2 / ( 1.0 - ( q2 / M_Lb / M_Lb ) *
- ( a_F2 - b_F2 * ( q2 / M_Lb / M_Lb ) ) );
- g_1 = f_1 = f_2T = g_2T = F1 + sqrt( r ) * F2;
- //std::cout << " F1: " << F1 << " F2: " << F2 << " r: " << r << " M_L: " << M_L << " M_Lb: " << M_Lb << std::endl;
- //std::cout << " sqrt(q2): " << sqrt(q2) << " q2: " << q2 << " M_Lb^2" << M_Lb*M_Lb << std::endl;
- g_2 = f_2 = g_3 = f_3 = g_TV = f_TV = F2 / M_Lb;
- g_TS = f_TS = 0;
- g_1T = f_1T = F2 / M_Lb * q2;
- g_3T = +F2 / M_Lb * ( M_Lb + M_L );
- f_3T = -F2 / M_Lb * ( M_Lb - M_L );
- f_T = f_2T - f_TS * q2;
- g_T = g_2T - g_TS * q2;
- } else if ( strstr( m_FFtype.c_str(), "HQET-delta=" ) == m_FFtype.c_str() ) {
- //EvtGenReport(EVTGEN_WARNING,"EvtGen") << " WARNING: HQET-delta FF model should be checked for correctness" << std::endl;
- if ( delta == 0 )
- sscanf( m_FFtype.c_str(), "%c%c%c%c%c%c%c%c%c%c%c%lf", &ch, &ch,
- &ch, &ch, &ch, &ch, &ch, &ch, &ch, &ch, &ch, &delta );
- r = M_L * M_L / M_Lb / M_Lb;
- F0_1 = +0.462;
- F0_2 = -0.077;
- a_F1 = -0.0182;
- a_F2 = -0.0685;
- b_F1 = -0.000176;
- b_F2 = +0.001460;
- F1 = F0_1 / ( 1.0 - ( q2 / M_Lb / M_Lb ) *
- ( a_F1 - b_F1 * ( q2 / M_Lb / M_Lb ) ) );
- F2 = F0_2 / ( 1.0 - ( q2 / M_Lb / M_Lb ) *
- ( a_F2 - b_F2 * ( q2 / M_Lb / M_Lb ) ) );
- g_1 = f_1 = f_2T = g_2T = F1 + sqrt( r ) * F2;
- g_1 += delta * g_1;
- f_1 -= delta * f_1;
- g_2 = f_2 = g_3 = f_3 = g_TV = f_TV = F2 / M_Lb;
- g_TS = f_TS = 0;
- g_1T = f_1T = F2 / M_Lb * q2;
- g_3T = +F2 / M_Lb * ( M_Lb + M_L );
- f_3T = -F2 / M_Lb * ( M_Lb - M_L );
- f_T = f_2T - f_TS * q2;
- g_T = g_2T - g_TS * q2;
- } else if ( m_FFtype == "HQET-noF2" ) {
- //EvtGenReport(EVTGEN_WARNING,"EvtGen") << " WARNING: HQET-noF2 FF model should be checked for correctness" << std::endl;
- r = M_L * M_L / M_Lb / M_Lb;
- F0_1 = +0.462;
- a_F1 = -0.0182;
- b_F1 = -0.000176;
- F1 = F0_1 / ( 1.0 - ( q2 / M_Lb / M_Lb ) *
- ( a_F1 - b_F1 * ( q2 / M_Lb / M_Lb ) ) );
- g_1 = f_1 = f_2T = g_2T = F1;
- g_2 = f_2 = g_3 = f_3 = g_TV = f_TV = 0;
- g_TS = f_TS = 0;
- g_1T = f_1T = 0;
- g_3T = 0;
- f_3T = 0;
- f_T = f_2T - f_TS * q2;
- g_T = g_2T - g_TS * q2;
- } else { // general relations for Form-Factors
- f_1 = f_2 = f_3 = g_1 = g_2 = g_3 = f_3T = g_3T = f_TS = g_TS = f_T =
- g_T = f_TV = 0;
- f_2T = f_T + f_TS * q2;
- f_1T = ( f_TV + f_TS * ( M_L + M_Lb ) ) * q2;
- f_1T = -q2 / ( M_Lb - M_L ) * f_3T;
- g_2T = g_T + g_TS * q2;
- g_1T = ( g_TV - g_TS * ( M_L - M_Lb ) ) * q2;
- g_1T = +q2 / ( M_Lb + M_L ) * g_3T;
- EvtGenReport( EVTGEN_ERROR, "EvtGen" )
- << " ERROR: EvtLb2Lll - unknown Form-Factors model: " << m_FFtype
- << " - this should never happen !" << std::endl;
- ::abort();
- }
-
- if ( m_HEPmodel == "SM" ) {
- C_LL = C_LR = C_RL = C_RR = C_LRLR = C_RLLR = C_LRRL = C_RLRL = C_T =
- C_TE = EvtComplex( 0, 0 );
- Yld = m_WC.Yld( q2, k_psi, Gamma_psi, M_psi, 2, m_WC.GetC1(),
- m_WC.GetC2(), m_WC.GetC3(), m_WC.GetC4(), m_WC.GetC5(),
- m_WC.GetC6(), 1. / alpha );
- C_7eff = m_WC.GetC7eff0() +
- m_WC.C7b2sg( m_WC.GetStrongCouplingConst(), m_WC.GetEta(),
- m_WC.GetC2(), M_t, M_W ) +
- m_omega *
- ( m_WC.hzs( M_c / M_b, q2 / M_b / M_b, M_b, M_b ) + Yld );
- C_9eff = Yld +
- m_WC.C9efftilda( M_c / M_b, q2 / M_b / M_b,
- m_WC.GetStrongCouplingConst(), m_WC.GetC1(),
- m_WC.GetC2(), m_WC.GetC3(), m_WC.GetC4(),
- m_WC.GetC5(), m_WC.GetC6(), m_WC.GetC9tilda(),
- m_WC.GetRenormSchemePar() );
- C_SL = -2 * M_s * C_7eff;
- C_BR = -2 * M_b * C_7eff;
- C_LLtot = C_9eff - m_WC.GetC10tilda() + C_LL;
- C_LRtot = C_9eff + m_WC.GetC10tilda() + C_LR;
- //std::cout << "Yld: " << Yld << " C7eff: " << C_7eff << " C_9eff: " << C_9eff << " Diff7: " << C_7eff-m_WC.GetC7eff0() << " Diff9: " << C_9eff-m_WC.GetC9tilda() << std::endl;
- } else if ( m_HEPmodel == "-C7_SM" ) {
- C_LL = C_LR = C_RL = C_RR = C_LRLR = C_RLLR = C_LRRL = C_RLRL = C_T =
- C_TE = EvtComplex( 0, 0 );
- Yld = m_WC.Yld( q2, k_psi, Gamma_psi, M_psi, 2, m_WC.GetC1(),
- m_WC.GetC2(), m_WC.GetC3(), m_WC.GetC4(), m_WC.GetC5(),
- m_WC.GetC6(), 1. / alpha );
- C_7eff = m_WC.GetC7eff0() +
- m_WC.C7b2sg( m_WC.GetStrongCouplingConst(), m_WC.GetEta(),
- m_WC.GetC2(), M_t, M_W ) +
- m_omega *
- ( m_WC.hzs( M_c / M_b, q2 / M_b / M_b, M_b, M_b ) + Yld );
- C_9eff = Yld +
- m_WC.C9efftilda( M_c / M_b, q2 / M_b / M_b,
- m_WC.GetStrongCouplingConst(), m_WC.GetC1(),
- m_WC.GetC2(), m_WC.GetC3(), m_WC.GetC4(),
- m_WC.GetC5(), m_WC.GetC6(), m_WC.GetC9tilda(),
- m_WC.GetRenormSchemePar() );
- C_SL = +2 * M_s * C_7eff;
- C_BR = +2 * M_b * C_7eff;
- C_LLtot = C_9eff - m_WC.GetC10tilda() + C_LL;
- C_LRtot = C_9eff + m_WC.GetC10tilda() + C_LR;
- //std::cout << "Yld: " << Yld << " C7eff: " << C_7eff << " C_9eff: " << C_9eff << " Diff7: " << C_7eff-m_WC.GetC7eff0() << " Diff9: " << C_9eff-m_WC.GetC9tilda() << std::endl;
- } else if ( m_HEPmodel == "SUSY-ChenGeng" ) {
- //EvtGenReport(EVTGEN_WARNING,"EvtGen") << " WARNING: SUSY-ChenGeng model should be checked for correctness" << std::endl;
- C_LL = C_LR = C_RL = C_RR = C_LRLR = C_RLLR = C_LRRL = C_RLRL = C_T =
- C_TE = EvtComplex( 0, 0 );
- EvtComplex d_u23LL = 0.1;
- EvtComplex d_u33RL = 0.65;
- EvtComplex d_d23LR = 0.03 * exp( i1 * EvtConst::pi * 2 / 5 );
- EvtComplex d_u23LR = -0.8 * exp( i1 * EvtConst::pi / 4 );
- EvtComplex C_7susy = -1.75 * d_u23LL - 0.25 * d_u23LR - 10.3 * d_d23LR;
- EvtComplex C_9susy = 0.82 * d_u23LR;
- EvtComplex C_10susy = -9.37 * d_u23LR + 1.4 * d_u23LR * d_u33RL +
- 2.7 * d_u23LL;
- Yld = m_WC.Yld( q2, k_psi, Gamma_psi, M_psi, 2, m_WC.GetC1(),
- m_WC.GetC2(), m_WC.GetC3(), m_WC.GetC4(), m_WC.GetC5(),
- m_WC.GetC6(), 1. / alpha );
- C_7eff = m_WC.GetC7eff0() + C_7susy * pow( m_WC.GetEta(), 16. / 23. ) +
- m_WC.C7b2sg( m_WC.GetStrongCouplingConst(), m_WC.GetEta(),
- m_WC.GetC2(), M_t, M_W ) +
- m_omega *
- ( m_WC.hzs( M_c / M_b, q2 / M_b / M_b, M_b, M_b ) + Yld );
- C_9eff = Yld + m_WC.C9efftilda( M_c / M_b, q2 / M_b / M_b,
- m_WC.GetStrongCouplingConst(),
- m_WC.GetC1(), m_WC.GetC2(), m_WC.GetC3(),
- m_WC.GetC4(), m_WC.GetC5(), m_WC.GetC6(),
- m_WC.GetC9tilda() + C_9susy,
- m_WC.GetRenormSchemePar() );
- C_SL = -2 * M_s * C_7eff;
- C_BR = -2 * M_b * C_7eff;
- C_LLtot = C_9eff - m_WC.GetC10tilda() - C_10susy + C_LL;
- C_LRtot = C_9eff + m_WC.GetC10tilda() + C_10susy + C_LR;
- //std::cout << "Yld: " << Yld << " C7eff: " << C_7eff << " C_9eff: " << C_9eff << " Diff7: " << C_7eff-m_WC.GetC7eff0() << " Diff9: " << C_9eff-m_WC.GetC9tilda() << std::endl;
- } else {
- EvtGenReport( EVTGEN_ERROR, "EvtGen" )
- << " ERROR: EvtLb2Lll - unknown physics model: " << m_HEPmodel
- << " - this should never happen !" << std::endl;
- ::abort();
- }
-
- A1 = ( f_1T - g_1T ) * C_SL / q2 + ( f_1T + g_1T ) * C_BR / q2 +
- 0.5 * ( f_1 - g_1 ) * ( C_LLtot + C_LRtot ) +
- 0.5 * ( f_1 + g_1 ) * ( C_RL + C_RR );
- //std::cout << "f_1T: " << f_1T << " g_1T: " << g_1T << " C_SL: " << C_SL << " C_BR: " << C_BR << " f_1: " << f_1 << " g_1: " << g_1 << " C_LLtot: " << C_LLtot << " C_LRtot: " << C_LRtot << " C_RL: " << C_RL << " C_RR: " << C_RR << std::endl;
- A2 = ( f_2T - g_2T ) * C_SL / q2 + ( f_2T + g_2T ) * C_BR / q2 +
- 0.5 * ( f_2 - g_2 ) * ( C_LLtot + C_LRtot ) +
- 0.5 * ( f_2 + g_2 ) * ( C_RL + C_RR );
- A3 = ( f_3T - g_3T ) * C_SL / q2 + ( f_3T + g_3T ) * C_BR / q2 +
- 0.5 * ( f_3 - g_3 ) * ( C_LLtot + C_LRtot ) +
- 0.5 * ( f_3 + g_3 ) * ( C_RL + C_RR );
-
- B1 = ( f_1T + g_1T ) * C_SL / q2 + ( f_1T - g_1T ) * C_BR / q2 +
- 0.5 * ( f_1 + g_1 ) * ( C_LLtot + C_LRtot ) +
- 0.5 * ( f_1 - g_1 ) * ( C_RL + C_RR );
- B2 = ( f_2T + g_2T ) * C_SL / q2 + ( f_2T - g_2T ) * C_BR / q2 +
- 0.5 * ( f_2 + g_2 ) * ( C_LLtot + C_LRtot ) +
- 0.5 * ( f_2 - g_2 ) * ( C_RL + C_RR );
- B3 = ( f_3T + g_3T ) * C_SL / q2 + ( f_3T - g_3T ) * C_BR / q2 +
- 0.5 * ( f_3 + g_3 ) * ( C_LLtot + C_LRtot ) +
- 0.5 * ( f_3 - g_3 ) * ( C_RL + C_RR );
-
- D1 = 0.5 * ( C_RR - C_RL ) * ( f_1 + g_1 ) +
- 0.5 * ( C_LRtot - C_LLtot ) * ( f_1 - g_1 );
- D2 = 0.5 * ( C_RR - C_RL ) * ( f_2 + g_2 ) +
- 0.5 * ( C_LRtot - C_LLtot ) * ( f_2 - g_2 );
- D3 = 0.5 * ( C_RR - C_RL ) * ( f_3 + g_3 ) +
- 0.5 * ( C_LRtot - C_LLtot ) * ( f_3 - g_3 );
-
- E1 = 0.5 * ( C_RR - C_RL ) * ( f_1 - g_1 ) +
- 0.5 * ( C_LRtot - C_LLtot ) * ( f_1 + g_1 );
- E2 = 0.5 * ( C_RR - C_RL ) * ( f_2 - g_2 ) +
- 0.5 * ( C_LRtot - C_LLtot ) * ( f_2 + g_2 );
- E3 = 0.5 * ( C_RR - C_RL ) * ( f_3 - g_3 ) +
- 0.5 * ( C_LRtot - C_LLtot ) * ( f_3 + g_3 );
-
- N1 = ( f_1 * ( M_Lb - M_L ) + f_3 * q2 ) / M_b *
- ( C_LRLR + C_RLLR + C_LRRL + C_RLRL ); // Should be mLb - mL
- N2 = ( f_1 * ( M_Lb - M_L ) + f_3 * q2 ) / M_b *
- ( C_LRLR + C_RLLR - C_LRRL - C_RLRL );
-
- H1 = ( g_1 * ( M_Lb + M_L ) - g_3 * q2 ) / M_b *
- ( C_LRLR - C_RLLR + C_LRRL - C_RLRL );
- H2 = ( g_1 * ( M_Lb + M_L ) - g_3 * q2 ) / M_b *
- ( C_LRLR - C_RLLR - C_LRRL + C_RLRL );
-
- for ( i = 0; i < 4; i++ ) {
- lbar_Gmu_l[i / 2][i % 2] =
- EvtLeptonVCurrent( parent->getDaug( 1 )->spParent( i / 2 ),
- parent->getDaug( 2 )->spParent( i % 2 ) );
- lbar_GmuG5_l[i / 2][i % 2] =
- EvtLeptonACurrent( parent->getDaug( 1 )->spParent( i / 2 ),
- parent->getDaug( 2 )->spParent( i % 2 ) );
- lbar_l[i / 2][i % 2] =
- EvtLeptonSCurrent( parent->getDaug( 1 )->spParent( i / 2 ),
- parent->getDaug( 2 )->spParent( i % 2 ) );
- lbar_G5_l[i / 2][i % 2] =
- EvtLeptonPCurrent( parent->getDaug( 1 )->spParent( i / 2 ),
- parent->getDaug( 2 )->spParent( i % 2 ) );
- lbar_Smunu_l[i / 2][i % 2] =
- EvtLeptonTCurrent( parent->getDaug( 1 )->spParent( i / 2 ),
- parent->getDaug( 2 )->spParent( i % 2 ) );
- lbar_ESmunu_l[i / 2][i % 2] = dual(
- EvtLeptonTCurrent( parent->getDaug( 1 )->spParent( i / 2 ),
- parent->getDaug( 2 )->spParent( i % 2 ) ) );
- }
-
- // TODO: polarization not yet introduced
- if ( m_polarizationIntroduction == "SpinDensityMatrix" ) {
- //parent->setSpinDensityForward();
- parent__spParent[0] = parent->sp( 0 );
- parent__spParent[1] = parent->sp( 1 );
- } else if ( m_polarizationIntroduction == "ModifiedSpinors" ) {
- parent__spParent[0] = parent->sp( 0 );
- parent__spParent[1] = parent->sp( 1 );
- } else if ( m_polarizationIntroduction == "Unpolarized" ) {
- parent__spParent[0] = parent->sp( 0 );
- parent__spParent[1] = parent->sp( 1 );
- } else {
- EvtGenReport( EVTGEN_ERROR, "EvtGen" )
- << " ERROR: EvtLb2Lll - unknown polarization: "
- << m_polarizationIntroduction << " - this should never happen !"
- << std::endl;
- ::abort();
- }
-
- for ( i = 0; i < 4; i++ ) {
- hbar_GmuPlusG5_h[i / 2][i % 2] =
- EvtLeptonVCurrent( parent->getDaug( 0 )->spParent( i / 2 ),
- parent__spParent[i % 2] ) +
- EvtLeptonACurrent( parent->getDaug( 0 )->spParent( i / 2 ),
- parent__spParent[i % 2] );
- hbar_GmuMinusG5_h[i / 2][i % 2] = EvtLeptonVACurrent(
- parent->getDaug( 0 )->spParent( i / 2 ), parent__spParent[i % 2] );
- hbar_SmunuPlusG5_h[i / 2][i % 2] =
- EvtLeptonTCurrent( parent->getDaug( 0 )->spParent( i / 2 ),
- parent__spParent[i % 2] ) +
- EvtLeptonTG5Current( parent->getDaug( 0 )->spParent( i / 2 ),
- parent__spParent[i % 2] );
- hbar_SmunuMinusG5_h[i / 2][i % 2] =
- EvtLeptonTCurrent( parent->getDaug( 0 )->spParent( i / 2 ),
- parent__spParent[i % 2] ) -
- EvtLeptonTG5Current( parent->getDaug( 0 )->spParent( i / 2 ),
- parent__spParent[i % 2] );
- hbar_1PlusG5_h[i / 2][i % 2] =
- EvtLeptonSCurrent( parent->getDaug( 0 )->spParent( i / 2 ),
- parent__spParent[i % 2] ) +
- EvtLeptonPCurrent( parent->getDaug( 0 )->spParent( i / 2 ),
- parent__spParent[i % 2] );
- hbar_1MinusG5_h[i / 2][i % 2] =
- EvtLeptonSCurrent( parent->getDaug( 0 )->spParent( i / 2 ),
- parent__spParent[i % 2] ) -
- EvtLeptonPCurrent( parent->getDaug( 0 )->spParent( i / 2 ),
- parent__spParent[i % 2] );
- hbar_G5_h[i / 2][i % 2] = EvtLeptonPCurrent(
- parent->getDaug( 0 )->spParent( i / 2 ), parent__spParent[i % 2] );
- hbar_h[i / 2][i % 2] = EvtLeptonSCurrent(
- parent->getDaug( 0 )->spParent( i / 2 ), parent__spParent[i % 2] );
- hbar_Smunu_h[i / 2][i % 2] = EvtLeptonTCurrent(
- parent->getDaug( 0 )->spParent( i / 2 ), parent__spParent[i % 2] );
- hbar_Gmu_h[i / 2][i % 2] = EvtLeptonVCurrent(
- parent->getDaug( 0 )->spParent( i / 2 ), parent__spParent[i % 2] );
- }
-
- for ( i = 0; i < 4; i++ )
- for ( j = 0; j < 4; j++ ) {
- //std::cout << "--------------------------------------------------" << std::endl;
- //std::cout << "Matrix = " << Matrix[j/2][j%2][i/2][i%2] << std::endl;
- Matrix[j / 2][j % 2][i / 2][i % 2] +=
- lbar_Gmu_l[i / 2][i % 2] *
- ( A1 * hbar_GmuPlusG5_h[j / 2][j % 2] +
- B1 * hbar_GmuMinusG5_h[j / 2][j % 2] );
- //std::cout << "Matrix = " << Matrix[j/2][j%2][i/2][i%2] << std::endl;
- //std::cout << "A1: " << A1 << " B1: " << B1 << " lbar_Gmu_l: " << lbar_Gmu_l[i/2][i%2] <<
- // " hbar_GmuPlusG5_h: " << hbar_GmuPlusG5_h[j/2][j%2] << " hbar_GmuMinusG5_h: " << hbar_GmuMinusG5_h[j/2][j%2] <<
- // " sp1: " << parent->getDaug(1)->spParent(i/2) << " sp2: " << parent->getDaug(1)->spParent(i%2) << std::endl;
- Matrix[j / 2][j % 2][i / 2][i % 2] +=
- lbar_Gmu_l[i / 2][i % 2] *
- ( i1 * A2 * ( hbar_SmunuPlusG5_h[j / 2][j % 2].cont2( q_mu ) ) +
- B2 * ( hbar_SmunuMinusG5_h[j / 2][j % 2].cont2( q_mu ) ) );
- //std::cout << "Matrix = " << Matrix[j/2][j%2][i/2][i%2] << std::endl;
- Matrix[j / 2][j % 2][i / 2][i % 2] +=
- lbar_Gmu_l[i / 2][i % 2] *
- ( ( A3 * hbar_1PlusG5_h[j / 2][j % 2] +
- B3 * hbar_1MinusG5_h[j / 2][j % 2] ) *
- q_mu );
- //std::cout << "Matrix = " << Matrix[j/2][j%2][i/2][i%2] << std::endl;
- Matrix[j / 2][j % 2][i / 2][i % 2] +=
- lbar_GmuG5_l[i / 2][i % 2] *
- ( D1 * hbar_GmuPlusG5_h[j / 2][j % 2] +
- E1 * hbar_GmuMinusG5_h[j / 2][j % 2] );
- //std::cout << "Matrix = " << Matrix[j/2][j%2][i/2][i%2] << std::endl;
- Matrix[j / 2][j % 2][i / 2][i % 2] +=
- lbar_GmuG5_l[i / 2][i % 2] *
- ( i1 * D2 * ( hbar_SmunuPlusG5_h[j / 2][j % 2].cont2( q_mu ) ) +
- E2 * ( hbar_SmunuMinusG5_h[j / 2][j % 2].cont2( q_mu ) ) );
- //std::cout << "Matrix = " << Matrix[j/2][j%2][i/2][i%2] << std::endl;
- Matrix[j / 2][j % 2][i / 2][i % 2] +=
- lbar_GmuG5_l[i / 2][i % 2] *
- ( ( D3 * hbar_1PlusG5_h[j / 2][j % 2] +
- E3 * hbar_1MinusG5_h[j / 2][j % 2] ) *
- q_mu );
- //std::cout << "Matrix = " << Matrix[j/2][j%2][i/2][i%2] << std::endl;
- Matrix[j / 2][j % 2][i / 2][i % 2] +=
- lbar_l[i / 2][i % 2] *
- ( N1 * hbar_h[j / 2][j % 2] + H1 * hbar_G5_h[j / 2][j % 2] );
- //std::cout << "Matrix = " << Matrix[j/2][j%2][i/2][i%2] << std::endl;
- Matrix[j / 2][j % 2][i / 2][i % 2] +=
- lbar_G5_l[i / 2][i % 2] *
- ( N2 * hbar_h[j / 2][j % 2] + H2 * hbar_G5_h[j / 2][j % 2] );
- //std::cout << "Matrix = " << Matrix[j/2][j%2][i/2][i%2] << std::endl;
- Matrix[j / 2][j % 2][i / 2][i % 2] +=
- cont( lbar_Smunu_l[i / 2][i % 2],
- 4 * C_T * f_T * hbar_Smunu_h[j / 2][j % 2] );
- //std::cout << "Matrix = " << Matrix[j/2][j%2][i/2][i%2] << std::endl;
- Matrix[j / 2][j % 2][i / 2][i % 2] += cont(
- lbar_Smunu_l[i / 2][i % 2],
- -4 * C_T * f_TV * i1 *
- ( EvtGenFunctions::directProd( q_mu, hbar_Gmu_h[j / 2][j % 2] ) -
- EvtGenFunctions::directProd( hbar_Gmu_h[j / 2][j % 2],
- q_mu ) ) );
- //std::cout << "Matrix = " << Matrix[j/2][j%2][i/2][i%2] << std::endl;
- Matrix[j / 2][j % 2][i / 2][i % 2] +=
- cont( lbar_Smunu_l[i / 2][i % 2],
- -4 * C_T * f_TS * i1 *
- ( EvtGenFunctions::directProd( P_mu, q_mu ) -
- EvtGenFunctions::directProd( q_mu, P_mu ) ) *
- hbar_h[j / 2][j % 2] );
- //std::cout << "Matrix = " << Matrix[j/2][j%2][i/2][i%2] << std::endl;
- Matrix[j / 2][j % 2][i / 2][i % 2] +=
- cont( lbar_ESmunu_l[i / 2][i % 2],
- 4 * C_TE * f_T * i1 * hbar_Smunu_h[j / 2][j % 2] );
- //std::cout << "Matrix = " << Matrix[j/2][j%2][i/2][i%2] << std::endl;
- Matrix[j / 2][j % 2][i / 2][i % 2] += cont(
- lbar_ESmunu_l[i / 2][i % 2],
- 4 * C_TE * f_TV *
- ( EvtGenFunctions::directProd( q_mu, hbar_Gmu_h[j / 2][j % 2] ) -
- EvtGenFunctions::directProd( hbar_Gmu_h[j / 2][j % 2],
- q_mu ) ) );
- //std::cout << "Matrix = " << Matrix[j/2][j%2][i/2][i%2] << std::endl;
- Matrix[j / 2][j % 2][i / 2][i % 2] +=
- cont( lbar_ESmunu_l[i / 2][i % 2],
- 4 * C_TE * f_TS *
- ( EvtGenFunctions::directProd( P_mu, q_mu ) -
- EvtGenFunctions::directProd( q_mu, P_mu ) ) *
- hbar_h[j / 2][j % 2] );
- //std::cout << "Matrix = " << Matrix[j/2][j%2][i/2][i%2] << std::endl;
- //Matrix[j/2][j%2][i/2][i%2] *= G_F*alpha/4/sqrt(2)/EvtConst::pi*V_tb*conj(V_ts);
- //std::cout << "Matrix = " << Matrix[j/2][j%2][i/2][i%2] << std::endl;
- //std::cout << "--------------------------------------------------" << std::endl;
- spins[0] = j % 2;
- spins[1] = j / 2;
- spins[2] = i / 2;
- spins[3] = i % 2;
- amp->vertex( spins, Matrix[j / 2][j % 2][i / 2][i % 2] );
- }
-
- //std::cout << "==================================================" << std::endl;
- //std::cout << "Lambda_b0: " << parent->getP4Restframe() << std::endl;
- //std::cout << "Lambda0: " << parent->getDaug(0)->getP4() << std::endl;
- //std::cout << "mu-: " << parent->getDaug(1)->getP4() << std::endl;
- //std::cout << "mu+: " << parent->getDaug(2)->getP4() << std::endl;
- //std::cout << "P_mu: " << P_mu << std::endl;
- //std::cout << "q_mu: " << q_mu << std::endl;
- //std::cout << "q2: " << q2 << std::endl;
- //std::cout << "==================================================" << std::endl;
-
- return;
-}
-
-EvtTensor4C EvtLb2Lll::EvtLeptonTG5Current( const EvtDiracSpinor& d,
- const EvtDiracSpinor& dp )
-{
- //
-
- EvtTensor4C temp;
- temp.zero();
- EvtComplex i2( 0, 0.5 );
-
- static EvtGammaMatrix mat01 = EvtGammaMatrix::g0() *
- ( EvtGammaMatrix::g0() * EvtGammaMatrix::g1() -
- EvtGammaMatrix::g1() * EvtGammaMatrix::g0() ) *
- EvtGammaMatrix::g5();
- static EvtGammaMatrix mat02 = EvtGammaMatrix::g0() *
- ( EvtGammaMatrix::g0() * EvtGammaMatrix::g2() -
- EvtGammaMatrix::g2() * EvtGammaMatrix::g0() ) *
- EvtGammaMatrix::g5();
- static EvtGammaMatrix mat03 = EvtGammaMatrix::g0() *
- ( EvtGammaMatrix::g0() * EvtGammaMatrix::g3() -
- EvtGammaMatrix::g3() * EvtGammaMatrix::g0() ) *
- EvtGammaMatrix::g5();
- static EvtGammaMatrix mat12 = EvtGammaMatrix::g0() *
- ( EvtGammaMatrix::g1() * EvtGammaMatrix::g2() -
- EvtGammaMatrix::g2() * EvtGammaMatrix::g1() ) *
- EvtGammaMatrix::g5();
- static EvtGammaMatrix mat13 = EvtGammaMatrix::g0() *
- ( EvtGammaMatrix::g1() * EvtGammaMatrix::g3() -
- EvtGammaMatrix::g3() * EvtGammaMatrix::g1() ) *
- EvtGammaMatrix::g5();
- static EvtGammaMatrix mat23 = EvtGammaMatrix::g0() *
- ( EvtGammaMatrix::g2() * EvtGammaMatrix::g3() -
- EvtGammaMatrix::g3() * EvtGammaMatrix::g2() ) *
- EvtGammaMatrix::g5();
-
- temp.set( 0, 1, i2 * ( d * ( mat01 * dp ) ) );
- temp.set( 1, 0, -temp.get( 0, 1 ) );
-
- temp.set( 0, 2, i2 * ( d * ( mat02 * dp ) ) );
- temp.set( 2, 0, -temp.get( 0, 2 ) );
-
- temp.set( 0, 3, i2 * ( d * ( mat03 * dp ) ) );
- temp.set( 3, 0, -temp.get( 0, 3 ) );
-
- temp.set( 1, 2, i2 * ( d * ( mat12 * dp ) ) );
- temp.set( 2, 1, -temp.get( 1, 2 ) );
-
- temp.set( 1, 3, i2 * ( d * ( mat13 * dp ) ) );
- temp.set( 3, 1, -temp.get( 1, 3 ) );
-
- temp.set( 2, 3, i2 * ( d * ( mat23 * dp ) ) );
- temp.set( 3, 2, -temp.get( 2, 3 ) );
-
- return temp;
-}
diff --git a/src/EvtGenModels/EvtModelReg.cpp b/src/EvtGenModels/EvtModelReg.cpp
--- a/src/EvtGenModels/EvtModelReg.cpp
+++ b/src/EvtGenModels/EvtModelReg.cpp
@@ -26,7 +26,6 @@
#include "EvtGenBase/EvtPatches.hh"
#include "EvtGenModels/EvtBBScalar.hh"
-#include "EvtGenModels/EvtBHadronic.hh"
#include "EvtGenModels/EvtBLLNuL.hh"
#include "EvtGenModels/EvtBTo3piCP.hh"
#include "EvtGenModels/EvtBTo4piCP.hh"
@@ -78,17 +77,13 @@
#include "EvtGenModels/EvtKKLambdaC.hh"
#include "EvtGenModels/EvtKStopizmumu.hh"
#include "EvtGenModels/EvtKstarnunu.hh"
-#include "EvtGenModels/EvtKstarstargamma.hh"
#include "EvtGenModels/EvtLNuGamma.hh"
-#include "EvtGenModels/EvtLambdaB2LambdaV.hh"
#include "EvtGenModels/EvtLambdaP_BarGamma.hh"
#include "EvtGenModels/EvtLambdacPHH.hh"
#include "EvtGenModels/EvtLb2Baryonlnu.hh"
-#include "EvtGenModels/EvtLb2Lll.hh"
#include "EvtGenModels/EvtLb2plnuLCSR.hh"
#include "EvtGenModels/EvtLb2plnuLQCD.hh"
#include "EvtGenModels/EvtMelikhov.hh"
-#include "EvtGenModels/EvtMultibody.hh"
#include "EvtGenModels/EvtOmegaDalitz.hh"
#include "EvtGenModels/EvtPVVCPLH.hh"
#include "EvtGenModels/EvtPartWave.hh"
@@ -97,7 +92,6 @@
#include "EvtGenModels/EvtPhspDecaytimeCut.hh"
#include "EvtGenModels/EvtPhspFlatLifetime.hh"
#include "EvtGenModels/EvtPi0Dalitz.hh"
-#include "EvtGenModels/EvtPropSLPole.hh"
#include "EvtGenModels/EvtPsi2JpsiPiPi.hh"
#include "EvtGenModels/EvtPto3P.hh"
#include "EvtGenModels/EvtRareLbToLll.hh"
@@ -161,8 +155,6 @@
#include "EvtGenModels/EvtbTosllMSExt.hh"
#include "EvtGenModels/Evtbs2llGammaISRFSR.hh"
#include "EvtGenModels/Evtbs2llGammaMNT.hh"
-#include "EvtGenModels/EvtbsToLLLL.hh"
-#include "EvtGenModels/EvtbsToLLLLHyperCP.hh"
#include
#include
@@ -196,12 +188,10 @@
modelist.registerModel( new EvtISGW2 );
modelist.registerModel( new EvtMelikhov );
modelist.registerModel( new EvtSLPole );
- modelist.registerModel( new EvtPropSLPole );
modelist.registerModel( new EvtSLBKPole );
modelist.registerModel( new EvtHQET );
modelist.registerModel( new EvtHQET2 );
modelist.registerModel( new EvtISGW );
- modelist.registerModel( new EvtBHadronic );
modelist.registerModel( new EvtVSS );
modelist.registerModel( new EvtVSSMix );
modelist.registerModel( new EvtVSSBMixCPT );
@@ -264,14 +254,12 @@
modelist.registerModel( new EvtCBTo3piMPP );
modelist.registerModel( new EvtBToKpipiCP );
- modelist.registerModel( new EvtLb2Lll );
modelist.registerModel( new EvtRareLbToLll );
modelist.registerModel( new EvtHypNonLepton );
modelist.registerModel( new EvtSVVHelCPMix );
modelist.registerModel( new EvtSVPHelCPMix );
modelist.registerModel( new EvtLNuGamma );
- modelist.registerModel( new EvtKstarstargamma );
modelist.registerModel( new EvtVub );
@@ -283,7 +271,6 @@
modelist.registerModel( new EvtPto3P );
modelist.registerModel( new EvtBtoKD3P );
modelist.registerModel( new EvtKKLambdaC );
- modelist.registerModel( new EvtMultibody );
modelist.registerModel( new EvtDMix );
modelist.registerModel( new EvtD0mixDalitz );
modelist.registerModel( new EvtD0gammaDalitz );
@@ -292,9 +279,6 @@
modelist.registerModel( new EvtBaryonPCR );
modelist.registerModel( new EvtBToDDalitzCPK );
- modelist.registerModel( new EvtLambdaB2LambdaV );
- modelist.registerModel( new EvtLambda2PPiForLambdaB2LambdaV );
- modelist.registerModel( new EvtV2VpVmForLambdaB2LambdaV );
modelist.registerModel( new EvtPVVCPLH );
modelist.registerModel( new EvtSSD_DirectCP );
@@ -311,8 +295,6 @@
modelist.registerModel( new EvtTVP );
modelist.registerModel( new EvtXPsiGamma );
- modelist.registerModel( new EvtbsToLLLL );
- modelist.registerModel( new EvtbsToLLLLHyperCP );
modelist.registerModel( new EvtBLLNuL );
modelist.registerModel( new EvtKStopizmumu );
diff --git a/src/EvtGenModels/EvtMultibody.cpp b/src/EvtGenModels/EvtMultibody.cpp
deleted file mode 100644
--- a/src/EvtGenModels/EvtMultibody.cpp
+++ /dev/null
@@ -1,94 +0,0 @@
-
-/***********************************************************************
-* Copyright 1998-2020 CERN for the benefit of the EvtGen authors *
-* *
-* This file is part of EvtGen. *
-* *
-* EvtGen is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU General Public License as published by *
-* the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* EvtGen is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU General Public License for more details. *
-* *
-* You should have received a copy of the GNU General Public License *
-* along with EvtGen. If not, see . *
-***********************************************************************/
-
-#include "EvtGenModels/EvtMultibody.hh"
-
-#include "EvtGenBase/EvtConst.hh"
-#include "EvtGenBase/EvtGenKine.hh"
-#include "EvtGenBase/EvtKine.hh"
-#include "EvtGenBase/EvtPDL.hh"
-#include "EvtGenBase/EvtParticle.hh"
-#include "EvtGenBase/EvtPatches.hh"
-#include "EvtGenBase/EvtReport.hh"
-#include "EvtGenBase/EvtResonance.hh"
-#include "EvtGenBase/EvtResonance2.hh"
-#include "EvtGenBase/EvtdFunction.hh"
-
-EvtMultibody::~EvtMultibody()
-{
- if ( _decayTree != nullptr )
- delete _decayTree;
- _decayTree = nullptr;
- if ( _ilist != nullptr )
- delete[] _ilist;
- _ilist = nullptr;
-}
-
-std::string EvtMultibody::getName()
-{
- return "D_MULTIBODY";
-}
-
-EvtDecayBase* EvtMultibody::clone()
-{
- return new EvtMultibody;
-}
-
-void EvtMultibody::init()
-{
- int N = getNArg();
-
- _decayTree = new EvtMTree( getDaugs(), getNDaug() );
- _ilist = new int[getNDaug() + 1];
-
- for ( int i = 0; i < N - 1; ++i ) {
- if ( getArgStr( i ) == "RESONANCE" ) {
- _decayTree->addtree( getArgStr( ++i ) );
- } else {
- EvtGenReport( EVTGEN_ERROR, "EvtGen" )
- << "Syntax error at " << getArgStr( i ) << std::endl;
- ::abort();
- }
- }
-}
-
-void EvtMultibody::initProbMax()
-{
- setProbMax( 1.0 );
-}
-
-void EvtMultibody::decay( EvtParticle* p )
-{
- // Initialize the phase space before doing anything else!
- p->initializePhaseSpace( getNDaug(), getDaugs() );
-
- EvtSpinAmp amp = _decayTree->amplitude( p );
-
- vector index = amp.iterallowedinit();
- vector spins = amp.dims();
-
- do {
- for ( size_t i = 0; i < index.size(); ++i ) {
- _ilist[i] = index[i] + spins[i];
- }
-
- vertex( _ilist, amp( index ) );
- } while ( amp.iterateallowed( index ) );
-}
diff --git a/src/EvtGenModels/EvtPropSLPole.cpp b/src/EvtGenModels/EvtPropSLPole.cpp
deleted file mode 100644
--- a/src/EvtGenModels/EvtPropSLPole.cpp
+++ /dev/null
@@ -1,551 +0,0 @@
-
-/***********************************************************************
-* Copyright 1998-2020 CERN for the benefit of the EvtGen authors *
-* *
-* This file is part of EvtGen. *
-* *
-* EvtGen is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU General Public License as published by *
-* the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* EvtGen is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU General Public License for more details. *
-* *
-* You should have received a copy of the GNU General Public License *
-* along with EvtGen. If not, see . *
-***********************************************************************/
-
-#include "EvtGenModels/EvtPropSLPole.hh"
-
-#include "EvtGenBase/EvtAmpPdf.hh"
-#include "EvtGenBase/EvtDecayTable.hh"
-#include "EvtGenBase/EvtGenKine.hh"
-#include "EvtGenBase/EvtIntervalFlatPdf.hh"
-#include "EvtGenBase/EvtMassAmp.hh"
-#include "EvtGenBase/EvtPDL.hh"
-#include "EvtGenBase/EvtParticle.hh"
-#include "EvtGenBase/EvtPatches.hh"
-#include "EvtGenBase/EvtPropBreitWignerRel.hh"
-#include "EvtGenBase/EvtReport.hh"
-#include "EvtGenBase/EvtScalarParticle.hh"
-#include "EvtGenBase/EvtSemiLeptonicScalarAmp.hh"
-#include "EvtGenBase/EvtSemiLeptonicTensorAmp.hh"
-#include "EvtGenBase/EvtSemiLeptonicVectorAmp.hh"
-#include "EvtGenBase/EvtSpinType.hh"
-#include "EvtGenBase/EvtTensorParticle.hh"
-#include "EvtGenBase/EvtTwoBodyVertex.hh"
-#include "EvtGenBase/EvtVectorParticle.hh"
-
-#include "EvtGenModels/EvtSLPoleFF.hh"
-
-#include
-#include
-
-std::string EvtPropSLPole::getName()
-{
- return "PROPSLPOLE";
-}
-
-EvtDecayBase* EvtPropSLPole::clone()
-{
- return new EvtPropSLPole;
-}
-
-void EvtPropSLPole::decay( EvtParticle* p )
-{
- if ( !_isProbMaxSet ) {
- EvtId parnum, mesnum, lnum, nunum;
-
- parnum = getParentId();
- mesnum = getDaug( 0 );
- lnum = getDaug( 1 );
- nunum = getDaug( 2 );
-
- double mymaxprob = calcMaxProb( parnum, mesnum, lnum, nunum,
- SLPoleffmodel.get() );
-
- setProbMax( mymaxprob );
-
- _isProbMaxSet = true;
- }
-
- double minKstMass = EvtPDL::getMinMass( p->getDaug( 0 )->getId() );
- double maxKstMass = EvtPDL::getMaxMass( p->getDaug( 0 )->getId() );
-
- EvtIntervalFlatPdf flat( minKstMass, maxKstMass );
- EvtPdfGen gen( flat );
- EvtPoint1D point = gen();
-
- double massKst = point.value();
-
- p->getDaug( 0 )->setMass( massKst );
- p->initializePhaseSpace( getNDaug(), getDaugs() );
-
- // EvtVector4R p4meson = p->getDaug(0)->getP4();
-
- calcamp->CalcAmp( p, _amp2, SLPoleffmodel.get() );
-
- EvtParticle* mesonPart = p->getDaug( 0 );
-
- double meson_BWAmp = calBreitWigner( mesonPart, point );
-
- int list[2];
- list[0] = 0;
- list[1] = 0;
- _amp2.vertex( 0, 0, _amp2.getAmp( list ) * meson_BWAmp );
- list[0] = 0;
- list[1] = 1;
- _amp2.vertex( 0, 1, _amp2.getAmp( list ) * meson_BWAmp );
-
- list[0] = 1;
- list[1] = 0;
- _amp2.vertex( 1, 0, _amp2.getAmp( list ) * meson_BWAmp );
- list[0] = 1;
- list[1] = 1;
- _amp2.vertex( 1, 1, _amp2.getAmp( list ) * meson_BWAmp );
-
- list[0] = 2;
- list[1] = 0;
- _amp2.vertex( 2, 0, _amp2.getAmp( list ) * meson_BWAmp );
- list[0] = 2;
- list[1] = 1;
- _amp2.vertex( 2, 1, _amp2.getAmp( list ) * meson_BWAmp );
-
- return;
-}
-
-void EvtPropSLPole::initProbMax()
-{
- _isProbMaxSet = false;
-
- return;
-}
-
-void EvtPropSLPole::init()
-{
- checkNDaug( 3 );
-
- //We expect the parent to be a scalar
- //and the daughters to be X lepton neutrino
-
- checkSpinParent( EvtSpinType::SCALAR );
- checkSpinDaughter( 1, EvtSpinType::DIRAC );
- checkSpinDaughter( 2, EvtSpinType::NEUTRINO );
-
- EvtSpinType::spintype mesontype = EvtPDL::getSpinType( getDaug( 0 ) );
-
- SLPoleffmodel = std::make_unique( getNArg(), getArgs() );
-
- switch ( mesontype ) {
- case EvtSpinType::SCALAR:
- calcamp = std::make_unique();
- break;
- case EvtSpinType::VECTOR:
- calcamp = std::make_unique();
- break;
- case EvtSpinType::TENSOR:
- calcamp = std::make_unique();
- break;
- default:;
- }
-}
-
-double EvtPropSLPole::calBreitWignerBasic( double maxMass )
-{
- if ( _width < 0.0001 )
- return 1.0;
- //its not flat - but generated according to a BW
-
- double mMin = _massMin;
- double mMax = _massMax;
- if ( maxMass > -0.5 && maxMass < mMax )
- mMax = maxMass;
-
- double massGood = EvtRandom::Flat( mMin, mMax );
-
- double ampVal = sqrt(
- 1.0 / ( pow( massGood - _mass, 2.0 ) + pow( _width, 2.0 ) / 4.0 ) );
-
- return ampVal;
-}
-
-double EvtPropSLPole::calBreitWigner( EvtParticle* pmeson, EvtPoint1D point )
-{
- EvtId mesnum = pmeson->getId();
- _mass = EvtPDL::getMeanMass( mesnum );
- _width = EvtPDL::getWidth( mesnum );
- _maxRange = EvtPDL::getMaxRange( mesnum );
- EvtSpinType::spintype mesontype = EvtPDL::getSpinType( mesnum );
- _includeDecayFact = true;
- _includeBirthFact = true;
- _spin = mesontype;
- _blatt = 3.0;
-
- double maxdelta = 15.0 * _width;
-
- if ( _maxRange > 0.00001 ) {
- _massMax = _mass + maxdelta;
- _massMin = _mass - _maxRange;
- } else {
- _massMax = _mass + maxdelta;
- _massMin = _mass - 15.0 * _width;
- }
-
- _massMax = _mass + maxdelta;
- if ( _massMin < 0. )
- _massMin = 0.;
-
- EvtParticle* par = pmeson->getParent();
- double maxMass = -1.;
- if ( par != nullptr ) {
- if ( par->hasValidP4() )
- maxMass = par->mass();
- for ( std::size_t i = 0; i < par->getNDaug(); i++ ) {
- EvtParticle* tDaug = par->getDaug( i );
- if ( pmeson != tDaug )
- maxMass -= EvtPDL::getMinMass( tDaug->getId() );
- }
- }
-
- std::vector dauId;
- std::vector dauMasses;
- const std::size_t nDaug{ pmeson->getNDaug() };
- if ( nDaug > 0 ) {
- dauId.resize( nDaug );
- dauMasses.resize( nDaug );
- for ( std::size_t j = 0; j < nDaug; j++ ) {
- dauId[j] = pmeson->getDaug( j )->getId();
- dauMasses[j] = pmeson->getDaug( j )->mass();
- }
- }
- EvtId parId;
- EvtId othDaugId;
- EvtParticle* tempPar = pmeson->getParent();
- if ( tempPar ) {
- parId = tempPar->getId();
- if ( tempPar->getNDaug() == 2 ) {
- if ( tempPar->getDaug( 0 ) == pmeson ) {
- othDaugId = tempPar->getDaug( 1 )->getId();
- } else {
- othDaugId = tempPar->getDaug( 0 )->getId();
- }
- }
- }
-
- if ( nDaug != 2 )
- return calBreitWignerBasic( maxMass );
-
- if ( _width < 0.00001 )
- return 1.0;
-
- //first figure out L - take the lowest allowed.
-
- EvtSpinType::spintype spinD1 = EvtPDL::getSpinType( dauId[0] );
- EvtSpinType::spintype spinD2 = EvtPDL::getSpinType( dauId[1] );
-
- int t1 = EvtSpinType::getSpin2( spinD1 );
- int t2 = EvtSpinType::getSpin2( spinD2 );
- int t3 = EvtSpinType::getSpin2( _spin );
-
- int Lmin = -10;
-
- // allow for special cases.
- if ( Lmin < -1 ) {
- //There are some things I don't know how to deal with
- if ( t3 > 4 )
- return calBreitWignerBasic( maxMass );
- if ( t1 > 4 )
- return calBreitWignerBasic( maxMass );
- if ( t2 > 4 )
- return calBreitWignerBasic( maxMass );
-
- //figure the min and max allowwed "spins" for the daughters state
- Lmin = std::max( t3 - t2 - t1, std::max( t2 - t3 - t1, t1 - t3 - t2 ) );
- if ( Lmin < 0 )
- Lmin = 0;
- assert( Lmin == 0 || Lmin == 2 || Lmin == 4 );
- }
-
- //double massD1=EvtPDL::getMeanMass(dauId[0]);
- //double massD2=EvtPDL::getMeanMass(dauId[1]);
- double massD1 = dauMasses[0];
- double massD2 = dauMasses[1];
-
- // I'm not sure how to define the vertex factor here - so retreat to nonRel code.
- if ( ( massD1 + massD2 ) > _mass )
- return calBreitWignerBasic( maxMass );
-
- //parent vertex factor not yet implemented
- double massOthD = -10.;
- double massParent = -10.;
- int birthl = -10;
- if ( othDaugId != EvtId{} ) {
- EvtSpinType::spintype spinOth = EvtPDL::getSpinType( othDaugId );
- EvtSpinType::spintype spinPar = EvtPDL::getSpinType( parId );
-
- int tt1 = EvtSpinType::getSpin2( spinOth );
- int tt2 = EvtSpinType::getSpin2( spinPar );
- int tt3 = EvtSpinType::getSpin2( _spin );
-
- //figure the min and max allowwed "spins" for the daughters state
- if ( ( tt1 <= 4 ) && ( tt2 <= 4 ) ) {
- birthl = std::max( tt3 - tt2 - tt1,
- std::max( tt2 - tt3 - tt1, tt1 - tt3 - tt2 ) );
- if ( birthl < 0 )
- birthl = 0;
-
- massOthD = EvtPDL::getMeanMass( othDaugId );
- massParent = EvtPDL::getMeanMass( parId );
- }
- }
- double massM = _massMax;
- if ( ( maxMass > -0.5 ) && ( maxMass < massM ) )
- massM = maxMass;
-
- //special case... if the parent mass is _fixed_ we can do a little better
- //and only for a two body decay as that seems to be where we have problems
-
- // Define relativistic propagator amplitude
-
- EvtTwoBodyVertex vd( massD1, massD2, _mass, Lmin / 2 );
- vd.set_f( _blatt );
- EvtPropBreitWignerRel bw( _mass, _width );
- EvtMassAmp amp( bw, vd );
- // if ( _fixMassForMax) amp.fixUpMassForMax();
- // else std::cout << "problem problem\n";
- if ( _includeDecayFact ) {
- amp.addDeathFact();
- amp.addDeathFactFF();
- }
- if ( massParent > -1. ) {
- if ( _includeBirthFact ) {
- EvtTwoBodyVertex vb( _mass, massOthD, massParent, birthl / 2 );
- amp.setBirthVtx( vb );
- amp.addBirthFact();
- amp.addBirthFactFF();
- }
- }
-
- EvtAmpPdf pdf( amp );
-
- double ampVal = sqrt( pdf.evaluate( point ) );
-
- return ampVal;
-}
-
-double EvtPropSLPole::calcMaxProb( EvtId parent, EvtId meson, EvtId lepton,
- EvtId nudaug, EvtSemiLeptonicFF* FormFactors )
-{
- //This routine takes the arguements parent, meson, and lepton
- //number, and a form factor model, and returns a maximum
- //probability for this semileptonic form factor model. A
- //brute force method is used. The 2D cos theta lepton and
- //q2 phase space is probed.
-
- //Start by declaring a particle at rest.
-
- //It only makes sense to have a scalar parent. For now.
- //This should be generalized later.
-
- EvtScalarParticle* scalar_part;
- EvtParticle* root_part;
-
- scalar_part = new EvtScalarParticle;
-
- //cludge to avoid generating random numbers!
- scalar_part->noLifeTime();
-
- EvtVector4R p_init;
-
- p_init.set( EvtPDL::getMass( parent ), 0.0, 0.0, 0.0 );
- scalar_part->init( parent, p_init );
- root_part = scalar_part;
- // root_part->set_type(EvtSpinType::SCALAR);
- root_part->setDiagonalSpinDensity();
-
- EvtParticle *daughter, *lep, *trino;
-
- EvtAmp amp;
-
- EvtId listdaug[3];
- listdaug[0] = meson;
- listdaug[1] = lepton;
- listdaug[2] = nudaug;
-
- amp.init( parent, 3, listdaug );
-
- root_part->makeDaughters( 3, listdaug );
- daughter = root_part->getDaug( 0 );
- lep = root_part->getDaug( 1 );
- trino = root_part->getDaug( 2 );
-
- EvtDecayBase* decayer;
- decayer = EvtDecayTable::getInstance()->getDecayFunc( daughter );
- if ( decayer ) {
- daughter->makeDaughters( decayer->nRealDaughters(), decayer->getDaugs() );
- for ( int ii = 0; ii < decayer->nRealDaughters(); ii++ ) {
- daughter->getDaug( ii )->setMass(
- EvtPDL::getMeanMass( daughter->getDaug( ii )->getId() ) );
- }
- }
-
- //cludge to avoid generating random numbers!
- daughter->noLifeTime();
- lep->noLifeTime();
- trino->noLifeTime();
-
- //Initial particle is unpolarized, well it is a scalar so it is
- //trivial
- EvtSpinDensity rho;
- rho.setDiag( root_part->getSpinStates() );
-
- double mass[3];
-
- double m = root_part->mass();
-
- EvtVector4R p4meson, p4lepton, p4nu, p4w;
- double q2max;
-
- double q2, elepton, plepton;
- int i, j;
- double erho, prho, costl;
-
- double maxfoundprob = 0.0;
- double prob = -10.0;
- int massiter;
-
- for ( massiter = 0; massiter < 3; massiter++ ) {
- mass[0] = EvtPDL::getMeanMass( meson );
- mass[1] = EvtPDL::getMeanMass( lepton );
- mass[2] = EvtPDL::getMeanMass( nudaug );
- if ( massiter == 1 ) {
- mass[0] = EvtPDL::getMinMass( meson );
- }
- if ( massiter == 2 ) {
- mass[0] = EvtPDL::getMaxMass( meson );
- if ( ( mass[0] + mass[1] + mass[2] ) > m )
- mass[0] = m - mass[1] - mass[2] - 0.00001;
- }
-
- q2max = ( m - mass[0] ) * ( m - mass[0] );
-
- //loop over q2
-
- for ( i = 0; i < 25; i++ ) {
- q2 = ( ( i + 0.5 ) * q2max ) / 25.0;
-
- erho = ( m * m + mass[0] * mass[0] - q2 ) / ( 2.0 * m );
-
- prho = sqrt( erho * erho - mass[0] * mass[0] );
-
- p4meson.set( erho, 0.0, 0.0, -1.0 * prho );
- p4w.set( m - erho, 0.0, 0.0, prho );
-
- //This is in the W rest frame
- elepton = ( q2 + mass[1] * mass[1] ) / ( 2.0 * sqrt( q2 ) );
- plepton = sqrt( elepton * elepton - mass[1] * mass[1] );
-
- double probctl[3];
-
- for ( j = 0; j < 3; j++ ) {
- costl = 0.99 * ( j - 1.0 );
-
- //These are in the W rest frame. Need to boost out into
- //the B frame.
- p4lepton.set( elepton, 0.0, plepton * sqrt( 1.0 - costl * costl ),
- plepton * costl );
- p4nu.set( plepton, 0.0,
- -1.0 * plepton * sqrt( 1.0 - costl * costl ),
- -1.0 * plepton * costl );
-
- EvtVector4R boost( ( m - erho ), 0.0, 0.0, 1.0 * prho );
- p4lepton = boostTo( p4lepton, boost );
- p4nu = boostTo( p4nu, boost );
-
- //Now initialize the daughters...
-
- daughter->init( meson, p4meson );
- lep->init( lepton, p4lepton );
- trino->init( nudaug, p4nu );
-
- calcamp->CalcAmp( root_part, amp, FormFactors );
-
- EvtPoint1D point( mass[0] );
-
- double meson_BWAmp = calBreitWigner( daughter, point );
-
- int list[2];
- list[0] = 0;
- list[1] = 0;
- amp.vertex( 0, 0, amp.getAmp( list ) * meson_BWAmp );
- list[0] = 0;
- list[1] = 1;
- amp.vertex( 0, 1, amp.getAmp( list ) * meson_BWAmp );
-
- list[0] = 1;
- list[1] = 0;
- amp.vertex( 1, 0, amp.getAmp( list ) * meson_BWAmp );
- list[0] = 1;
- list[1] = 1;
- amp.vertex( 1, 1, amp.getAmp( list ) * meson_BWAmp );
-
- list[0] = 2;
- list[1] = 0;
- amp.vertex( 2, 0, amp.getAmp( list ) * meson_BWAmp );
- list[0] = 2;
- list[1] = 1;
- amp.vertex( 2, 1, amp.getAmp( list ) * meson_BWAmp );
-
- //Now find the probability at this q2 and cos theta lepton point
- //and compare to maxfoundprob.
-
- //Do a little magic to get the probability!!
- prob = rho.normalizedProb( amp.getSpinDensity() );
-
- probctl[j] = prob;
- }
-
- //probclt contains prob at ctl=-1,0,1.
- //prob=a+b*ctl+c*ctl^2
-
- double a = probctl[1];
- double b = 0.5 * ( probctl[2] - probctl[0] );
- double c = 0.5 * ( probctl[2] + probctl[0] ) - probctl[1];
-
- prob = probctl[0];
- if ( probctl[1] > prob )
- prob = probctl[1];
- if ( probctl[2] > prob )
- prob = probctl[2];
-
- if ( fabs( c ) > 1e-20 ) {
- double ctlx = -0.5 * b / c;
- if ( fabs( ctlx ) < 1.0 ) {
- double probtmp = a + b * ctlx + c * ctlx * ctlx;
- if ( probtmp > prob )
- prob = probtmp;
- }
- }
-
- //EvtGenReport(EVTGEN_DEBUG,"EvtGen") << "prob,probctl:"< maxfoundprob ) {
- maxfoundprob = prob;
- }
- }
- if ( EvtPDL::getWidth( meson ) <= 0.0 ) {
- //if the particle is narrow dont bother with changing the mass.
- massiter = 4;
- }
- }
- root_part->deleteTree();
-
- maxfoundprob *= 1.1;
- return maxfoundprob;
-}
diff --git a/src/EvtGenModels/EvtVPHOtoV.cpp b/src/EvtGenModels/EvtVPHOtoV.cpp
deleted file mode 100644
--- a/src/EvtGenModels/EvtVPHOtoV.cpp
+++ /dev/null
@@ -1,82 +0,0 @@
-
-/***********************************************************************
-* Copyright 1998-2020 CERN for the benefit of the EvtGen authors *
-* *
-* This file is part of EvtGen. *
-* *
-* EvtGen is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU General Public License as published by *
-* the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* EvtGen is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU General Public License for more details. *
-* *
-* You should have received a copy of the GNU General Public License *
-* along with EvtGen. If not, see . *
-***********************************************************************/
-
-#include "EvtGenModels/EvtVPHOtoV.hh"
-
-#include "EvtGenBase/EvtGenKine.hh"
-#include "EvtGenBase/EvtPDL.hh"
-#include "EvtGenBase/EvtParticle.hh"
-#include "EvtGenBase/EvtReport.hh"
-#include "EvtGenBase/EvtVector4C.hh"
-#include "EvtGenBase/EvtVector4R.hh"
-
-#include
-#include
-
-std::string EvtVPHOtoV::getName()
-{
- return "VPHOTOV";
-}
-
-EvtDecayBase* EvtVPHOtoV::clone()
-{
- return new EvtVPHOtoV;
-}
-
-void EvtVPHOtoV::init()
-{
- // check that there are 0 arguments
- checkNArg( 0 );
-
- // check that there are 1 daughters
- checkNDaug( 1 );
-
- // check the parent and daughter spins
- checkSpinParent( EvtSpinType::VECTOR );
- checkSpinDaughter( 0, EvtSpinType::VECTOR );
-}
-
-void EvtVPHOtoV::initProbMax()
-{
- setProbMax( 1.0 );
-}
-
-void EvtVPHOtoV::decay( EvtParticle* p )
-{
- p->initializePhaseSpace( getNDaug(), getDaugs() );
-
- EvtParticle* d = p->getDaug( 0 );
-
- d->setP4( p->getP4Restframe() );
-
- vertex( 0, 0, p->eps( 0 ) * p->epsParent( 0 ).conj() );
- vertex( 1, 0, p->eps( 1 ) * p->epsParent( 0 ).conj() );
- vertex( 2, 0, p->eps( 2 ) * p->epsParent( 0 ).conj() );
-
- vertex( 0, 1, p->eps( 0 ) * p->epsParent( 1 ).conj() );
- vertex( 1, 1, p->eps( 1 ) * p->epsParent( 1 ).conj() );
- vertex( 2, 1, p->eps( 2 ) * p->epsParent( 1 ).conj() );
-
- vertex( 0, 2, p->eps( 0 ) * p->epsParent( 2 ).conj() );
- vertex( 1, 2, p->eps( 1 ) * p->epsParent( 2 ).conj() );
- vertex( 2, 2, p->eps( 2 ) * p->epsParent( 2 ).conj() );
-
- return;
-}
diff --git a/src/EvtGenModels/EvtVPHOtoVISR.cpp b/src/EvtGenModels/EvtVPHOtoVISR.cpp
deleted file mode 100644
--- a/src/EvtGenModels/EvtVPHOtoVISR.cpp
+++ /dev/null
@@ -1,194 +0,0 @@
-
-/***********************************************************************
-* Copyright 1998-2020 CERN for the benefit of the EvtGen authors *
-* *
-* This file is part of EvtGen. *
-* *
-* EvtGen is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU General Public License as published by *
-* the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* EvtGen is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU General Public License for more details. *
-* *
-* You should have received a copy of the GNU General Public License *
-* along with EvtGen. If not, see . *
-***********************************************************************/
-
-#include "EvtGenModels/EvtVPHOtoVISR.hh"
-
-#include "EvtGenBase/EvtGenKine.hh"
-#include "EvtGenBase/EvtPDL.hh"
-#include "EvtGenBase/EvtParticle.hh"
-#include "EvtGenBase/EvtRandom.hh"
-#include "EvtGenBase/EvtReport.hh"
-#include "EvtGenBase/EvtVector4C.hh"
-#include "EvtGenBase/EvtVector4R.hh"
-
-#include
-#include
-
-std::string EvtVPHOtoVISR::getName()
-{
- return "VPHOTOVISR";
-}
-
-EvtDecayBase* EvtVPHOtoVISR::clone()
-{
- return new EvtVPHOtoVISR;
-}
-
-void EvtVPHOtoVISR::init()
-{
- // check that there are 0 or 2 arguments
- checkNArg( 0, 2 );
-
- // check that there are 2 daughters
- checkNDaug( 2 );
-
- // check the parent and daughter spins
- checkSpinParent( EvtSpinType::VECTOR );
- checkSpinDaughter( 0, EvtSpinType::VECTOR );
- checkSpinDaughter( 1, EvtSpinType::PHOTON );
-}
-
-void EvtVPHOtoVISR::initProbMax()
-{
- //setProbMax(100000.0);
-}
-
-void EvtVPHOtoVISR::decay( EvtParticle* p )
-{
- //take photon along z-axis, either forward or backward.
- //Implement this as generating the photon momentum along
- //the z-axis uniformly
-
- double w = p->mass();
- double s = w * w;
-
- double L = 2.0 * log( w / 0.000511 );
- double alpha = 1 / 137.0;
- double beta = ( L - 1 ) * 2.0 * alpha / EvtConst::pi;
-
- //This uses the fact that there is a daughter of the
- //psi(3770)
- assert( p->getDaug( 0 )->getDaug( 0 ) != 0 );
- double md = EvtPDL::getMeanMass( p->getDaug( 0 )->getDaug( 0 )->getId() );
-
- static double mD0 = EvtPDL::getMeanMass( EvtPDL::getId( "D0" ) );
- static double mDp = EvtPDL::getMeanMass( EvtPDL::getId( "D+" ) );
-
- double pgmax = ( s - 4.0 * md * md ) / ( 2.0 * w );
-
- assert( pgmax > 0.0 );
-
- double pgz = 0.99 * pgmax * exp( log( EvtRandom::Flat( 1.0 ) ) / beta );
-
- if ( EvtRandom::Flat( 1.0 ) < 0.5 )
- pgz = -pgz;
-
- double k = fabs( pgz );
-
- EvtVector4R p4g( k, 0.0, 0.0, pgz );
-
- EvtVector4R p4res = p->getP4Restframe() - p4g;
-
- double mres = p4res.mass();
-
- double ed = mres / 2.0;
-
- assert( ed > md );
-
- double pd = sqrt( ed * ed - md * md );
-
- //std::cout << "k, mres, w, md, ed, pd:"<getDaug( 0 )->init( getDaug( 0 ), p4res );
- p->getDaug( 1 )->init( getDaug( 1 ), p4g );
-
- double sigma =
- beta * pow( 2 / w, beta ) *
- ( 1 + alpha * ( 1.5 * L - 2.0 + EvtConst::pi * EvtConst::pi / 3.0 ) /
- EvtConst::pi );
-
- double m = EvtPDL::getMeanMass( p->getDaug( 0 )->getId() );
- double Gamma = EvtPDL::getWidth( p->getDaug( 0 )->getId() );
-
- //mres is the energy of the psi(3770)
-
- double p0 = 0.0;
- if ( ed > mD0 )
- p0 = sqrt( ed * ed - mD0 * mD0 );
- double pp = 0.0;
- if ( ed > mDp )
- pp = sqrt( ed * ed - mDp * mDp );
-
- double p0norm = sqrt( 0.25 * m * m - mD0 * mD0 );
- double ppnorm = sqrt( 0.25 * m * m - mDp * mDp );
-
- double r0 = 12.7;
- double rp = 12.7;
-
- if ( getNArg() == 2 ) {
- r0 = getArg( 0 );
- rp = getArg( 1 );
- }
-
- double GammaTot =
- Gamma *
- ( pp * pp * pp / ( 1 + pp * pp * rp * rp ) +
- p0 * p0 * p0 / ( 1 + p0 * p0 * r0 * r0 ) ) /
- ( ppnorm * ppnorm * ppnorm / ( 1 + ppnorm * ppnorm * rp * rp ) +
- p0norm * p0norm * p0norm / ( 1 + p0norm * p0norm * r0 * r0 ) );
-
- sigma *= pd * pd * pd /
- ( ( mres - m ) * ( mres - m ) + 0.25 * GammaTot * GammaTot );
-
- assert( sigma > 0.0 );
-
- static double sigmax = sigma;
-
- if ( sigma > sigmax ) {
- sigmax = sigma;
- }
-
- static int count = 0;
-
- count++;
-
- //if (count%10000==0){
- // std::cout << "sigma :"<eps( 0 ) * p->epsParent( 0 ).conj() );
- vertex( 1, 0, 0, norm * p->eps( 1 ) * p->epsParent( 0 ).conj() );
- vertex( 2, 0, 0, norm * p->eps( 2 ) * p->epsParent( 0 ).conj() );
-
- vertex( 0, 1, 0, norm * p->eps( 0 ) * p->epsParent( 1 ).conj() );
- vertex( 1, 1, 0, norm * p->eps( 1 ) * p->epsParent( 1 ).conj() );
- vertex( 2, 1, 0, norm * p->eps( 2 ) * p->epsParent( 1 ).conj() );
-
- vertex( 0, 2, 0, norm * p->eps( 0 ) * p->epsParent( 2 ).conj() );
- vertex( 1, 2, 0, norm * p->eps( 1 ) * p->epsParent( 2 ).conj() );
- vertex( 2, 2, 0, norm * p->eps( 2 ) * p->epsParent( 2 ).conj() );
-
- vertex( 0, 0, 1, norm * p->eps( 0 ) * p->epsParent( 0 ).conj() );
- vertex( 1, 0, 1, norm * p->eps( 1 ) * p->epsParent( 0 ).conj() );
- vertex( 2, 0, 1, norm * p->eps( 2 ) * p->epsParent( 0 ).conj() );
-
- vertex( 0, 1, 1, norm * p->eps( 0 ) * p->epsParent( 1 ).conj() );
- vertex( 1, 1, 1, norm * p->eps( 1 ) * p->epsParent( 1 ).conj() );
- vertex( 2, 1, 1, norm * p->eps( 2 ) * p->epsParent( 1 ).conj() );
-
- vertex( 0, 2, 1, norm * p->eps( 0 ) * p->epsParent( 2 ).conj() );
- vertex( 1, 2, 1, norm * p->eps( 1 ) * p->epsParent( 2 ).conj() );
- vertex( 2, 2, 1, norm * p->eps( 2 ) * p->epsParent( 2 ).conj() );
-
- return;
-}
diff --git a/src/EvtGenModels/EvtVubAC.cpp b/src/EvtGenModels/EvtVubAC.cpp
deleted file mode 100644
--- a/src/EvtGenModels/EvtVubAC.cpp
+++ /dev/null
@@ -1,63387 +0,0 @@
-
-/***********************************************************************
-* Copyright 1998-2020 CERN for the benefit of the EvtGen authors *
-* *
-* This file is part of EvtGen. *
-* *
-* EvtGen is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU General Public License as published by *
-* the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* EvtGen is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU General Public License for more details. *
-* *
-* You should have received a copy of the GNU General Public License *
-* along with EvtGen. If not, see . *
-***********************************************************************/
-
-#include "EvtGenModels/EvtVubAC.hh"
-
-#include "EvtGenBase/EvtGenKine.hh"
-#include "EvtGenBase/EvtPDL.hh"
-#include "EvtGenBase/EvtParticle.hh"
-#include "EvtGenBase/EvtPatches.hh"
-#include "EvtGenBase/EvtRandom.hh"
-#include "EvtGenBase/EvtReport.hh"
-#include "EvtGenBase/EvtVector4R.hh"
-
-#include "EvtGenModels/EvtPFermi.hh"
-
-#include
-#include
-
-using std::cout;
-using std::endl;
-
-std::string EvtVubAC::getName()
-{
- return "VUB_AC";
-}
-
-EvtDecayBase* EvtVubAC::clone()
-{
- return new EvtVubAC;
-}
-
-void EvtVubAC::init()
-{
- // get parameters (declared in the header file)
-
- // B Meson mass
- mB = 5.2792;
-
- // Perturbative quantities
- CF = 4.0 / 3.0;
- CA = 3.0;
- double nf = 3.0;
-
- //Constants
- alphaSmZ = getArg( 0 );
- c = 0.04;
- q = 0.01;
- k = 0.02;
-
- beta0 = ( 11.0 / 3.0 * CA - 2.0 / 3.0 * nf ) / ( 4 * M_PI );
- alphaSmB = 0.22 * alphaSmZ / 0.1189;
-
- gvars.push_back( 0.0 ); // 0
- gvars.push_back( 0.0 ); // 1
- gvars.push_back( 0.0 ); // 2
- gvars.push_back( alphaSmB ); // 3
- gvars.push_back( alphaSmZ ); // 4
- gvars.push_back( mB ); // 5
- gvars.push_back( beta0 ); // 6
- gvars.push_back( c ); // 7
- gvars.push_back( q ); // 8
- gvars.push_back( k ); // 9
-
- // check that there are 3 daughters and 1 argument
- checkNDaug( 3 );
- checkNArg( 1 );
-}
-
-void EvtVubAC::initProbMax()
-{
- noProbMax();
-}
-
-void EvtVubAC::decay( EvtParticle* Bmeson )
-{
- int j;
-
- EvtParticle *xuhad, *lepton, *neutrino;
- EvtVector4R p4;
- double u, w, xb, Pp, Pm, pdf, ml, PX( 0.0 ), EX( 0.0 ), sh( 0.0 ), El( 0.0 );
-
- Bmeson->initializePhaseSpace( getNDaug(), getDaugs() );
-
- xuhad = Bmeson->getDaug( 0 );
- lepton = Bmeson->getDaug( 1 );
- neutrino = Bmeson->getDaug( 2 );
-
- ml = lepton->mass();
-
- bool tryit = true;
- while ( tryit ) {
- double mpi = 0.14;
- u = EvtRandom::Flat( 0.0, 1.0 );
- w = EvtRandom::Flat( 0.0, 2.0 );
- xb = EvtRandom::Flat( 0.0, 1.0 );
-
- EX = w * mB / 2.0;
- PX = EX * ( 1.0 - u ) / ( u + 1.0 );
- El = ( 1.0 - xb ) * mB / 2.0;
- Pp = ( EX - PX );
- Pm = ( EX + PX );
- sh = Pm * Pp;
-
- if ( ( ( w * u ) / ( 1.0 + u ) < xb ) && ( xb < w / ( 1.0 + u ) ) &&
- ( max( 0, w - 1.0 ) < u ) && ( sh > 4.0 * mpi * mpi ) &&
- ( El > ml ) ) {
- pdf = rate( u, w, xb );
- double testRan = EvtRandom::Flat( 0.0, 24.2 );
- if ( pdf >= testRan )
- tryit = false;
- }
- }
-
- // o.k. we have the three kinemtic variables
- // now calculate a flat cos Theta_H [-1,1] distribution of the
- // hadron flight direction w.r.t the B flight direction
- // because the B is a scalar and should decay isotropic.
- // Then chose a flat Phi_H [0,2Pi] w.r.t the B flight direction
- // and and a flat Phi_L [0,2Pi] in the W restframe w.r.t the
- // W flight direction.
-
- double ctH = EvtRandom::Flat( -1, 1 );
- double phH = EvtRandom::Flat( 0, 2 * M_PI );
- double phL = EvtRandom::Flat( 0, 2 * M_PI );
-
- // now compute the four vectors in the B Meson restframe
-
- double ptmp, sttmp;
- // calculate the hadron 4 vector in the B Meson restframe
-
- sttmp = sqrt( 1 - ctH * ctH );
- ptmp = sqrt( EX * EX - sh );
- double pHB[4] = { EX, ptmp * sttmp * cos( phH ), ptmp * sttmp * sin( phH ),
- ptmp * ctH };
- p4.set( pHB[0], pHB[1], pHB[2], pHB[3] );
- xuhad->init( getDaug( 0 ), p4 );
-
- // calculate the W 4 vector in the B Meson restrframe
-
- double apWB = ptmp;
- double pWB[4] = { mB - EX, -pHB[1], -pHB[2], -pHB[3] };
-
- // first go in the W restframe and calculate the lepton and
- // the neutrino in the W frame
-
- double mW2 = mB * mB + sh - 2 * mB * EX;
- double beta = ptmp / pWB[0];
- double gamma = pWB[0] / sqrt( mW2 );
-
- double pLW[4];
-
- ptmp = ( mW2 - ml * ml ) / 2 / sqrt( mW2 );
- pLW[0] = sqrt( ml * ml + ptmp * ptmp );
-
- double ctL = ( El - gamma * pLW[0] ) / beta / gamma / ptmp;
- if ( ctL < -1 )
- ctL = -1;
- if ( ctL > 1 )
- ctL = 1;
- sttmp = sqrt( 1 - ctL * ctL );
-
- // eX' = eZ x eW
- double xW[3] = { -pWB[2], pWB[1], 0 };
- // eZ' = eW
- double zW[3] = { pWB[1] / apWB, pWB[2] / apWB, pWB[3] / apWB };
-
- double lx = sqrt( xW[0] * xW[0] + xW[1] * xW[1] );
- for ( j = 0; j < 2; j++ )
- xW[j] /= lx;
-
- // eY' = eZ' x eX'
- double yW[3] = { -pWB[1] * pWB[3], -pWB[2] * pWB[3],
- pWB[1] * pWB[1] + pWB[2] * pWB[2] };
- double ly = sqrt( yW[0] * yW[0] + yW[1] * yW[1] + yW[2] * yW[2] );
- for ( j = 0; j < 3; j++ )
- yW[j] /= ly;
-
- // p_lep = |p_lep| * ( sin(Theta) * cos(Phi) * eX'
- // + sin(Theta) * sin(Phi) * eY'
- // + cos(Theta) * eZ')
- for ( j = 0; j < 3; j++ )
- pLW[j + 1] = sttmp * cos( phL ) * ptmp * xW[j] +
- sttmp * sin( phL ) * ptmp * yW[j] + ctL * ptmp * zW[j];
-
- double apLW = ptmp;
-
- // boost them back in the B Meson restframe
-
- double appLB = beta * gamma * pLW[0] + gamma * ctL * apLW;
-
- ptmp = sqrt( El * El - ml * ml );
- double ctLL = appLB / ptmp;
-
- if ( ctLL > 1 )
- ctLL = 1;
- if ( ctLL < -1 )
- ctLL = -1;
-
- double pLB[4] = { El, 0, 0, 0 };
- double pNB[4] = { pWB[0] - El, 0, 0, 0 };
-
- for ( j = 1; j < 4; j++ ) {
- pLB[j] = pLW[j] + ( ctLL * ptmp - ctL * apLW ) / apWB * pWB[j];
- pNB[j] = pWB[j] - pLB[j];
- }
-
- p4.set( pLB[0], pLB[1], pLB[2], pLB[3] );
- lepton->init( getDaug( 1 ), p4 );
-
- p4.set( pNB[0], pNB[1], pNB[2], pNB[3] );
- neutrino->init( getDaug( 2 ), p4 );
-
- return;
-}
-
-double EvtVubAC::rate( double u, double w, double xb )
-{
- std::vector vars( 11 );
- vars[0] = u;
- vars[1] = w;
- vars[2] = xb;
- double dGam = Coeff( u, w, xb ) * Sigma( wreg( w / ( 1 + u ) ), ularge( u ) ) +
- d( u, w, xb );
-
- return dGam;
-}
-
-double EvtVubAC::PolyLog( double v, double z )
-{
- if ( z >= 1 )
- cout << "Error in EvtVubAC: 2nd argument to PolyLog is >= 1." << endl;
-
- double sum = 0.0;
- for ( int k = 1; k < 101; k++ ) {
- sum = sum + pow( z, k ) / pow( k, v );
- }
- return sum;
-}
-
-double EvtVubAC::max( double ub, double lb )
-{
- if ( ub > lb )
- return ub;
- else
- return lb;
-}
-
-double EvtVubAC::wreg( double w )
-{
- std::vector vars( 11 );
- vars[1] = w;
- for ( int j = 3; j < 11; j++ ) {
- vars[j] = gvars[j];
- }
- double K = ( 1 + c ) / ( 1 + c + pow( c, 2 ) );
- return K * ( c + pow( w, 2 ) / ( w + c ) );
-}
-
-double EvtVubAC::ureg( double u )
-{
- std::vector vars( 11 );
- vars[0] = u;
- for ( int j = 3; j < 11; j++ ) {
- vars[j] = gvars[j];
- }
- return q + u * u / ( u + q );
-}
-
-double EvtVubAC::ularge( double u )
-{
- std::vector vars( 11 );
- vars[0] = u;
- for ( int j = 3; j < 11; j++ ) {
- vars[j] = gvars[j];
- }
- return u - k * u * u;
-}
-
-double EvtVubAC::alphaS( double Q )
-{
- std::vector vars( 11 );
- for ( int j = 3; j < 11; j++ ) {
- vars[j] = gvars[j];
- }
-
- double a = 1.0 / ( log( Q * Q / FindRoot( alphaSmZ ) ) );
- double b = FindRoot( alphaSmZ ) / ( FindRoot( alphaSmZ ) - Q * Q );
- double ans = 1.0 / beta0 * ( a + b );
-
- return ans;
-}
-
-double EvtVubAC::Coeff( double u, double w, double xb )
-{
- std::vector vars( 11 );
- vars[0] = u;
- vars[1] = w;
- vars[2] = xb;
-
- for ( int j = 3; j < 11; j++ ) {
- vars[j] = gvars[j];
- }
-
- double coeff = Coeff0( w, xb ) +
- alphaS( mB * wreg( w / ( 1 + u ) ) ) * Coeff1( w, xb );
- return coeff;
-}
-
-double EvtVubAC::Coeff0( double w, double xb )
-{
- std::vector vars( 11 );
- vars[1] = w;
- vars[2] = xb;
- for ( int j = 3; j < 11; j++ ) {
- vars[j] = gvars[j];
- }
- return 12.0 * ( 1 + xb - w ) * ( w - xb );
-}
-
-double EvtVubAC::Coeff1( double w, double xb )
-{
- std::vector vars( 11 );
- vars[1] = w;
- vars[2] = xb;
- for ( int j = 3; j < 11; j++ ) {
- vars[j] = gvars[j];
- }
- double a = 1 + xb - w;
- double b = -PolyLog( 2, 1 - w ) - 3.0 / 2.0 * log( wreg( w ) ) -
- 1.0 / 2.0 * w * f( w ) - 35.0 / 8.0 + ( M_PI * M_PI ) / 6.0;
- double c = 1.0 / 2.0 * xb * f( wreg( w ) );
-
- double ans = 12.0 * CF / M_PI * ( w - xb ) * ( ( a * b ) + c );
-
- return ans;
-}
-
-double EvtVubAC::d( double u, double w, double xb )
-{
- std::vector vars( 11 );
- vars[0] = u;
- vars[1] = w;
- vars[2] = xb;
- for ( int j = 3; j < 11; j++ ) {
- vars[j] = gvars[j];
- }
-
- return alphaS( mB * wreg( w / ( 1.0 + u ) ) ) * CF / M_PI * d1( u, w, xb );
-}
-
-double EvtVubAC::d1( double u, double w, double xb )
-{
- std::vector