CMS 3D CMS Logo

Public Member Functions | Static Public Attributes | Private Attributes

hitfit::RunHitFit< AElectron, AMuon, AJet, AMet > Class Template Reference

Template class of experiment-independent interface to HitFit. This class is intended to be used inside the programming environment of a specific experiment, where each type of physics objects has its own class/type. For using HitFit with generic four-vector classes, user can't use this class and have to use the Top_Fit class directly. The reason is: this class is designed assuming electron and muon are represented by different object type, a situation which is guaranteed to happen in any experiments. The class contains some static integer constants to limit the maximum amount of jets in an event before fitting. See the description of those constants for details. The numbers of permutations for $t\bar{t}$ and $t\bar{t}H$ as a function of the number of jets $N_{\mathrm{jet}}$ in the event for a few values of are. More...

#include <RunHitFit.h>

List of all members.

Public Member Functions

void AddJet (const AJet &jet, bool useObjRes=false)
 Add one jet into the internal event. This function will do nothing if the internal event has already contained the maximally allowed number of jets.
void AddLepton (const AMuon &muon, bool useObjRes=false)
 Add one muon into the internal event.
void AddLepton (const AElectron &electron, bool useObjRes=false)
 Add one electron into the internal event.
void clear ()
 Clear the internal event, fit results, and jets.
std::vector< Fit_Result >
::size_type 
FitAllPermutation ()
 Fit all permutations of the internal event. Returns the number of permutations.
std::vector< Fit_ResultGetFitAllPermutation ()
 Return the results of fitting all permutations of the internal event.
const Top_FitGetTopFit () const
 Return a constant reference to the underlying Top_Fit object.
std::vector< Lepjets_EventGetUnfittedEvent ()
 Return the unfitted events for all permutations.
 RunHitFit (const LeptonTranslatorBase< AElectron > &el, const LeptonTranslatorBase< AMuon > &mu, const JetTranslatorBase< AJet > &jet, const METTranslatorBase< AMet > &met, const std::string default_file, double lepw_mass, double hadw_mass, double top_mass)
 Constructor.
void SetKtResolution (const Resolution &res)
 Set the $k_{T}$ resolution of the internal event.
void SetMet (const AMet &met, bool useObjRes=false)
 Set the missing transverse energy of the internal event.
void SetMETResolution (const Resolution &res)
 Set the $E_{T}\!\!\!\!/$ resolution of the internal event.
 ~RunHitFit ()
 Destructor.

Static Public Attributes

static const unsigned int MAX_HITFIT = 1680
static const unsigned int MAX_HITFIT_JET = 8
static const unsigned int MAX_HITFIT_VAR = 32
static const unsigned int MIN_HITFIT_JET = 4
static const unsigned int MIN_HITFIT_TTH = 6

Private Attributes

LeptonTranslatorBase< AElectron > _ElectronTranslator
Lepjets_Event _event
std::vector< Fit_Result_Fit_Results
bool _jetObjRes
std::vector< AJet > _jets
JetTranslatorBase< AJet > _JetTranslator
METTranslatorBase< AMet > _METTranslator
LeptonTranslatorBase< AMuon > _MuonTranslator
Top_Fit _Top_Fit
std::vector< Lepjets_Event_Unfitted_Events

Detailed Description

template<class AElectron, class AMuon, class AJet, class AMet>
class hitfit::RunHitFit< AElectron, AMuon, AJet, AMet >

Template class of experiment-independent interface to HitFit. This class is intended to be used inside the programming environment of a specific experiment, where each type of physics objects has its own class/type. For using HitFit with generic four-vector classes, user can't use this class and have to use the Top_Fit class directly. The reason is: this class is designed assuming electron and muon are represented by different object type, a situation which is guaranteed to happen in any experiments. The class contains some static integer constants to limit the maximum amount of jets in an event before fitting. See the description of those constants for details. The numbers of permutations for $t\bar{t}$ and $t\bar{t}H$ as a function of the number of jets $N_{\mathrm{jet}}$ in the event for a few values of are.

$N_{\mathrm{jet}}$ $N_{t\bar{t}}$

$N_{t\bar{t}H}$

4 24

N/A

5 120

N/A

6 360

360

7 840

2520

8 1680

20160

If adjusting the limits defined by the static constants is desired, then please the following formulas.

The number for possible permutations, $N_{t\bar{t}}$, as a function of number of jets, $n$, for $t\bar{t}$ event is given by:

\[ N_{t\bar{t}}(n) = \frac{n!}{(n-4)!};~ n \ge 4 \]

The number for possible permutations, $N_{t\bar{t}H}$, as a function of number of jets, $n$, for $t\bar{t}H$ is given by:

\[ N_{t\bar{t}}(n) = \frac{n!}{(n-6)!2!};~ n \ge 6 \]

Parameters:
AElectronThe typename of the electron physics object class to be translated into HitFit's Lepjets_Event_Lep.
AMuonThe typename of the muon physics object class to be translated into HitFit's Lepjets_Event_Lep.
AJetThe typename of the jet physics object class to be translated into HitFit's Lepjets_Event_Jet.
AMetThe typename of the missing transverse energy physics object class be translated into HitFit's Fourvec.

Definition at line 157 of file RunHitFit.h.


Constructor & Destructor Documentation

template<class AElectron , class AMuon , class AJet , class AMet >
hitfit::RunHitFit< AElectron, AMuon, AJet, AMet >::RunHitFit ( const LeptonTranslatorBase< AElectron > &  el,
const LeptonTranslatorBase< AMuon > &  mu,
const JetTranslatorBase< AJet > &  jet,
const METTranslatorBase< AMet > &  met,
const std::string  default_file,
double  lepw_mass,
double  hadw_mass,
double  top_mass 
) [inline]

Constructor.

Parameters:
elThe function object to translate from AElectron to Lepjets_Event_Lep.
muThe function object to translate from AMuon to Lepjets_Event_Lep.
jetThe function object to translate from AJet to Lepjets_Event_Jet.
metThe function object to translate from AMet to Fourvec.
default_fileThe path of ASCII text files which contains the parameter settings for this instance of RunHitFit.
lepw_massThe mass to which the leptonic $ W- $ boson should be constrained to. A value of zero means this constraint will be removed.
hadw_massThe mass to which the hadronic $ W- $ boson should be constrained to. A value of zero means this constraint will be removed.
top_massThe mass to which the top quark should be constrained to. A value of zero means this constraint will be removed.

Definition at line 259 of file RunHitFit.h.

                                                              :
        _ElectronTranslator(el),
        _MuonTranslator(mu),
        _JetTranslator(jet),
        _METTranslator(met),
        _event(0,0),
        _jetObjRes(false),
        _Top_Fit(Top_Fit_Args(Defaults_Text(default_file)),lepw_mass,hadw_mass,top_mass)
    {
    }
template<class AElectron , class AMuon , class AJet , class AMet >
hitfit::RunHitFit< AElectron, AMuon, AJet, AMet >::~RunHitFit ( ) [inline]

Destructor.

Definition at line 280 of file RunHitFit.h.

    {
    }

Member Function Documentation

template<class AElectron , class AMuon , class AJet , class AMet >
void hitfit::RunHitFit< AElectron, AMuon, AJet, AMet >::AddJet ( const AJet &  jet,
bool  useObjRes = false 
) [inline]

Add one jet into the internal event. This function will do nothing if the internal event has already contained the maximally allowed number of jets.

Explanation about this function: This function does not directly add the jet into the internal event. Rather, this function store the jet in an internal array. The reason is: jet energy correction and resolution depends on the jet type in the permutation. Therefore RunHitFit will only add jet into the event after a specific jet permutation has been determined. This is done in the FitAllPermutation function().

Parameters:
jetThe jet to be added into the internal event.
useObjResBoolean parameter to indicate if the user would like to use the resolution embedded in the object, and not the resolution read when instantiating the class.

Definition at line 352 of file RunHitFit.h.

References hitfit::RunHitFit< AElectron, AMuon, AJet, AMet >::_jetObjRes, hitfit::RunHitFit< AElectron, AMuon, AJet, AMet >::_jets, and hitfit::RunHitFit< AElectron, AMuon, AJet, AMet >::MAX_HITFIT_JET.

    {
        // Only set flag when adding the first jet
        // the additional jets then WILL be treated in the
        // same way like the first jet.
        if (_jets.empty()) {
            _jetObjRes = useObjRes;
        }

        if (_jets.size() < MAX_HITFIT_JET) {
            _jets.push_back(jet);
        }
        return;
    }
template<class AElectron , class AMuon , class AJet , class AMet >
void hitfit::RunHitFit< AElectron, AMuon, AJet, AMet >::AddLepton ( const AElectron &  electron,
bool  useObjRes = false 
) [inline]

Add one electron into the internal event.

Parameters:
electronThe electron to be added into the internal event.
useObjResBoolean parameter to indicate if the user would like to use the resolution embedded in the object, and not the resolution read when instantiating the class.

Definition at line 307 of file RunHitFit.h.

References hitfit::RunHitFit< AElectron, AMuon, AJet, AMet >::_ElectronTranslator, hitfit::RunHitFit< AElectron, AMuon, AJet, AMet >::_event, hitfit::Lepjets_Event::add_lep(), and hitfit::electron_label.

    {
        _event.add_lep(_ElectronTranslator(electron,electron_label,useObjRes));
        return;
    }
template<class AElectron , class AMuon , class AJet , class AMet >
void hitfit::RunHitFit< AElectron, AMuon, AJet, AMet >::AddLepton ( const AMuon &  muon,
bool  useObjRes = false 
) [inline]

Add one muon into the internal event.

Parameters:
muonThe muon to be added into the internal event.
useObjResBoolean parameter to indicate if the user would like to use the resolution embedded in the object, and not the resolution read when instantiating the class.

Definition at line 324 of file RunHitFit.h.

References hitfit::RunHitFit< AElectron, AMuon, AJet, AMet >::_event, hitfit::RunHitFit< AElectron, AMuon, AJet, AMet >::_MuonTranslator, hitfit::Lepjets_Event::add_lep(), and hitfit::muon_label.

    {
        _event.add_lep(_MuonTranslator(muon,muon_label,useObjRes));
        return;
    }
template<class AElectron , class AMuon , class AJet , class AMet >
void hitfit::RunHitFit< AElectron, AMuon, AJet, AMet >::clear ( void  ) [inline]
template<class AElectron , class AMuon , class AJet , class AMet >
std::vector<Fit_Result>::size_type hitfit::RunHitFit< AElectron, AMuon, AJet, AMet >::FitAllPermutation ( ) [inline]

Fit all permutations of the internal event. Returns the number of permutations.

Definition at line 419 of file RunHitFit.h.

References hitfit::RunHitFit< AElectron, AMuon, AJet, AMet >::_event, hitfit::RunHitFit< AElectron, AMuon, AJet, AMet >::_Fit_Results, hitfit::RunHitFit< AElectron, AMuon, AJet, AMet >::_jetObjRes, hitfit::RunHitFit< AElectron, AMuon, AJet, AMet >::_jets, hitfit::RunHitFit< AElectron, AMuon, AJet, AMet >::_JetTranslator, hitfit::RunHitFit< AElectron, AMuon, AJet, AMet >::_Top_Fit, hitfit::RunHitFit< AElectron, AMuon, AJet, AMet >::_Unfitted_Events, hitfit::Lepjets_Event::add_jet(), hitfit::Top_Fit::args(), hitfit::Top_Fit_Args::do_higgs_flag(), hitfit::Top_Fit::fit_one_perm(), hitfit::hadb_label, hitfit::hadw1_label, hitfit::higgs_label, j, hitfit::lepb_label, hitfit::RunHitFit< AElectron, AMuon, AJet, AMet >::MAX_HITFIT_JET, hitfit::RunHitFit< AElectron, AMuon, AJet, AMet >::MIN_HITFIT_JET, hitfit::RunHitFit< AElectron, AMuon, AJet, AMet >::MIN_HITFIT_TTH, hitfit::Lepjets_Event::set_jet_types(), and hitfit::unknown_label.

    {

        if (_jets.size() < MIN_HITFIT_JET) {
            // For ttbar lepton+jets, a minimum of MIN_HITFIT_JETS jets
            // is required
            return 0;
        }

        if (_jets.size() > MAX_HITFIT_JET) {
            // Restrict the maximum number of jets in the fit
            // to prevent loop overflow
            return 0;
        }

        _Unfitted_Events.clear();
        _Fit_Results.clear();

        // Prepare the array of jet types for permutation
        std::vector<int> jet_types (_jets.size(), unknown_label);
        jet_types[0] = lepb_label;
        jet_types[1] = hadb_label;
        jet_types[2] = hadw1_label;
        jet_types[3] = hadw1_label;

        if (_Top_Fit.args().do_higgs_flag() && _jets.size() >= MIN_HITFIT_TTH) {
            jet_types[4] = higgs_label;
            jet_types[5] = higgs_label;
        }

        std::stable_sort(jet_types.begin(),jet_types.end());

        do {

            // begin loop over all jet permutation
            for (int nusol = 0 ; nusol != 2 ; nusol++) {
                // loop over two neutrino solution
                bool nuz = bool(nusol);

                // Copy the event
                Lepjets_Event fev = _event;

                // Add jets into the event, with the assumed type
                // in accord with the permutation.
                // The translator _JetTranslator will correctly
                // return object of Lepjets_Event_Jet with
                // jet energy correction applied in accord with
                // the assumed jet type (b or light).
                for (size_t j = 0 ; j != _jets.size(); j++) {
                    fev.add_jet(_JetTranslator(_jets[j],jet_types[j],_jetObjRes));
                }

                // Clone fev (intended to be fitted event)
                // to ufev (intended to be unfitted event)
                Lepjets_Event ufev = fev;

                // Set jet types.
                fev.set_jet_types(jet_types);
                ufev.set_jet_types(jet_types);

                // Store the unfitted event
                _Unfitted_Events.push_back(ufev);

                // Prepare the placeholder for various kinematic quantities
                double umwhad;
                double utmass;
                double mt;
                double sigmt;
                Column_Vector pullx;
                Column_Vector pully;

                // Do the fit
                double chisq= _Top_Fit.fit_one_perm(fev,
                                                    nuz,
                                                    umwhad,
                                                    utmass,
                                                    mt,
                                                    sigmt,
                                                    pullx,
                                                    pully);
                // Store output of the fit
                _Fit_Results.push_back(Fit_Result(chisq,
                                                  fev,
                                                  pullx,
                                                  pully,
                                                  umwhad,
                                                  utmass,
                                                  mt,
                                                  sigmt));

            } // end loop over two neutrino solution

        } while (std::next_permutation (jet_types.begin(), jet_types.end()));
        // end loop over all jet permutations

        return _Fit_Results.size();

    }
template<class AElectron , class AMuon , class AJet , class AMet >
std::vector<Fit_Result> hitfit::RunHitFit< AElectron, AMuon, AJet, AMet >::GetFitAllPermutation ( ) [inline]

Return the results of fitting all permutations of the internal event.

Definition at line 532 of file RunHitFit.h.

References hitfit::RunHitFit< AElectron, AMuon, AJet, AMet >::_Fit_Results.

    {
        return _Fit_Results;
    }
template<class AElectron , class AMuon , class AJet , class AMet >
const Top_Fit& hitfit::RunHitFit< AElectron, AMuon, AJet, AMet >::GetTopFit ( ) const [inline]

Return a constant reference to the underlying Top_Fit object.

Definition at line 409 of file RunHitFit.h.

References hitfit::RunHitFit< AElectron, AMuon, AJet, AMet >::_Top_Fit.

    {
        return _Top_Fit;
    }
template<class AElectron , class AMuon , class AJet , class AMet >
std::vector<Lepjets_Event> hitfit::RunHitFit< AElectron, AMuon, AJet, AMet >::GetUnfittedEvent ( ) [inline]

Return the unfitted events for all permutations.

Definition at line 522 of file RunHitFit.h.

References hitfit::RunHitFit< AElectron, AMuon, AJet, AMet >::_Unfitted_Events.

    {
        return _Unfitted_Events;
    }
template<class AElectron , class AMuon , class AJet , class AMet >
void hitfit::RunHitFit< AElectron, AMuon, AJet, AMet >::SetKtResolution ( const Resolution res) [inline]

Set the $k_{T}$ resolution of the internal event.

Parameters:
resThe resolution.

Definition at line 386 of file RunHitFit.h.

References hitfit::RunHitFit< AElectron, AMuon, AJet, AMet >::_event, and hitfit::Lepjets_Event::kt_res().

Referenced by hitfit::RunHitFit< AElectron, AMuon, AJet, AMet >::SetMETResolution().

    {
        _event.kt_res() = res;
        return;
    }
template<class AElectron , class AMuon , class AJet , class AMet >
void hitfit::RunHitFit< AElectron, AMuon, AJet, AMet >::SetMet ( const AMet &  met,
bool  useObjRes = false 
) [inline]

Set the missing transverse energy of the internal event.

Definition at line 372 of file RunHitFit.h.

References hitfit::RunHitFit< AElectron, AMuon, AJet, AMet >::_event, hitfit::RunHitFit< AElectron, AMuon, AJet, AMet >::_METTranslator, hitfit::Lepjets_Event::kt_res(), and hitfit::Lepjets_Event::met().

    {
        _event.met()    = _METTranslator(met,useObjRes);
        _event.kt_res() = _METTranslator.KtResolution(met,useObjRes);
        return;
    }
template<class AElectron , class AMuon , class AJet , class AMet >
void hitfit::RunHitFit< AElectron, AMuon, AJet, AMet >::SetMETResolution ( const Resolution res) [inline]

Set the $E_{T}\!\!\!\!/$ resolution of the internal event.

Parameters:
resThe $E_{T}\!\!\!\!/$ resolution, same as $k_{T}$ resolution.

Definition at line 399 of file RunHitFit.h.

References hitfit::RunHitFit< AElectron, AMuon, AJet, AMet >::SetKtResolution().

    {
        SetKtResolution(res);
        return;
    }

Member Data Documentation

template<class AElectron , class AMuon , class AJet , class AMet >
LeptonTranslatorBase<AElectron> hitfit::RunHitFit< AElectron, AMuon, AJet, AMet >::_ElectronTranslator [private]

The translator from AElectron to Lepjets_Event_Lep.

Definition at line 164 of file RunHitFit.h.

Referenced by hitfit::RunHitFit< AElectron, AMuon, AJet, AMet >::AddLepton().

template<class AElectron , class AMuon , class AJet , class AMet >
Lepjets_Event hitfit::RunHitFit< AElectron, AMuon, AJet, AMet >::_event [private]
template<class AElectron , class AMuon , class AJet , class AMet >
std::vector<Fit_Result> hitfit::RunHitFit< AElectron, AMuon, AJet, AMet >::_Fit_Results [private]
template<class AElectron , class AMuon , class AJet , class AMet >
bool hitfit::RunHitFit< AElectron, AMuon, AJet, AMet >::_jetObjRes [private]

Boolean flag which sets whether to use jet resolution read from file or jet resolution embedded in the physics objects.

This flag is only set when the FIRST jet is added into the event.

By default this flag is set to FALSE if user does not specify anything about which resolution to be used.

Definition at line 213 of file RunHitFit.h.

Referenced by hitfit::RunHitFit< AElectron, AMuon, AJet, AMet >::AddJet(), hitfit::RunHitFit< AElectron, AMuon, AJet, AMet >::clear(), and hitfit::RunHitFit< AElectron, AMuon, AJet, AMet >::FitAllPermutation().

template<class AElectron , class AMuon , class AJet , class AMet >
std::vector<AJet> hitfit::RunHitFit< AElectron, AMuon, AJet, AMet >::_jets [private]

The internal array of jets. Jets are kept in this array and not added into the internal event. The reason is: the jet energy correction applied to a jet is dependent on the assumed jet type (b or light) in the permutation. Therefore the decision is to store jets in their original format/data type.

Before a fit to a particular permutation is done, this class convert the jets in this array into Lepjets_Event_Jet format, taking into consideration the assumed jet type and applying the appropriate jet energy correction.

Definition at line 202 of file RunHitFit.h.

Referenced by hitfit::RunHitFit< AElectron, AMuon, AJet, AMet >::AddJet(), hitfit::RunHitFit< AElectron, AMuon, AJet, AMet >::clear(), and hitfit::RunHitFit< AElectron, AMuon, AJet, AMet >::FitAllPermutation().

template<class AElectron , class AMuon , class AJet , class AMet >
JetTranslatorBase<AJet> hitfit::RunHitFit< AElectron, AMuon, AJet, AMet >::_JetTranslator [private]

The translator from AJet to Lepjets_Event_Jet.

Definition at line 174 of file RunHitFit.h.

Referenced by hitfit::RunHitFit< AElectron, AMuon, AJet, AMet >::FitAllPermutation().

template<class AElectron , class AMuon , class AJet , class AMet >
METTranslatorBase<AMet> hitfit::RunHitFit< AElectron, AMuon, AJet, AMet >::_METTranslator [private]

The translator from AMet to Fourvec.

Definition at line 179 of file RunHitFit.h.

Referenced by hitfit::RunHitFit< AElectron, AMuon, AJet, AMet >::SetMet().

template<class AElectron , class AMuon , class AJet , class AMet >
LeptonTranslatorBase<AMuon> hitfit::RunHitFit< AElectron, AMuon, AJet, AMet >::_MuonTranslator [private]

The translator from AMuon to Lepjets_Event_Lep.

Definition at line 169 of file RunHitFit.h.

Referenced by hitfit::RunHitFit< AElectron, AMuon, AJet, AMet >::AddLepton().

template<class AElectron , class AMuon , class AJet , class AMet >
Top_Fit hitfit::RunHitFit< AElectron, AMuon, AJet, AMet >::_Top_Fit [private]

The interface between the event and the fitting algorithm.

Definition at line 218 of file RunHitFit.h.

Referenced by hitfit::RunHitFit< AElectron, AMuon, AJet, AMet >::FitAllPermutation(), and hitfit::RunHitFit< AElectron, AMuon, AJet, AMet >::GetTopFit().

template<class AElectron , class AMuon , class AJet , class AMet >
std::vector<Lepjets_Event> hitfit::RunHitFit< AElectron, AMuon, AJet, AMet >::_Unfitted_Events [private]
template<class AElectron , class AMuon , class AJet , class AMet >
const unsigned int hitfit::RunHitFit< AElectron, AMuon, AJet, AMet >::MAX_HITFIT = 1680 [static]

Maximum number of HitFit permutation in each event.

Definition at line 555 of file RunHitFit.h.

template<class AElectron , class AMuon , class AJet , class AMet >
const unsigned int hitfit::RunHitFit< AElectron, AMuon, AJet, AMet >::MAX_HITFIT_JET = 8 [static]

Maximum number of jet as input to HitFit in each event

Definition at line 550 of file RunHitFit.h.

Referenced by hitfit::RunHitFit< AElectron, AMuon, AJet, AMet >::AddJet(), and hitfit::RunHitFit< AElectron, AMuon, AJet, AMet >::FitAllPermutation().

template<class AElectron , class AMuon , class AJet , class AMet >
const unsigned int hitfit::RunHitFit< AElectron, AMuon, AJet, AMet >::MAX_HITFIT_VAR = 32 [static]

Maximum number of fitted variables in HitFit in each event

Definition at line 560 of file RunHitFit.h.

template<class AElectron , class AMuon , class AJet , class AMet >
const unsigned int hitfit::RunHitFit< AElectron, AMuon, AJet, AMet >::MIN_HITFIT_JET = 4 [static]

Minimum number of jet as input to HitFit in Tt event

Definition at line 540 of file RunHitFit.h.

Referenced by hitfit::RunHitFit< AElectron, AMuon, AJet, AMet >::FitAllPermutation().

template<class AElectron , class AMuon , class AJet , class AMet >
const unsigned int hitfit::RunHitFit< AElectron, AMuon, AJet, AMet >::MIN_HITFIT_TTH = 6 [static]

Minimum number of jet as input to HitFit in TtH event

Definition at line 545 of file RunHitFit.h.

Referenced by hitfit::RunHitFit< AElectron, AMuon, AJet, AMet >::FitAllPermutation().