CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
List of all members | Public Member Functions | Protected Member Functions | Protected Attributes
TtSemiLepHypothesis Class Referenceabstract

#include <TtSemiLepHypothesis.h>

Inheritance diagram for TtSemiLepHypothesis:
edm::EDProducer edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper TtSemiLepHypGenMatch TtSemiLepHypGeom TtSemiLepHypHitFit TtSemiLepHypKinFit TtSemiLepHypMaxSumPtWMass TtSemiLepHypMVADisc TtSemiLepHypWMassDeltaTopMass TtSemiLepHypWMassMaxSumPt

Public Member Functions

 TtSemiLepHypothesis (const edm::ParameterSet &)
 default constructor More...
 
 ~TtSemiLepHypothesis () override
 default destructor More...
 
- Public Member Functions inherited from edm::EDProducer
 EDProducer ()
 
SerialTaskQueueglobalLuminosityBlocksQueue ()
 
SerialTaskQueueglobalRunsQueue ()
 
ModuleDescription const & moduleDescription () const
 
 ~EDProducer () override
 
- Public Member Functions inherited from edm::ProducerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
std::vector
< edm::ProductResolverIndex >
const & 
indiciesForPutProducts (BranchType iBranchType) const
 
 ProducerBase ()
 
std::vector
< edm::ProductResolverIndex >
const & 
putTokenIndexToProductResolverIndex () const
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
std::function< void(BranchDescription
const &)> 
registrationCallback () const
 used by the fwk to register list of products More...
 
void resolvePutIndicies (BranchType iBranchType, ModuleToResolverIndicies const &iIndicies, std::string const &moduleLabel)
 
 ~ProducerBase () noexcept(false) override
 
- Public Member Functions inherited from edm::EDConsumerBase
std::vector< ConsumesInfoconsumesInfo () const
 
void convertCurrentProcessAlias (std::string const &processName)
 Convert "@currentProcess" in InputTag process names to the actual current process name. More...
 
 EDConsumerBase ()
 
 EDConsumerBase (EDConsumerBase const &)=delete
 
 EDConsumerBase (EDConsumerBase &&)=default
 
ESProxyIndex const * esGetTokenIndices (edm::Transition iTrans) const
 
std::vector< ESProxyIndex > const & esGetTokenIndicesVector (edm::Transition iTrans) const
 
std::vector< ESRecordIndex >
const & 
esGetTokenRecordIndicesVector (edm::Transition iTrans) const
 
ProductResolverIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
std::vector
< ProductResolverIndexAndSkipBit >
const & 
itemsToGetFrom (BranchType iType) const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void modulesWhoseProductsAreConsumed (std::array< std::vector< ModuleDescription const * > *, NumBranchTypes > &modulesAll, std::vector< ModuleProcessName > &modulesInPreviousProcesses, ProductRegistry const &preg, std::map< std::string, ModuleDescription const * > const &labelsToDesc, std::string const &processName) const
 
EDConsumerBase const & operator= (EDConsumerBase const &)=delete
 
EDConsumerBaseoperator= (EDConsumerBase &&)=default
 
bool registeredToConsume (ProductResolverIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
void selectInputProcessBlocks (ProductRegistry const &productRegistry, ProcessBlockHelperBase const &processBlockHelperBase)
 
ProductResolverIndexAndSkipBit uncheckedIndexFrom (EDGetToken) const
 
void updateLookup (BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet)
 
void updateLookup (eventsetup::ESRecordsToProxyIndices const &)
 
virtual ~EDConsumerBase () noexcept(false)
 

Protected Member Functions

void buildHypo (const edm::Handle< edm::View< reco::RecoCandidate > > &leps, const edm::Handle< std::vector< pat::MET > > &mets, const edm::Handle< std::vector< pat::Jet > > &jets, std::vector< int > &jetPartonAssociation)
 minimalistic build function for simple hypotheses More...
 
virtual void buildHypo (edm::Event &event, const edm::Handle< edm::View< reco::RecoCandidate > > &lepton, const edm::Handle< std::vector< pat::MET > > &neutrino, const edm::Handle< std::vector< pat::Jet > > &jets, std::vector< int > &jetPartonAssociation, const unsigned int iComb)=0
 build event hypothesis from the reco objects of a semi-leptonic event More...
 
virtual void buildKey ()=0
 build the event hypothesis key More...
 
reco::CompositeCandidate hypo ()
 return event hypothesis More...
 
bool isValid (const int &idx, const edm::Handle< std::vector< pat::Jet > > &jets)
 check if index is in valid range of selected jets More...
 
std::string jetCorrectionLevel (const std::string &quarkType)
 helper function to construct the proper correction level string for corresponding quarkType More...
 
int key () const
 
WDecay::LeptonType leptonType (const reco::RecoCandidate *cand)
 determine lepton type of reco candidate and return a corresponding WDecay::LeptonType; the type is kNone if it is whether a muon nor an electron More...
 
void produce (edm::Event &, const edm::EventSetup &) override
 produce the event hypothesis as CompositeCandidate and Key More...
 
void resetCandidates ()
 reset candidate pointers before hypo build process More...
 
template<typename C >
void setCandidate (const edm::Handle< C > &handle, const int &idx, reco::ShallowClonePtrCandidate *&clone)
 use one object in a collection to set a ShallowClonePtrCandidate More...
 
void setCandidate (const edm::Handle< std::vector< pat::Jet > > &handle, const int &idx, reco::ShallowClonePtrCandidate *&clone, const std::string &correctionLevel)
 use one object in a jet collection to set a ShallowClonePtrCandidate with proper jet corrections More...
 
void setNeutrino (const edm::Handle< std::vector< pat::MET > > &met, const edm::Handle< edm::View< reco::RecoCandidate > > &leps, const int &idx, const int &type)
 set neutrino, using mW = 80.4 to calculate the neutrino pz More...
 
- Protected Member Functions inherited from edm::ProducerBase
ProducesCollector producesCollector ()
 
- Protected Member Functions inherited from edm::EDConsumerBase
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
template<BranchType B = InEvent>
EDConsumerBaseAdaptor< B > consumes (edm::InputTag tag) noexcept
 
EDGetToken consumes (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken consumes (TypeToGet const &id, edm::InputTag const &tag)
 
ConsumesCollector consumesCollector ()
 Use a ConsumesCollector to gather consumes information from helper functions. More...
 
template<typename ProductType , BranchType B = InEvent>
void consumesMany ()
 
void consumesMany (const TypeToGet &id)
 
template<BranchType B>
void consumesMany (const TypeToGet &id)
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes ()
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes (ESInputTag const &tag)
 
template<Transition Tr = Transition::Event>
constexpr auto esConsumes () noexcept
 
template<Transition Tr = Transition::Event>
auto esConsumes (ESInputTag tag) noexcept
 
template<Transition Tr = Transition::Event>
ESGetTokenGeneric esConsumes (eventsetup::EventSetupRecordKey const &iRecord, eventsetup::DataKey const &iKey)
 Used with EventSetupRecord::doGet. More...
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > mayConsume (edm::InputTag const &tag)
 
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
void resetItemsToGetFrom (BranchType iType)
 

Protected Attributes

bool getMatch_
 
reco::ShallowClonePtrCandidatehadronicB_
 
std::string jetCorrectionLevel_
 
edm::EDGetTokenT< std::vector
< pat::Jet > > 
jetsToken_
 input label for all necessary collections More...
 
int key_
 hypothesis key (to be set by the buildKey function) More...
 
edm::EDGetTokenT< edm::View
< reco::RecoCandidate > > 
lepsToken_
 
reco::ShallowClonePtrCandidatelepton_
 
reco::ShallowClonePtrCandidateleptonicB_
 
reco::ShallowClonePtrCandidatelightQ_
 
reco::ShallowClonePtrCandidatelightQBar_
 
edm::EDGetTokenT< std::vector
< std::vector< int > > > 
matchToken_
 
edm::EDGetTokenT< std::vector
< pat::MET > > 
metsToken_
 
reco::ShallowClonePtrCandidateneutrino_
 
int neutrinoSolutionType_
 algorithm used to calculate neutrino solutions (see cfi for further details) More...
 
edm::EDGetTokenT< int > nJetsConsideredToken_
 
int numberOfRealNeutrinoSolutions_
 

Additional Inherited Members

- Public Types inherited from edm::EDProducer
typedef EDProducer ModuleType
 
- Public Types inherited from edm::ProducerBase
using ModuleToResolverIndicies = std::unordered_multimap< std::string, std::tuple< edm::TypeID const *, const char *, edm::ProductResolverIndex >>
 
typedef
ProductRegistryHelper::TypeLabelList 
TypeLabelList
 
- Public Types inherited from edm::EDConsumerBase
typedef ProductLabels Labels
 
- Static Public Member Functions inherited from edm::EDProducer
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &descriptions)
 
static bool wantsGlobalLuminosityBlocks ()
 
static bool wantsGlobalRuns ()
 
static bool wantsInputProcessBlocks ()
 
static bool wantsProcessBlocks ()
 
static bool wantsStreamLuminosityBlocks ()
 
static bool wantsStreamRuns ()
 

Detailed Description

Definition at line 31 of file TtSemiLepHypothesis.h.

Constructor & Destructor Documentation

TtSemiLepHypothesis::TtSemiLepHypothesis ( const edm::ParameterSet cfg)
explicit

default constructor

Definition at line 10 of file TtSemiLepHypothesis.cc.

References edm::ParameterSet::exists(), getMatch_, edm::ParameterSet::getParameter(), jetCorrectionLevel_, matchToken_, neutrinoSolutionType_, and AlCaHLTBitMon_QueryRunRegistry::string.

11  : jetsToken_(consumes<std::vector<pat::Jet> >(cfg.getParameter<edm::InputTag>("jets"))),
13  metsToken_(consumes<std::vector<pat::MET> >(cfg.getParameter<edm::InputTag>("mets"))),
14  nJetsConsideredToken_(consumes<int>(cfg.getParameter<edm::InputTag>("nJetsConsidered"))),
16  lightQ_(nullptr),
17  lightQBar_(nullptr),
18  hadronicB_(nullptr),
19  leptonicB_(nullptr),
20  neutrino_(nullptr),
21  lepton_(nullptr) {
22  getMatch_ = false;
23  if (cfg.exists("match")) {
24  getMatch_ = true;
25  matchToken_ = consumes<std::vector<std::vector<int> > >(cfg.getParameter<edm::InputTag>("match"));
26  }
27  if (cfg.exists("neutrinoSolutionType"))
28  neutrinoSolutionType_ = cfg.getParameter<int>("neutrinoSolutionType");
29  else
31  if (cfg.exists("jetCorrectionLevel")) {
32  jetCorrectionLevel_ = cfg.getParameter<std::string>("jetCorrectionLevel");
33  }
34  produces<std::vector<std::pair<reco::CompositeCandidate, std::vector<int> > > >();
35  produces<int>("Key");
36  produces<int>("NumberOfRealNeutrinoSolutions");
37  produces<int>("NumberOfConsideredJets");
38 }
edm::EDGetTokenT< int > nJetsConsideredToken_
reco::ShallowClonePtrCandidate * lepton_
reco::ShallowClonePtrCandidate * lightQBar_
bool exists(std::string const &parameterName) const
checks if a parameter exists
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
reco::ShallowClonePtrCandidate * neutrino_
edm::EDGetTokenT< std::vector< pat::Jet > > jetsToken_
input label for all necessary collections
reco::ShallowClonePtrCandidate * hadronicB_
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
edm::EDGetTokenT< edm::View< reco::RecoCandidate > > lepsToken_
edm::EDGetTokenT< std::vector< std::vector< int > > > matchToken_
int neutrinoSolutionType_
algorithm used to calculate neutrino solutions (see cfi for further details)
reco::ShallowClonePtrCandidate * lightQ_
edm::EDGetTokenT< std::vector< pat::MET > > metsToken_
reco::ShallowClonePtrCandidate * leptonicB_
TtSemiLepHypothesis::~TtSemiLepHypothesis ( )
override

default destructor

Definition at line 41 of file TtSemiLepHypothesis.cc.

References hadronicB_, lepton_, leptonicB_, lightQ_, lightQBar_, and neutrino_.

41  {
42  if (lightQ_)
43  delete lightQ_;
44  if (lightQBar_)
45  delete lightQBar_;
46  if (hadronicB_)
47  delete hadronicB_;
48  if (leptonicB_)
49  delete leptonicB_;
50  if (neutrino_)
51  delete neutrino_;
52  if (lepton_)
53  delete lepton_;
54 }
reco::ShallowClonePtrCandidate * lepton_
reco::ShallowClonePtrCandidate * lightQBar_
reco::ShallowClonePtrCandidate * neutrino_
reco::ShallowClonePtrCandidate * hadronicB_
reco::ShallowClonePtrCandidate * lightQ_
reco::ShallowClonePtrCandidate * leptonicB_

Member Function Documentation

void TtSemiLepHypothesis::buildHypo ( const edm::Handle< edm::View< reco::RecoCandidate > > &  leps,
const edm::Handle< std::vector< pat::MET > > &  mets,
const edm::Handle< std::vector< pat::Jet > > &  jets,
std::vector< int > &  jetPartonAssociation 
)
protected

minimalistic build function for simple hypotheses

return key minimalistic build function for simple hypotheses

Definition at line 249 of file TtSemiLepHypothesis.cc.

References TtSemiLepEvtPartons::HadB, hadronicB_, isValid(), jetCorrectionLevel(), fwrapper::jets, TtSemiLepEvtPartons::LepB, lepton_, leptonicB_, TtSemiLepEvtPartons::LightQ, lightQ_, TtSemiLepEvtPartons::LightQBar, lightQBar_, neutrino_, neutrinoSolutionType_, setCandidate(), and setNeutrino().

Referenced by TtSemiLepHypGeom::buildHypo(), TtSemiLepHypMaxSumPtWMass::buildHypo(), TtSemiLepHypWMassMaxSumPt::buildHypo(), TtSemiLepHypWMassDeltaTopMass::buildHypo(), TtSemiLepHypMVADisc::buildHypo(), and produce().

252  {
253  // -----------------------------------------------------
254  // add jets
255  // -----------------------------------------------------
256  for (unsigned idx = 0; idx < match.size(); ++idx) {
257  if (isValid(match[idx], jets)) {
258  switch (idx) {
260  setCandidate(jets, match[idx], lightQ_, jetCorrectionLevel("wQuarkMix"));
261  break;
263  setCandidate(jets, match[idx], lightQBar_, jetCorrectionLevel("wQuarkMix"));
264  break;
266  setCandidate(jets, match[idx], hadronicB_, jetCorrectionLevel("bQuark"));
267  break;
269  setCandidate(jets, match[idx], leptonicB_, jetCorrectionLevel("bQuark"));
270  break;
271  }
272  }
273  }
274 
275  // -----------------------------------------------------
276  // add lepton
277  // -----------------------------------------------------
278  if (leps->empty())
279  return;
280  setCandidate(leps, 0, lepton_);
281  match.push_back(0);
282 
283  // -----------------------------------------------------
284  // add neutrino
285  // -----------------------------------------------------
286  if (mets->empty())
287  return;
288  if (neutrinoSolutionType_ == -1)
289  setCandidate(mets, 0, neutrino_);
290  else
291  setNeutrino(mets, leps, 0, neutrinoSolutionType_);
292 }
bool isValid(const int &idx, const edm::Handle< std::vector< pat::Jet > > &jets)
check if index is in valid range of selected jets
reco::ShallowClonePtrCandidate * lepton_
reco::ShallowClonePtrCandidate * lightQBar_
reco::ShallowClonePtrCandidate * neutrino_
reco::ShallowClonePtrCandidate * hadronicB_
void setNeutrino(const edm::Handle< std::vector< pat::MET > > &met, const edm::Handle< edm::View< reco::RecoCandidate > > &leps, const int &idx, const int &type)
set neutrino, using mW = 80.4 to calculate the neutrino pz
void setCandidate(const edm::Handle< C > &handle, const int &idx, reco::ShallowClonePtrCandidate *&clone)
use one object in a collection to set a ShallowClonePtrCandidate
std::pair< typename Association::data_type::first_type, double > match(Reference key, Association association, bool bestMatchByMaxValue)
Generic matching function.
Definition: Utils.h:10
int neutrinoSolutionType_
algorithm used to calculate neutrino solutions (see cfi for further details)
reco::ShallowClonePtrCandidate * lightQ_
reco::ShallowClonePtrCandidate * leptonicB_
std::string jetCorrectionLevel(const std::string &quarkType)
helper function to construct the proper correction level string for corresponding quarkType ...
virtual void TtSemiLepHypothesis::buildHypo ( edm::Event event,
const edm::Handle< edm::View< reco::RecoCandidate > > &  lepton,
const edm::Handle< std::vector< pat::MET > > &  neutrino,
const edm::Handle< std::vector< pat::Jet > > &  jets,
std::vector< int > &  jetPartonAssociation,
const unsigned int  iComb 
)
protectedpure virtual
virtual void TtSemiLepHypothesis::buildKey ( )
protectedpure virtual
reco::CompositeCandidate TtSemiLepHypothesis::hypo ( )
protected

return event hypothesis

Definition at line 128 of file TtSemiLepHypothesis.cc.

References reco::CompositeCandidate::addDaughter(), TtSemiLepDaughter::HadB, TtSemiLepDaughter::HadP, TtSemiLepDaughter::HadQ, hadronicB_, TtSemiLepDaughter::HadTop, TtSemiLepDaughter::HadW, TtSemiLepDaughter::Lep, TtSemiLepDaughter::LepB, lepton_, leptonicB_, TtSemiLepDaughter::LepTop, TtSemiLepDaughter::LepW, lightQ_, lightQBar_, neutrino_, TtSemiLepDaughter::Nu, and AddFourMomenta::set().

Referenced by produce().

128  {
129  // check for sanity of the hypothesis
130  if (!lightQ_ || !lightQBar_ || !hadronicB_ || !leptonicB_ || !neutrino_ || !lepton_)
131  return reco::CompositeCandidate();
132 
133  // setup transient references
134  reco::CompositeCandidate hyp, hadTop, hadW, lepTop, lepW;
135 
136  AddFourMomenta addFourMomenta;
137  // build up the top branch that decays leptonically
140  addFourMomenta.set(lepW);
141  lepTop.addDaughter(lepW, TtSemiLepDaughter::LepW);
143  addFourMomenta.set(lepTop);
144 
145  // build up the top branch that decays hadronically
148  addFourMomenta.set(hadW);
149  hadTop.addDaughter(hadW, TtSemiLepDaughter::HadW);
151  addFourMomenta.set(hadTop);
152 
153  // build ttbar hypotheses
156  addFourMomenta.set(hyp);
157 
158  return hyp;
159 }
static const std::string HadB
static const std::string LepTop
static const std::string Lep
static const std::string LepW
reco::ShallowClonePtrCandidate * lepton_
reco::ShallowClonePtrCandidate * lightQBar_
static const std::string HadP
reco::ShallowClonePtrCandidate * neutrino_
static const std::string HadTop
void addDaughter(const Candidate &, const std::string &s="")
add a clone of the passed candidate as daughter
reco::ShallowClonePtrCandidate * hadronicB_
static const std::string HadQ
static const std::string HadW
static const std::string Nu
static const std::string LepB
void set(reco::Candidate &c) const
set up a candidate
reco::ShallowClonePtrCandidate * lightQ_
reco::ShallowClonePtrCandidate * leptonicB_
bool TtSemiLepHypothesis::isValid ( const int &  idx,
const edm::Handle< std::vector< pat::Jet > > &  jets 
)
inlineprotected

check if index is in valid range of selected jets

Definition at line 69 of file TtSemiLepHypothesis.h.

References fwrapper::jets.

Referenced by ntupleDataFormat._Object::_checkIsValid(), TtSemiLepHypGenMatch::buildHypo(), buildHypo(), and core.AutoHandle.AutoHandle::ReallyLoad().

69  {
70  return (0 <= idx && idx < (int)jets->size());
71  };
std::string TtSemiLepHypothesis::jetCorrectionLevel ( const std::string &  quarkType)
protected

helper function to construct the proper correction level string for corresponding quarkType

helper function to construct the proper correction level string for corresponding quarkType, for unknown quarkTypes an empty string is returned

Definition at line 174 of file TtSemiLepHypothesis.cc.

References jetCorrectionLevel_, testEve_cfg::level, and AlCaHLTBitMon_QueryRunRegistry::string.

Referenced by TtSemiLepHypGenMatch::buildHypo(), and buildHypo().

174  {
175  // jetCorrectionLevel was not configured
176  if (jetCorrectionLevel_.empty())
177  throw cms::Exception("Configuration")
178  << "Unconfigured jetCorrectionLevel. Please use an appropriate, non-empty string.\n";
179 
180  // quarkType is unknown
181  if (!(quarkType == "wQuarkMix" || quarkType == "udsQuark" || quarkType == "cQuark" || quarkType == "bQuark"))
182  throw cms::Exception("Configuration") << quarkType << " is unknown as a quarkType for the jetCorrectionLevel.\n";
183 
184  // combine correction level; start with a ':' even if
185  // there is no flavor tag to be added, as it is needed
186  // by setCandidate to disentangle the correction tag
187  // from a potential flavor tag, which can be empty
189  if (level == "L5Flavor:" || level == "L6UE:" || level == "L7Parton:") {
190  if (quarkType == "wQuarkMix") {
191  level += "wMix";
192  }
193  if (quarkType == "udsQuark") {
194  level += "uds";
195  }
196  if (quarkType == "cQuark") {
197  level += "charm";
198  }
199  if (quarkType == "bQuark") {
200  level += "bottom";
201  }
202  } else {
203  level += "none";
204  }
205  return level;
206 }
tuple level
Definition: testEve_cfg.py:47
int TtSemiLepHypothesis::key ( ) const
inlineprotected

Definition at line 65 of file TtSemiLepHypothesis.h.

References key_.

Referenced by produce().

65 { return key_; };
int key_
hypothesis key (to be set by the buildKey function)
WDecay::LeptonType TtSemiLepHypothesis::leptonType ( const reco::RecoCandidate cand)
protected

determine lepton type of reco candidate and return a corresponding WDecay::LeptonType; the type is kNone if it is whether a muon nor an electron

Definition at line 162 of file TtSemiLepHypothesis.cc.

References WDecay::kElec, WDecay::kMuon, and WDecay::kNone.

Referenced by TtSemiLepHypGenMatch::findMatchingLepton(), and setNeutrino().

162  {
163  // check whetherwe are dealing with a reco muon or a reco electron
165  if (dynamic_cast<const reco::Muon*>(cand)) {
166  type = WDecay::kMuon;
167  } else if (dynamic_cast<const reco::GsfElectron*>(cand)) {
168  type = WDecay::kElec;
169  }
170  return type;
171 }
void TtSemiLepHypothesis::produce ( edm::Event evt,
const edm::EventSetup setup 
)
overrideprotectedvirtual

produce the event hypothesis as CompositeCandidate and Key

Implements edm::EDProducer.

Definition at line 57 of file TtSemiLepHypothesis.cc.

References buildHypo(), buildKey(), edm::Event::getByToken(), getMatch_, hypo(), mps_fire::i, fwrapper::jets, jetsToken_, key(), lepsToken_, match(), matchToken_, metsToken_, eostools::move(), nJetsConsideredToken_, numberOfRealNeutrinoSolutions_, edm::Event::put(), resetCandidates(), and trackerHitRTTI::vector.

57  {
59  evt.getByToken(jetsToken_, jets);
60 
62  evt.getByToken(lepsToken_, leps);
63 
65  evt.getByToken(metsToken_, mets);
66 
67  edm::Handle<int> nJetsConsidered;
68  evt.getByToken(nJetsConsideredToken_, nJetsConsidered);
69 
70  std::vector<std::vector<int> > matchVec;
71  if (getMatch_) {
73  evt.getByToken(matchToken_, matchHandle);
74  matchVec = *matchHandle;
75  } else {
76  std::vector<int> dummyMatch;
77  for (unsigned int i = 0; i < 4; ++i)
78  dummyMatch.push_back(-1);
79  matchVec.push_back(dummyMatch);
80  }
81 
82  // declare unique_ptr for products
83  std::unique_ptr<std::vector<std::pair<reco::CompositeCandidate, std::vector<int> > > > pOut(
84  new std::vector<std::pair<reco::CompositeCandidate, std::vector<int> > >);
85  std::unique_ptr<int> pKey(new int);
86  std::unique_ptr<int> pNeutrinoSolutions(new int);
87  std::unique_ptr<int> pJetsConsidered(new int);
88 
89  // go through given vector of jet combinations
90  unsigned int idMatch = 0;
91  typedef std::vector<std::vector<int> >::iterator MatchVecIterator;
92  for (MatchVecIterator match = matchVec.begin(); match != matchVec.end(); ++match) {
93  // reset pointers
95  // build hypothesis
96  buildHypo(evt, leps, mets, jets, *match, idMatch++);
97  pOut->push_back(std::make_pair(hypo(), *match));
98  }
99  // feed out hyps and matches
100  evt.put(std::move(pOut));
101 
102  // build and feed out key
103  buildKey();
104  *pKey = key();
105  evt.put(std::move(pKey), "Key");
106 
107  // feed out number of real neutrino solutions
108  *pNeutrinoSolutions = numberOfRealNeutrinoSolutions_;
109  evt.put(std::move(pNeutrinoSolutions), "NumberOfRealNeutrinoSolutions");
110 
111  // feed out number of considered jets
112  *pJetsConsidered = *nJetsConsidered;
113  evt.put(std::move(pJetsConsidered), "NumberOfConsideredJets");
114 }
edm::EDGetTokenT< int > nJetsConsideredToken_
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:133
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:539
void buildHypo(const edm::Handle< edm::View< reco::RecoCandidate > > &leps, const edm::Handle< std::vector< pat::MET > > &mets, const edm::Handle< std::vector< pat::Jet > > &jets, std::vector< int > &jetPartonAssociation)
minimalistic build function for simple hypotheses
void resetCandidates()
reset candidate pointers before hypo build process
vector< PseudoJet > jets
def move
Definition: eostools.py:511
virtual void buildKey()=0
build the event hypothesis key
edm::EDGetTokenT< std::vector< pat::Jet > > jetsToken_
input label for all necessary collections
reco::CompositeCandidate hypo()
return event hypothesis
edm::EDGetTokenT< edm::View< reco::RecoCandidate > > lepsToken_
std::pair< typename Association::data_type::first_type, double > match(Reference key, Association association, bool bestMatchByMaxValue)
Generic matching function.
Definition: Utils.h:10
edm::EDGetTokenT< std::vector< std::vector< int > > > matchToken_
edm::EDGetTokenT< std::vector< pat::MET > > metsToken_
void TtSemiLepHypothesis::resetCandidates ( )
protected

reset candidate pointers before hypo build process

Definition at line 117 of file TtSemiLepHypothesis.cc.

References hadronicB_, lepton_, leptonicB_, lightQ_, lightQBar_, neutrino_, and numberOfRealNeutrinoSolutions_.

Referenced by produce().

117  {
119  lightQ_ = nullptr;
120  lightQBar_ = nullptr;
121  hadronicB_ = nullptr;
122  leptonicB_ = nullptr;
123  neutrino_ = nullptr;
124  lepton_ = nullptr;
125 }
reco::ShallowClonePtrCandidate * lepton_
reco::ShallowClonePtrCandidate * lightQBar_
reco::ShallowClonePtrCandidate * neutrino_
reco::ShallowClonePtrCandidate * hadronicB_
reco::ShallowClonePtrCandidate * lightQ_
reco::ShallowClonePtrCandidate * leptonicB_
template<typename C >
void TtSemiLepHypothesis::setCandidate ( const edm::Handle< C > &  handle,
const int &  idx,
reco::ShallowClonePtrCandidate *&  clone 
)
protected

use one object in a collection to set a ShallowClonePtrCandidate

Definition at line 123 of file TtSemiLepHypothesis.h.

References patZpeak::handle.

Referenced by TtSemiLepHypGenMatch::buildHypo(), TtSemiLepHypHitFit::buildHypo(), TtSemiLepHypKinFit::buildHypo(), and buildHypo().

125  {
126  typedef typename C::value_type O;
127  edm::Ptr<O> ptr = edm::Ptr<O>(handle, idx);
128  clone = new reco::ShallowClonePtrCandidate(ptr, ptr->charge(), ptr->p4(), ptr->vertex());
129 }
tuple handle
Definition: patZpeak.py:23
void TtSemiLepHypothesis::setCandidate ( const edm::Handle< std::vector< pat::Jet > > &  handle,
const int &  idx,
reco::ShallowClonePtrCandidate *&  clone,
const std::string &  correctionLevel 
)
protected

use one object in a jet collection to set a ShallowClonePtrCandidate with proper jet corrections

Definition at line 209 of file TtSemiLepHypothesis.cc.

References patZpeak::handle, and AlCaHLTBitMon_QueryRunRegistry::string.

212  {
214  // disentangle the correction from the potential flavor tag
215  // by the separating ':'; the flavor tag can be empty though
216  std::string step = correctionLevel.substr(0, correctionLevel.find(':'));
217  std::string flavor = correctionLevel.substr(1 + correctionLevel.find(':'));
218  float corrFactor = 1.;
219  if (flavor == "wMix")
220  corrFactor = 0.75 * ptr->jecFactor(step, "uds") + 0.25 * ptr->jecFactor(step, "charm");
221  else
222  corrFactor = ptr->jecFactor(step, flavor);
223  clone = new reco::ShallowClonePtrCandidate(ptr, ptr->charge(), ptr->p4() * corrFactor, ptr->vertex());
224 }
tuple handle
Definition: patZpeak.py:23
step
Definition: StallMonitor.cc:94
void TtSemiLepHypothesis::setNeutrino ( const edm::Handle< std::vector< pat::MET > > &  met,
const edm::Handle< edm::View< reco::RecoCandidate > > &  leps,
const int &  idx,
const int &  type 
)
protected

set neutrino, using mW = 80.4 to calculate the neutrino pz

Definition at line 227 of file TtSemiLepHypothesis.cc.

References Exception, WDecay::kElec, WDecay::kMuon, leptonType(), objects.METAnalyzer::met, neutrino_, numberOfRealNeutrinoSolutions_, and mathSSE::sqrt().

Referenced by TtSemiLepHypGenMatch::buildHypo(), and buildHypo().

230  {
232  MEzCalculator mez;
233  mez.SetMET(*(met->begin()));
234  if (leptonType(&(leps->front())) == WDecay::kMuon)
235  mez.SetLepton((*leps)[idx], true);
236  else if (leptonType(&(leps->front())) == WDecay::kElec)
237  mez.SetLepton((*leps)[idx], false);
238  else
239  throw cms::Exception("UnimplementedFeature")
240  << "Type of lepton given together with MET for solving neutrino kinematics is neither muon nor electron.\n";
241  double pz = mez.Calculate(type);
242  numberOfRealNeutrinoSolutions_ = mez.IsComplex() ? 0 : 2;
243  const math::XYZTLorentzVector p4(
244  ptr->px(), ptr->py(), pz, sqrt(ptr->px() * ptr->px() + ptr->py() * ptr->py() + pz * pz));
245  neutrino_ = new reco::ShallowClonePtrCandidate(ptr, ptr->charge(), p4, ptr->vertex());
246 }
WDecay::LeptonType leptonType(const reco::RecoCandidate *cand)
determine lepton type of reco candidate and return a corresponding WDecay::LeptonType; the type is kN...
XYZTLorentzVectorD XYZTLorentzVector
Lorentz vector with cylindrical internal representation using pseudorapidity.
Definition: LorentzVector.h:29
reco::ShallowClonePtrCandidate * neutrino_
T sqrt(T t)
Definition: SSEVec.h:19

Member Data Documentation

bool TtSemiLepHypothesis::getMatch_
protected

internal check whether the match information exists or not, if false a blind dummy match vector will be used internally

Definition at line 93 of file TtSemiLepHypothesis.h.

Referenced by produce(), and TtSemiLepHypothesis().

reco::ShallowClonePtrCandidate* TtSemiLepHypothesis::hadronicB_
protected
std::string TtSemiLepHypothesis::jetCorrectionLevel_
protected

specify the desired jet correction level (the default should be L3Absolute-'abs')

Definition at line 102 of file TtSemiLepHypothesis.h.

Referenced by jetCorrectionLevel(), and TtSemiLepHypothesis().

edm::EDGetTokenT<std::vector<pat::Jet> > TtSemiLepHypothesis::jetsToken_
protected

input label for all necessary collections

Definition at line 95 of file TtSemiLepHypothesis.h.

Referenced by produce().

int TtSemiLepHypothesis::key_
protected
edm::EDGetTokenT<edm::View<reco::RecoCandidate> > TtSemiLepHypothesis::lepsToken_
protected

Definition at line 96 of file TtSemiLepHypothesis.h.

Referenced by produce().

reco::ShallowClonePtrCandidate* TtSemiLepHypothesis::lepton_
protected
reco::ShallowClonePtrCandidate* TtSemiLepHypothesis::leptonicB_
protected
reco::ShallowClonePtrCandidate* TtSemiLepHypothesis::lightQ_
protected

candidates for internal use for the creation of the hypothesis candidate

Definition at line 112 of file TtSemiLepHypothesis.h.

Referenced by TtSemiLepHypGenMatch::buildHypo(), TtSemiLepHypHitFit::buildHypo(), TtSemiLepHypKinFit::buildHypo(), buildHypo(), hypo(), resetCandidates(), and ~TtSemiLepHypothesis().

reco::ShallowClonePtrCandidate* TtSemiLepHypothesis::lightQBar_
protected
edm::EDGetTokenT<std::vector<std::vector<int> > > TtSemiLepHypothesis::matchToken_
protected

Definition at line 98 of file TtSemiLepHypothesis.h.

Referenced by produce(), and TtSemiLepHypothesis().

edm::EDGetTokenT<std::vector<pat::MET> > TtSemiLepHypothesis::metsToken_
protected

Definition at line 97 of file TtSemiLepHypothesis.h.

Referenced by produce().

reco::ShallowClonePtrCandidate* TtSemiLepHypothesis::neutrino_
protected
int TtSemiLepHypothesis::neutrinoSolutionType_
protected

algorithm used to calculate neutrino solutions (see cfi for further details)

Definition at line 106 of file TtSemiLepHypothesis.h.

Referenced by TtSemiLepHypGenMatch::buildHypo(), buildHypo(), and TtSemiLepHypothesis().

edm::EDGetTokenT<int> TtSemiLepHypothesis::nJetsConsideredToken_
protected

Definition at line 99 of file TtSemiLepHypothesis.h.

Referenced by produce().

int TtSemiLepHypothesis::numberOfRealNeutrinoSolutions_
protected

number of real neutrino solutions: -1 if not determined, 0 if only complex, 2 if two real solutions

Definition at line 109 of file TtSemiLepHypothesis.h.

Referenced by produce(), resetCandidates(), and setNeutrino().