diff --git a/PwaDynamics/SigmaParameterization.hh b/PwaDynamics/SigmaParameterization.hh index 0c02ed4d9ed392888724b846bc961a170503bcad..41075aa218fbe32398e999cbf115cba84e0660e8 100644 --- a/PwaDynamics/SigmaParameterization.hh +++ b/PwaDynamics/SigmaParameterization.hh @@ -58,6 +58,7 @@ public: void setaParam(double a) {_a=a;} const double g4piParam() const {return _g4pi;} void setg4piParam(double g4pi) {_g4pi=g4pi;} + std::complex<double> rho2pi() {return _rho2pi_mPole;} protected: std::complex<double> php4pi(double currentMass2); diff --git a/PwaUtils/DynRegistry.cc b/PwaUtils/DynRegistry.cc index 1f1100b2568124eb2576b6722a638d5cab74e598..2bde8e1f821fd029db457f87f7b22a524e0d5b8a 100644 --- a/PwaUtils/DynRegistry.cc +++ b/PwaUtils/DynRegistry.cc @@ -57,6 +57,7 @@ #include "PwaUtils/OmnesDynamics.hh" #include "PwaUtils/SExpDynamics.hh" #include "PwaUtils/SigmaParamDynamics.hh" +#include "PwaUtils/TMatrixSigmaParDynamics.hh" #include "PwaUtils/ProdChannelInfo.hh" @@ -137,7 +138,14 @@ std::shared_ptr<AbsDynamics> DynRegistry::getDynamics(std::shared_ptr<AbsDecay> result= std::shared_ptr<AbsDynamics>(theTMatrixDynamics); // result= std::shared_ptr<AbsDynamics>(new TMatrixDynamics(theName, fsParticles, theDec->motherPart(), pathToConfigFile, currentDataType, projectionParticleNames)); } - else if(theDec->dynType()=="TMatrixCompare"){ + else if (theDec->dynType()=="TMatrixSigmaPar"){ + std::string pathToConfigFile=""; + std::string projectionParticleNames = theDec->projectionParticleNames(); + std::string currentDataType=GlobalEnv::instance()->Channel(currentChannelId)->parser()->productionFormalism(); + TMatrixDynamics* theTMatrixDynamics=new TMatrixSigmaParDynamics(theName, fsParticles, theDec->motherPart(), pathToConfigFile, currentDataType, projectionParticleNames); + result= std::shared_ptr<AbsDynamics>(theTMatrixDynamics); + } + else if(theDec->dynType()=="TMatrixCompare"){ std::string pathToConfigFile=theDec->pathToConfigParser(); std::string pathToConfigCompareFile=thePiPiScatteringParser->pathToKMatrixCompareFile(); std::string projectionParticleNames = theDec->projectionParticleNames(); diff --git a/PwaUtils/SigmaParamDynamics.cc b/PwaUtils/SigmaParamDynamics.cc index e06aa628f2f0de091da8e60ae5beda176b86b5ee..c5e9dc69e33e6a6d7b789312fb9442dd13533fa1 100644 --- a/PwaUtils/SigmaParamDynamics.cc +++ b/PwaUtils/SigmaParamDynamics.cc @@ -1,7 +1,7 @@ //************************************************************************// // // // Copyright 2025 Bertram Kopf (bertram@ep1.rub.de) // -// - Ruhr-Universität Bochum // +// - Ruhr-Universit??t Bochum // // // // This file is part of Pawian. // // // @@ -28,28 +28,23 @@ #include <string> #include "PwaUtils/SigmaParamDynamics.hh" +#include "Utils/PawianIOUtils.hh" +#include "PwaUtils/XdecAmpRegistry.hh" +#include "PwaUtils/GlobalEnv.hh" #include "ErrLogger/ErrLogger.hh" #include "Particle/Particle.hh" +#include "Particle/ParticleTable.hh" #include "PwaDynamics/SigmaParameterization.hh" +#include "FitParams/AbsPawianParameters.hh" +#include "Utils/IdStringMapRegistry.hh" +#include "Utils/PawianConstants.hh" SigmaParamDynamics::SigmaParamDynamics(std::string& name, std::vector<Particle*>& fsParticles, Particle* mother) : - AbsDynamics(name, fsParticles, mother) - ,_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()) + TMatrixSigmaParDynamics(name, fsParticles, mother) + ,_currentStrength(std::complex<double>(1.,0.)) ,_strenghtNameMag(_massKey+"StrengthMag") ,_strenghtNamePhi(_massKey+"StrengthPhi") - ,_poleMassName("sigmaPoleBareMass") - ,_b1Name("sigmab1") - ,_b2Name("sigmab2") - ,_aName("sigmaa") - ,_g4piName("sigmag4pi") { - _isLdependent=false; } SigmaParamDynamics::~SigmaParamDynamics() @@ -57,11 +52,12 @@ SigmaParamDynamics::~SigmaParamDynamics() } complex<double> SigmaParamDynamics::eval(EvtData* theData, AbsXdecAmp* grandmaAmp, Spin OrbMom){ + if ( !_recalculate){ return _cachedMap[theData->evtNo]; } - complex<double> result=_sigmaParamDyn->calc(theData->DoubleMassId.at(_dynId), _currentStrength); + complex<double> result=_sigmaParameterization->calc(theData->DoubleMassId.at(_dynId), _currentStrength); if ( _cacheAmps){ _cachedMap[theData->evtNo]=result; } @@ -69,54 +65,32 @@ complex<double> SigmaParamDynamics::eval(EvtData* theData, AbsXdecAmp* grandmaAm return result; } - void SigmaParamDynamics::fillDefaultParams(std::shared_ptr<AbsPawianParameters> fitPar){ + TMatrixSigmaParDynamics::fillDefaultParams(fitPar); //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::fillParamNameList(){ + _paramNameList.clear(); + TMatrixSigmaParDynamics::fillParamNameList(); + _paramNameList.push_back(_strenghtNameMag); + _paramNameList.push_back(_strenghtNamePhi); +} + +bool SigmaParamDynamics::checkRecalculation(std::shared_ptr<AbsPawianParameters> fitParNew, std::shared_ptr<AbsPawianParameters> fitParOld){ + return AbsParamHandler::checkRecalculation(fitParNew, fitParOld); +} void SigmaParamDynamics::updateFitParams(std::shared_ptr<AbsPawianParameters> fitPar){ + + TMatrixSigmaParDynamics::updateFitParams(fitPar); 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 - _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 638969ef1021d382fc66ab7ccab9bca15dd1dac6..7dfc3c9223c114014a457a84fb05da7d3ffdc900 100644 --- a/PwaUtils/SigmaParamDynamics.hh +++ b/PwaUtils/SigmaParamDynamics.hh @@ -21,7 +21,7 @@ //************************************************************************// // SigmaParamDynamics class definition file. -*- C++ -*- -// Copyright 2025 Bertram Kopf +// Copyright 2017 Bertram Kopf #pragma once @@ -32,40 +32,32 @@ #include <string> #include <memory> -#include "PwaUtils/AbsDynamics.hh" -#include "FitParams/AbsPawianParameters.hh" +#include "PwaUtils/TMatrixSigmaParDynamics.hh" +class AbsXdecAmp; +class AbsPhaseSpace; +class AbsPawianParameters; class SigmaParameterization; -class SigmaParamDynamics : public AbsDynamics{ +class SigmaParamDynamics : public TMatrixSigmaParDynamics{ public: + // SigmaParamDynamics(); SigmaParamDynamics(std::string& name, std::vector<Particle*>& fsParticles, Particle* mother); virtual ~SigmaParamDynamics(); virtual std::string type() {return "SigmaParamDynamics";} - virtual complex<double> eval(EvtData* theData, AbsXdecAmp* grandmaAmp, Spin OrbMom=0); - + virtual complex<double> eval(EvtData* theData, AbsXdecAmp* grandmaAmp=0, Spin OrbMom=0); virtual void fillDefaultParams(std::shared_ptr<AbsPawianParameters> fitPar); - - virtual void updateFitParams(std::shared_ptr<AbsPawianParameters> fitPar); virtual void fillParamNameList(); + virtual bool checkRecalculation(std::shared_ptr<AbsPawianParameters> fitParNew, std::shared_ptr<AbsPawianParameters> fitParOld); + virtual void updateFitParams(std::shared_ptr<AbsPawianParameters> fitPar); + + protected: - // std::string _massKey; - 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/PwaUtils/TMatrixDynamics.cc b/PwaUtils/TMatrixDynamics.cc index 6cfc550d97dfb5dfbf8da25045a89f8571ed193d..6efd3134b790fa1ea9aecab479c9322b7acf1a8a 100644 --- a/PwaUtils/TMatrixDynamics.cc +++ b/PwaUtils/TMatrixDynamics.cc @@ -68,6 +68,7 @@ TMatrixDynamics::TMatrixDynamics(std::string& name, std::vector<Particle*>& fsPa ,_projectionParticleNames(projectionParticleNames) { _pathToKMatCfgParser=PawianIOUtils::getFileName(GlobalEnv::instance()->KMatrixStorePath(), pathToConfigParser); + _kMatrixParser = std::shared_ptr<KMatrixParser>(new KMatrixParser(_pathToKMatCfgParser)); if(dataType=="Elasticity") _dataTypeID=1; @@ -93,6 +94,12 @@ TMatrixDynamics::TMatrixDynamics(std::string& name, std::vector<Particle*>& fsPa _isLdependent=true; } +TMatrixDynamics::TMatrixDynamics(std::string& name, std::vector<Particle*>& fsParticles, Particle* mother) : + AbsDynamics(name, fsParticles, mother) + { +} + + TMatrixDynamics::TMatrixDynamics(std::shared_ptr<KMatrixParser> kMatrixParser) : AbsDynamics() ,_kMatrixParser(kMatrixParser) diff --git a/PwaUtils/TMatrixDynamics.hh b/PwaUtils/TMatrixDynamics.hh index 031a4d90bc55323fcfcc18b1d0f26d29c77fd525..5160b79b2829d78b6d00c3255101da3c6ccf889b 100644 --- a/PwaUtils/TMatrixDynamics.hh +++ b/PwaUtils/TMatrixDynamics.hh @@ -48,6 +48,7 @@ public: TMatrixDynamics(std::shared_ptr<KMatrixParser> kMatrixParser); // TMatrixDynamics(std::string& name, std::vector<Particle*>& fsParticles, Particle* mother, std::string& pathToConfigParser, std::string dataType="Elasticity"); TMatrixDynamics(std::string& name, std::vector<Particle*>& fsParticles, Particle* mother, std::string& pathToConfigParser, std::string dataType, std::string projectionParticleNames=""); + TMatrixDynamics(std::string& name, std::vector<Particle*>& fsParticles, Particle* mother); virtual ~TMatrixDynamics(); virtual std::string type() {return "TMatrixDynamics";} diff --git a/PwaUtils/TMatrixSigmaParDynamics.cc b/PwaUtils/TMatrixSigmaParDynamics.cc new file mode 100644 index 0000000000000000000000000000000000000000..0bed6669ea0820b81e758a668d6081bd27ea9b23 --- /dev/null +++ b/PwaUtils/TMatrixSigmaParDynamics.cc @@ -0,0 +1,246 @@ +//************************************************************************// +// // +// Copyright 2025 Bertram Kopf (bertram@ep1.rub.de) // +// - Ruhr-Universit??t Bochum // +// // +// This file is part of Pawian. // +// // +// Pawian 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. // +// // +// Pawian 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 Pawian. If not, see <http://www.gnu.org/licenses/>. // +// // +//************************************************************************// + +// TMatrixSigmaParDynamics class definition file. -*- C++ -*- +// Copyright 2025 Bertram Kopf + +#include <getopt.h> +#include <fstream> +#include <string> + +#include "Utils/PawianIOUtils.hh" +#include "PwaUtils/TMatrixSigmaParDynamics.hh" +#include "PwaUtils/XdecAmpRegistry.hh" +#include "PwaUtils/AbsDecay.hh" +#include "PwaUtils/AbsXdecAmp.hh" +#include "PwaUtils/GlobalEnv.hh" +#include "PwaUtils/EvtDataScatteringList.hh" +#include "ErrLogger/ErrLogger.hh" +#include "Particle/Particle.hh" +#include "Particle/ParticleTable.hh" +#include "PwaDynamics/AbsPhaseSpace.hh" +#include "PwaDynamics/PhaseSpaceFactory.hh" +#include "PwaDynamics/KMatrixFunctions.hh" +#include "PwaDynamics/SigmaParameterization.hh" +#include "FitParams/AbsPawianParameters.hh" +#include "Utils/IdStringMapRegistry.hh" +#include "Utils/PawianConstants.hh" + +TMatrixSigmaParDynamics::TMatrixSigmaParDynamics(std::string& name, std::vector<Particle*>& fsParticles, Particle* mother, std::string& pathToConfigParser, std::string dataType, std::string projectionParticleNames) : + TMatrixDynamics(name,fsParticles, mother) + ,_sigmaParameterization(std::shared_ptr<SigmaParameterization>(new SigmaParameterization())) + ,_currentPoleMass(_sigmaParameterization->barePoleMass()) + ,_currentb1(_sigmaParameterization->b1Param()) + ,_currentb2(_sigmaParameterization->b2Param()) + ,_currenta(_sigmaParameterization->aParam()) + ,_currentg4pi(_sigmaParameterization->g4piParam()) + ,_poleMassName("sigmaPoleBareMass") + ,_b1Name("sigmab1") + ,_b2Name("sigmab2") + ,_aName("sigmaa") + ,_g4piName("sigmag4pi") +{ + + if(dataType=="Elasticity") _dataTypeID=1; + else if(dataType=="Phase") _dataTypeID=2; + else if(dataType=="ArgandUnits") _dataTypeID=3; + else if(dataType=="Data") _dataTypeID=4; + else if(dataType=="PhaseDiff") _dataTypeID=5; //in TMatrixCompareDynamics and FVectorCompareDynamics only + else if(dataType=="PVecIntensity") _dataTypeID=6; //in FVectorIntensityDynamics only + else if(dataType=="Treal") _dataTypeID=7; + else if(dataType=="Timag") _dataTypeID=8; + else if(dataType=="Tcheck") _dataTypeID=9; + else if(dataType=="Tabs") _dataTypeID=10; + else if(dataType=="PhasePhi") _dataTypeID=11; + else { + Alert << "production formalism/data type with the name" << dataType + << " is not supported for pi pi scattering fits! \n It is working for: " + << "Elasticity, ArgandUnits, Phase or PhaseDiff!!!" << endmsg; + exit(1); + } +} + + +TMatrixSigmaParDynamics::TMatrixSigmaParDynamics(std::string& name, std::vector<Particle*>& fsParticles, Particle* mother) : + TMatrixDynamics(name,fsParticles, mother) + ,_sigmaParameterization(std::shared_ptr<SigmaParameterization>(new SigmaParameterization())) + ,_currentPoleMass(_sigmaParameterization->barePoleMass()) + ,_currentb1(_sigmaParameterization->b1Param()) + ,_currentb2(_sigmaParameterization->b2Param()) + ,_currenta(_sigmaParameterization->aParam()) + ,_currentg4pi(_sigmaParameterization->g4piParam()) + ,_poleMassName("sigmaPoleBareMass") + ,_b1Name("sigmab1") + ,_b2Name("sigmab2") + ,_aName("sigmaa") + ,_g4piName("sigmag4pi") +{ +} + +TMatrixSigmaParDynamics::~TMatrixSigmaParDynamics() +{ +} + +complex<double> TMatrixSigmaParDynamics::eval(EvtData* theData, AbsXdecAmp* grandmaAmp, Spin OrbMom){ + + double currentMass = + theData->DoubleMassId.at(IdStringMapRegistry::instance()->stringId(EvtDataScatteringList::M_PIPISCAT_NAME)); + + if(_dataTypeID==1) evalElasticity(theData, currentMass, OrbMom); + else if(_dataTypeID==2){ + // if(!_prodIsNotDecChannel) evalPhase(theData, currentMass, OrbMom); + // else evalRelativePhase(theData, currentMass, OrbMom); + evalPhase(theData, currentMass, OrbMom); + } + else if(_dataTypeID==3){ + evalArgandUnits(theData, currentMass, OrbMom); + } + else if(_dataTypeID==7){ + evalTreal(theData, currentMass, OrbMom); + } + else if(_dataTypeID==8){ + evalTimag(theData, currentMass, OrbMom); + } + else if(_dataTypeID==10){ + evalTabs(theData, currentMass, OrbMom); + } + else if(_dataTypeID==11){ + evalPhasePhi(theData, currentMass, OrbMom); + } + else{ + Alert << "_dataTypeID = " <<_dataTypeID << " is not supported!!!" << endmsg; + exit(1); + } + + return complex<double>(1.,0); +} + +void TMatrixSigmaParDynamics::fillDefaultParams(std::shared_ptr<AbsPawianParameters> fitPar){ + //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 TMatrixSigmaParDynamics::fillParamNameList(){ + _paramNameList.clear(); + //fill + _paramNameList.push_back(_poleMassName); + _paramNameList.push_back(_b1Name); + _paramNameList.push_back(_b2Name); + _paramNameList.push_back(_aName); + _paramNameList.push_back(_g4piName); +} + +// bool TMatrixSigmaParDynamics::checkRecalculation(std::shared_ptr<AbsPawianParameters> fitParNew, std::shared_ptr<AbsPawianParameters> fitParOld){ +// return true; +// } + +void TMatrixSigmaParDynamics::updateFitParams(std::shared_ptr<AbsPawianParameters> fitPar){ + + _sigmaParameterization->setBarePoleMass(_currentPoleMass); + + _currentb1= fitPar->Value(_b1Name); + _sigmaParameterization->setb1Param(_currentb1); + + _currentb2= fitPar->Value(_b2Name); + _sigmaParameterization->setb2Param(_currentb2); + + _currenta= fitPar->Value(_aName); + _sigmaParameterization->setaParam(_currenta); + + _currentg4pi= fitPar->Value(_g4piName); + _sigmaParameterization->setg4piParam(_currentg4pi); +} + + + +void TMatrixSigmaParDynamics::evalElasticity(EvtData* theData, double currentMass, Spin OrbMom){ + complex<double> currentTijRel= _sigmaParameterization->calcT(currentMass); + std::complex<double> rho2pi=_sigmaParameterization->rho2pi(); + + complex<double> SijRel=complex<double>(1.,0.)+2.*PawianConstants::i * + sqrt(rho2pi.real()*rho2pi.real()) * currentTijRel; + + theData->DoubleId.at(IdStringMapRegistry::instance()->stringId(EvtDataScatteringList::FIT_PIPISCAT_NAME))=sqrt(norm(SijRel)); +} + + +void TMatrixSigmaParDynamics::evalPhase(EvtData* theData, double currentMass, Spin OrbMom=0){ + complex<double> currentTijRel= _sigmaParameterization->calcT(currentMass); + std::complex<double> rho2pi=_sigmaParameterization->rho2pi(); + + complex<double> currentTiiRel_rho= currentTijRel*rho2pi.real(); + double currentReERel = currentTiiRel_rho.real(); + double currentImERel = currentTiiRel_rho.imag() - 0.5; + + double deltaRel = 0.5*atan2(currentImERel, fabs(currentReERel))*PawianConstants::radToDeg + 45.0; + if (currentTiiRel_rho.real() < 0.0) {deltaRel = 180.0 - deltaRel;} + + while(deltaRel>180.) deltaRel-=180.; + while(deltaRel<0.) deltaRel+=180.; + + double phiData=theData->DoubleId.at(IdStringMapRegistry::instance()->stringId(EvtDataScatteringList::DATA_PIPISCAT_NAME)); + + while( (phiData-deltaRel) > 90.) deltaRel+=180.; + while( (deltaRel-phiData) > 90.) deltaRel-=180.; + + theData->DoubleId.at(IdStringMapRegistry::instance()->stringId(EvtDataScatteringList::FIT_PIPISCAT_NAME))=deltaRel; + +} + +void TMatrixSigmaParDynamics::evalRelativePhase(EvtData* theData, double currentMass, Spin OrbMom){ + Alert << "mode evalRelativePhase is not supported!!!" << endmsg; + exit(1); +} + +void TMatrixSigmaParDynamics::evalArgandUnits(EvtData* theData, double currentMass, Spin OrbMom){ + Alert << "mode evalArgandUnits is not supported!!!" << endmsg; + exit(1); +} + +void TMatrixSigmaParDynamics::evalTreal(EvtData* theData, double currentMass, Spin OrbMom){ + Alert << "mode evalTreal is not supported!!!" << endmsg; + exit(1); +} + +void TMatrixSigmaParDynamics::evalTimag(EvtData* theData, double currentMass, Spin OrbMom){ + Alert << "mode evalTimag is not supported!!!" << endmsg; + exit(1); +} + +void TMatrixSigmaParDynamics::evalTabs(EvtData* theData, double currentMass, Spin OrbMom){ + Alert << "mode evalTabs is not supported!!!" << endmsg; + exit(1); +} + +void TMatrixSigmaParDynamics::evalPhasePhi(EvtData* theData, double currentMass, Spin OrbMom=0){ + Alert << "mode evalPhasePhi is not supported!!!" << endmsg; + exit(1); +} + diff --git a/PwaUtils/TMatrixSigmaParDynamics.hh b/PwaUtils/TMatrixSigmaParDynamics.hh new file mode 100644 index 0000000000000000000000000000000000000000..170c23fe96b407b753c7ec3995bd7c55dd885a7e --- /dev/null +++ b/PwaUtils/TMatrixSigmaParDynamics.hh @@ -0,0 +1,87 @@ +//************************************************************************// +// // +// Copyright 2025 Bertram Kopf (bertram@ep1.rub.de) // +// - Ruhr-Universität Bochum // +// // +// This file is part of Pawian. // +// // +// Pawian 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. // +// // +// Pawian 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 Pawian. If not, see <http://www.gnu.org/licenses/>. // +// // +//************************************************************************// + +// TMatrixSigmaParDynamics class definition file. -*- C++ -*- +// Copyright 2025 Bertram Kopf + +#pragma once + +#include <iostream> +#include <vector> +#include <complex> +#include <map> +#include <string> +#include <memory> + +#include "PwaUtils/TMatrixDynamics.hh" + +class AbsXdecAmp; +class AbsPhaseSpace; +class AbsPawianParameters; +class SigmaParameterization; + +class TMatrixSigmaParDynamics : public TMatrixDynamics{ + +public: + // TMatrixSigmaParDynamics(); + TMatrixSigmaParDynamics(std::string& name, std::vector<Particle*>& fsParticles, Particle* mother, std::string& pathToConfigParser, std::string dataType, std::string projectionParticleNames=""); + TMatrixSigmaParDynamics(std::string& name, std::vector<Particle*>& fsParticles, Particle* mother); + virtual ~TMatrixSigmaParDynamics(); + + virtual std::string type() {return "TMatrixSigmaParDynamics";} + virtual complex<double> eval(EvtData* theData, AbsXdecAmp* grandmaAmp=0, Spin OrbMom=0); + virtual void fillDefaultParams(std::shared_ptr<AbsPawianParameters> fitPar); + virtual void fillParamNameList(); + // virtual bool checkRecalculation(std::shared_ptr<AbsPawianParameters> fitParNew, std::shared_ptr<AbsPawianParameters> fitParOld); + virtual void updateFitParams(std::shared_ptr<AbsPawianParameters> fitPar); + + int prodProjectionIndex() {return _prodProjectionIndex;} + void setProdProjectionIndex(int idx); + +protected: + std::shared_ptr<SigmaParameterization> _sigmaParameterization; + 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; + + virtual void evalElasticity(EvtData* theData, double currentMass, Spin OrbMom); + virtual void evalPhase(EvtData* theData, double currentMass, Spin OrbMom); + virtual void evalRelativePhase(EvtData* theData, double currentMass, Spin OrbMom); + virtual void evalArgandUnits(EvtData* theData, double currentMass, Spin OrbMom); + virtual void evalTreal(EvtData* theData, double currentMass, Spin OrbMom); + virtual void evalTimag(EvtData* theData, double currentMass, Spin OrbMom); + virtual void evalTabs(EvtData* theData, double currentMass, Spin OrbMom); + virtual void evalPhasePhi(EvtData* theData, double currentMass, Spin OrbMom); + + +private: + +}; diff --git a/pipiScatteringUtils/PiPiScatteringChannelEnv.cc b/pipiScatteringUtils/PiPiScatteringChannelEnv.cc index 305048357e30f388495307b3255a03e86dcd5bda..8a13f656447f8cbb762ba2373384119a0720a65e 100644 --- a/pipiScatteringUtils/PiPiScatteringChannelEnv.cc +++ b/pipiScatteringUtils/PiPiScatteringChannelEnv.cc @@ -212,6 +212,7 @@ void PiPiScatteringChannelEnv::addDynamics(){ InfoMsg << "dynStr: " << dynStr << endmsg; if(dynStr=="KMatrix" || dynStr=="FixedKMatrix" || dynStr=="TMatrix" || dynStr=="FVectorIntensity"|| dynStr=="TMatrixCompare" || dynStr=="FVectorCompare") _pathKMatrixParserFile=additionalStringVec[0]; + else if(dynStr=="TMatrixSigmaPar") _pathKMatrixParserFile=""; else{ Alert << "dyn type " << dynStr << " is not supported for pipi scattering reactions!!!" << endmsg; exit(0);