diff --git a/PwaDynamics/SigmaParameterization.cc b/PwaDynamics/SigmaParameterization.cc index f79da72595595dcd4d6d423647631f4c74865b1a..ebdd711fa5f87348ced334b0ffe2cd575dab3653 100644 --- a/PwaDynamics/SigmaParameterization.cc +++ b/PwaDynamics/SigmaParameterization.cc @@ -60,6 +60,14 @@ SigmaParameterization::SigmaParameterization(double mPole, double g4pi, double b SigmaParameterization::~SigmaParameterization(){ } +void SigmaParameterization::setBarePoleMass(double barePoleMass){ + _mPole = barePoleMass; + _mPoleSqr = barePoleMass*barePoleMass; + _g2piDenom = _mPoleSqr-PawianConstants::mPiSq/2.; + _rho2pi_mPole = PawianQFT::phaseSpaceFacDefault(barePoleMass,PawianConstants::mPi, PawianConstants::mPi); + _rho4pi_mPole = php4pi(barePoleMass*barePoleMass); +} + complex<double> SigmaParameterization::calc(double currentMass){ //complex<double> result(1.,0.); double currentM2=currentMass*currentMass; @@ -73,7 +81,7 @@ complex<double> SigmaParameterization::calc(double currentMass){ return result; } -complex<double> SigmaParameterization::calc(double currentMass, double gSigma){ +complex<double> SigmaParameterization::calc(double currentMass, std::complex<double> gSigma){ return gSigma*calc(currentMass); } std::complex<double> SigmaParameterization::php4pi(double currentMass2){ diff --git a/PwaDynamics/SigmaParameterization.hh b/PwaDynamics/SigmaParameterization.hh index b80fd0b1976514a843442c8cc691334c19828783..0c02ed4d9ed392888724b846bc961a170503bcad 100644 --- a/PwaDynamics/SigmaParameterization.hh +++ b/PwaDynamics/SigmaParameterization.hh @@ -45,8 +45,19 @@ public: ~SigmaParameterization(); complex<double> calc(double currentMass); - complex<double> calc(double currentMass, double gSigma); + complex<double> calc(double currentMass, std::complex<double> gSigma); complex<double> calcT(double currentMass); + + const double barePoleMass() const {return _mPole;} + void setBarePoleMass(double barePoleMass); + const double b1Param() const {return _b1;} + void setb1Param(double b1) {_b1=b1;} + const double b2Param() const {return _b2;} + void setb2Param(double b2) {_b2=b2;} + const double aParam() const {return _a;} + void setaParam(double a) {_a=a;} + const double g4piParam() const {return _g4pi;} + void setg4piParam(double g4pi) {_g4pi=g4pi;} protected: std::complex<double> php4pi(double currentMass2); @@ -56,10 +67,10 @@ protected: double _b2; double _a; const double _sAdler; - const double _mPoleSqr; - const double _g2piDenom; - const std::complex<double> _rho2pi_mPole; - const std::complex<double> _rho4pi_mPole; + double _mPoleSqr; + double _g2piDenom; + std::complex<double> _rho2pi_mPole; + std::complex<double> _rho4pi_mPole; }; diff --git a/PwaUtils/SigmaParamDynamics.cc b/PwaUtils/SigmaParamDynamics.cc index 2564af57f805978fb3d31947d990e5fb816786a9..e06aa628f2f0de091da8e60ae5beda176b86b5ee 100644 --- a/PwaUtils/SigmaParamDynamics.cc +++ b/PwaUtils/SigmaParamDynamics.cc @@ -34,8 +34,20 @@ SigmaParamDynamics::SigmaParamDynamics(std::string& name, std::vector<Particle*>& fsParticles, Particle* mother) : AbsDynamics(name, fsParticles, mother) - ,_currentStrength(1.) ,_sigmaParamDyn(std::shared_ptr<SigmaParameterization>(new SigmaParameterization)) + ,_currentStrength(std::complex<double>(1.,0.)) + ,_currentPoleMass(_sigmaParamDyn->barePoleMass()) + ,_currentb1(_sigmaParamDyn->b1Param()) + ,_currentb2(_sigmaParamDyn->b2Param()) + ,_currenta(_sigmaParamDyn->aParam()) + ,_currentg4pi(_sigmaParamDyn->g4piParam()) + ,_strenghtNameMag(_massKey+"StrengthMag") + ,_strenghtNamePhi(_massKey+"StrengthPhi") + ,_poleMassName("sigmaPoleBareMass") + ,_b1Name("sigmab1") + ,_b2Name("sigmab2") + ,_aName("sigmaa") + ,_g4piName("sigmag4pi") { _isLdependent=false; } @@ -59,21 +71,52 @@ complex<double> SigmaParamDynamics::eval(EvtData* theData, AbsXdecAmp* grandmaAm void SigmaParamDynamics::fillDefaultParams(std::shared_ptr<AbsPawianParameters> fitPar){ - //fill mass - std::string strengthName=_massKey+"Strength"; - fitPar->Add(strengthName, _currentStrength, 0.1); - // fitPar->SetLimits(massName, minMass, maxMass); + //fill production strength mag + fitPar->Add(_strenghtNameMag, std::abs(_currentStrength), 0.01); + //fill production strength phase + fitPar->Add(_strenghtNamePhi, std::arg(_currentStrength), 0.01); + //fill pole bare mass + fitPar->Add(_poleMassName, _currentPoleMass, 0.01, std::abs(_currentPoleMass-0.2), _currentPoleMass+0.2); + //fill b1 param + fitPar->Add(_b1Name, _currentb1, 0.01, std::abs(_currentb1-0.2), _currentb1+0.2); + //fill b2 param + fitPar->Add(_b2Name, _currentb2, 0.01, std::abs(_currentb2-0.2), _currentb2+0.2); + //fill a param + fitPar->Add(_aName, _currenta, 0.01, std::abs(_currenta-0.2), _currenta+0.2); + //fill g4pi param + fitPar->Add(_g4piName, _currentg4pi, 0.00001, 0., _currentg4pi+0.0001); } void SigmaParamDynamics::updateFitParams(std::shared_ptr<AbsPawianParameters> fitPar){ - std::string strengthName=_massKey+"Strength"; - _currentStrength=fitPar->Value(strengthName); + double currentStrengthMag = fitPar->Value(_strenghtNameMag); + double currentStrengthPhi = fitPar->Value(_strenghtNamePhi); + _currentStrength=std::polar(currentStrengthMag,currentStrengthPhi); + + _currentPoleMass = fitPar->Value(_poleMassName); + _sigmaParamDyn->setBarePoleMass(_currentPoleMass); + + _currentb1= fitPar->Value(_b1Name); + _sigmaParamDyn->setb1Param(_currentb1); + + _currentb2= fitPar->Value(_b2Name); + _sigmaParamDyn->setb2Param(_currentb2); + + _currenta= fitPar->Value(_aName); + _sigmaParamDyn->setaParam(_currenta); + + _currentg4pi= fitPar->Value(_g4piName); + _sigmaParamDyn->setg4piParam(_currentg4pi); } void SigmaParamDynamics::fillParamNameList(){ _paramNameList.clear(); //fill - std::string strengthName=_massKey+"Strength"; - _paramNameList.push_back(strengthName); + _paramNameList.push_back(_strenghtNameMag); + _paramNameList.push_back(_strenghtNamePhi); + _paramNameList.push_back(_poleMassName); + _paramNameList.push_back(_b1Name); + _paramNameList.push_back(_b2Name); + _paramNameList.push_back(_aName); + _paramNameList.push_back(_g4piName); } diff --git a/PwaUtils/SigmaParamDynamics.hh b/PwaUtils/SigmaParamDynamics.hh index 831ee59e5a964054a5d4aefb28b5236e96cbe6f7..638969ef1021d382fc66ab7ccab9bca15dd1dac6 100644 --- a/PwaUtils/SigmaParamDynamics.hh +++ b/PwaUtils/SigmaParamDynamics.hh @@ -52,9 +52,20 @@ public: virtual void fillParamNameList(); protected: // std::string _massKey; - - double _currentStrength; std::shared_ptr<SigmaParameterization> _sigmaParamDyn; + complex<double> _currentStrength; + double _currentPoleMass; + double _currentb1; + double _currentb2; + double _currenta; + double _currentg4pi; + const std::string _strenghtNameMag; + const std::string _strenghtNamePhi; + const std::string _poleMassName; + const std::string _b1Name; + const std::string _b2Name; + const std::string _aName; + const std::string _g4piName; private: diff --git a/Scripts/KinematicsTools.C b/Scripts/KinematicsTools.C index 02f08504c0463e19de9436830e162ea6f9d1ea3d..2a9d801c1f6d4611433ed947a062f915ccf38668 100644 --- a/Scripts/KinematicsTools.C +++ b/Scripts/KinematicsTools.C @@ -24,6 +24,8 @@ #include <iostream> +const double protonMass=0.93827208816; + class KinematicsTools { public: @@ -47,5 +49,16 @@ class KinematicsTools static double breakupMom(double mass, double massDec1, double massDec2){ return phaseSpaceFac(mass, massDec1, massDec2)*mass/2.; } + + static double pbarpMassFrompbarp(double pbarMom){ + TLorentzVector pbarpVec(0.,0.,pbarMom,sqrt(protonMass*protonMass+pbarMom*pbarMom)+protonMass); + return pbarpVec.M(); + } + + static double pbarMomFrompbarp(double pbarpMass){ + double pbarpSqr=std::pow((pbarpMass*pbarpMass-2.*protonMass*protonMass)/(2.*protonMass), 2.)-protonMass*protonMass; + return sqrt( pbarpSqr); + } + };