CMS 3D CMS Logo

List of all members | Public Member Functions | Public Attributes
TrackCollectionCloner::Producer Struct Reference

#include <TrackCollectionCloner.h>

Public Member Functions

void operator() (Tokens const &tokens, std::vector< unsigned int > const &selected)
 process one event More...
 
 Producer (edm::Event &ievt, TrackCollectionCloner const &cloner)
 
 ~Producer ()
 

Public Attributes

bool copyExtras_
 copy only the tracks, not extras and rechits (for AOD) More...
 
bool copyTrajectories_
 copy also trajectories and trajectory->track associations More...
 
edm::Eventevt
 the event More...
 
std::unique_ptr< TrackingRecHitCollectionselHits_
 
std::unique_ptr< reco::TrackExtraCollectionselTrackExtras_
 
std::unique_ptr< reco::TrackCollectionselTracks_
 
std::unique_ptr< std::vector< Trajectory > > selTrajs_
 
std::unique_ptr< TrajTrackAssociationCollectionselTTAss_
 

Detailed Description

Definition at line 52 of file TrackCollectionCloner.h.

Constructor & Destructor Documentation

◆ Producer()

TrackCollectionCloner::Producer::Producer ( edm::Event ievt,
TrackCollectionCloner const &  cloner 
)

Definition at line 8 of file TrackCollectionCloner.cc.

References copyExtras_, copyTrajectories_, evt, edm::Event::getRefBeforePut(), selHits_, selTrackExtras_, selTracks_, selTrajs_, and selTTAss_.

9  : copyExtras_(cloner.copyExtras_), copyTrajectories_(cloner.copyTrajectories_), evt(ievt) {
10  selTracks_ = std::make_unique<reco::TrackCollection>();
11  if (copyExtras_) {
12  selTrackExtras_ = std::make_unique<reco::TrackExtraCollection>();
13  selHits_ = std::make_unique<TrackingRecHitCollection>();
14  }
15  if (copyTrajectories_) {
16  selTrajs_ = std::make_unique<std::vector<Trajectory> >();
17  selTTAss_ = std::make_unique<TrajTrackAssociationCollection>(evt.getRefBeforePut<std::vector<Trajectory> >(),
19  }
20 }
std::unique_ptr< std::vector< Trajectory > > selTrajs_
std::vector< Track > TrackCollection
collection of Tracks
Definition: TrackFwd.h:14
std::unique_ptr< reco::TrackExtraCollection > selTrackExtras_
std::unique_ptr< reco::TrackCollection > selTracks_
std::unique_ptr< TrackingRecHitCollection > selHits_
bool copyTrajectories_
copy also trajectories and trajectory->track associations
RefProd< PROD > getRefBeforePut()
Definition: Event.h:158
bool copyExtras_
copy only the tracks, not extras and rechits (for AOD)
std::unique_ptr< TrajTrackAssociationCollection > selTTAss_

◆ ~Producer()

TrackCollectionCloner::Producer::~Producer ( )

Definition at line 84 of file TrackCollectionCloner.cc.

References cms::cuda::assert(), TrackCollectionCloner::copyExtras_, TrackCollectionCloner::copyTrajectories_, and eostools::move().

84  {
85  selTracks_->shrink_to_fit();
86  auto tsize = selTracks_->size();
88  if (copyExtras_) {
89  selTrackExtras_->shrink_to_fit();
90  assert(selTrackExtras_->size() == tsize);
91  selHits_->shrink_to_fit();
94  }
95  if (copyTrajectories_) {
96  selTrajs_->shrink_to_fit();
97  assert(selTrajs_->size() == tsize);
98  assert(selTTAss_->size() == tsize);
101  }
102 }
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:133
std::unique_ptr< std::vector< Trajectory > > selTrajs_
assert(be >=bs)
std::unique_ptr< reco::TrackExtraCollection > selTrackExtras_
std::unique_ptr< reco::TrackCollection > selTracks_
std::unique_ptr< TrackingRecHitCollection > selHits_
bool copyTrajectories_
copy also trajectories and trajectory->track associations
bool copyExtras_
copy only the tracks, not extras and rechits (for AOD)
std::unique_ptr< TrajTrackAssociationCollection > selTTAss_
def move(src, dest)
Definition: eostools.py:511

Member Function Documentation

◆ operator()()

void TrackCollectionCloner::Producer::operator() ( Tokens const &  tokens,
std::vector< unsigned int > const &  selected 
)

process one event

Definition at line 23 of file TrackCollectionCloner.cc.

References cms::cuda::assert(), TrackCollectionCloner::copyExtras_, TrackCollectionCloner::copyTrajectories_, dqmdumpme::k, TrackCollectionTokens::tracks(), and TrackCollectionTokens::trajectories().

23  {
24  auto rTracks = evt.getRefBeforePut<reco::TrackCollection>();
25 
27  reco::TrackExtraRefProd rTrackExtras;
28  if (copyExtras_) {
31  }
32 
34  if (copyTrajectories_) {
35  trajRefProd = evt.getRefBeforePut<std::vector<Trajectory> >();
36  }
37 
38  std::vector<Trajectory> dummy;
39 
40  auto const& trajIn = copyTrajectories_ ? tokens.trajectories(evt) : dummy;
41 
42  auto const& tracksIn = tokens.tracks(evt);
43  for (auto k : selected) {
44  auto const& trk = tracksIn[k];
45  selTracks_->emplace_back(trk); // clone and store
46  if (copyTrajectories_) {
47  // we assume tracks and trajectories are one-to-one and the assocMap is useless
48  selTrajs_->emplace_back(trajIn[k]);
49  assert(selTrajs_->back().measurements().size() == trk.recHitsSize());
50  selTTAss_->insert(edm::Ref<std::vector<Trajectory> >(trajRefProd, selTrajs_->size() - 1),
51  reco::TrackRef(rTracks, selTracks_->size() - 1));
52  }
53 
54  if (!copyExtras_)
55  continue;
56 
57  // TrackExtras
58  selTrackExtras_->emplace_back(trk.outerPosition(),
59  trk.outerMomentum(),
60  trk.outerOk(),
61  trk.innerPosition(),
62  trk.innerMomentum(),
63  trk.innerOk(),
64  trk.outerStateCovariance(),
65  trk.outerDetId(),
66  trk.innerStateCovariance(),
67  trk.innerDetId(),
68  trk.seedDirection(),
69  trk.seedRef());
70  selTracks_->back().setExtra(reco::TrackExtraRef(rTrackExtras, selTrackExtras_->size() - 1));
71  auto& tx = selTrackExtras_->back();
72  tx.setResiduals(trk.residuals());
73  auto nh1 = trk.recHitsSize();
74  tx.setHits(rHits, selHits_->size(), nh1);
75  tx.setTrajParams(trk.extra()->trajParams(), trk.extra()->chi2sX5());
76  assert(tx.trajParams().size() == tx.recHitsSize());
77  // TrackingRecHits
78  for (auto hit = trk.recHitsBegin(); hit != trk.recHitsEnd(); ++hit) {
79  selHits_->push_back((*hit)->clone());
80  }
81  }
82 }
std::unique_ptr< std::vector< Trajectory > > selTrajs_
std::vector< Track > TrackCollection
collection of Tracks
Definition: TrackFwd.h:14
assert(be >=bs)
std::unique_ptr< reco::TrackExtraCollection > selTrackExtras_
std::unique_ptr< reco::TrackCollection > selTracks_
std::unique_ptr< TrackingRecHitCollection > selHits_
bool copyTrajectories_
copy also trajectories and trajectory->track associations
RefProd< PROD > getRefBeforePut()
Definition: Event.h:158
std::vector< TrackExtra > TrackExtraCollection
collection of TrackExtra objects
Definition: TrackExtraFwd.h:10
bool copyExtras_
copy only the tracks, not extras and rechits (for AOD)
std::unique_ptr< TrajTrackAssociationCollection > selTTAss_

Member Data Documentation

◆ copyExtras_

bool TrackCollectionCloner::Producer::copyExtras_

copy only the tracks, not extras and rechits (for AOD)

Definition at line 60 of file TrackCollectionCloner.h.

Referenced by Producer().

◆ copyTrajectories_

bool TrackCollectionCloner::Producer::copyTrajectories_

copy also trajectories and trajectory->track associations

Definition at line 62 of file TrackCollectionCloner.h.

Referenced by Producer().

◆ evt

edm::Event& TrackCollectionCloner::Producer::evt

the event

Definition at line 65 of file TrackCollectionCloner.h.

Referenced by Producer().

◆ selHits_

std::unique_ptr<TrackingRecHitCollection> TrackCollectionCloner::Producer::selHits_

Definition at line 69 of file TrackCollectionCloner.h.

Referenced by Producer().

◆ selTrackExtras_

std::unique_ptr<reco::TrackExtraCollection> TrackCollectionCloner::Producer::selTrackExtras_

Definition at line 68 of file TrackCollectionCloner.h.

Referenced by Producer().

◆ selTracks_

std::unique_ptr<reco::TrackCollection> TrackCollectionCloner::Producer::selTracks_

Definition at line 67 of file TrackCollectionCloner.h.

Referenced by Producer().

◆ selTrajs_

std::unique_ptr<std::vector<Trajectory> > TrackCollectionCloner::Producer::selTrajs_

Definition at line 70 of file TrackCollectionCloner.h.

Referenced by Producer().

◆ selTTAss_

std::unique_ptr<TrajTrackAssociationCollection> TrackCollectionCloner::Producer::selTTAss_

Definition at line 71 of file TrackCollectionCloner.h.

Referenced by Producer().