rivet is hosted by Hepforge, IPPP Durham
mt2_bisect.hh
Go to the documentation of this file.
00001 #ifndef MT2_BISECT_H
00002 #define MT2_BISECT_H
00003 
00004 /***********************************************************************/
00005 /*                                                                     */
00006 /*              Finding mt2 by Bisection                               */
00007 /*                                                                     */
00008 /*              Authors: Hsin-Chia Cheng, Zhenyu Han                   */ 
00009 /*              Dec 11, 2008, v1.01a                                   */
00010 /*                                                                     */
00011 /*              see arXiv:0810.5178                                    */  
00012 /*                                                                     */  
00013 /*              Wrapped for Rivet by D. Grellscheid                    */
00014 /*              Apr 13, 2011                                           */
00015 /*                                                                     */  
00016 /***********************************************************************/
00017 
00018 namespace Rivet {
00019 
00020 namespace mt2_bisect
00021 {
00022 
00023 /*The user can change the desired precision below, the larger one of the following two definitions is used. Relative precision less than 0.00001 is not guaranteed to be achievable--use with caution*/ 
00024 
00025   const double RELATIVE_PRECISION = 0.00001; 
00026   //defined as precision = RELATIVE_PRECISION * scale, where scale = max{Ea, Eb}
00027 
00028   const double ABSOLUTE_PRECISION = 0.0;     
00029   //absolute precision for mt2, unused by default
00030 
00031 
00032 //Reserved for expert
00033   const double MIN_MASS = 0.1; //if ma<MINMASS and mb<MINMASS, use massless code
00034   const double ZERO_MASS = 0.000; //give massless particles a small mass
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   // void   print();
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       //data members
00062       double pax, pay, ma, Ea;
00063       double pmissx, pmissy;
00064       double pbx, pby, mb, Eb;
00065       double mn, mn_unscale;
00066      
00067       //auxiliary definitions
00068       double masq, Easq;
00069       double mbsq, Ebsq;
00070       double pmissxsq, pmissysq;
00071       double mnsq;
00072 
00073       //auxiliary coefficients
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 }//end namespace mt2_bisect
00082 
00083 }//end namespace Rivet
00084 
00085 #endif