#include "AMISIC++/Perturbative/MI_Processes.H" #include "AMISIC++/Tools/Impact_Parameter.H" #include "ATOOLS/Math/Gauss_Integrator.H" #include "ATOOLS/Math/MathTools.H" #include "ATOOLS/Math/Random.H" #include "ATOOLS/Math/Histogram.H" #include "ATOOLS/Org/Message.H" using namespace AMISIC; using namespace ATOOLS; // All equations in this file refer to // Sjostrand-van der Zijl, PRD 36 (1987) 2019. Impact_Parameter::Impact_Parameter() : p_pint(new Interaction_Probability()), p_mo(p_pint->GetOverlap()), m_test(false), m_ana(true) {} Impact_Parameter::~Impact_Parameter() { delete p_pint; if (m_ana) FinishAnalysis(); } void Impact_Parameter::Initialize(const double & xsecratio) { p_pint->Initialize(xsecratio); m_oexp = p_pint->OverlapExpectation(); m_fc = m_oexp/p_mo->Integral()*p_pint->Integral(); m_bmax = p_mo->Bmax(); m_bnorm = p_pint->Bnorm(); if (m_test) Test(); if (m_ana) InitAnalysis(); } double Impact_Parameter::operator()(const double & b) { // This is f(b), the enhancement factor return m_enhancement = (bSudakovArgument(pt2); double sudakov, softpart; int trials = 1000; do { m_b = p_mo->SelectB(); softpart = m_fc * (*this)(m_b); sudakov = exp(-softpart * hardpart); if (m_ana) Analyse(pt2,sudakov,softpart,hardpart); //msg_Out()<Get() && (trials--)>0); if (trials<=0) msg_Error()<::iterator hit=m_histos.begin();hit!=m_histos.end();hit++) { histo = hit->second; name = std::string("MPI_Analysis/")+hit->first+std::string(".dat"); histo->Finalize(); histo->Output(name); delete histo; } m_histos.clear(); } void Impact_Parameter::BAnalyse(const double & pt2,const double & b) { m_histos[std::string("B_tot")]->Insert(b); if (sqrt(pt2)<25.) m_histos[std::string("B_25")]->Insert(b); else if (sqrt(pt2)<40.) m_histos[std::string("B_40")]->Insert(b); else if (sqrt(pt2)<100.) m_histos[std::string("B_100")]->Insert(b); } void Impact_Parameter::Analyse(const double & pt2,const double & sudakov, const double & softpart, const double & hardpart) { m_histos[std::string("Sud")]->Insert(sudakov); m_histos[std::string("Hard_tot")]->Insert(hardpart); m_histos[std::string("Soft_tot")]->Insert(softpart); if (sqrt(pt2)<25.) { m_histos[std::string("Sud_25")]->Insert(sudakov); m_histos[std::string("Hard_25")]->Insert(hardpart); m_histos[std::string("Soft_25")]->Insert(softpart); } else if (sqrt(pt2)<40.) { m_histos[std::string("Sud_40")]->Insert(sudakov); m_histos[std::string("Hard_40")]->Insert(hardpart); m_histos[std::string("Soft_40")]->Insert(softpart); } else if (sqrt(pt2)<100) { m_histos[std::string("Sud_100")]->Insert(sudakov); m_histos[std::string("Hard_100")]->Insert(hardpart); m_histos[std::string("Soft_100")]->Insert(softpart); } } void Impact_Parameter::Test() { msg_Out()<SelectB(); histoB.Insert(b); } histoB.Finalize(); histoB.Output("B_Distribution.dat"); /* Histogram histoB10(0,0.,1.1*m_bmax,100); for (long int i=0;double(i)