1 #ifndef RecoAlgos_TrackFullCloneSelectorBase_h 2 #define RecoAlgos_TrackFullCloneSelectorBase_h 37 template <
typename Selector>
49 produces<reco::TrackCollection>().setBranchAlias(
alias +
"Tracks");
51 produces<reco::TrackExtraCollection>().setBranchAlias(
alias +
"TrackExtras");
52 produces<TrackingRecHitCollection>().setBranchAlias(
alias +
"RecHits");
54 produces<std::vector<Trajectory> >().setBranchAlias(
alias +
"Trajectories");
55 produces<TrajTrackAssociationCollection>().setBranchAlias(
alias +
"TrajectoryTrackAssociations");
68 selTracks_ = std::make_unique<reco::TrackCollection>();
71 selHits_ = std::make_unique<TrackingRecHitCollection>();
74 TrackRefProd rTracks = evt.template getRefBeforePut<TrackCollection>();
79 rHits = evt.template getRefBeforePut<TrackingRecHitCollection>();
80 rTrackExtras = evt.template getRefBeforePut<TrackExtraCollection>();
84 std::map<TrackRefKey, reco::TrackRef>
goodTracks;
85 TrackRefKey current = 0;
88 auto tkBegin = hSrcTrack->begin();
89 for (reco::TrackCollection::const_iterator
it = tkBegin, ed = hSrcTrack->end();
it != ed; ++
it, ++current) {
114 auto const firstHitIndex =
selHits_->size();
130 selTrajs_ = std::make_unique<std::vector<Trajectory> >();
131 selTTAss_ = std::make_unique<TrajTrackAssociationCollection>();
132 for (
size_t i = 0,
n = hTraj->size();
i <
n; ++
i) {
135 if (match != hTTAss->
end()) {
137 TrackRefKey oldKey = trkRef.
key();
138 std::map<TrackRefKey, reco::TrackRef>::iterator getref =
goodTracks.find(oldKey);
172 std::unique_ptr<TrackingRecHitCollection>
selHits_;
174 std::unique_ptr<TrajTrackAssociationCollection>
selTTAss_;
edm::EDGetTokenT< TrajTrackAssociationCollection > hTTAssToken_
std::remove_cv< typename std::remove_reference< argument_type >::type >::type key_type
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
CovarianceMatrix outerStateCovariance() const
outermost trajectory state curvilinear errors
const math::XYZPoint & outerPosition() const
position of the outermost hit
const math::XYZVector & outerMomentum() const
momentum vector at the outermost hit position
void produce(edm::Event &evt, const edm::EventSetup &es) override
process one event
TrackFullCloneSelectorBase(const edm::ParameterSet &cfg)
constructor
std::vector< Track > TrackCollection
collection of Tracks
edm::Ref< TrackExtraCollection > TrackExtraRef
persistent reference to a TrackExtra
bool getByToken(EDGetToken token, Handle< PROD > &result) const
key_type key() const
Accessor for product key.
const_iterator find(const key_type &k) const
find element with specified reference key
std::unique_ptr< std::vector< Trajectory > > selTrajs_
const_iterator end() const
last iterator over the map (read only)
CovarianceMatrix innerStateCovariance() const
innermost trajectory state curvilinear errors
auto recHits() const
Access to reconstructed hits on the track.
std::unique_ptr< TrajTrackAssociationCollection > selTTAss_
def template(fileName, svg, replaceme="REPLACEME")
bool copyExtras_
copy only the tracks, not extras and rechits (for AOD)
unsigned int innerDetId() const
DetId of the detector on which surface the innermost state is located.
Functor that operates on <T>
Selector selector_
filter event
bool innerOk() const
return true if the innermost hit is valid
~TrackFullCloneSelectorBase() override
destructor
const PropagationDirection & seedDirection() const
direction of how the hits were sorted in the original seed
edm::Ref< TrackCollection > TrackRef
persistent reference to a Track
unsigned int outerDetId() const
DetId of the detector on which surface the outermost state is located.
edm::EDGetTokenT< std::vector< Trajectory > > hTrajToken_
edm::EDGetTokenT< reco::TrackCollection > hSrcTrackToken_
source collection label
std::unique_ptr< reco::TrackCollection > selTracks_
bool copyTrajectories_
copy also trajectories and trajectory->track associations
std::unique_ptr< TrackingRecHitCollection > selHits_
const math::XYZVector & innerMomentum() const
momentum vector at the innermost hit position
std::unique_ptr< reco::TrackExtraCollection > selTrackExtras_
const math::XYZPoint & innerPosition() const
position of the innermost hit
bool outerOk() const
return true if the outermost hit is valid
const TrackExtraRef & extra() const
reference to "extra" object