#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 setct14_(char *); double ct14pdf_(int &,double &, double &); void shabrt_() { Abort(); } } namespace PDF { class CT14_Fortran_Interface : public PDF_Base { private: double m_f[11], m_x, m_Q; bool m_calculated[11]; public: CT14_Fortran_Interface(const ATOOLS::Flavour bunch, std::string set, int member) { 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; std::string cset(""); std::string path = rpa->gen.Variable("SHERPA_SHARE_PATH")+"/CT14Grid"; std::string num; if (m_member<10) num="0"+ToString(m_member); else num=ToString(m_member); std::string asmz[13] = {"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"}; if (m_set==std::string("ct14nn")) { cset = std::string("ct14nn."+num+".pds"); m_asinfo.m_order=2; m_asinfo.m_nf=5; m_asinfo.m_asmz=0.118; m_lhef_number=13000+m_member; } for (size_t i=0; i<13; ++i) { if (m_set==std::string("ct14nn.as"+asmz[i]) && m_member==0) { cset = std::string("ct14nn.as"+asmz[i]+".pds"); m_asinfo.m_order=2; m_asinfo.m_nf=5; m_asinfo.m_asmz=ToType(asmz[i]); m_lhef_number=13060+i; } } if (m_set==std::string("ct14n")) { cset = std::string("ct14n."+num+".pds"); m_asinfo.m_order=1; m_asinfo.m_nf=5; m_asinfo.m_asmz=0.118; m_lhef_number=13100+m_member; } for (size_t i=0; i<13; ++i) { if (m_set==std::string("ct14n.as"+asmz[i]) && m_member==0) { cset = std::string("ct14n.as"+asmz[i]+".pds"); m_asinfo.m_order=1; m_asinfo.m_nf=5; m_asinfo.m_asmz=ToType(asmz[i]); m_lhef_number=13158+i; } } if (m_set==std::string("ct14ll")) { cset = std::string("ct14ll.pds"); m_asinfo.m_order=1; m_asinfo.m_nf=5; m_asinfo.m_asmz=0.130; m_lhef_number=13205; } 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 CT14_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="<