mt2_bisect.hh
Go to the documentation of this file.00001 #ifndef MT2_BISECT_H
00002 #define MT2_BISECT_H
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 namespace Rivet {
00019
00020 namespace mt2_bisect
00021 {
00022
00023
00024
00025 const double RELATIVE_PRECISION = 0.00001;
00026
00027
00028 const double ABSOLUTE_PRECISION = 0.0;
00029
00030
00031
00032
00033 const double MIN_MASS = 0.1;
00034 const double ZERO_MASS = 0.000;
00035 const double SCANSTEP = 0.1;
00036
00037 class mt2
00038 {
00039 public:
00040
00041 mt2();
00042 void mt2_bisect();
00043 void mt2_massless();
00044 void set_momenta(double *pa0, double *pb0, double* pmiss0);
00045 void set_mn(double mn);
00046 double get_mt2();
00047
00048 int nevt;
00049 private:
00050
00051 bool solved;
00052 bool momenta_set;
00053 double mt2_b;
00054
00055 int nsols(double Dsq);
00056 int nsols_massless(double Dsq);
00057 inline int signchange_n( long double t1, long double t2, long double t3, long double t4, long double t5);
00058 inline int signchange_p( long double t1, long double t2, long double t3, long double t4, long double t5);
00059 int scan_high(double &Deltasq_high);
00060 int find_high(double &Deltasq_high);
00061
00062 double pax, pay, ma, Ea;
00063 double pmissx, pmissy;
00064 double pbx, pby, mb, Eb;
00065 double mn, mn_unscale;
00066
00067
00068 double masq, Easq;
00069 double mbsq, Ebsq;
00070 double pmissxsq, pmissysq;
00071 double mnsq;
00072
00073
00074 double a1, b1, c1, a2, b2, c2, d1, e1, f1, d2, e2, f2;
00075 double d11, e11, f12, f10, d21, d20, e21, e20, f22, f21, f20;
00076
00077 double scale;
00078 double precision;
00079 };
00080
00081 }
00082
00083 }
00084
00085 #endif