File indexing completed on 2023-03-17 11:18:21
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020 #ifndef __HEPTOPTAGGER_WRAPPERV2_HH__
0021 #define __HEPTOPTAGGER_WRAPPERV2_HH__
0022
0023 #include <fastjet/tools/TopTaggerBase.hh>
0024 #include <fastjet/CompositeJetStructure.hh>
0025 #include "CLHEP/Random/RandomEngine.h"
0026 #include <sstream>
0027
0028 FASTJET_BEGIN_NAMESPACE
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046 class HEPTopTaggerV2Structure;
0047
0048 class HEPTopTaggerV2 : public TopTaggerBase {
0049 public:
0050 HEPTopTaggerV2(bool DoOptimalR,
0051 bool DoQjets,
0052 double minSubjetPt,
0053 double minCandPt,
0054 double subjetMass,
0055 double muCut,
0056 double filtR,
0057 int filtN,
0058 int mode,
0059 double minCandMass,
0060 double maxCandMass,
0061 double massRatioWidth,
0062 double minM23Cut,
0063 double minM13Cut,
0064 double maxM13Cut,
0065 bool optRrejectMin)
0066 : DoOptimalR_(DoOptimalR),
0067 DoQjets_(DoQjets),
0068 minSubjetPt_(minSubjetPt),
0069 minCandPt_(minCandPt),
0070 subjetMass_(subjetMass),
0071 muCut_(muCut),
0072 filtR_(filtR),
0073 filtN_(filtN),
0074 mode_(mode),
0075 minCandMass_(minCandMass),
0076 maxCandMass_(maxCandMass),
0077 massRatioWidth_(massRatioWidth),
0078 minM23Cut_(minM23Cut),
0079 minM13Cut_(minM13Cut),
0080 maxM13Cut_(maxM13Cut),
0081 optRrejectMin_(optRrejectMin),
0082 engine_(nullptr) {}
0083
0084
0085 std::string description() const override;
0086
0087
0088
0089
0090
0091 PseudoJet result(const PseudoJet& jet) const override;
0092
0093 void set_rng(CLHEP::HepRandomEngine* engine) { engine_ = engine; }
0094
0095
0096 typedef HEPTopTaggerV2Structure StructureType;
0097
0098 private:
0099 bool DoOptimalR_;
0100 bool DoQjets_;
0101
0102 double minSubjetPt_;
0103 double minCandPt_;
0104
0105 double subjetMass_;
0106 double muCut_;
0107
0108 double filtR_;
0109 int filtN_;
0110
0111
0112
0113
0114
0115
0116
0117
0118 int mode_;
0119
0120
0121 double minCandMass_;
0122 double maxCandMass_;
0123
0124 double massRatioWidth_;
0125 double minM23Cut_;
0126 double minM13Cut_;
0127 double maxM13Cut_;
0128
0129 bool optRrejectMin_;
0130
0131
0132
0133 CLHEP::HepRandomEngine* engine_;
0134 };
0135
0136 class HEPTopTaggerV2Structure : public CompositeJetStructure, public TopTaggerBaseStructure {
0137 public:
0138
0139 HEPTopTaggerV2Structure(const std::vector<PseudoJet>& pieces_in,
0140 const JetDefinition::Recombiner* recombiner = nullptr)
0141 : CompositeJetStructure(pieces_in, recombiner),
0142 _fj_mass(0.0),
0143 _fj_pt(0.0),
0144 _fj_eta(0.0),
0145 _fj_phi(0.0),
0146 _top_mass(0.0),
0147 _unfiltered_mass(0.0),
0148 _pruned_mass(0.0),
0149 _fRec(-1.),
0150 _mass_ratio_passed(-1),
0151 _ptForRoptCalc(-1),
0152 _tau1Unfiltered(-1.),
0153 _tau2Unfiltered(-1.),
0154 _tau3Unfiltered(-1.),
0155 _tau1Filtered(-1.),
0156 _tau2Filtered(-1.),
0157 _tau3Filtered(-1.),
0158 _qweight(-1.),
0159 _qepsilon(-1.),
0160 _qsigmaM(-1.),
0161 W_rec(recombiner),
0162 rW_() {}
0163
0164
0165 inline PseudoJet const& W() const override {
0166 rW_ = join(_pieces[0], _pieces[1], *W_rec);
0167 return rW_;
0168 }
0169
0170
0171 inline PseudoJet W1() const {
0172 assert(!W().pieces().empty());
0173 return W().pieces()[0];
0174 }
0175
0176
0177 inline PseudoJet W2() const {
0178 assert(W().pieces().size() > 1);
0179 return W().pieces()[1];
0180 }
0181
0182
0183
0184
0185 inline const PseudoJet& non_W() const override { return _pieces[2]; }
0186
0187
0188 inline double fj_mass() const { return _fj_mass; }
0189
0190
0191 inline double fj_pt() const { return _fj_pt; }
0192
0193
0194 inline double fj_eta() const { return _fj_eta; }
0195
0196
0197 inline double fj_phi() const { return _fj_phi; }
0198
0199
0200 inline double top_mass() const { return _top_mass; }
0201
0202
0203 inline double unfiltered_mass() const { return _unfiltered_mass; }
0204
0205
0206 inline double pruned_mass() const { return _pruned_mass; }
0207
0208
0209 inline double fRec() const { return _fRec; }
0210
0211
0212 inline double mass_ratio_passed() const { return _mass_ratio_passed; }
0213
0214
0215 inline double ropt() const { return _ropt; }
0216
0217
0218 inline double roptCalc() const { return _roptCalc; }
0219
0220
0221 inline double ptForRoptCalc() const { return _ptForRoptCalc; }
0222
0223
0224 inline double Tau1Unfiltered() const { return _tau1Unfiltered; }
0225 inline double Tau2Unfiltered() const { return _tau2Unfiltered; }
0226 inline double Tau3Unfiltered() const { return _tau3Unfiltered; }
0227 inline double Tau1Filtered() const { return _tau1Filtered; }
0228 inline double Tau2Filtered() const { return _tau2Filtered; }
0229 inline double Tau3Filtered() const { return _tau3Filtered; }
0230
0231 inline double qweight() const { return _qweight; }
0232 inline double qepsilon() const { return _qepsilon; }
0233 inline double qsigmaM() const { return _qsigmaM; }
0234
0235 protected:
0236 double _fj_mass;
0237 double _fj_pt;
0238 double _fj_eta;
0239 double _fj_phi;
0240
0241 double _top_mass;
0242 double _unfiltered_mass;
0243 double _pruned_mass;
0244 double _fRec;
0245 int _mass_ratio_passed;
0246 double _ptForRoptCalc;
0247 double _ropt;
0248 double _roptCalc;
0249
0250 double _tau1Unfiltered;
0251 double _tau2Unfiltered;
0252 double _tau3Unfiltered;
0253 double _tau1Filtered;
0254 double _tau2Filtered;
0255 double _tau3Filtered;
0256 double _qweight;
0257 double _qepsilon;
0258 double _qsigmaM;
0259
0260 const JetDefinition::Recombiner* W_rec;
0261
0262 mutable PseudoJet rW_;
0263
0264
0265 friend class HEPTopTaggerV2;
0266 };
0267
0268
0269
0270 inline std::string HEPTopTaggerV2::description() const {
0271 std::ostringstream oss;
0272 oss << "HEPTopTaggerV2 with: "
0273 << "minSubjetPt = " << minSubjetPt_ << "minCandPt = " << minCandPt_ << "subjetMass = " << subjetMass_
0274 << "muCut = " << muCut_ << "filtR = " << filtR_ << "filtN = " << filtN_ << "mode = " << mode_
0275 << "minCandMass = " << minCandMass_ << "maxCandMass = " << maxCandMass_ << "massRatioWidth = " << massRatioWidth_
0276 << "minM23Cut = " << minM23Cut_ << "minM13Cut = " << minM13Cut_ << "maxM13Cut = " << maxM13Cut_ << std::endl;
0277 return oss.str();
0278 }
0279
0280 FASTJET_END_NAMESPACE
0281
0282 #endif