CMS 3D CMS Logo

L1TPFMetNoMuProducer.cc
Go to the documentation of this file.
5 
7  : thePFMETCollection_(consumes<reco::PFMETCollection>(
8  ps.getParameter<edm::InputTag>("pfMETCollection"))),
9  theMuonCollection_(consumes<reco::MuonCollection>(
10  ps.getParameter<edm::InputTag>("muonCollection"))) {
11  produces<reco::PFMETCollection>();
12 }
13 
15  const edm::EventSetup &eventSetup) {
17  event.getByToken(thePFMETCollection_, pfMet);
18 
20  event.getByToken(theMuonCollection_, muons);
21 
22  if (!pfMet.isValid()) {
23  edm::LogWarning("L1TPFMetNoMuProducer")
24  << "invalid collection for pfMet" << std::endl;
25  return;
26  }
27  if (!muons.isValid()) {
28  edm::LogWarning("L1TPFMetNoMuProducer")
29  << "invalid collection for muons" << std::endl;
30  return;
31  }
32 
33  reco::PFMET thePFMetNoMu = pfMet.product()->front();
34  double pfMetNoMuPx = thePFMetNoMu.px();
35  double pfMetNoMuPy = thePFMetNoMu.py();
36 
37  double muPx(0.), muPy(0.);
38 
39  for (auto muon = muons->begin(); muon != muons->end(); ++muon) {
40  if (muon->isPFMuon()) {
41  muPx += muon->px();
42  muPy += muon->py();
43  }
44  }
45 
46  pfMetNoMuPx += muPx;
47  pfMetNoMuPy += muPy;
48  math::XYZTLorentzVector pfMetNoMuP4(pfMetNoMuPx, pfMetNoMuPy, 0,
49  hypot(pfMetNoMuPx, pfMetNoMuPy));
50 
51  thePFMetNoMu.setP4(pfMetNoMuP4);
52 
53  std::unique_ptr<reco::PFMETCollection> product(new reco::PFMETCollection);
54  product->emplace_back(thePFMetNoMu.getSpecific(), thePFMetNoMu.sumEt(),
55  thePFMetNoMu.p4(), thePFMetNoMu.vertex());
56 
57  event.put(std::move(product));
58 }
59 
SpecificPFMETData getSpecific() const
Definition: PFMET.h:72
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:17
double px() const final
x coordinate of momentum vector
void produce(edm::Event &event, const edm::EventSetup &eventSetup)
std::vector< Muon > MuonCollection
collection of Muon objects
Definition: MuonFwd.h:9
XYZTLorentzVectorD XYZTLorentzVector
Lorentz vector with cylindrical internal representation using pseudorapidity.
Definition: LorentzVector.h:29
double sumEt() const
Definition: MET.h:56
const Point & vertex() const override
vertex position (overwritten by PF...)
pfMet
____________________________________________________________________________||
Definition: PFMET_cfi.py:4
const LorentzVector & p4() const final
four-momentum Lorentz vector
Definition: LeafCandidate.h:99
bool isValid() const
Definition: HandleBase.h:74
T const * product() const
Definition: Handle.h:81
double py() const final
y coordinate of momentum vector
const edm::EDGetTokenT< reco::MuonCollection > theMuonCollection_
const edm::EDGetTokenT< reco::PFMETCollection > thePFMETCollection_
fixed size matrix
HLT enums.
std::vector< reco::PFMET > PFMETCollection
collection of PFMET objects
L1TPFMetNoMuProducer(const edm::ParameterSet &ps)
void setP4(const LorentzVector &p4) final
set 4-momentum
def move(src, dest)
Definition: eostools.py:510
Definition: event.py:1
Collection of PF MET.