#include "KtJet/KtDistance.h" #include "KtJet/KtUtil.h" #include "KtJet/KtDistanceInterface.h" #include #include #include #include namespace KtJet { KtDistance* getDistanceScheme(int angle, int collision_type) { if (angle == 1) return new KtDistanceAngle(collision_type); else if( angle == 2) return new KtDistanceDeltaR(collision_type); else if (angle == 3) return new KtDistanceQCD(collision_type); else{ std::cout << "WARNING, unreconised distance scheme specified!" << std::endl; std::cout << "Distance Scheme set to KtDistanceAngle" << std::endl; return new KtDistanceAngle(collision_type); } } KtDistanceAngle::KtDistanceAngle(int collision_type) : m_type(collision_type), m_name("angle") {} //KtDistanceAngle::~KtDistanceAngle() {} std::string KtDistanceAngle::name() const {return m_name;} KtFloat KtDistanceAngle::operator()(const KtLorentzVector & a) const { KtFloat kt, r, costh; const KtFloat small = 0.0001; // ??? Should be defined somewhere else? switch (m_type) { // direction of beam depends on collision type case 1: return -1; // e+e- : no beam remnant, so result will be ignored anyway break; case 2: // ep (p beam -z direction) costh = -(a.cosTheta()); break; case 3: // pe (p beam +z direction) costh = a.cosTheta(); break; case 4: // pp (p beams in both directions) costh = fabs(a.cosTheta()); break; default: // type out of range - WARNING ??? costh = 0.; break; } r = 2*(1-costh); if (r