Index: trunk/src/WaveOverlap.cpp =================================================================== --- trunk/src/WaveOverlap.cpp (revision 396) +++ trunk/src/WaveOverlap.cpp (revision 397) @@ -1,274 +1,276 @@ //============================================================================== // WaveOverlap.cpp // // Copyright (C) 2010-2019 Tobias Toll and Thomas Ullrich // // This file is part of Sartre. // // This program 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. // This program 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 this program. If not, see . // // Author: Tobias Toll // Last update: // $Date$ // $Author$ //============================================================================== #include "WaveOverlap.h" #include "Constants.h" #include "TableGeneratorSettings.h" #include "DipoleModelParameters.h" #include "TMath.h" #include #include #include "TF1.h" #include "Math/Functor.h" #include "Math/IntegratorMultiDim.h" #include "Math/WrappedTF1.h" #include "Math/GaussIntegrator.h" using namespace std; #define PR(x) cout << #x << " = " << (x) << endl; WaveOverlap::WaveOverlap() { mParameters = new DipoleModelParameters(TableGeneratorSettings::instance()); } WaveOverlap::~WaveOverlap() {/* no op*/} -// +//---------------------------------------------------------------------- // VECTOR MESONS -// +//---------------------------------------------------------------------- WaveOverlapVM::WaveOverlapVM() { mNT = mRT2 = 0; mMf = 0; mMf2 = 0; mEf = 0; mMV = 0; mNL = mRL2 = 0; mBoostedGaussianMf = 0; } -double WaveOverlapVM::uiNormT(const double* var){ +double WaveOverlapVM::uiNormT(const double* var) const +{ double z=var[0]; double r=var[1]; double phi=transverseWaveFunction(r, z); //GeV0 double dphidr=dDrTransverseWaveFunction(r, z); //GeV1 return 3.*r/hbarc/(z*z*(1-z)*(1-z)) *(mMf2*phi*phi + (z*z + (1-z)*(1-z))*dphidr*dphidr); //GeV1 } -double WaveOverlapVM::uiNormL(const double* var){ +double WaveOverlapVM::uiNormL(const double* var) const +{ double z=var[0]; double r=var[1]; double phi=longitudinalWaveFunction(r, z); //GeV0 double d2phidr2=laplaceRLongitudinalWaveFunction(r, z); //GeV2 double term=mMV*phi + (mMf2*phi - d2phidr2)/(mMV*z*(1-z)); //GeV1 return 3.*r/hbarc*term*term; //GeV1 } -double WaveOverlapVM::uiDecayWidth(double* var, double*) +double WaveOverlapVM::uiDecayWidth(double* var, double*) const { double z=*var; double phi=longitudinalWaveFunction(0., z); //GeV0 double d2phidr2=laplaceRLongitudinalWaveFunction(0., z); //GeV0 double result = mEf*3./M_PI*(mMV*phi+(mMf2*phi-d2phidr2)/(mMV*z*(1-z))); //GeV1 return result; } -void WaveOverlapVM::testBoostedGaussianParameters(int id) +void WaveOverlapVM::testBoostedGaussianParameters(int id) const { // // This function calculates the resulting normalisation // and decay width resulting from the boosted gaussian parameters // and compare with the actual values. This can be used to // test or modify the boosted gaussian parameters. // // KMW paper hep-ph/0606272 Eqs. (24)-(28) // // Start with decay width: TF1 fDW("fDW", this, &WaveOverlapVM::uiDecayWidth, 0., 1., 0.); ROOT::Math::WrappedTF1 wfDW(fDW); ROOT::Math::GaussIntegrator giDW; giDW.SetFunction(wfDW); giDW.SetAbsTolerance(0.); giDW.SetRelTolerance(1e-5); double f_VL=giDW.Integral(0., 1.); //GeV PR(f_VL); cout<<"The e+e- decay width is: "<ee)="<<4*M_PI*alpha_em*alpha_em*f_VL*f_VL/3/mMV*1e6 <<" keV"<ee)=1.340 +- 0.018 keV"<ee)=5.55 +- 0.14 +- 0.02 keV"<ee)=1.27 +- 0.04 keV"<ee)=7.04 +- 0.06 keV"<boostedGaussianR2(val); mRT2 = mRL2; mNT = mParameters->boostedGaussianNT(val); mNL = mParameters->boostedGaussianNL(val); mBoostedGaussianMf = mParameters->boostedGaussianQuarkMass(val); mBoostedGaussianMf2 = mBoostedGaussianMf*mBoostedGaussianMf; } void WaveOverlapVM::setProcess(int val) { switch (val) { case 113: mMf = mParameters->quarkMass(1); mMV = 0.776; mEf = 1./sqrt(2.); break; case 333: mMf = mParameters->quarkMass(2); mMV = 1.019; mEf = 1./3.; break; case 443: mMf = mParameters->quarkMass(3); mMV = 3.096916; mEf = 2./3.; break; case 553: mMf = mParameters->quarkMass(4); mMV = 9.46; mEf = -1./3.; break; default: cerr << "WaveOverlap::setProcess(): error no such type: " << val << endl; break; } mMf2 = mMf*mMf; } -// +//---------------------------------------------------------------------- // DVCS -// +//---------------------------------------------------------------------- -double WaveOverlapDVCS::T(double z, double Q2, double r) +double WaveOverlapDVCS::T(double z, double Q2, double r) const { // KMW paper hep-ph/0606272 Eq. 17 double term0, term1, term2; double result=0; for (int iFlav=0; iFlav<4; iFlav++) { double mf=mParameters->quarkMass(iFlav); double ef=quarkCharge[iFlav]; double eps2 = z*(1-z)*Q2 + mf*mf; double eps = sqrt(eps2); term0=2.*Nc/M_PI*alpha_em*ef*ef; term1=( z*z+(1-z)*(1-z) )* eps*TMath::BesselK1(eps*r/hbarc)*mf*TMath::BesselK1(mf*r/hbarc); term2=mf*mf*TMath::BesselK0(eps*r/hbarc)*TMath::BesselK0(mf*r/hbarc); result += term0*(term1+term2); } return result; } -double WaveOverlapDVCS::L(double, double, double) {return 0;} +double WaveOverlapDVCS::L(double, double, double) const {return 0;} Index: trunk/src/WaveOverlap.h =================================================================== --- trunk/src/WaveOverlap.h (revision 396) +++ trunk/src/WaveOverlap.h (revision 397) @@ -1,82 +1,85 @@ //============================================================================== // WaveOverlap.h // // Copyright (C) 2010-2019 Tobias Toll and Thomas Ullrich // // This file is part of Sartre. // // This program 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. // This program 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 this program. If not, see . // // Author: Tobias Toll // Last update: // $Date$ // $Author$ //============================================================================== #ifndef WaveOverlap_h #define WaveOverlap_h class DipoleModelParameters; class WaveOverlap { public: WaveOverlap(); - virtual ~WaveOverlap(); - virtual void setWaveOverlapFunctionParameters(int); - virtual double T(double, double, double)=0; - virtual double L(double, double, double)=0; + virtual ~WaveOverlap(); + + virtual void setWaveOverlapFunctionParameters(int); virtual void setProcess(int); - virtual void testBoostedGaussianParameters(int); + + virtual double T(double, double, double) const = 0; + virtual double L(double, double, double) const = 0; + + virtual void testBoostedGaussianParameters(int) const; protected: DipoleModelParameters *mParameters; }; class WaveOverlapVM : public WaveOverlap { public: WaveOverlapVM(); void setWaveOverlapFunctionParameters(int); - void setProcess(int); - void testBoostedGaussianParameters(int); + void setProcess(int); -private: - double T(double, double, double); - double L(double, double, double); - double transverseWaveFunction(double, double); - double longitudinalWaveFunction(double, double); - double dDrTransverseWaveFunction(double, double); - double laplaceRLongitudinalWaveFunction(double, double); - double uiDecayWidth(double*, double*); - double uiNormL(const double*); - double uiNormT(const double*); + double T(double, double, double) const; + double L(double, double, double) const; + double transverseWaveFunction(double, double) const; + double longitudinalWaveFunction(double, double) const; + double dDrTransverseWaveFunction(double, double) const; + double laplaceRLongitudinalWaveFunction(double, double) const; + double uiDecayWidth(double*, double*) const; + double uiNormL(const double*) const; + double uiNormT(const double*) const; + + void testBoostedGaussianParameters(int) const; private: double mNT, mRT2; double mMf; // mass of quarks in vector meson - double mBoostedGaussianMf; // // mass of quarks in vector meson's boosted Gaussian wave fct. + double mBoostedGaussianMf; // mass of quarks in vector meson's boosted Gaussian wave fct. double mMf2; double mBoostedGaussianMf2; double mEf; double mMV; double mNL, mRL2; }; class WaveOverlapDVCS : public WaveOverlap { -private: - double T(double, double, double); - double L(double, double, double); +public: + double T(double, double, double) const; + double L(double, double, double) const; }; inline void WaveOverlap::setWaveOverlapFunctionParameters(int) {/* no op*/} inline void WaveOverlap::setProcess(int) {/* no op*/}; -inline void WaveOverlap::testBoostedGaussianParameters(int) {/* no op*/}; +inline void WaveOverlap::testBoostedGaussianParameters(int) const {/* no op*/}; #endif