10 copyExtras_(cloner.copyExtras_), copyTrajectories_(cloner.copyTrajectories_), evt(ievt) {
11 selTracks_ = std::make_unique<reco::TrackCollection>();
14 selHits_ = std::make_unique<TrackingRecHitCollection>();
17 selTrajs_ = std::make_unique< std::vector<Trajectory> >();
38 trajRefProd = evt.getRefBeforePut< std::vector<Trajectory> >();
41 std::vector<Trajectory> dummy;
45 auto const & tracksIn = tokens.
tracks(evt);
46 for (
auto k : selected) {
47 auto const & trk = tracksIn[
k];
48 selTracks_->emplace_back( trk );
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),
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()
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());
75 for(
auto hit = trk.recHitsBegin();
hit != trk.recHitsEnd(); ++
hit ) {
76 selHits_->push_back( (*hit)->clone() );
83 selTracks_->shrink_to_fit();
84 auto tsize = selTracks_->size();
87 selTrackExtras_->shrink_to_fit();
88 assert(selTrackExtras_->size()==tsize);
89 selHits_->shrink_to_fit();
94 selTrajs_->shrink_to_fit();
95 assert(selTrajs_->size()==tsize);
96 assert(selTTAss_->size()==tsize);
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
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
edm::Event & evt
the event
std::vector< Trajectory > const & trajectories(edm::Event &evt) const
reco::TrackCollection const & tracks(edm::Event &evt) const
RefProd< PROD > getRefBeforePut()
std::vector< TrackExtra > TrackExtraCollection
collection of TrackExtra objects
bool copyExtras_
copy only the tracks, not extras and rechits (for AOD)
Producer(edm::Event &ievt, TrackCollectionCloner const &cloner)
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_