Index: trunk/src/WaveOverlap.cpp =================================================================== --- trunk/src/WaveOverlap.cpp (revision 467) +++ trunk/src/WaveOverlap.cpp (revision 468) @@ -1,272 +1,271 @@ //============================================================================== // 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) 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) 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*) 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) 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) 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) const {return 0;}