CMS 3D CMS Logo

TrackMCQuality.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: TrackMCQuality
4 // Class: TrackMCQuality
5 //
13 //
14 // Original Author: Jean-Roch Vlimant
15 // Created: Fri Mar 27 15:19:03 CET 2009
16 //
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 //
61 // constants, enums and typedefs
62 //
63 
64 
65 //
66 // static data member definitions
67 //
68 
69 //
70 // constructors and destructor
71 //
73  label_assoc(consumes<reco::TrackToTrackingParticleAssociator>(pset.getParameter< edm::InputTag >("associator"))),
74  label_tp(consumes<TrackingParticleCollection>(pset.getParameter< edm::InputTag >("trackingParticles"))),
75  label_tr(consumes<edm::View<reco::Track> >(pset.getParameter< edm::InputTag >("tracks")))
76 {
77  produces<Product>();
78 }
79 
80 
82 {
83 }
84 
85 
86 //
87 // member functions
88 //
89 
90 // ------------ method called to produce the data ------------
91 void
93 {
94 
95  using namespace edm;
97  iEvent.getByToken(label_assoc,associator);
98 
100  iEvent.getByToken(label_tp, TPCollection);
101 
103  iEvent.getByToken(label_tr, trackCollection );
104 
105  reco::RecoToSimCollection recSimColl=associator->associateRecoToSim(trackCollection,
106  TPCollection);
107 
108  //then loop the track collection
109  std::unique_ptr<Product> product(new Product(trackCollection->size(),0));
110 
111 
112  for (unsigned int iT=0;iT!=trackCollection->size();++iT){
113  auto & prod = (*product)[iT];
114 
115  edm::RefToBase<reco::Track> track(trackCollection, iT);
116 
117  //find it in the map
118  if (recSimColl.find(track)==recSimColl.end()) continue;
119 
120  auto const & tp = recSimColl[track];
121 
122  if (tp.empty()) continue; // can it be?
123  // nSimHits = tp[0].first->numberOfTrackerHits();
124  prod = tp[0].second;
125  // if (tp[0].first->charge() != track->charge()) isChargeMatched = false;
126  if ( (tp[0].first->eventId().event() != 0) || (tp[0].first->eventId().bunchCrossing() != 0) ) prod=-prod;
127 
128 
129  }
130 
131  iEvent.put(std::move(product));
132 }
133 
134 //define this as a plug-in
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:137
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:579
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:17
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:230
std::vector< float > Product
void produce(edm::StreamID, edm::Event &, const edm::EventSetup &) const override
edm::EDGetTokenT< reco::TrackToTrackingParticleAssociator > label_assoc
reco::RecoToSimCollection associateRecoToSim(const edm::Handle< edm::View< reco::Track > > &tCH, const edm::Handle< TrackingParticleCollection > &tPCH) const
compare reco to sim the handle of reco::Track and TrackingParticle collections
~TrackMCQuality() override
fixed size matrix
HLT enums.
edm::EDGetTokenT< TrackingParticleCollection > label_tp
def move(src, dest)
Definition: eostools.py:510