#include "HADRONS++/Current_Library/VA_0_PPP.H" #include "ATOOLS/Org/Run_Parameter.H" #include "ATOOLS/Org/MyStrStream.H" #include "ATOOLS/Org/My_MPI.H" using namespace HADRONS; using namespace ATOOLS; using namespace std; VA_0_PPP::FF_Base::~FF_Base() { } VA_0_PPP::VA_0_PPP(const ATOOLS::Flavour_Vector& flavs, const std::vector& indices, const std::string& name) : Current_Base(flavs, indices, name) { int nPion_0(0), nPion_ch(0), nKaon_0(0), nKaon_ch(0), nKaon_S (0), nKaon_L(0); // count number of pions, kaons and calc. mass^2 for( int i=0; i<3; i++ ) { if( m_flavs[p_i[i]].Kfcode() == kf_pi_plus ) nPion_ch++; if( m_flavs[p_i[i]].Kfcode() == kf_pi ) nPion_0++; if( m_flavs[p_i[i]].Kfcode() == kf_K_plus ) nKaon_ch++; if( m_flavs[p_i[i]].Kfcode() == kf_K ) nKaon_0++; if( m_flavs[p_i[i]].Kfcode() == kf_K_L ) nKaon_L++; if( m_flavs[p_i[i]].Kfcode() == kf_K_S ) nKaon_S++; m_ms[i] = sqr( m_flavs[p_i[i]].HadMass() ); } // sanity check if (nPion_ch+nPion_0+nKaon_ch+nKaon_L+nKaon_S+nKaon_0 != 3) { msg_Error()<<"ERROR in HADRONS::VA_0_PPP constructor\n" <<" number of three outgoing pseudoscalars != 3 ?!.\n" <<" Don't know, what to do. Will abort."<push_back( // ( F.X( m_nutau, m_pseudo_1, 0, h, m_cR, m_cL ) * ( FS + F1*(1.-d1) - F2*d2 ) // + F.X( m_nutau, m_pseudo_2, 0, h, m_cR, m_cL ) * ( FS - F1*d1 + F2*(1.-d2) ) // + F.X( m_nutau, m_pseudo_3, 0, h, m_cR, m_cL ) * ( FS - F1*(1.+d1) - F2*(1.+d2) ) // + Complex(0.,1.)*F.X( m_nutau, cross(p1,p2,p3), 0, h, m_cR, m_cL ) * FV // ) * m_global // ); // } } Complex VA_0_PPP::FormFactor( int j, double Q2, double s, double t ) { return( p_ff->FormFactor(j,Q2,s,t) ); } VA_0_PPP::FF_Base::FF_Base(int mode, int kaon_mode, GeneralModel _md, double * _ms) : m_mode (mode), m_kaon_mode (kaon_mode) { // set resonances and parameters m_ms[0] = _ms[0]; m_ms[1] = _ms[1]; m_ms[2] = _ms[2]; m_deltas = 0; kf_code resA, resAA, resV[2], resVV[2]; switch( m_mode ) { case 3000 : /* pi- pi- pi+ mode */ resV[0] = kf_rho_770; resV[1] = kf_rho_770; break; case 1200 : /* pi0 pi0 pi- mode */ resV[0] = kf_rho_770_plus; resV[1] = kf_rho_770_plus; break; case 1020 : /* K- pi- K+ */ resV[0] = kf_rho_770; resV[1] = kf_K_star_892; break; case 1002 : /* K0 pi- K0b */ resV[0] = kf_rho_770; resV[1] = kf_K_star_892_plus; break; case 111 : /* K- pi0 K0 */ resV[0] = kf_rho_770_plus; resV[1] = kf_K_star_892; break; case 210 : /* pi0 pi0 K- mode */ m_deltas= 1; resV[0] = kf_K_star_892_plus; resV[1] = kf_K_star_892_plus; break; case 2010 : /* K- pi- pi+ */ m_deltas= 1; resV[0] = kf_K_star_892; resV[1] = kf_rho_770; break; case 1101 : /* pi- K0b pi0 */ m_deltas= 1; resV[0] = kf_rho_770_plus; resV[1] = kf_K_star_892; break; case 30 : /* K- K- K+ */ m_deltas= 1; resV[0] = kf_rho_770; resV[1] = kf_rho_770; break; case 12 : /* K- K0b K0 */ m_deltas= 1; resV[0] = kf_rho_770_plus; resV[1] = kf_rho_770_plus; break; default: THROW(fatal_error, "Three pseudoscalar mode not recognized: "+ToString(m_mode)); break; } // higher resonances for( int i=0; i<2; ++i ) { if( resV[i] == kf_rho_770 ) resVV[i] = kf_rho_1450; if( resV[i] == kf_rho_770_plus ) resVV[i] = kf_rho_1450_plus; if( resV[i] == kf_K_star_892 ) resVV[i] = kf_K_star_1410; if( resV[i] == kf_K_star_892_plus ) resVV[i] = kf_K_star_1410_plus; } // axial resonance int running = int( _md("RUNNING_WIDTH", 3 ) ); // running width double mA, mAA, wA, wAA; if( m_deltas ) { running = 0; resA = kf_K_1_1400_plus; resAA = kf_K_1_1270_plus; mA = _md("Mass_"+Flavour(resA).IDName(), 1.402 ); // mass of axial resonance mAA = _md("Mass_"+Flavour(resAA).IDName(), 1.270 ); // mass of axial resonance' wA = _md("Width_"+Flavour(resA).IDName(), 0.174 ); // width of axial resonance wAA = _md("Width_"+Flavour(resAA).IDName(), 0.090 ); // width of axial resonance' m_alpha = _md("alpha_"+Flavour(resAA).IDName(), 1.3 ); // weight factor for A' } else { resA = kf_a_1_1260_plus; resAA = kf_a_1_1260_plus; mA = _md("Mass_"+Flavour(resA).IDName(), 1.251 ); // mass of axial resonance mAA = _md("Mass_"+Flavour(resAA).IDName(), 1.251 ); // mass of axial resonance' wA = _md("Width_"+Flavour(resA).IDName(), 0.599 ); // width of axial resonance wAA = _md("Width_"+Flavour(resAA).IDName(), 0.599 ); // width of axial resonance' m_alpha = _md("alpha_"+Flavour(resAA).IDName(), 0. ); // weight factor for A' } m_A = ResonanceFlavour( resA, mA, wA, running&1); m_AA = ResonanceFlavour( resAA, mAA, wAA, running&1); ResonanceFlavour help_rho = ResonanceFlavour( kf_rho_770_plus, _md("Mass_rho(770)+", _md("Mass_rho(770)", 0.773 )), _md("Width_rho(770)+", _md("Width_rho(770)", 0.145 )), running&2 ); ResonanceFlavour help_rhoP = ResonanceFlavour( kf_rho_1450_plus, _md("Mass_rho(1450)+", _md("Mass_rho(1450)", 1.370 )), _md("Width_rho(1450)+", _md("Width_rho(1450)", 0.510 )), running&2 ); double help_beta = _md("beta_rho(1450)+", _md("beta_rho(1450)", -0.145) ); m_A.InitialiseThreeBodyResonance(help_rho, help_rhoP, help_beta); m_AA.InitialiseThreeBodyResonance(help_rho, help_rhoP, help_beta); double mV[2], mVV[2], wV[2], wVV[2]; for( int i=0; i<2; ++i ) { if( resV[i] == kf_rho_770 || resV[i] == kf_rho_770_plus ) { mV[i] = _md("Mass_"+Flavour(resV[i]).IDName(), 0.773 ); // mass^2 of vector resonance ij wV[i] = _md("Width_"+Flavour(resV[i]).IDName(), 0.145 ); // width^2 of vector resonance ij mVV[i] = _md("Mass_"+Flavour(resVV[i]).IDName(), 1.370 ); // mass^2 of vector resonance' ij wVV[i] = _md("Width_"+Flavour(resVV[i]).IDName(),0.510 ); // width^2 of vector resonance' ij m_Beta[i] = _md("beta_"+Flavour(resVV[i]).IDName(), -0.145 ); // weight factor for Vij' } else if( resV[i] == kf_K_star_892 || resV[i] == kf_K_star_892_plus ) { mV[i] = _md("Mass_"+Flavour(resV[i]).IDName(), 0.8921 ); // mass^2 of vector resonance ij wV[i] = _md("Width_"+Flavour(resV[i]).IDName(), 0.0513 ); // width^2 of vector resonance ij mVV[i] = _md("Mass_"+Flavour(resVV[i]).IDName(), 1.412 ); // mass^2 of vector resonance' ij wVV[i] = _md("Width_"+Flavour(resVV[i]).IDName(),0.227 ); // width^2 of vector resonance' ij m_Beta[i] = _md("beta_"+Flavour(resVV[i]).IDName(), -0.135 ); // weight factor for Vij' } else { mV[i] = _md("Mass_"+Flavour(resV[i]).IDName(), Flavour(resV[i]).HadMass()); // mass^2 of vector resonance ij wV[i] = _md("Width_"+Flavour(resV[i]).IDName(), Flavour(resV[i]).Width()); // width^2 of vector resonance ij mVV[i] = _md("Mass_"+Flavour(resVV[i]).IDName(), Flavour(resVV[i]).HadMass()); // mass^2 of vector resonance' ij wVV[i] = _md("Width_"+Flavour(resVV[i]).IDName(),Flavour(resVV[i]).Width()); // width^2 of vector resonance' ij m_Beta[i] = _md("beta_"+Flavour(resVV[i]).IDName(), 0. ); // weight factor for Vij' } m_V[i] = ResonanceFlavour( resV[i], mV[i], wV[i], running&2 ); m_VV[i] = ResonanceFlavour( resVV[i], mVV[i], wVV[i], running&2 ); } m_fpi2 = sqr( _md("fpi", 0.1307) ); // pion decay constant } VA_0_PPP::RChT::RChT(int mode, int kaon_mode, GeneralModel _md, double * _ms) : FF_Base(mode,kaon_mode,_md,_ms) { // set resonances and parameters if( m_mode != 1200 && m_mode != 3000 && m_mode != 1020 ) { msg_Error()<<"Error: The mode "<4.*m_m2 ) MVGV += pow( 1.-4.*m_m2/s, 1.5 ); if( s>4.*m_mK2 ) MVGV += pow( 1.-4.*m_mK2/s, 1.5 ) / 2.; MVGV *= m_gammaR*m_V[0].Mass2()*s/(96.*M_PI*m_fpi2); return MVGV; } double VA_0_PPP::RChT::MassWidthAxial( double Q2 ) { if( !m_deltas && m_A.Running() ) return( m_A.OffShellMassWidth(Q2)*pow(m_A.Mass2()/Q2,m_exp_alpha-2.) ); return m_A.MassWidth(); } Complex VA_0_PPP::RChT::FormFactor( int j, double Q2, double s, double t ) { switch( m_mode ) { case 1200: case 3000: { // 3pion mode if (j==1 || j==2) { // axial contributions double u = Q2-s-t+Mass2(1-1)+Mass2(2-1)+Mass2(3-1); double x = (j==1)? s : t; double y = (j==1)? t : s; double MVGV_x = MassWidthVector(x); double MVGV_y = MassWidthVector(y); double MAGA = MassWidthAxial(Q2); double F_Q2_x = x/2./Q2 - m_l0*m_m2/Q2; double F_Q2_y = y/2./Q2 - m_l0*m_m2/Q2; double MV2 = m_V[0].Mass2(); Complex alpha = 1. - 3./2.*x/Complex(x-MV2, MVGV_x); Complex beta = -3./2.*x/Complex(x-MV2, MVGV_x) + F_Q2_x*(2.*Q2+x-u)/Complex(x-MV2, MVGV_x) + F_Q2_y*(u-x)/Complex(y-MV2, MVGV_y); return alpha - Q2/Complex(Q2-m_A.Mass2(),MAGA)*beta; } else { // pseudoscalar, vector return Complex(0.,0.); } } case 1020: { // K- pi- K+ mode double u = Q2-s-t+Mass2(1-1)+Mass2(2-1)+Mass2(3-1); switch(j) { case 1: case 2: { // axial contributions double x = (j==1)? s : t; double y = (j==1)? t : s; int a = j-1; // resonance assoc. with x int b = (a==1)? 0 : 1; // resonance assoc. with y Complex FAchi = Complex(1.,0.); Complex FA1r = 0.5 * m_FV*m_GV/m_fpi2 * ( 1./Complex(m_V[a].Mass2()-x,-1.*MassWidthVector(a,x))* ( 3.*x + Mass2(2)-Mass2(a) + (1.-2.*m_GV/m_FV)*(2.*Q2-2.*x-u+Mass2(a)-Mass2(b)) ) +1./Complex(m_V[b].Mass2()-y,-1.*MassWidthVector(b,y))* ( 2.*(Mass2(b)-Mass2(2)) + (1.-2.*m_GV/m_FV)*(u-x+Mass2(2)-Mass2(b)) ) ); Complex FA2r = -sqrt(2.) * m_FA*m_GV/m_fpi2 * Q2/Complex(m_A.Mass2()-Q2,-1.*MassWidthAxial(Q2)) * ( 1./Complex(m_V[a].Mass2()-x,-1.*MassWidthVector(a,x))* ( m_lsum*(-3.*x+Mass2(a)-Mass2(2)) + FFunc(x,Mass2(b),Q2)*(2.*Q2+x-u+Mass2(2)-Mass2(b)) ) +1./Complex(m_V[b].Mass2()-y,-1.*MassWidthVector(b,y))* ( 2.*m_lsum*(Mass2(2)+Mass2(b)) + FFunc(y,Mass2(a),Q2)*(u-x+Mass2(b)-Mass2(2)) ) ); return FAchi + FA1r + FA2r; } case 3: { // pseudoscalar contribution Complex FSchi = 3./2.* Mass2(1)/(Q2-Mass2(1)) * ( 1. + (Mass2(2)-u)/Q2 ); Complex FS1r = 3./2.*sqr(m_GV)/m_fpi2 * Mass2(1)/(Q2*(Q2-Mass2(1))) * ( s*(t-u)/Complex(m_V[0].Mass2()-s,-1.*MassWidthVector(0,s)) + (t*(s-u)+(Q2-Mass2(0))*(Mass2(1)-Mass2(2)))/Complex(m_V[1].Mass2()-t,-1.*MassWidthVector(1,t)) ); return FSchi + FS1r; } case 4: { // vector contribution double c1c2c5 = 0.; // double c1c2c52c6 = -3./(32.*sqr(M_PI)) * m_V[0].Mass()/(sqrt(2.)*m_FV); double c1c2c52c6 = -3./(96.*sqr(M_PI)) * m_V[0].Mass()/(sqrt(2.)*m_GV); double c1c28c3c5 = 0.; double c4 = 0.; // double d3 = -3./(64.*sqr(M_PI)) * m_V[0].Mass2()/m_FV2 + m_fpi2/(8.*m_FV2); double d3 = -3./(192.*sqr(M_PI)) * m_V[0].Mass2()/(m_FV*m_GV); double d18d2d3 = m_fpi2/(8.*m_FV2); double g12g2g3 = 0.; double g2 = 3./(192.*sqr(M_PI)) * m_V[0].Mass()/(sqrt(2.)*m_FV); Complex FVchi = 3./(2.*sqr(M_PI)*m_fpi2); Complex FV1r1 = 6.*m_GV/(sqrt(2.)*m_fpi2*m_V[0].Mass()) * ( 1./Complex(m_MO2-s,-1.*m_MO*m_GO) * ( c1c2c5*Q2 - c1c2c52c6*s + c1c28c3c5*Mass2(1) ) + 1./Complex(m_V[1].Mass2()-t,-1.*MassWidthVector(1,t)) * ( c1c2c5*Q2 - c1c2c52c6*t + c1c28c3c5*Mass2(0) + 8.*c4*(Mass2(0)-Mass2(1)) ) ); Complex FV1r2 = -12.*m_FV/(sqrt(2.)*m_V[0].Mass()*m_fpi2) * 1./Complex(m_V[0].Mass2()-Q2,-1*MassWidthVector(0,Q2)) * ( g12g2g3*(s+t)-2.*g2*Q2 ); Complex FV2r = -6.*m_FV*m_GV/m_fpi2 * 1./Complex(m_V[0].Mass2()-Q2,-1.*MassWidthVector(0,Q2)) * ( 1./Complex(m_MO2-s,-1.*m_MO*m_GO) * ( d3*(Q2+s) + d18d2d3*Mass2(1) ) + 1./Complex(m_V[1].Mass2()-t,-1.*MassWidthVector(1,t)) * ( d3*(Q2+t) + d18d2d3*Mass2(0) ) ); return FVchi + FV1r1 + FV1r2 + FV2r; } } } } return (j>3)? Complex(0.,0.) : Complex(1.,0.); } double VA_0_PPP::RChT::FFunc( double a, double b, double c) { return m_l2 + m_l1*a/c - m_l0*b/c; } // Parameterisation // DECKER, FINKEMEIER, MIRKES hep-ph/9310270 VA_0_PPP::KS::KS(int mode, int kaon_mode, GeneralModel _md, double * _ms) : FF_Base(mode,kaon_mode,_md,_ms) { bool anomaly (false); // special constants for this particular parameterisation switch( m_mode ) { case 3000 : /* pi- pi- pi+ mode */ m_X123 = 2.*Mass2(0); m_ms123 = Mass2(0); m_G123 = 1; break; case 1200 : /* pi0 pi0 pi- mode */ m_X123 = Mass2(2); m_ms123 = Mass2(2); m_G123 = 1; break; case 1020 : /* K- pi- K+ */ m_X123 = Mass2(1) + Mass2(0); m_ms123 = Mass2(1); m_G123 = 1; anomaly = true; break; case 1002 : /* K0 pi- K0b */ m_X123 = Mass2(1) + Mass2(0); m_ms123 = Mass2(1); m_G123 = 1; anomaly = true; break; case 111 : /* K- pi0 K0 */ m_X123 = 0.; m_ms123 = Mass2(1); m_G123 = 0; break; case 210 : /* pi0 pi0 K- mode */ m_X123 = -2.*(Mass2(1)+Mass2(2)); m_ms123 = Mass2(2); m_G123 = 1; break; case 2010 : /* K- pi- pi+ */ m_X123 = Mass2(1)+Mass2(0); m_ms123 = Mass2(0); m_G123 = 1; anomaly = true; break; case 1101 : /* pi- K0b pi0 */ m_X123 = 0.; m_ms123 = Mass2(1); m_G123 = 0; anomaly = true; break; case 30 : /* K- K- K+ */ m_X123 = 2.*Mass2(2); m_ms123 = Mass2(2); m_G123 = 1; break; case 12 : /* K- K0b K0 */ m_X123 = 2.*Mass2(0); m_ms123 = Mass2(0); m_G123 = 1; break; default: msg_Error()<:: PrintInfo(std::ostream &st,const size_t width) const { st<<"Example: $ 0 \\rightarrow \\pi \\pi K $ \n\n" <<"Order: special, see tau decays. \n\n" <<"Available form factors: \n " <<" \\begin{itemize} \n" <<" \\item {\\tt FORM\\_FACTOR = 1 :} Kuehn-Santamaria \n" <<" \\item {\\tt FORM\\_FACTOR = 2 :} Resonance Chiral Theory \n" <<" \\end{itemize} \n" <<"Reference: https://sherpa.hepforge.org/olddokuwiki/data/media/publications/theses/diplom\\__laubrich.pdf \n" <