00001
00002 #ifndef TtFullLepKinSolver_h
00003 #define TtFullLepKinSolver_h
00004
00005 #include "AnalysisDataFormats/TopObjects/interface/TtDilepEvtSolution.h"
00006
00007 #include "TLorentzVector.h"
00008 #include "TMatrixD.h"
00009 #include "TMath.h"
00010
00011 class TF2;
00012
00013 class TtFullLepKinSolver {
00014
00015 public:
00016
00017 TtFullLepKinSolver();
00018 TtFullLepKinSolver(double,double,double, double xx = 0, double yy = 0);
00019 ~TtFullLepKinSolver();
00020
00021 inline void useWeightFromMC(bool useMC) { useMCforBest_ = useMC; }
00022 TtDilepEvtSolution addKinSolInfo(TtDilepEvtSolution * asol);
00023
00024 private:
00025 void FindCoeff(const TLorentzVector al,
00026 const TLorentzVector l,
00027 const TLorentzVector b_al,
00028 const TLorentzVector b_l,
00029 double mt, double mat, double pxboost, double pyboost,
00030 double* q_coeff);
00031 void TopRec(const TLorentzVector al,
00032 const TLorentzVector l,
00033 const TLorentzVector b_al,
00034 const TLorentzVector b_l, double sol);
00035 double WeightSolfromMC();
00036 double WeightSolfromShape();
00037 int quartic(double* q_coeff, double* q_sol);
00038 int cubic(double* c_coeff, double* c_sol);
00039
00040
00041 double sqr(double x) {return (x*x);}
00042 void SWAP(double& realone, double& realtwo);
00043
00044 private:
00045 double topmass_begin;
00046 double topmass_end;
00047 double topmass_step;
00048 double pxmiss_, pymiss_;
00049
00050 double mw, maw, mb, mab;
00051
00052 double C;
00053 double D;
00054 double F;
00055 double pom;
00056 double k16;
00057 double k26;
00058 double k36;
00059 double k46;
00060 double k56;
00061 double k51;
00062 double k61;
00063 double m1;
00064 double m2;
00065 double m3;
00066 double n1;
00067 double n2;
00068 double n3;
00069
00070 TLorentzVector LV_n, LV_n_, LV_t, LV_t_, LV_tt_t, LV_tt_t_;
00071
00072
00073 TLorentzVector genLV_n, genLV_n_;
00074
00075 bool useMCforBest_;
00076
00077 TF2* EventShape_;
00078 };
00079
00080
00081 #endif