CMS 3D CMS Logo

ShallowSimTracksProducer.cc
Go to the documentation of this file.
3 
8 
10 
12  : Prefix( conf.getParameter<std::string>("Prefix") ),
13  Suffix( conf.getParameter<std::string>("Suffix") ),
14  trackingParticles_token_(consumes<TrackingParticleCollection>(conf.getParameter<edm::InputTag>("TrackingParticles"))),
15  associator_token_( consumes<reco::TrackToTrackingParticleAssociator>(conf.getParameter<edm::InputTag>("Associator"))),
16  tracks_token_(consumes<edm::View<reco::Track> >(conf.getParameter<edm::InputTag>("Tracks")))
17 {
18  produces <std::vector<unsigned> > ( Prefix + "multi" + Suffix );
19  produces <std::vector<int> > ( Prefix + "type" + Suffix );
20  produces <std::vector<float> > ( Prefix + "charge" + Suffix );
21  produces <std::vector<float> > ( Prefix + "momentum" + Suffix );
22  produces <std::vector<float> > ( Prefix + "pt" + Suffix );
23  produces <std::vector<double> > ( Prefix + "theta" + Suffix );
24  produces <std::vector<double> > ( Prefix + "phi" + Suffix );
25  produces <std::vector<double> > ( Prefix + "eta" + Suffix );
26  produces <std::vector<double> > ( Prefix + "qoverp" + Suffix );
27  produces <std::vector<double> > ( Prefix + "vx" + Suffix );
28  produces <std::vector<double> > ( Prefix + "vy" + Suffix );
29  produces <std::vector<double> > ( Prefix + "vz" + Suffix );
30 }
31 
32 
35 
36  edm::Handle<edm::View<reco::Track> > tracks ; event.getByToken(tracks_token_, tracks);
39 
40  unsigned size = tracks->size();
41  auto multi = std::make_unique<std::vector<unsigned>>(size, 0);
42  auto type = std::make_unique<std::vector<int>> (size, 0);
43  auto charge = std::make_unique<std::vector<float>> (size, 0);
44  auto momentum = std::make_unique<std::vector<float>> (size, -1);
45  auto pt = std::make_unique<std::vector<float>> (size, -1);
46  auto theta = std::make_unique<std::vector<double>> (size,-1000);
47  auto phi = std::make_unique<std::vector<double>> (size,-1000);
48  auto eta = std::make_unique<std::vector<double>> (size,-1000);
49  auto dxy = std::make_unique<std::vector<double>> (size,-1000);
50  auto dsz = std::make_unique<std::vector<double>> (size,-1000);
51  auto qoverp = std::make_unique<std::vector<double>> (size,-1000);
52  auto vx = std::make_unique<std::vector<double>> (size,-1000);
53  auto vy = std::make_unique<std::vector<double>> (size,-1000);
54  auto vz = std::make_unique<std::vector<double>> (size,-1000);
55 
56  reco::RecoToSimCollection associations = associator->associateRecoToSim( tracks, trackingParticles);
57 
58  for( reco::RecoToSimCollection::const_iterator association = associations.begin();
59  association != associations.end(); association++) {
60 
61  const reco::Track* track = association->key.get();
62  const int matches = association->val.size();
63  if(matches>0) {
64  const TrackingParticle* tparticle = association->val[0].first.get();
65  unsigned i = shallow::findTrackIndex(tracks, track);
66 
67  multi->at(i) = matches;
68  type->at(i) = tparticle->pdgId();
69  charge->at(i)= tparticle->charge();
70  momentum->at(i)=tparticle->p() ;
71  pt->at(i) = tparticle->pt() ;
72  theta->at(i) = tparticle->theta() ;
73  phi->at(i) = tparticle->phi() ;
74  eta->at(i) = tparticle->eta() ;
75  qoverp->at(i)= tparticle->charge()/tparticle->p();
76 
77  const TrackingVertex* tvertex = tparticle->parentVertex().get();
78  vx->at(i) = tvertex->position().x();
79  vy->at(i) = tvertex->position().y();
80  vz->at(i) = tvertex->position().z();
81  }
82  }
83 
84  event.put(std::move(multi ), Prefix + "multi" + Suffix );
85  event.put(std::move(type ), Prefix + "type" + Suffix );
86  event.put(std::move(charge ), Prefix + "charge" + Suffix );
87  event.put(std::move(momentum), Prefix + "momentum" + Suffix );
88  event.put(std::move(pt ), Prefix + "pt" + Suffix );
89  event.put(std::move(theta ), Prefix + "theta" + Suffix );
90  event.put(std::move(phi ), Prefix + "phi" + Suffix );
91  event.put(std::move(eta ), Prefix + "eta" + Suffix );
92  event.put(std::move(qoverp ), Prefix + "qoverp" + Suffix );
93  event.put(std::move(vx ), Prefix + "vx" + Suffix );
94  event.put(std::move(vy ), Prefix + "vy" + Suffix );
95  event.put(std::move(vz ), Prefix + "vz" + Suffix );
96 
97 }
size
Write out results.
type
Definition: HCALResponse.h:21
const edm::EDGetTokenT< reco::TrackToTrackingParticleAssociator > associator_token_
std::vector< TrackingParticle > TrackingParticleCollection
friend struct const_iterator
int findTrackIndex(const edm::Handle< edm::View< reco::Track > > &h, const reco::Track *t)
Definition: ShallowTools.cc:27
int pdgId() const
PDG ID.
void produce(edm::Event &, const edm::EventSetup &) override
ShallowSimTracksProducer(const edm::ParameterSet &)
Geom::Theta< T > theta() const
double pt() const
Transverse momentum. Note this is taken from the first SimTrack only.
def setup(process, global_tag, zero_tesla=False)
Definition: GeneralSetup.py:2
float charge() const
Electric charge. Note this is taken from the first SimTrack only.
double p() const
Magnitude of momentum vector. Note this is taken from the first SimTrack only.
T const * get() const
Returns C++ pointer to the item.
Definition: Ref.h:243
const TrackingVertexRef & parentVertex() const
reco::RecoToSimCollection associateRecoToSim(const edm::Handle< edm::View< reco::Track >> &tCH, const edm::Handle< TrackingParticleCollection > &tPCH) const
double eta() const
Momentum pseudorapidity. Note this is taken from the first SimTrack only.
fixed size matrix
HLT enums.
Monte Carlo truth information used for tracking validation.
const edm::EDGetTokenT< edm::View< reco::Track > > tracks_token_
const edm::EDGetTokenT< TrackingParticleCollection > trackingParticles_token_
def move(src, dest)
Definition: eostools.py:511
double phi() const
Momentum azimuthal angle. Note this is taken from the first SimTrack only.
Definition: event.py:1
double theta() const
Momentum polar angle. Note this is taken from the first SimTrack only.
const LorentzVector & position() const