// Example from the Oxbridge Stransverse Mass Library -- oxbridgekinetics. // See http://www.hep.phy.cam.ac.uk/~lester/mt2/index.html // Authors: Christopher Lester and Alan Barr #ifndef EXAMPLEEVENT_H #define EXAMPLEEVENT_H /** * Imagine an LHC SUSY event in which two sleptons (sl_A and sl_B) * each decay into a visible leptons and an invisible * massive neutralino, where the invisiable neutralino * has mass "m_invis". Suppose the visible lepton from A has mass * m_a_vis and the visible lepton from B has mass m_b_vis; * * I.e. * p+ p- ---> Initial+final-state-radiation "G" * + * Hard-process * * where * Hard-process --> sl_A sl_B (2 sleptons) * * and * sl_A --> vis_A + invis_A * while * sl_B --> vis_B + invis_B. * * We could represent the momenta in such an example as follows: * */ #include #include "Mt2/Mt2Vectors.h" #include struct ExampleEvent { ExampleEvent() { // Here is a fairly uninteresting and arbitrary event m_rootS = 14000; const double vis_A_mass=100; const double vis_B_mass=150; m_invis_mass=100; m_vis_A_4mom.setVectM( 410, 20,-20, vis_A_mass); m_vis_B_4mom.setVectM(-210,-300, 44, vis_B_mass); m_otherVisible4Mom = Mt2::LorentzVector(Mt2::LorentzVector::InitEPxPyPz(0,0,0,0)); // maybe we should make this more interesting -- after all, most events have some transverse momentum for the hard process as a result of initial state or final state radiation. } public: static double shoot() { return static_cast(rand())/(static_cast(RAND_MAX)+1); } static double flipshoot() { return (shoot()-0.5)*2.0; } public: static std::vector randomUnitVector(const unsigned int dim) { std::vector direc(dim); while (true) { double magsq=0; for (unsigned int i=0; i0) { const double mag=sqrt(magsq); for (unsigned int i=0; i randomBoostVector(const unsigned int dim) { std::vector direc = randomUnitVector(dim); double mag=10; while (mag>=1 || mag<0) { mag = shoot(); } for (unsigned int i=0; i