CMS 3D CMS Logo

TrackMCQuality.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: TrackMCQuality
4 // Class: TrackMCQuality
5 //
14 //
15 // Original Author: Jean-Roch Vlimant
16 // Created: Fri Mar 27 15:19:03 CET 2009
17 //
18 //
19 
20 // system include files
21 #include <memory>
22 
23 // user include files
26 
29 
32 
34 
37 
38 //
39 // class decleration
40 //
41 
42 class TrackMCQuality final : public edm::global::EDProducer<> {
43 public:
44  explicit TrackMCQuality(const edm::ParameterSet &);
45  ~TrackMCQuality() override;
46 
47 private:
48  void produce(edm::StreamID, edm::Event &, const edm::EventSetup &) const override;
49 
50  // ----------member data ---------------------------
51 
55 
56  using Product = std::vector<float>;
57 };
58 
59 //
60 // constants, enums and typedefs
61 //
62 
63 //
64 // static data member definitions
65 //
66 
67 //
68 // constructors and destructor
69 //
71  : label_assoc(consumes<reco::TrackToTrackingParticleAssociator>(pset.getParameter<edm::InputTag>("associator"))),
72  label_tp(consumes<TrackingParticleCollection>(pset.getParameter<edm::InputTag>("trackingParticles"))),
73  label_tr(consumes<edm::View<reco::Track>>(pset.getParameter<edm::InputTag>("tracks"))) {
74  produces<Product>();
75 }
76 
78 
79 //
80 // member functions
81 //
82 
83 // ------------ method called to produce the data ------------
85  using namespace edm;
87  iEvent.getByToken(label_assoc, associator);
88 
90  iEvent.getByToken(label_tp, TPCollection);
91 
93  iEvent.getByToken(label_tr, trackCollection);
94 
95  reco::RecoToSimCollection recSimColl = associator->associateRecoToSim(trackCollection, TPCollection);
96 
97  // then loop the track collection
98  std::unique_ptr<Product> product(new Product(trackCollection->size(), 0));
99 
100  for (unsigned int iT = 0; iT != trackCollection->size(); ++iT) {
101  auto &prod = (*product)[iT];
102 
103  edm::RefToBase<reco::Track> track(trackCollection, iT);
104 
105  // find it in the map
106  if (recSimColl.find(track) == recSimColl.end())
107  continue;
108 
109  auto const &tp = recSimColl[track];
110 
111  if (tp.empty())
112  continue; // can it be?
113  // nSimHits = tp[0].first->numberOfTrackerHits();
114  prod = tp[0].second;
115  // if (tp[0].first->charge() != track->charge()) isChargeMatched = false;
116  if ((tp[0].first->eventId().event() != 0) || (tp[0].first->eventId().bunchCrossing() != 0))
117  prod = -prod;
118  }
119 
120  iEvent.put(std::move(product));
121 }
122 
123 // define this as a plug-in
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:131
edm::EDGetTokenT< edm::View< reco::Track > > label_tr
std::vector< TrackingParticle > TrackingParticleCollection
const_iterator end() const
last iterator over the map (read only)
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:525
const_iterator find(const key_type &k) const
find element with specified reference key
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
TrackMCQuality(const edm::ParameterSet &)
int iEvent
Definition: GenABIO.cc:224
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
std::vector< float > Product
void produce(edm::StreamID, edm::Event &, const edm::EventSetup &) const override
reco::RecoToSimCollection associateRecoToSim(const edm::Handle< edm::View< reco::Track >> &tCH, const edm::Handle< TrackingParticleCollection > &tPCH) const
edm::EDGetTokenT< reco::TrackToTrackingParticleAssociator > label_assoc
~TrackMCQuality() override
fixed size matrix
HLT enums.
edm::EDGetTokenT< TrackingParticleCollection > label_tp
def move(src, dest)
Definition: eostools.py:511