CMS 3D CMS Logo

TrackCollectionCloner.cc
Go to the documentation of this file.
2 
3 void
5  desc.addUntracked<bool>("copyExtras", true);
6  desc.addUntracked<bool>("copyTrajectories",false);
7 }
8 
10  copyExtras_(cloner.copyExtras_), copyTrajectories_(cloner.copyTrajectories_), evt(ievt) {
11  selTracks_ = std::make_unique<reco::TrackCollection>();
12  if (copyExtras_) {
13  selTrackExtras_ = std::make_unique<reco::TrackExtraCollection>();
14  selHits_ = std::make_unique<TrackingRecHitCollection>();
15  }
16  if ( copyTrajectories_ ) {
17  selTrajs_ = std::make_unique< std::vector<Trajectory> >();
18  selTTAss_ = std::make_unique< TrajTrackAssociationCollection >(evt.getRefBeforePut< std::vector<Trajectory> >(), evt.getRefBeforePut<reco::TrackCollection>());
19  }
20 
21 }
22 
23 
25 void TrackCollectionCloner::Producer::operator()(Tokens const & tokens, std::vector<unsigned int> const & selected) {
26 
27  auto rTracks = evt.getRefBeforePut<reco::TrackCollection>();
28 
30  reco::TrackExtraRefProd rTrackExtras;
31  if (copyExtras_) {
34  }
35 
37  if ( copyTrajectories_ ) {
38  trajRefProd = evt.getRefBeforePut< std::vector<Trajectory> >();
39  }
40 
41  std::vector<Trajectory> dummy;
42 
43  auto const & trajIn = copyTrajectories_ ? tokens.trajectories(evt) : dummy;
44 
45  auto const & tracksIn = tokens.tracks(evt);
46  for (auto k : selected) {
47  auto const & trk = tracksIn[k];
48  selTracks_->emplace_back( trk ); // clone and store
49  if (copyTrajectories_) {
50  // we assume tracks and trajectories are one-to-one and the assocMap is useless
51  selTrajs_->emplace_back(trajIn[k]);
52  assert(selTrajs_->back().measurements().size()==trk.recHitsSize());
53  selTTAss_->insert ( edm::Ref< std::vector<Trajectory> >(trajRefProd, selTrajs_->size() - 1),
54  reco::TrackRef(rTracks, selTracks_->size() - 1)
55  );
56  }
57 
58  if (!copyExtras_) continue;
59 
60  // TrackExtras
61  selTrackExtras_->emplace_back( trk.outerPosition(), trk.outerMomentum(), trk.outerOk(),
62  trk.innerPosition(), trk.innerMomentum(), trk.innerOk(),
63  trk.outerStateCovariance(), trk.outerDetId(),
64  trk.innerStateCovariance(), trk.innerDetId(),
65  trk.seedDirection(), trk.seedRef()
66  );
67  selTracks_->back().setExtra( reco::TrackExtraRef( rTrackExtras, selTrackExtras_->size() - 1) );
68  auto & tx = selTrackExtras_->back();
69  tx.setResiduals(trk.residuals());
70  auto nh1=trk.recHitsSize();
71  tx.setHits(rHits,selHits_->size(),nh1);
72  tx.setTrajParams(trk.extra()->trajParams(),trk.extra()->chi2sX5());
73  assert(tx.trajParams().size()==tx.recHitsSize());
74  // TrackingRecHits
75  for( auto hit = trk.recHitsBegin(); hit != trk.recHitsEnd(); ++ hit ) {
76  selHits_->push_back( (*hit)->clone() );
77  }
78  }
79 
80 }
81 
83  selTracks_->shrink_to_fit();
84  auto tsize = selTracks_->size();
86  if (copyExtras_) {
87  selTrackExtras_->shrink_to_fit();
88  assert(selTrackExtras_->size()==tsize);
89  selHits_->shrink_to_fit();
92  }
93  if ( copyTrajectories_ ) {
94  selTrajs_->shrink_to_fit();
95  assert(selTrajs_->size()==tsize);
96  assert(selTTAss_->size()==tsize);
99 
100  }
101 }
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:137
ParameterDescriptionBase * addUntracked(U const &iLabel, T const &value)
std::unique_ptr< std::vector< Trajectory > > selTrajs_
bool copyExtras_
copy only the tracks, not extras and rechits (for AOD)
std::vector< Track > TrackCollection
collection of Tracks
Definition: TrackFwd.h:14
static void fill(edm::ParameterSetDescription &desc)
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
std::vector< Trajectory > const & trajectories(edm::Event &evt) const
reco::TrackCollection const & tracks(edm::Event &evt) const
RefProd< PROD > getRefBeforePut()
Definition: Event.h:167
int k[5][pyjets_maxn]
std::vector< TrackExtra > TrackExtraCollection
collection of TrackExtra objects
Definition: TrackExtraFwd.h:11
bool copyExtras_
copy only the tracks, not extras and rechits (for AOD)
Producer(edm::Event &ievt, TrackCollectionCloner const &cloner)
def move(src, dest)
Definition: eostools.py:510
bool copyTrajectories_
copy also trajectories and trajectory->track associations
void operator()(Tokens const &tokens, std::vector< unsigned int > const &selected)
process one event
std::unique_ptr< TrajTrackAssociationCollection > selTTAss_