From a650f655855650f4c0939aa1453bf5badbb88942 Mon Sep 17 00:00:00 2001 From: Bertram Kopf <bertram@ep1.rub.de> Date: Fri, 20 Dec 2024 13:56:16 +0100 Subject: [PATCH] added one specific parametrization for the sigma pole --- Examples/Tutorial/LineShapes/Jamfile | 14 ++- .../Tutorial/LineShapes/SigmaParamShape.cc | 98 +++++++++++++++++++ .../Tutorial/LineShapes/SigmaParamShape.hh | 69 +++++++++++++ .../Tutorial/LineShapes/SigmaParamShapeApp.cc | 56 +++++++++++ PwaDynamics/SigmaParameterization.cc | 98 +++++++++++++++++++ PwaDynamics/SigmaParameterization.hh | 65 ++++++++++++ 6 files changed, 399 insertions(+), 1 deletion(-) create mode 100644 Examples/Tutorial/LineShapes/SigmaParamShape.cc create mode 100644 Examples/Tutorial/LineShapes/SigmaParamShape.hh create mode 100644 Examples/Tutorial/LineShapes/SigmaParamShapeApp.cc create mode 100644 PwaDynamics/SigmaParameterization.cc create mode 100644 PwaDynamics/SigmaParameterization.hh diff --git a/Examples/Tutorial/LineShapes/Jamfile b/Examples/Tutorial/LineShapes/Jamfile index 18721c3f..362ffbac 100644 --- a/Examples/Tutorial/LineShapes/Jamfile +++ b/Examples/Tutorial/LineShapes/Jamfile @@ -1,7 +1,7 @@ alias install : install-bin install-lib ; explicit install ; -install install-bin : BwShapeApp FlatteShapeApp TwoPolesApp PiPiSWaveApp PhpFactorApp LUTPlotApp +install install-bin : BwShapeApp FlatteShapeApp TwoPolesApp PiPiSWaveApp PhpFactorApp LUTPlotApp SigmaParamShapeApp : <location>$(TOP)/bin <install-dependencies>on <install-type>EXE @@ -115,3 +115,15 @@ exe LUTPlotApp : LUTPlotApp.cc LineShapes $(TOP)/qft++//qft++ : ; +exe SigmaParamShapeApp : SigmaParamShapeApp.cc LineShapes + $(TOP)/PwaDynamics//PwaDynamics + $(TOP)/Particle//Particle + $(TOP)/ConfigParser//ConfigParser + $(TOP)/PwaUtils//PwaUtils + $(TOP)/Event//Event + $(TOP)/FitParams//FitParams + $(TOP)/qft++Extension//qft++Extension + $(TOP)/ErrLogger//ErrLogger + $(TOP)/qft++//qft++ + : ; + diff --git a/Examples/Tutorial/LineShapes/SigmaParamShape.cc b/Examples/Tutorial/LineShapes/SigmaParamShape.cc new file mode 100644 index 00000000..cb098593 --- /dev/null +++ b/Examples/Tutorial/LineShapes/SigmaParamShape.cc @@ -0,0 +1,98 @@ +//************************************************************************// +// // +// Copyright 2024 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/>. // +// // +//************************************************************************// + +#include <getopt.h> +#include <fstream> +#include <sstream> +#include <string> +#include "Examples/Tutorial/LineShapes/SigmaParamShape.hh" +#include "PwaDynamics/SigmaParameterization.hh" +#include "PwaDynamics/AbsPhaseSpace.hh" +#include "PwaDynamics/PhaseSpaceIsobar.hh" +#include "Utils/PawianConstants.hh" +#include "qft++Extension/PawianUtils.hh" + +#include "TFile.h" +#include "TH1F.h" +#include "TH2F.h" +#include "TGraph.h" +#include "TMath.h" + + +#include "ErrLogger/ErrLogger.hh" + +SigmaParamShape::SigmaParamShape() : + _theTFile(0) + ,_graphPhase(new TGraph()) + ,_graphIntensity(new TGraph()) + ,_graphArgand(new TGraph()) +{ + std::string rootFileName="./SigmaShape.root"; + _theTFile=new TFile(rootFileName.c_str(),"recreate"); + + _graphPhase->SetName("grPhase"); + _graphPhase->SetTitle("#sigma phase #pi #pi"); + + _graphIntensity->SetName("grIntensity"); + _graphIntensity->SetTitle("#sigma intensity #pi #pi"); + + _graphArgand->SetName("grArgand"); + _graphArgand->SetTitle("#sigma Argand #pi #pi"); + + int size=100; + double massMin=.3; + double massMax=1.2; + + double stepSize=(massMax-massMin)/size; + + // _histPhase= new TH1F("_histPhase","hist phase",size+1, massMin, massMax); + + + SigmaParameterization theSigmaParam; + int counter=0; + for (double mass=massMin; mass<massMax; mass+=stepSize){ + ++counter; + complex<double> currentAmp=theSigmaParam.calc(mass); + // _histPhase->Fill(std::arg(currentAmp)*180./TMath::Pi()); + _graphPhase->SetPoint(counter, mass, std::arg(currentAmp)*180./TMath::Pi()); + + // std::complex<double> rhopipi=PawianQFT::phaseSpaceFacDefault(mass,PawianConstants::mPi, PawianConstants::mPi); + // std::complex<double> breapUpMom=PawianQFT::breakupMomQDefault(mass, PawianConstants::mPi, PawianConstants::mPi); + _graphIntensity->SetPoint(counter, mass, std::norm(currentAmp)); + + std::complex<double> Tmat=theSigmaParam.calcT(mass); + //_graphArgand->SetPoint(counter, sqrt(rhopipi.real())*Tmat.real(), sqrt(rhopipi.real())*Tmat.imag()); + _graphArgand->SetPoint(counter, Tmat.real(), Tmat.imag()); + + } + +} + +SigmaParamShape::~SigmaParamShape() +{ + _graphPhase->Write(); + _graphIntensity->Write(); + _graphArgand->Write(); + _theTFile->Write(); + _theTFile->Close(); +} + diff --git a/Examples/Tutorial/LineShapes/SigmaParamShape.hh b/Examples/Tutorial/LineShapes/SigmaParamShape.hh new file mode 100644 index 00000000..6acfdcb6 --- /dev/null +++ b/Examples/Tutorial/LineShapes/SigmaParamShape.hh @@ -0,0 +1,69 @@ +//************************************************************************// +// // +// Copyright 2024 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/>. // +// // +//************************************************************************// + +#pragma once + +#include <iostream> +#include <fstream> +#include <string> +#include <vector> + +#include <cassert> + +#include <memory> + +#include "TROOT.h" +// #include <TSystem.h> +#include "qft++/topincludes/relativistic-quantum-mechanics.hh" + +class TFile; +class TH1F; +class TH2F; +class TGraph; + +class SigmaParamShape { + +public: + + // create/copy/destroy: + + ///Constructor + SigmaParamShape(); + + + /** Destructor */ + virtual ~SigmaParamShape(); + + // Getters: + +protected: + + +private: + TFile* _theTFile; + // TH1F* _histPhase; + TGraph* _graphPhase; + TGraph* _graphIntensity; + TGraph* _graphArgand; +}; + + diff --git a/Examples/Tutorial/LineShapes/SigmaParamShapeApp.cc b/Examples/Tutorial/LineShapes/SigmaParamShapeApp.cc new file mode 100644 index 00000000..a2a46679 --- /dev/null +++ b/Examples/Tutorial/LineShapes/SigmaParamShapeApp.cc @@ -0,0 +1,56 @@ +//************************************************************************// +// // +// Copyright 2024 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/>. // +// // +//************************************************************************// + +#include <iostream> +#include <cstring> +#include <string> +#include <sstream> +#include <vector> +#include <map> + +#include <memory> + +#include "Examples/Tutorial/LineShapes/SigmaParamShape.hh" +#include "ErrLogger/ErrLogger.hh" + +int main(int __argc,char *__argv[]) { + ErrLogger::instance().setThreshold(logging::log_level::DEBUG); + // if( __argc>1 && ( strcmp( __argv[1], "-help" ) == 0 + // || strcmp( __argv[1], "--help" ) == 0 ) ) { + + // InfoMsg << "\nThis is a test application for histogramming the line shape of an Voigtian\n" + // << "The switches are:\n\n" + // << "-mass (mass of the resonance;default 1.318)\n\n" + // << "-width (width of the resonance;default 0.1)\n\n" + // << "-sigma (resolution)\n\n" + // << endmsg; + // return 0; + // } + + // double mass0=0.782; + // double gamma=0.00849; + // double sigma=0.01; + SigmaParamShape SigmaParamShape; + + return 0; +} + diff --git a/PwaDynamics/SigmaParameterization.cc b/PwaDynamics/SigmaParameterization.cc new file mode 100644 index 00000000..64f33686 --- /dev/null +++ b/PwaDynamics/SigmaParameterization.cc @@ -0,0 +1,98 @@ +//************************************************************************// +// // +// Copyright 2024 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/>. // +// // +//************************************************************************// + +// Fixed parametrization for the sigma pole based on +// Phys. Lett B 598 (204) 149-158 + +#include "PwaDynamics/SigmaParameterization.hh" +#include "ErrLogger/ErrLogger.hh" +#include "Utils/PawianConstants.hh" +#include "qft++Extension/PawianUtils.hh" + +//#include <complex> +//using std::complex; + +SigmaParameterization::SigmaParameterization() : + _mPole(0.9264) + ,_g4pi(0.0024) + ,_b1(0.5843) + ,_b2(1.6663) + ,_a(1.082) + ,_sAdler(PawianConstants::mPiSq/2.) + ,_mPoleSqr(0.9264*0.9264) + ,_g2piDenom(0.9264*0.9264-PawianConstants::mPiSq/2.) + ,_rho2pi_mPole(PawianQFT::phaseSpaceFacDefault(0.9264,PawianConstants::mPi, PawianConstants::mPi)) + ,_rho4pi_mPole(php4pi(0.9264*0.9264)) +{ +} +SigmaParameterization::SigmaParameterization(double mPole, double g4pi, double b1, double b2, double a) : + _mPole(mPole) + ,_g4pi(g4pi) + ,_b1(b1) + ,_b2(b2) + ,_a(a) + ,_sAdler(PawianConstants::mPiSq/2.) + ,_mPoleSqr(mPole*mPole) + ,_g2piDenom(mPole*mPole-PawianConstants::mPiSq/2.) + ,_rho2pi_mPole(PawianQFT::phaseSpaceFacDefault(mPole,PawianConstants::mPi, PawianConstants::mPi)) + ,_rho4pi_mPole(php4pi(mPole*mPole)) +{ +} +SigmaParameterization::~SigmaParameterization(){ +} + +complex<double> SigmaParameterization::calc(double currentMass){ + //complex<double> result(1.,0.); + double currentM2=currentMass*currentMass; + double fs=_b1+_b2*currentM2; + double g2pi=fs*(currentM2-_sAdler)/_g2piDenom*exp(-(currentM2-_mPoleSqr)/_a); + std::complex<double> rho2pi=PawianQFT::phaseSpaceFacDefault(currentMass,PawianConstants::mPi, PawianConstants::mPi); + std::complex<double> rho4pi=php4pi(currentM2); + std::complex<double> Gamma_tot=g2pi*rho2pi/_rho2pi_mPole+_g4pi*rho4pi/_rho4pi_mPole; + + complex<double> result=1./(std::complex<double>(_mPoleSqr,0.)-std::complex<double>(currentM2,0.)-PawianConstants::i*_mPole*Gamma_tot); + return result; +} + +std::complex<double> SigmaParameterization::php4pi(double currentMass2){ + // if(currentMass2<16.*PawianConstants::mPiSq){ + // Alert << "current mass^2 must be larger than 16*m_pi^2!!!\n current mass^2: " << currentMass2 <<"\n16*m_pi^2: " << 16.*PawianConstants::mPiSq << endmsg; + // exit(1); + // } + std::complex<double> result(0.,0.); + if(currentMass2<16.*PawianConstants::mPiSq) return result; + result=std::complex<double>(sqrt(1.-16.*PawianConstants::mPiSq/currentMass2)/(1.+exp(2.8-currentMass2)/3.5),0.); + return result; +} + +complex<double> SigmaParameterization::calcT(double currentMass){ + double currentM2=currentMass*currentMass; + double fs=_b1+_b2*currentM2; + double g2pi=fs*(currentM2-_sAdler)/_g2piDenom*exp(-(currentM2-_mPoleSqr)/_a); + std::complex<double> rho2pi=PawianQFT::phaseSpaceFacDefault(currentMass,PawianConstants::mPi, PawianConstants::mPi); + std::complex<double> rho4pi=php4pi(currentM2); + std::complex<double> Gamma_tot=g2pi*rho2pi/_rho2pi_mPole+_g4pi*rho4pi/_rho4pi_mPole; + + complex<double> result=_mPole*Gamma_tot/(std::complex<double>(_mPoleSqr,0.)-std::complex<double>(currentM2,0.)-PawianConstants::i*_mPole*Gamma_tot); + return result; +} + diff --git a/PwaDynamics/SigmaParameterization.hh b/PwaDynamics/SigmaParameterization.hh new file mode 100644 index 00000000..01eb24c3 --- /dev/null +++ b/PwaDynamics/SigmaParameterization.hh @@ -0,0 +1,65 @@ +//************************************************************************// +// // +// Copyright 2024 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/>. // +// // +//************************************************************************// + +// SigmaParameterization class definition file. -*- C++ -*- +// Copyright 2024 Bertram Kopf + +// Fixed parametrization for the sigma pole based on +// Phys. Lett B 598 (204) 149-158 + +#pragma once +#include <complex> +using std::complex; + +//_____________________________________________________________________________ +// @file SigmaParameterization.h +//_____________________________________________________________________________ + +class SigmaParameterization { + +public: + /// Constructor + SigmaParameterization(); + SigmaParameterization(double mPole, double g4pi, double b1, double b2, double a); + + /// Destructor + ~SigmaParameterization(); + + complex<double> calc(double currentMass); + complex<double> calcT(double currentMass); + +protected: + std::complex<double> php4pi(double currentMass2); + double _mPole; + double _g4pi; + double _b1; + 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; +}; + + + -- GitLab