#include "ATOOLS/Org/Run_Parameter.H" #include "ATOOLS/Org/Message.H" #include "ATOOLS/Org/Exception.H" #include "ATOOLS/Org/MyStrStream.H" #include #include "PDF/Main/PDF_Base.H" #include "ATOOLS/Phys/Flavour.H" #include "ATOOLS/Org/My_MPI.H" using namespace PDF; using namespace ATOOLS; extern "C" { void setct12_(char *); double ct12pdf_(int &,double &, double &); void shabrt_() { Abort(); } } namespace PDF { class CT12_Fortran_Interface : public PDF_Base { private: int m_anti, m_nf; double m_f[11], m_x, m_Q; bool m_calculated[11]; public: CT12_Fortran_Interface(const ATOOLS::Flavour bunch, std::string set, int member) : m_anti(1) { m_xmin=1.e-8; m_xmax=1.; m_q2min=1.69; m_q2max=1.e10; m_set=set; m_type=m_set; m_bunch=bunch; m_member=member; if (m_bunch==Flavour(kf_p_plus).Bar()) m_anti=-1; std::string cset(""); std::string path = rpa->gen.Variable("SHERPA_SHARE_PATH")+"/CT12Grid"; std::string num; if (m_member<10) num="0"+ToString(m_member); else num=ToString(m_member); std::string asmz[21] = {"0.110", "0.111", "0.112", "0.113", "0.114", "0.115", "0.116", "0.117", "0.118", "0.119", "0.120", "0.121", "0.122", "0.123", "0.124", "0.125", "0.126", "0.127", "0.128", "0.129", "0.130"}; if (m_set==std::string("ct10nn")) { cset = std::string("ct10nn."+num+".pds"); m_asinfo.m_order=2; m_asinfo.m_nf=5; m_asinfo.m_asmz=0.118; m_lhef_number=11200+m_member; } for (size_t i=0; i<21; ++i) { if (m_set==std::string("ct10nn.as"+asmz[i]) && m_member==0) { cset = std::string("ct10nn.as"+asmz[i]+".pds"); m_asinfo.m_order=2; m_asinfo.m_nf=5; m_asinfo.m_asmz=ToType(asmz[i]); m_lhef_number=11260+i; } } if (m_set==std::string("ct10n")) { cset = std::string("ct10n."+num+".pds"); m_asinfo.m_order=1; m_asinfo.m_nf=5; m_asinfo.m_asmz=0.118; m_lhef_number=11000+m_member; } for (size_t i=0; i<21; ++i) { if (i==0 || i==1 || i==18 || i==19 || i==20) continue; if (m_set==std::string("ct10n.as"+asmz[i]) && m_member==0) { cset = std::string("ct10n.as"+asmz[i]+".pds"); m_asinfo.m_order=1; m_asinfo.m_nf=5; m_asinfo.m_asmz=ToType(asmz[i]); m_lhef_number=11060+i; } } if (m_set==std::string("ct10nf3") && m_member==0) { cset = std::string("ct10nf3.pds"); m_asinfo.m_order=1; m_asinfo.m_nf=3; m_asinfo.m_asmz=0.1056; m_lhef_number=11080; } if (m_set==std::string("ct10nf32") && m_member==0) { cset = std::string("ct10nf32.pds"); m_asinfo.m_order=1; m_asinfo.m_nf=3; m_asinfo.m_asmz=0.1056; m_lhef_number=11081; THROW(not_implemented,"An interface for this PDF is not yet provided."); } if (m_set==std::string("ct10nf4") && m_member==0) { cset = std::string("ct10nf4.pds"); m_asinfo.m_order=1; m_asinfo.m_nf=4; m_asinfo.m_asmz=0.1127; m_lhef_number=11082; } if (m_set==std::string("ct10nf42") && m_member==0) { cset = std::string("ct10nf42.pds"); m_asinfo.m_order=1; m_asinfo.m_nf=4; m_asinfo.m_asmz=0.1127; m_lhef_number=11083; THROW(not_implemented,"An interface for this PDF is not yet provided."); } if (m_set==std::string("ct10wn")) { cset = std::string("ct10wn."+num+".pds"); m_asinfo.m_order=1; m_asinfo.m_nf=5; m_asinfo.m_asmz=0.118; m_lhef_number=11100+m_member; } for (size_t i=0; i<21; ++i) { if (i==0 || i==1 || i==18 || i==19 || i==20) continue; if (m_set==std::string("ct10wn.as"+asmz[i]) && m_member==0) { cset = std::string("ct10wn.as"+asmz[i]+".pds"); m_asinfo.m_order=1; m_asinfo.m_nf=5; m_asinfo.m_asmz=ToType(asmz[i]); m_lhef_number=11160+i; } } if (m_set==std::string("ct10wnf3") && m_member==0) { cset = std::string("ct10wnf3.pds"); m_asinfo.m_order=1; m_asinfo.m_nf=3; m_asinfo.m_asmz=0.1056; m_lhef_number=11180; } if (m_set==std::string("ct10wnf32") && m_member==0) { cset = std::string("ct10wnf32.pds"); m_asinfo.m_order=1; m_asinfo.m_nf=3; m_asinfo.m_asmz=0.1056; m_lhef_number=11181; THROW(not_implemented,"An interface for this PDF is not yet provided."); } if (m_set==std::string("ct10wnf4") && m_member==0) { cset = std::string("ct10wnf4.pds"); m_asinfo.m_order=1; m_asinfo.m_nf=4; m_asinfo.m_asmz=0.1127; m_lhef_number=11182; } if (m_set==std::string("ct10wnf42") && m_member==0) { cset = std::string("ct10wnf42.pds"); m_asinfo.m_order=1; m_asinfo.m_nf=4; m_asinfo.m_asmz=0.1127; m_lhef_number=11183; THROW(not_implemented,"An interface for this PDF is not yet provided."); } m_asinfo.m_mz2=sqr(91.1876); m_nf=m_asinfo.m_nf; if (cset=="") { THROW(fatal_error,"PDF set "+m_set +" ("+ToString(m_member)+") not found."); } char buffer[1024]; char * err = getcwd(buffer,1024); if (err==NULL) { msg_Error()<<"Error in CT12_Fortran_Interface.C "<m_xmax || m_rescale<0.) return 0.; if (!(m_x>=0.0 && m_x<=1.0)) { PRINT_INFO("PDF called with x="<m_xmax) return 0.; if (!(m_x>=0.0 && m_x<=1.0)) { PRINT_INFO("PDF called with x="<