CMS 3D CMS Logo

HTTTopJetProducer.cc
Go to the documentation of this file.
4 #include "HTTTopJetProducer.h"
5 
6 using namespace edm;
7 using namespace cms;
8 using namespace reco;
9 using namespace std;
10 
11 HTTTopJetProducer::HTTTopJetProducer(edm::ParameterSet const& conf)
12  : FastjetJetProducer(conf),
13  optimalR_(false),
14  qJets_(false),
15  minFatjetPt_(200.),
16  minSubjetPt_(20.),
17  minCandPt_(200.),
18  maxFatjetAbsEta_(2.5),
19  subjetMass_(30.),
20  muCut_(0.8),
21  filtR_(0.3),
22  filtN_(5),
23  mode_(0),
24  minCandMass_(150.),
25  maxCandMass_(200.),
26  massRatioWidth_(15),
27  minM23Cut_(0.35),
28  minM13Cut_(0.2),
29  maxM13Cut_(1.3),
30  maxR_(1.5),
31  minR_(0.5),
32  rejectMinR_(false),
33  verbose_(false) {
34  // Read in all the options from the configuration
35  optimalR_ = conf.getParameter<bool>("optimalR");
36  qJets_ = conf.getParameter<bool>("qJets");
37  minFatjetPt_ = conf.getParameter<double>("minFatjetPt");
38  minSubjetPt_ = conf.getParameter<double>("minSubjetPt");
39  minCandPt_ = conf.getParameter<double>("minCandPt");
40  maxFatjetAbsEta_ = conf.getParameter<double>("maxFatjetAbsEta");
41  subjetMass_ = conf.getParameter<double>("subjetMass");
42  muCut_ = conf.getParameter<double>("muCut");
43  filtR_ = conf.getParameter<double>("filtR");
44  filtN_ = conf.getParameter<int>("filtN");
45  mode_ = conf.getParameter<int>("mode");
46  minCandMass_ = conf.getParameter<double>("minCandMass");
47  maxCandMass_ = conf.getParameter<double>("maxCandMass");
48  massRatioWidth_ = conf.getParameter<double>("massRatioWidth");
49  minM23Cut_ = conf.getParameter<double>("minM23Cut");
50  minM13Cut_ = conf.getParameter<double>("minM13Cut");
51  maxM13Cut_ = conf.getParameter<double>("maxM13Cut");
52  maxR_ = conf.getParameter<double>("maxR");
53  minR_ = conf.getParameter<double>("minR");
54  rejectMinR_ = conf.getParameter<bool>("rejectMinR");
55  verbose_ = conf.getParameter<bool>("verbose");
56 
57  // Create the tagger-wrapper
58  produces<HTTTopJetTagInfoCollection>();
59 
60  // Signal to the VirtualJetProducer that we have to add HTT information
62 
63  fjHEPTopTagger_ = std::unique_ptr<fastjet::HEPTopTaggerV2>(new fastjet::HEPTopTaggerV2(optimalR_,
64  qJets_,
65  minSubjetPt_,
66  minCandPt_,
67  subjetMass_,
68  muCut_,
69  filtR_,
70  filtN_,
71  mode_,
72  minCandMass_,
73  maxCandMass_,
74  massRatioWidth_,
75  minM23Cut_,
76  minM13Cut_,
77  maxM13Cut_,
78  rejectMinR_));
79 }
80 
82  if (qJets_) {
84  CLHEP::HepRandomEngine* engine = &rng->getEngine(e.streamID());
85  fjHEPTopTagger_->set_rng(engine);
86  }
87 
89 }
90 
92  if (!doAreaFastjet_ && !doRhoFastjet_) {
93  fjClusterSeq_ = ClusterSequencePtr(new fastjet::ClusterSequence(fjInputs_, *fjJetDefinition_));
94  } else if (voronoiRfact_ <= 0) {
96  ClusterSequencePtr(new fastjet::ClusterSequenceArea(fjInputs_, *fjJetDefinition_, *fjAreaDefinition_));
97  } else {
99  new fastjet::ClusterSequenceVoronoiArea(fjInputs_, *fjJetDefinition_, fastjet::VoronoiAreaSpec(voronoiRfact_)));
100  }
101 
102  //Run the jet clustering
103  vector<fastjet::PseudoJet> inclusiveJets = fjClusterSeq_->inclusive_jets(minFatjetPt_);
104 
105  if (verbose_)
106  cout << "Getting central jets" << endl;
107  // Find the transient central jets
108  vector<fastjet::PseudoJet> centralJets;
109  for (unsigned int i = 0; i < inclusiveJets.size(); i++) {
110  if (inclusiveJets[i].perp() > minFatjetPt_ && fabs(inclusiveJets[i].rapidity()) < maxFatjetAbsEta_) {
111  centralJets.push_back(inclusiveJets[i]);
112  }
113  }
114 
115  fastjet::HEPTopTaggerV2& HEPTagger = *fjHEPTopTagger_;
116 
117  vector<fastjet::PseudoJet>::iterator jetIt = centralJets.begin(), centralJetsEnd = centralJets.end();
118  if (verbose_)
119  cout << "Loop over jets" << endl;
120  for (; jetIt != centralJetsEnd; ++jetIt) {
121  if (verbose_)
122  cout << "CMS FJ jet pt: " << (*jetIt).perp() << endl;
123 
124  fastjet::PseudoJet taggedJet;
125 
126  taggedJet = HEPTagger.result(*jetIt);
127 
128  if (taggedJet != 0) {
129  fjJets_.push_back(taggedJet);
130  }
131  }
132 }
133 
135  const edm::EventSetup& iSetup,
137  // Set up output list
138  auto tagInfos = std::make_unique<HTTTopJetTagInfoCollection>();
139 
140  // Loop over jets
141  for (size_t ij = 0; ij != fjJets_.size(); ij++) {
142  HTTTopJetProperties properties;
144 
145  // Black magic:
146  // In the standard CA treatment the RefToBase is made from the handle directly
147  // Since we only have a OrphanHandle (the JetCollection is created by this process)
148  // we have to take the detour via the Ref
150  edm::RefToBase<reco::Jet> rtb(ref);
151 
152  fastjet::HEPTopTaggerV2Structure* s = (fastjet::HEPTopTaggerV2Structure*)fjJets_[ij].structure_non_const_ptr();
153 
154  properties.fjMass = s->fj_mass();
155  properties.fjPt = s->fj_pt();
156  properties.fjEta = s->fj_eta();
157  properties.fjPhi = s->fj_phi();
158 
159  properties.topMass = s->top_mass();
160  properties.unfilteredMass = s->unfiltered_mass();
161  properties.prunedMass = s->pruned_mass();
162  properties.fRec = s->fRec();
163  properties.massRatioPassed = s->mass_ratio_passed();
164 
165  properties.ropt = s->ropt();
166  properties.roptCalc = s->roptCalc();
167  properties.ptForRoptCalc = s->ptForRoptCalc();
168 
169  properties.tau1Unfiltered = s->Tau1Unfiltered();
170  properties.tau2Unfiltered = s->Tau2Unfiltered();
171  properties.tau3Unfiltered = s->Tau3Unfiltered();
172  properties.tau1Filtered = s->Tau1Filtered();
173  properties.tau2Filtered = s->Tau2Filtered();
174  properties.tau3Filtered = s->Tau3Filtered();
175  properties.qWeight = s->qweight();
176  properties.qEpsilon = s->qepsilon();
177  properties.qSigmaM = s->qsigmaM();
178 
179  tagInfo.insert(rtb, properties);
180  tagInfos->push_back(tagInfo);
181  }
182 
183  iEvent.put(std::move(tagInfos));
184 };
185 
188 
189  desc.add<bool>("optimalR", true);
190  desc.add<bool>("qJets", false);
191  desc.add<double>("minFatjetPt", 200.);
192  desc.add<double>("minSubjetPt", 0.);
193  desc.add<double>("minCandPt", 0.);
194  desc.add<double>("maxFatjetAbsEta", 99.);
195  desc.add<double>("subjetMass", 30.);
196  desc.add<double>("filtR", 0.3);
197  desc.add<int>("filtN", 5);
198  desc.add<int>("mode", 4);
199  desc.add<double>("minCandMass", 0.);
200  desc.add<double>("maxCandMass", 999999.);
201  desc.add<double>("massRatioWidth", 999999.);
202  desc.add<double>("minM23Cut", 0.);
203  desc.add<double>("minM13Cut", 0.);
204  desc.add<double>("maxM13Cut", 999999.);
205  desc.add<double>("maxR", 1.5);
206  desc.add<double>("minR", 0.5);
207  desc.add<bool>("rejectMinR", false);
208  desc.add<bool>("verbose", false);
209 
210  desc.add<int>("algorithm", 1); // where is it needed?
211 
215  desc.add<std::string>("jetCollInstanceName", "SubJets");
217 
218  descriptions.add("HTTTopJetProducer", desc);
219 }
220 
221 //define this as a plug-in
T getParameter(std::string const &) const
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:131
std::vector< fastjet::PseudoJet > fjJets_
std::shared_ptr< fastjet::ClusterSequence > ClusterSequencePtr
virtual CLHEP::HepRandomEngine & getEngine(StreamID const &)=0
Use this engine in event methods.
void insert(const edm::RefToBase< Jet > &jet, const HTTTopJetProperties &properties)
void produce(edm::Event &iEvent, const edm::EventSetup &iSetup) override
std::vector< fastjet::PseudoJet > fjInputs_
int iEvent
Definition: GenABIO.cc:224
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
ClusterSequencePtr fjClusterSeq_
void produce(edm::Event &iEvent, const edm::EventSetup &iSetup) override
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
ParameterDescriptionBase * add(U const &iLabel, T const &value)
void addHTTTopJetTagInfoCollection(edm::Event &iEvent, const edm::EventSetup &iSetup, edm::OrphanHandle< reco::BasicJetCollection > &oh) override
Namespace of DDCMS conversion namespace.
static void fillDescriptionsFromFastJetProducer(edm::ParameterSetDescription &desc)
void add(std::string const &label, ParameterSetDescription const &psetDescription)
T perp() const
Magnitude of transverse component.
fixed size matrix
HLT enums.
StreamID streamID() const
Definition: Event.h:96
std::unique_ptr< fastjet::HEPTopTaggerV2 > fjHEPTopTagger_
AreaDefinitionPtr fjAreaDefinition_
static void fillDescriptionsFromVirtualJetProducer(edm::ParameterSetDescription &desc)
def move(src, dest)
Definition: eostools.py:511
void runAlgorithm(edm::Event &iEvent, const edm::EventSetup &iSetup) override