// Header file for 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 MT2_302_CALCULATOR_H
#define MT2_302_CALCULATOR_H
#include "Mt2_300_Calculator.h"
namespace Mt2 {
/**
Class which knows how to calculate MT2 for the special case in which ONE
of the visible particles has ZERO lorentz-1+2 momentum.
This not something one would be able to measure in a real detector, but is
an idealisation which is useful for other MT2 calculators internally.
@author Alan Barr & Chris Lester
@date 9 Feb 2006 and onwards
*/
class Mt2_302_Calculator : public Mt2Calculator {
public:
/**
mt2_302
*/
double mt2_302(const LorentzTransverseVector& visibleA, // 3 d.o.f.
// 0 d.o.f. : Momentum of visibleB is taken to be zero!
const TwoVector & ptmiss, // 2 d.o.f. ... does not actually get used!
double mInvisible) {
// There is an analytic answer for this, so ww could write it in here!
// See for example (6) on 4/7/2007 in lester lab book 6.
// (The answer would change with a "root S" constraint for small visibleA mass and large mChi)
// However since the answer doesn't even use ptmiss, and I don't think it is good to type the
// same expression in too many placed independently, we will grab the result from the simplest
// implementation it is equivalent to:
static Mt2_300_Calculator calc;
const double ans = calc.mt2_300(visibleA, mInvisible);
m_lastSolutionType = calc.lastSolutionType();
return ans;
}
double mt2_302_Sq(const LorentzTransverseVector& visibleA, // 3 d.o.f.
// 0 d.o.f. : Momentum of visibleB is taken to be zero!
const TwoVector& ptmiss, // 2 d.o.f. ... does not actually get used!
double mInvisible) {
// There is an analytic answer for this, so ww could write it in here!
// See for example (6) on 4/7/2007 in lester lab book 6.
// (The answer would change with a "root S" constraint for small visibleA mass and large mChi)
// However since the answer doesn't even use ptmiss, and I don't think it is good to type the
// same expression in too many placed independently, we will grab the result from the simplest
// implementation it is equivalent to:
static Mt2_300_Calculator calc;
const double ans = calc.mt2_300_Sq(visibleA, mInvisible);
m_lastSolutionType = calc.lastSolutionType();
return ans;
}
Mt2_302_Calculator(const std::string & algName="Mt2_302_Calculator") : Mt2Calculator(algName) {};
};
}
#endif