Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:31:17

0001 //
0002 //
0003 // File: hitfit/Top_Decaykin.h
0004 // Purpose: Calculate some kinematic quantities for ttbar events.
0005 // Created: Jul, 2000, sss, based on run 1 mass analysis code.
0006 //
0007 // CMSSW File      : interface/Top_Decaykin.h
0008 // Original Author : Scott Stuart Snyder <snyder@bnl.gov> for D0
0009 // Imported to CMSSW by Haryo Sumowidagdo <Suharyo.Sumowidagdo@cern.ch>
0010 //
0011 
0012 /**
0013     @file Top_Decaykin.h
0014 
0015     @brief A class to hold functions to calculate kinematic quantities
0016     of interest in  \f$ t\bar{t} \to \ell + 4 \mathrm{jets} \f$  events.
0017 
0018     @author Scott Stuart Snyder <snyder@bnl.gov>
0019 
0020     @par Creation date:
0021     Jul 2000.
0022 
0023     @par Modification History:
0024     Apr 2009: Haryo Sumowidagdo <Suharyo.Sumowidagdo@cern.ch>:
0025     Imported to CMSSW.<br>
0026     Nov 2009: Haryo Sumowidagdo <Suharyo.Sumowidagdo@cern.ch>:
0027     Added doxygen tags for automatic generation of documentation.
0028 
0029     @par Terms of Usage:
0030     With consent for the original author (Scott Snyder).
0031 
0032  */
0033 
0034 #ifndef HITFIT_TOP_DECAYKIN_H
0035 #define HITFIT_TOP_DECAYKIN_H
0036 
0037 #include "CLHEP/Vector/Boost.h"
0038 
0039 #include "TopQuarkAnalysis/TopHitFit/interface/fourvec.h"
0040 #include <iosfwd>
0041 
0042 namespace hitfit {
0043 
0044   class Lepjets_Event;
0045 
0046   /**
0047     @brief A class to hold functions to calculate kinematic quantities
0048     of interest in  \f$ t\bar{t} \to \ell + 4 \mathrm{jets} \f$  events.
0049     This class has no state, only static member functions.
0050  */
0051   class Top_Decaykin
0052   //
0053   // Purpose: Calculate some kinematic quantities for ttbar events.
0054   //          This class has no state --- just static member functions.
0055   //
0056   {
0057   public:
0058     // Solve for the longitudinal z-momentum that makes the leptonic
0059     // top have mass TMASS.
0060     /**
0061      @brief Solve for the neutrino longitudinal  \f$ z- \f$ momentum
0062      that makes the leptonic top have a certain value of mass.  Returns
0063      <b>TRUE</b> if there were real solutions.  Returns <b>FALSE</b> if there
0064      were only complex solutions.  In case of complex solutions, the real
0065      components of the solutions are given.
0066 
0067      @param ev Input:The event to solve.
0068 
0069      @param tmass Input: The desired value of top quark  mass in GeV.
0070 
0071      @param nuz1 Output: The first solution (smaller absolute value).
0072 
0073      @param nuz2 Output: The second solution.
0074    */
0075     static bool solve_nu_tmass(const Lepjets_Event& ev, double tmass, double& nuz1, double& nuz2);
0076 
0077     // Solve for the longitudinal z-momentum that makes the leptonic
0078     // top have mass TMASS, with imaginary component returned.
0079     /**
0080      @brief Solve for the neutrino longitudinal  \f$ z- \f$ momentum
0081      that makes the leptonic top have a certain value of mass.  The
0082      complex component of the solutions are also given.
0083      Returns <b>TRUE</b> if there were real solutions.
0084      Returns <b>FALSE</b> if there were only complex solutions.
0085      In case of real solutions, the first solution is the one which have
0086      smaller absolute value.  In case of imaginary solutions (which are
0087      complex conjugate of each other), the first solution is the one
0088      which have imaginary component in the lower half of the complex plane,
0089      i.e., the one which have negative imaginary component).
0090 
0091      @param ev Input:The event to solve.
0092 
0093      @param tmass Input: The desired value of top quark  mass in GeV.
0094 
0095      @param re_nuz1 Output: Real component of the first solution.
0096 
0097      @param im_nuz1 Output: Imaginary component of the first solution.
0098 
0099      @param re_nuz2 Output: Real component of the second solution.
0100 
0101      @param im_nuz2 Output: Imaginary component of the second solution.
0102 
0103    */
0104     static bool solve_nu_tmass(
0105         const Lepjets_Event& ev, double tmass, double& re_nuz1, double& im_nuz1, double& re_nuz2, double& im_nuz2);
0106 
0107     // Solve for the longitudinal z-momentum that makes the leptonic
0108     // W have mass WMASS.
0109     /**
0110      @brief Solve for the longitudinal  \f$ z- \f$ momentum that makes the
0111      leptonic  \f$ W \f$ -boson to have a certain value of mass.  Returns
0112      <b>TRUE</b> if there were real solutions.  Returns <b>FALSE</b> if there
0113      were only complex solutions.  In case of complex solutions, the real
0114      components of the solutions are given.
0115 
0116 
0117      @param ev Input: The event to solve.
0118 
0119      @param wmass Input: The desired mass of the  \f$ W- \f$ boson in GeV.
0120 
0121      @param nuz1 Output: First solution (smaller absolute value).
0122 
0123      @param nuz2 Output: Second solution.
0124 
0125    */
0126     static bool solve_nu(const Lepjets_Event& ev, double wmass, double& nuz1, double& nuz2);
0127 
0128     // Solve for the longitudinal z-momentum that makes the leptonic
0129     // W have mass WMASS, with imaginary component returned.
0130     /**
0131      @brief Solve for the longitudinal  \f$ z- \f$ momentum that makes the
0132      leptonic  \f$ W \f$ -boson to have a certain value of mass.  The
0133      complex component of the solutions are also given.
0134      Returns <b>TRUE</b> if there were real solutions.
0135      Returns <b>FALSE</b> if there were only complex solutions.
0136      In case of real solutions, the first solution is the one which have
0137      smaller absolute value.  In case of imaginary solutions (which are
0138      complex conjugate of each other), the first solution is the one
0139      which have imaginary component in the lower half of the complex plane,
0140      i.e., the one which have negative imaginary component).
0141 
0142      @param ev Input: The event to solve.
0143 
0144      @param wmass Input: The desired mass of the  \f$ W- \f$ boson in GeV.
0145 
0146      @param re_nuz1 Output: Real component of the first solution.
0147 
0148      @param im_nuz1 Output: Imaginary component of the first solution.
0149 
0150      @param re_nuz2 Output: Real component of the second solution.
0151 
0152      @param im_nuz2 Output: Imaginary component of the second solution.
0153 
0154    */
0155     static bool solve_nu(
0156         const Lepjets_Event& ev, double wmass, double& re_nuz1, double& im_nuz1, double& re_nuz2, double& im_nuz2);
0157 
0158     // Sum up the appropriate 4-vectors to find the hadronic W.
0159     /**
0160      @brief Sum up the appropriate four-momenta to find the hadronic
0161       \f$ W- \f$ boson.
0162 
0163      @param ev The event.
0164    */
0165     static Fourvec hadw(const Lepjets_Event& ev);
0166 
0167     // Find the higher pT jet from hadronic W
0168     /**
0169      @brief Return the hadronic  \f$ W- \f$ boson jet which have higher
0170       \f$ p_{T} \f$ .
0171 
0172      @param ev The event.
0173    */
0174     static Fourvec hadw1(const Lepjets_Event& ev);
0175 
0176     // Find the lower pT jet from hadronic W
0177     /**
0178      @brief Return the hadronic  \f$ W- \f$ boson jet which have lower
0179       \f$ p_{T} \f$ .
0180 
0181      @param ev The event.
0182    */
0183     static Fourvec hadw2(const Lepjets_Event& ev);
0184 
0185     // Sum up the appropriate 4-vectors to find the leptonic W.
0186     /**
0187      @brief Sum up the appropriate four-momenta to find the leptonic
0188       \f$ W- \f$ boson.
0189 
0190      @param ev The event.
0191    */
0192     static Fourvec lepw(const Lepjets_Event& ev);
0193 
0194     // Sum up the appropriate 4-vectors to find the hadronic t.
0195     /**
0196      @brief Sum up the appropriate four-momenta to find the hadronic
0197      top quark.
0198 
0199      @param ev The event.
0200    */
0201     static Fourvec hadt(const Lepjets_Event& ev);
0202 
0203     // Sum up the appropriate 4-vectors to find the leptonic t.
0204     /**
0205      @brief Sum up the appropriate four-momenta to find the leptonic
0206      top quark.
0207 
0208      @param ev The event.
0209    */
0210     static Fourvec lept(const Lepjets_Event& ev);
0211 
0212     // Print kinematic information for EV.
0213     /**
0214      @brief Print the kinematic information for an event.
0215 
0216      @param s The stream of which to write.
0217 
0218      @param ev The event to be printed.
0219    */
0220     static std::ostream& dump_ev(std::ostream& s, const Lepjets_Event& ev);
0221 
0222     // Solve cos theta star
0223     /**
0224      @brief Calculate  \f$ \cos \theta^{*} \f$  in top quark decay.
0225 
0226      @param fermion The four-momentum of fermion from  \f$ W- \f$ boson
0227      from top decay.
0228 
0229      @param W The four-momentum of  \f$ W \f$ boson from top decay.
0230 
0231      @param top The four-momentum of top.
0232    */
0233     static double cos_theta_star(const Fourvec& fermion, const Fourvec& W, const Fourvec& top);
0234 
0235     // Solve cos theta star in lepton side of lepton+jets event
0236     /**
0237      @brief Calculate the lepton  \f$ \cos \theta^{*} \f$  in top
0238      quark leptonic decay.
0239 
0240      @param ev The event to solve.
0241    */
0242     static double cos_theta_star(const Lepjets_Event& ev);
0243 
0244     // Solve cos theta star in lepton side of lepton+jets event
0245     /**
0246      @brief Calculate the lepton  \f$ \cos \theta^{*} \f$  in top
0247      quark leptonic decay.
0248 
0249      @param ev The event to solve.
0250    */
0251     static double cos_theta_star_lept(const Lepjets_Event& ev);
0252 
0253     // Solve cos theta star in hadronic side of lepton+jets event
0254     /**
0255      @brief Calculate the hadronic  \f$ \cos \theta^{*} \f$  in top
0256      quark leptonic decay.  As there is no information on the weak
0257      isospin component of the fermion, the absolute value of
0258       \f$ \cos \theta^{*} \f$  will be returned (the solutions for
0259      up-type and down-type fermions will differ only in sign but not
0260      in magnitude).
0261 
0262      @param ev The event to solve.
0263    */
0264     static double cos_theta_star_hadt(const Lepjets_Event& ev);
0265   };
0266 
0267 }  // namespace hitfit
0268 
0269 #endif  // not HITFIT_TOP_DECAYKIN_H