diff --git a/Decay/FormFactors/KMatrix.h b/Decay/FormFactors/KMatrix.h --- a/Decay/FormFactors/KMatrix.h +++ b/Decay/FormFactors/KMatrix.h @@ -1,113 +1,115 @@ // -*- C++ -*- #ifndef Herwig_KMatrix_H #define Herwig_KMatrix_H // // This is the declaration of the KMatrix class. // #include "ThePEG/Interface/Interfaced.h" #include "Herwig/Decay/IsoSpin.h" #include "KMatrix.fh" #include <boost/numeric/ublas/matrix.hpp> namespace Herwig { using namespace ThePEG; /** * The KMatrix class is a base class for the implementation of * K-matrix parameterizations in Herwig * * @see \ref KMatrixInterfaces "The interfaces" * defined for KMatrix. */ class KMatrix: public Interfaced { public: /** * Enum for the possible channels */ enum Channels { PiPi, KPi, KEta, KEtaPrime}; public: /** * The default constructor. */ KMatrix(FlavourInfo flavour=FlavourInfo(), vector<Channels> channels=vector<Channels>(), vector<Energy2> poles=vector<Energy2>()); /** * The quantum numbers of the K-matrix */ FlavourInfo flavourInfo() const { return flavour_; }; /** * Compute the K-matrix for a given scale + * @param s The scale + * @param Whether ot not to multiply by \f$\prod_i(1-s/m^2_i\f$ to regularise the poles */ - virtual boost::numeric::ublas::matrix<double> K(Energy2 s) = 0; + virtual boost::numeric::ublas::matrix<double> K(Energy2 s, bool multiplyByPoles=false) = 0; /** * Vector containing the locations of the poles */ const vector<Energy2> & poles() const {return poles_;} public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * The standard Init function used to initialize the interfaces. * Called exactly once for each class by the class description system * before the main function starts or * when this class is dynamically loaded. */ static void Init(); private: /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ KMatrix & operator=(const KMatrix &); private: /** * The quantum numbers for the K-matrix */ FlavourInfo flavour_; /** * The mesons in the various channels */ vector<Channels> channels_; /** * The positions of the poles */ vector<Energy2> poles_; }; } #endif /* Herwig_KMatrix_H */ diff --git a/Decay/FormFactors/KPiIHalfFOCUSKMatrix.cc b/Decay/FormFactors/KPiIHalfFOCUSKMatrix.cc --- a/Decay/FormFactors/KPiIHalfFOCUSKMatrix.cc +++ b/Decay/FormFactors/KPiIHalfFOCUSKMatrix.cc @@ -1,98 +1,98 @@ // -*- C++ -*- // // This is the implementation of the non-inlined, non-templated member // functions of the KPiIHalfFOCUSKMatrix class. // #include "KPiIHalfFOCUSKMatrix.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/EventRecord/Particle.h" #include "ThePEG/Repository/UseRandom.h" #include "ThePEG/Repository/EventGenerator.h" #include "ThePEG/Utilities/DescribeClass.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" using namespace Herwig; KPiIHalfFOCUSKMatrix::KPiIHalfFOCUSKMatrix() : KMatrix(FlavourInfo(IsoSpin::IHalf,IsoSpin::I3Unknown, Strangeness::PlusOne,Charm::Zero, Beauty::Zero), vector<Channels>({KMatrix::KPi,KMatrix::KEtaPrime}), vector<Energy2>({1.7919*GeV2})), C11_({0.79299,-0.15099,0.00811}), C22_({0.15040,-0.038266,0.0022596}), C12_({0.17054,-0.0219,0.00085655}), g_({0.31072*GeV,-0.02323*GeV}), sHalf_(0.23*GeV2) {} IBPtr KPiIHalfFOCUSKMatrix::clone() const { return new_ptr(*this); } IBPtr KPiIHalfFOCUSKMatrix::fullclone() const { return new_ptr(*this); } void KPiIHalfFOCUSKMatrix::persistentOutput(PersistentOStream & os) const { os << C11_ << C22_ << C12_ << ounit(sHalf_,GeV2) << ounit(sNorm_,GeV2); } void KPiIHalfFOCUSKMatrix::persistentInput(PersistentIStream & is, int) { is >> C11_ >> C22_ >> C12_ >> iunit(sHalf_,GeV2) >> iunit(sNorm_,GeV2); } // The following static variable is needed for the type // description system in ThePEG. DescribeClass<KPiIHalfFOCUSKMatrix,KMatrix> describeHerwigKPiIHalfFOCUSKMatrix("Herwig::KPiIHalfFOCUSKMatrix", "HwFormFactors.so"); void KPiIHalfFOCUSKMatrix::Init() { static ClassDocumentation<KPiIHalfFOCUSKMatrix> documentation ("The KPiIHalfFOCUSKMatrix class implements the K-matrix fit of " "the FOCUS collaboration (Phys.Lett. B653 (2007) 1-11) for the I=1/2 " "component of the Kpi K-matrix.", "The KPiIHalfFOCUSKMatrix class implements the K-matrix fit of " "the FOCUS collaboration \\cite{Pennington:2007se} for the $I=1/2$ " "component of the $K\\pi$ K-matrix.", "\\bibitem{Pennington:2007se}" "J.~M.~Link {\\it et al.} [FOCUS Collaboration]," "%``Dalitz plot analysis of the $D^{+} \\to K^{-} \\pi^{+} \\pi^{+}$ decay in the FOCUS experiment,''" "Phys.\\ Lett.\\ B {\\bf 653} (2007) 1" "doi:10.1016/j.physletb.2007.06.070" "[arXiv:0705.2248 [hep-ex]]." "%%CITATION = doi:10.1016/j.physletb.2007.06.070;%%" "%79 citations counted in INSPIRE as of 14 Jan 2020"); } void KPiIHalfFOCUSKMatrix::doinit() { KMatrix::doinit(); Energy mK = getParticleData(ParticleID::Kplus)->mass(); Energy mpi= getParticleData(ParticleID::piplus)->mass(); sNorm_ = sqr(mK)+sqr(mpi); } -boost::numeric::ublas::matrix<double> KPiIHalfFOCUSKMatrix::K(Energy2 s) { +boost::numeric::ublas::matrix<double> KPiIHalfFOCUSKMatrix::K(Energy2 s, bool includePoles) { double st = s/sNorm_-1.; double pre = (s-sHalf_)/sNorm_; - Energy2 denom = poles()[0]-s; + Energy2 denom = !includePoles ? poles()[0]-s : poles()[0]; boost::numeric::ublas::matrix<double> output = boost::numeric::ublas::zero_matrix<double>(2,2); output(0,0) = g_[0]*g_[0]/denom; output(0,1) = g_[0]*g_[1]/denom; output(1,1) = g_[1]*g_[1]/denom; - double param=1.; + double param = !includePoles ? 1. : (1.-s/poles()[0]); for(unsigned int ix=0;ix<C11_.size();++ix) { output(0,0) += C11_[ix]*param; - output(1,1)+= C22_[ix]*param; - output(0,1)+= C12_[ix]*param; + output(1,1) += C22_[ix]*param; + output(0,1) += C12_[ix]*param; param *= st; } output(1,0) = output(0,1); output *= pre; return output; } diff --git a/Decay/FormFactors/KPiIHalfFOCUSKMatrix.h b/Decay/FormFactors/KPiIHalfFOCUSKMatrix.h --- a/Decay/FormFactors/KPiIHalfFOCUSKMatrix.h +++ b/Decay/FormFactors/KPiIHalfFOCUSKMatrix.h @@ -1,123 +1,125 @@ // -*- C++ -*- #ifndef Herwig_KPiIHalfFOCUSKMatrix_H #define Herwig_KPiIHalfFOCUSKMatrix_H // // This is the declaration of the KPiIHalfFOCUSKMatrix class. // #include "KMatrix.h" namespace Herwig { using namespace ThePEG; /** * The KPiIHalfFOCUSKMatrix class implements the K-matrix fit of * the FOCUS collaboration (Phys.Lett. B653 (2007) 1-11) for the \f$I=\frac12\f$ * component of the \f$K\pi\f$ K-matrix. * * @see \ref KPiIHalfFOCUSKMatrixInterfaces "The interfaces" * defined for KPiIHalfFOCUSKMatrix. */ class KPiIHalfFOCUSKMatrix: public KMatrix { public: /** * The default constructor. */ KPiIHalfFOCUSKMatrix(); /** * Compute the K-matrix for a given scale + * @param s The scale + * @param Whether or not to multiply by \f$\prod_i(1-s/m^2_i\f$ to regularise the poles */ - virtual boost::numeric::ublas::matrix<double> K(Energy2 s); + virtual boost::numeric::ublas::matrix<double> K(Energy2 s, bool multiplyByPoles=false); public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * The standard Init function used to initialize the interfaces. * Called exactly once for each class by the class description system * before the main function starts or * when this class is dynamically loaded. */ static void Init(); protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const; //@} protected: /** @name Standard Interfaced functions. */ //@{ /** * Initialize this object after the setup phase before saving an * EventGenerator to disk. * @throws InitException if object could not be initialized properly. */ virtual void doinit(); //@} private: /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ KPiIHalfFOCUSKMatrix & operator=(const KPiIHalfFOCUSKMatrix &); private: /** * Constants \f$C_{ij,k}\f$ from Eqn 8 */ vector<double> C11_,C22_,C12_; /** * Couplings for the resonances */ vector<Energy> g_; /** * Adler zero position */ Energy2 sHalf_; /** * Normalisation scale */ Energy2 sNorm_; }; } #endif /* Herwig_KPiIHalfFOCUSKMatrix_H */ diff --git a/Decay/FormFactors/KPiIThreeHalfFOCUSKMatrix.cc b/Decay/FormFactors/KPiIThreeHalfFOCUSKMatrix.cc --- a/Decay/FormFactors/KPiIThreeHalfFOCUSKMatrix.cc +++ b/Decay/FormFactors/KPiIThreeHalfFOCUSKMatrix.cc @@ -1,86 +1,86 @@ // -*- C++ -*- // // This is the implementation of the non-inlined, non-templated member // functions of the KPiIThreeHalfFOCUSKMatrix class. // #include "KPiIThreeHalfFOCUSKMatrix.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/EventRecord/Particle.h" #include "ThePEG/Repository/UseRandom.h" #include "ThePEG/Repository/EventGenerator.h" #include "ThePEG/Utilities/DescribeClass.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" using namespace Herwig; KPiIThreeHalfFOCUSKMatrix::KPiIThreeHalfFOCUSKMatrix() : KMatrix(FlavourInfo(IsoSpin::IThreeHalf,IsoSpin::I3Unknown, Strangeness::PlusOne,Charm::Zero, Beauty::Zero), vector<Channels>({KMatrix::KPi})), D_({-0.22147,0.026637,-0.00092057}), sThreeHalf_(0.27*GeV2) {} IBPtr KPiIThreeHalfFOCUSKMatrix::clone() const { return new_ptr(*this); } IBPtr KPiIThreeHalfFOCUSKMatrix::fullclone() const { return new_ptr(*this); } void KPiIThreeHalfFOCUSKMatrix::persistentOutput(PersistentOStream & os) const { os << D_ << ounit(sThreeHalf_,GeV2) << ounit(sNorm_,GeV2); } void KPiIThreeHalfFOCUSKMatrix::persistentInput(PersistentIStream & is, int) { is >> D_ >> iunit(sThreeHalf_,GeV2) >> iunit(sNorm_,GeV2); } // The following static variable is needed for the type // description system in ThePEG. DescribeClass<KPiIThreeHalfFOCUSKMatrix,KMatrix> describeHerwigKPiIThreeHalfFOCUSKMatrix("Herwig::KPiIThreeHalfFOCUSKMatrix", "HwFormFactors.so"); void KPiIThreeHalfFOCUSKMatrix::Init() { static ClassDocumentation<KPiIThreeHalfFOCUSKMatrix> documentation ("The KPiIThreeHalfFOCUSKMatrix class implements the K-matrix fit of " "the FOCUS collaboration (Phys.Lett. B653 (2007) 1-11) for the I=3/2 " "component of the Kpi K-matrix.", "The KPiIThreeHalfFOCUSKMatrix class implements the K-matrix fit of " "the FOCUS collaboration \\cite{Pennington:2007se} for the $I=3/2$ " "component of the $K\\pi$ K-matrix.", "\\bibitem{Pennington:2007se}" "J.~M.~Link {\\it et al.} [FOCUS Collaboration]," "%``Dalitz plot analysis of the $D^{+} \\to K^{-} \\pi^{+} \\pi^{+}$ decay in the FOCUS experiment,''" "Phys.\\ Lett.\\ B {\\bf 653} (2007) 1" "doi:10.1016/j.physletb.2007.06.070" "[arXiv:0705.2248 [hep-ex]]." "%%CITATION = doi:10.1016/j.physletb.2007.06.070;%%" "%79 citations counted in INSPIRE as of 14 Jan 2020"); } void KPiIThreeHalfFOCUSKMatrix::doinit() { KMatrix::doinit(); Energy mK = getParticleData(ParticleID::Kplus)->mass(); Energy mpi= getParticleData(ParticleID::piplus)->mass(); sNorm_ = sqr(mK)+sqr(mpi); } -boost::numeric::ublas::matrix<double> KPiIThreeHalfFOCUSKMatrix::K(Energy2 s) { +boost::numeric::ublas::matrix<double> KPiIThreeHalfFOCUSKMatrix::K(Energy2 s,bool) { double st = s/sNorm_-1.; double param=1.; boost::numeric::ublas::matrix<double> output = boost::numeric::ublas::zero_matrix<double>(1,1); for(unsigned int ix=0;ix<D_.size();++ix) { output(0,0) += D_[ix]*param; param *= st; } output *=(s-sThreeHalf_)/sNorm_; return output; } diff --git a/Decay/FormFactors/KPiIThreeHalfFOCUSKMatrix.h b/Decay/FormFactors/KPiIThreeHalfFOCUSKMatrix.h --- a/Decay/FormFactors/KPiIThreeHalfFOCUSKMatrix.h +++ b/Decay/FormFactors/KPiIThreeHalfFOCUSKMatrix.h @@ -1,118 +1,120 @@ // -*- C++ -*- #ifndef Herwig_KPiIThreeHalfFOCUSKMatrix_H #define Herwig_KPiIThreeHalfFOCUSKMatrix_H // // This is the declaration of the KPiIThreeHalfFOCUSKMatrix class. // #include "KMatrix.h" namespace Herwig { using namespace ThePEG; /** * The KPiIThreeHalfFOCUSKMatrix class implements the K-matrix fit of * the FOCUS collaboration (Phys.Lett. B653 (2007) 1-11) for the \f$I=\frac32\f$ * component of the \f$K\pi\f$ K-matrix. * * @see \ref KPiIThreeHalfFOCUSKMatrixInterfaces "The interfaces" * defined for KPiIThreeHalfFOCUSKMatrix. */ class KPiIThreeHalfFOCUSKMatrix: public KMatrix { public: /** * The default constructor. */ KPiIThreeHalfFOCUSKMatrix(); /** * Compute the K-matrix for a given scale + * @param s The scale + * @param Whether ot not to multiply by \f$\prod_i(1-s/m^2_i\f$ to regularise the poles */ - virtual boost::numeric::ublas::matrix<double> K(Energy2 s); + virtual boost::numeric::ublas::matrix<double> K(Energy2 s, bool multiplyByPoles=false); public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * The standard Init function used to initialize the interfaces. * Called exactly once for each class by the class description system * before the main function starts or * when this class is dynamically loaded. */ static void Init(); protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const; //@} protected: /** @name Standard Interfaced functions. */ //@{ /** * Initialize this object after the setup phase before saving an * EventGenerator to disk. * @throws InitException if object could not be initialized properly. */ virtual void doinit(); //@} private: /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ KPiIThreeHalfFOCUSKMatrix & operator=(const KPiIThreeHalfFOCUSKMatrix &); private: /** * Constants \f$D_{22,i}\f$ from Eqn 9 */ vector<double> D_; /** * Adler zero position */ Energy2 sThreeHalf_; /** * Normalisation scale */ Energy2 sNorm_; }; } #endif /* Herwig_KPiIThreeHalfFOCUSKMatrix_H */