#include "SHRiMPS/Main/Shrimps.H" #include "SHRiMPS/Main/Hadron_Init.H" #include "SHRiMPS/Eikonals/Eikonal_Creator.H" #include "ATOOLS/Org/Run_Parameter.H" #include "ATOOLS/Org/Message.H" #include "ATOOLS/Org/Shell_Tools.H" #include "ATOOLS/Phys/Flavour.H" #include "MODEL/Main/Strong_Coupling.H" #include "MODEL/Main/Model_Base.H" #include #include using namespace SHRIMPS; using namespace std; Shrimps::Shrimps(BEAM::Beam_Spectra_Handler *const beam, PDF::ISR_Handler *const isr) : p_beamremnants(NULL), p_generator(NULL) { ATOOLS::rpa->gen.AddCitation(1,"SHRiMPS is not published yet."); MBpars.Init(); if (MBpars.RunMode()==run_mode::unknown) { msg_Error()<<"Error in "<Initialise(); MBpars.AddFormFactor(ff); } msg_Info()<size() <<" form factors.\n"; Eikonal_Creator creator; list * ffs(MBpars.GetFormFactors()); for (list::iterator ff1=ffs->begin();ff1!=ffs->end();ff1++) { for (list::iterator ff2=ffs->begin();ff2!=ffs->end();ff2++) { creator.SetFormFactors((*ff1),(*ff2)); Omega_ik * eikonal(creator.InitialiseEikonal()); MBpars.AddEikonal(eikonal); } } msg_Info()<PDF(i),isr->Flav(i))); p_beamremnants = new Beam_Remnant_Handler(beam,m_pdfs); } void Shrimps::InitialiseTheEventGenerator() { Cross_Sections xsecs; xsecs.CalculateCrossSections(); p_generator = new Event_Generator(); p_generator->Initialise(); p_generator->SetCluster(&m_cluster); } int Shrimps::GenerateEvent(ATOOLS::Blob_List * blobs) { return p_generator->MinimumBiasEvent(blobs); } ATOOLS::Return_Value::code Shrimps::FillBeamBlobs(ATOOLS::Blob_List * blobs) { p_beamremnants->SetEikonal(p_generator->GetEikonal()); return p_beamremnants->FillBeamBlobs(blobs); } void Shrimps::CleanUp(const size_t & mode) { p_generator->Reset(); p_beamremnants->Reset(); } void Shrimps::GenerateXsecs() { msg_Out()< energies, elastics; ReadEnergiesFromFile(energies,"energies_xsecs.dat"); ReadEnergiesFromFile(elastics,"energies_elastics.dat"); std::vector xsectot, xsecinel, xsecelas; Cross_Sections xsecs; for (std::set::iterator energy_iter=energies.begin(); energy_iter!=energies.end();energy_iter++) { double energy = (*energy_iter); MBpars.UpdateForNewEnergy(energy); InitialiseSingleChannelEikonals(); xsecs.CalculateCrossSections(); xsectot.push_back(xsecs.SigmaTot()/1.e9); xsecinel.push_back(xsecs.SigmaInel()/1.e9); xsecelas.push_back(xsecs.SigmaEl()/1.e9); msg_Out()<<"** "< " <<"xstot = "< & energies, const std::vector & xsectot, const std::vector & xsecinel, const std::vector & xsecelas, std::string dirname) { std::string filename(dirname+std::string("/xsecs.dat")); std::ofstream was; was.open(filename.c_str()); was<<"# BEGIN HISTO1D /XSECS/total\n"; was<<"Path=/XSECS/total"<::iterator energy_iter=energies.begin(); energy_iter!=energies.end();energy_iter++) { was<<(*energy_iter)<<" "<<(*energy_iter)<<" " <::iterator energy_iter=energies.begin(); energy_iter!=energies.end();energy_iter++) { was<<(*energy_iter)<<" "<<(*energy_iter)<<" " <::iterator energy_iter=energies.begin(); energy_iter!=energies.end();energy_iter++) { was<<(*energy_iter)<<" "<<(*energy_iter)<<" " < & energies, std::string infile) { std::ifstream input; input.open(infile.c_str()); if(!input){ msg_Error()<<"File "<>test; energies.insert(std::atof(test.c_str())); } input.close(); } void Shrimps::TestShrimps(BEAM::Beam_Spectra_Handler *const beam, PDF::ISR_Handler *const isr) { msg_Info()<<"Start testing SHRiMPS.\n"; std::string dirname = std::string("Tests"); ATOOLS::MakeDir(dirname); ResetTheFramework(); InitialiseFormFactors(); InitialiseBeamRemnants(beam,isr); InitialiseSingleChannelEikonals(); PrintAlphaS(dirname); PrintPDFs(dirname); MBpars.GetFormFactors()->front()->Test(dirname); TestEikonalGrids(dirname); TestCrossSections(dirname); TestEventGeneration(dirname); msg_Info()<<"Tests done. Results to be found in "< (MODEL::s_model->GetScalarFunction(std::string("strong_cpl")))); std::string filename(dirname+"/alphas.dat"); std::ofstream was; was.open(filename.c_str()); was<<"# Q [GeV] alpha_s(Q^2)"<<"\n"; for (int i=0; ifront()); double Delta(MBpars.GetEikonalParameters().Delta); double Ymax(MBpars.GetEikonalParameters().Ymax); Analytic_Contributor ana12(ff,Delta,Ymax,+1); Analytic_Contributor ana21(ff,Delta,Ymax,-1); Omega_ik * eikonal(MBpars.GetEikonals()->front()); eikonal->TestIndividualGrids(&ana12,&ana21,Ymax,dirname); Analytic_Eikonal anaeik; eikonal->TestEikonal(&anaeik,dirname); } void Shrimps::TestCrossSections(const std::string & dirname) { Cross_Sections cross; cross.CalculateCrossSections(); cross.Test(dirname); } void Shrimps::TestEventGeneration(const std::string & dirname) { Event_Generator generator; generator.Initialise(); generator.Test(dirname); }