CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
VertexAssociationProducer.cc
Go to the documentation of this file.
1 
19 
24 
25 namespace pat {
26 
29 
30  public:
33 
34  void produce(edm::Event& iEvent, const edm::EventSetup& iSetup) override;
35 
36  private:
37  typedef std::vector<edm::InputTag> VInputTag;
38  // configurables
39  std::vector<edm::InputTag> particles_;
40  std::vector<edm::EDGetTokenT<edm::View<reco::Candidate> > > particlesTokens_;
42  };
43 
44 } // namespace pat
45 
47 
48 PATVertexAssociationProducer::PATVertexAssociationProducer(const edm::ParameterSet& iConfig)
49  : particles_(iConfig.existsAs<VInputTag>("candidates")
50  ? // if it's a VInputTag
51  iConfig.getParameter<VInputTag>("candidates")
52  : VInputTag(1, iConfig.getParameter<edm::InputTag>("candidates"))),
53  vertexing_(iConfig, consumesCollector()) {
54  for (VInputTag::const_iterator it = particles_.begin(), end = particles_.end(); it != end; ++it) {
55  particlesTokens_.push_back(consumes<edm::View<reco::Candidate> >(*it));
56  }
57  produces<VertexAssociationMap>();
58 }
59 
61 
63  using namespace edm;
64  using namespace std;
65  // read in vertices and EventSetup
66  vertexing_.newEvent(iEvent, iSetup);
67 
68  // prepare room and tools for output
69  auto result = std::make_unique<VertexAssociationMap>();
71  vector<pat::VertexAssociation> assos;
72 
73  // loop on input tags
74  for (std::vector<edm::EDGetTokenT<edm::View<reco::Candidate> > >::const_iterator it = particlesTokens_.begin(),
75  end = particlesTokens_.end();
76  it != end;
77  ++it) {
78  // read candidates
80  iEvent.getByToken(*it, cands);
81  assos.clear();
82  assos.reserve(cands->size());
83  // loop on candidates
84  for (size_t i = 0, n = cands->size(); i < n; ++i) {
85  assos.push_back(vertexing_(cands->refAt(i)));
86  }
87  // insert into ValueMap
88  filler.insert(cands, assos.begin(), assos.end());
89  }
90 
91  // do the real filling
92  filler.fill();
93 
94  // put our produced stuff in the event
95  iEvent.put(std::move(result));
96 }
97 
99 
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
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
pat::helper::VertexingHelper vertexing_
tuple result
Definition: mps_fire.py:311
int iEvent
Definition: GenABIO.cc:224
void produce(edm::Event &iEvent, const edm::EventSetup &iSetup) override
def move
Definition: eostools.py:511
PATVertexAssociationProducer(const edm::ParameterSet &iConfig)
std::vector< edm::InputTag > VInputTag
std::vector< edm::EDGetTokenT< edm::View< reco::Candidate > > > particlesTokens_
edm::ValueMap< pat::VertexAssociation > VertexAssociationMap
void newEvent(const edm::Event &event)
To be called for each new event, reads in the vertex collection.
string end
Definition: dataset.py:937
Produces VertexAssociation and a ValueMap to the originating reco jets.
std::vector< edm::InputTag > particles_
Produces and/or checks pat::VertexAssociation&#39;s.