# Project CMSSW displayed by LXR

File indexing completed on 2024-04-06 12:23:26

```0001 /***********************************************************************/
0002 /*                                                                     */
0003 /*              Finding MT2W                                           */
0004 /*              Reference:  arXiv:1203.4813 [hep-ph]                   */
0005 /*              Authors: Yang Bai, Hsin-Chia Cheng,                    */
0006 /*                       Jason Gallicchio, Jiayin Gu                   */
0007 /*              Based on MT2 by: Hsin-Chia Cheng, Zhenyu Han           */
0008 /*              May 8, 2012, v1.00a                                    */
0009 /*                                                                     */
0010 /***********************************************************************/
0011 #ifndef PhysicsTools_Heppy_mt2w_bisect_H
0012 #define PhysicsTools_Heppy_mt2w_bisect_H
0013
0014 namespace heppy {
0015
0016   namespace mt2w_bisect {
0017     class mt2w {
0018     public:
0019       static const float RELATIVE_PRECISION;
0020       static const float ABSOLUTE_PRECISION;
0021       static const float MIN_MASS;
0022       static const float ZERO_MASS;
0023       static const float SCANSTEP;
0024
0025       mt2w(double upper_bound = 500.0, double error_value = 499.0, double scan_step = 0.5);
0026       // Constructor where:
0027       //    upper_bound:  the upper bound of search for MT2W, default value is 500 GeV
0028       //    error_value:  if we couldn't find any compatible region below upper_bound, this value gets returned.
0029       //                  -1.0 is a reasonable to indicate error, but upper_bound-1.0 allows a simple greater-than cut for signal
0030       //    scan_step:    if we need to scan to find the compatible region, this is the step of the scan
0031       void set_momenta(double *pl0, double *pb10, double *pb20, double *pmiss0);  //b1 pairs with l
0032       void set_momenta(double El,
0033                        double plx,
0034                        double ply,
0035                        double plz,
0036                        double Eb1,
0037                        double pb1x,
0038                        double pb1y,
0039                        double pb1z,
0040                        double Eb2,
0041                        double pb2x,
0042                        double pb2y,
0043                        double pb2z,
0044                        double pmissx,
0045                        double pmissy);  // Same as above without pointers/arrays
0046       // Where the input 4-vector information represents:
0047       //    l is the visible lepton
0048       //    b1 is the bottom on the same side as the visible lepton
0049       //    b2 is the other bottom (paired with the invisible W)
0050       //    pmiss is missing momentum with only x and y components.
0051       double get_mt2w();  // Calculates result, which is cached until set_momenta is called.
0052                           //  void   print();
0053
0054     protected:
0055       void mt2w_bisect();  // The real work is done here.
0056
0057     private:
0058       bool solved;
0059       bool momenta_set;
0060       double upper_bound;
0061       double error_value;
0062       double scan_step;
0063       double mt2w_b;
0064
0065       int teco(double mtop);  // test the compatibility of a given trial top mass mtop
0066       inline int signchange_n(long double t1, long double t2, long double t3, long double t4, long double t5);
0067       inline int signchange_p(long double t1, long double t2, long double t3, long double t4, long double t5);
0068
0069       //data members
0070       double plx, ply, plz, ml, El;       // l is the visible lepton
0071       double pb1x, pb1y, pb1z, mb1, Eb1;  // b1 is the bottom on the same side as the visible lepton
0072       double pb2x, pb2y, pb2z, mb2, Eb2;  // b2 is the other bottom
0073       double pmissx, pmissy;              // x and y component of missing p_T
0074       double mv, mw;                      //mass of neutrino and W-boson
0075
0076       //auxiliary definitions
0077       double mlsq, Elsq;
0078       double mb1sq, Eb1sq;
0079       double mb2sq, Eb2sq;
0080
0081       //auxiliary coefficients
0082       double a1, b1, c1, a2, b2, c2, d1, e1, f1, d2, e2, f2;
0083       double d2o, e2o, f2o;
0084
0085       double precision;
0086     };
0087
0088   }  //end namespace mt2w_bisect
0089 }  //end namespace heppy
0090
0091 #endif```