#include "AMISIC++/Perturbative/MI_Process.H" #include "ATOOLS/Math/Random.H" #include "ATOOLS/Math/Poincare.H" using namespace AMISIC; using namespace ATOOLS; using namespace std; // This is the base class for the "naked" matrix elements, which do not need to // know their flavours, as this is part of their explicit implementation. // We've reimplemented them to make sure we can call them depending on // Mandelstam variables, store the results, and they are also equipped with a // somewhat improved colour handling. XS_Base::XS_Base() : m_name(""), m_lastxs(0.), m_Ms(0.), m_Mt(0.), m_Mu(0.) { m_masses.resize(4); m_masses2.resize(m_masses.size()); m_colours.resize(m_masses.size()); for (size_t i=0;i & masses) : m_name(""), m_lastxs(0.), m_Ms(0.), m_Mt(0.), m_Mu(0.), m_masses(masses) { m_masses2.resize(m_masses.size()); m_colours.resize(m_masses.size()); for (size_t i=0;i & flavs) : m_name(flavs[0].IDName()+" "+flavs[1].IDName()+" --> "+ flavs[2].IDName()+" "+flavs[3].IDName()), p_me2(NULL), m_emin(0.), m_massless(flavs[0].HadMass()<1.0 && flavs[1].HadMass()<1.0 && flavs[2].HadMass()<1.0 && flavs[3].HadMass()<1.0), m_masslessIS((flavs[0].Kfcode()<4 || flavs[0].Kfcode()==21) && (flavs[1].Kfcode()<4 || flavs[1].Kfcode()==21)) { if (flavs.size()!=4) { msg_Error()<<"Error in "< "<Get(); // Until now we only have massless initial state partons. if (m_masslessIS) MasslessKinematics(pt2,phi,y3,y4); else return false; // If the final state is massive, we use the momenta stretcher to push // particles onto their mass shells. The logic is to go to the c.m. system // of the scatter, rescale momenta there, and boost back. if (m_flavs[2].Kfcode()==5 || m_flavs[2].Kfcode()==4) { Vec4D cms = m_momenta[0]+m_momenta[1]; Poincare scattercms(cms); for (size_t i=2;i m_emin && m_momenta[1][0] > m_emin); } bool MI_Process::AllowedKinematics(const double & Ehat) { // making sure that the c.m. energy of the scatter is larger than the // IS or FS sum of masses. if (m_massless) return true; return (m_PSmasses[0]+m_PSmasses[1]SetNumber(); for(size_t j=0;j<2;j++) part->SetFlow(j+1,p_me2->Colour(i,j)); return part; }