22 #include "fastjet/Error.hh" 23 #include "fastjet/JetDefinition.hh" 24 #include "fastjet/ClusterSequence.hh" 25 #include "fastjet/PseudoJet.hh" 26 #include "fastjet/tools/Pruner.hh" 27 #include "fastjet/tools/Filter.hh" 37 FASTJET_BEGIN_NAMESPACE
54 double D = -1.05737e+06;
55 double E = 9.95494e+07;
57 return A+B*
sqrt(x)+C/x+D/(x*x)+E/(x*x*x);
70 if (!jet.has_valid_cluster_sequence()){
71 throw Error(
"HEPTopTagger can only be applied on jets having an associated (and valid) ClusterSequence");
80 double mw_over_mt = 80.4/172.3;
81 double ratio_min = mw_over_mt * (100.-massRatioWidth_)/100.;
82 double ratio_max = mw_over_mt * (100.+massRatioWidth_)/100.;
109 double qepsilon = -1;
116 double q_dcut_fctr(0.5);
117 double q_exp_min(0.);
118 double q_exp_max(0.);
119 double q_rigidity(0.1);
120 double q_truncation_fctr(0.0);
122 double weight_q1 = -1.;
137 for (
int iq = 0; iq < niter; iq++) {
141 m_sum += tagger.
t().m();
142 m2_sum += tagger.
t().m() * tagger.
t().m();
143 if (tagger.
q_weight() > weight_q1) {
144 best_tagger = tagger;
150 tagger = best_tagger;
156 double mean_m = m_sum / qtags;
157 double mean_m2 = m2_sum / qtags;
158 qsigmaM =
sqrt(mean_m2 - mean_m*mean_m);
174 const JetDefinition::Recombiner *rec
175 = jet.associated_cluster_sequence()->jet_def().recombiner();
177 const vector<PseudoJet>& subjets = tagger.
top_subjets();
178 assert(subjets.size() == 3);
180 PseudoJet non_W = subjets[0];
181 PseudoJet W1 = subjets[1];
182 PseudoJet W2 = subjets[2];
183 PseudoJet W =
join(subjets[1], subjets[2], *rec);
185 PseudoJet
result = join<HEPTopTaggerV2Structure>( W1, W2, non_W, *rec);
188 s->_fj_mass = jet.m();
189 s->_fj_pt = jet.perp();
190 s->_fj_eta = jet.eta();
191 s->_fj_phi = jet.phi();
193 s->_top_mass = tagger.
t().m();
196 s->_fRec = tagger.
f_rec();
208 s->_qweight = qweight;
209 s->_qepsilon = qepsilon;
210 s->_qsigmaM = qsigmaM;
214 s->_ropt = tagger.
Ropt();
221 s->_ptForRoptCalc = -1;
229 FASTJET_END_NAMESPACE
edm::ErrorSummaryEntry Error
void set_top_mass_range(double xmin, double xmax)
void do_qjets(bool qjets)
void set_optimalR_reject_minimum(bool x)
const PseudoJet & t() const
void set_qjets_rng(CLHEP::HepRandomEngine *engine)
void set_filtering_minpt_subjet(double x)
void set_top_minpt(double x)
void set_mass_ratio_range(double rmin, double rmax)
void do_optimalR(bool optimalR)
double nsub_filtered(int order, fastjet::contrib::Njettiness::AxesMode axes=fastjet::contrib::Njettiness::kt_axes, double beta=1., double R0=1.)
double pt_for_Ropt_calc() const
void set_qjets(double q_zcut, double q_dcut_fctr, double q_exp_min, double q_exp_max, double q_rigidity, double q_truncation_fctr)
double unfiltered_mass() const
void set_filtering_R(double Rfilt)
double nsub_unfiltered(int order, fastjet::contrib::Njettiness::AxesMode axes=fastjet::contrib::Njettiness::kt_axes, double beta=1., double R0=1.)
void set_filtering_n(unsigned nfilt)
void set_mode(enum Mode mode)
static const std::string B
const std::vector< PseudoJet > & top_subjets() const
PseudoJet result(const PseudoJet &jet) const override
void set_mass_drop_threshold(double x)
void set_max_subjet_mass(double x)
static std::string join(char **cmd)
DecomposeProduct< arg, typename Div::arg > D
bool is_masscut_passed() const
double pruned_mass() const
void set_mass_ratio_cut(double m23cut, double m13cutmin, double m13cutmax)
FASTJET_BEGIN_NAMESPACE double R_min_expected_function(double x)
void set_optimalR_calc_fun(double(*f)(double))