1 #ifndef RecoAlgos_TrackFullCloneSelectorBase_h 2 #define RecoAlgos_TrackFullCloneSelectorBase_h 35 template<
typename Selector>
47 produces<reco::TrackCollection>().setBranchAlias( alias +
"Tracks" );
49 produces<reco::TrackExtraCollection>().setBranchAlias( alias +
"TrackExtras" );
50 produces<TrackingRecHitCollection>().setBranchAlias( alias +
"RecHits" );
52 produces< std::vector<Trajectory> >().setBranchAlias( alias +
"Trajectories" );
53 produces< TrajTrackAssociationCollection >().setBranchAlias( alias +
"TrajectoryTrackAssociations" );
72 TrackRefProd rTracks = evt.template getRefBeforePut<TrackCollection>();
77 rHits = evt.template getRefBeforePut<TrackingRecHitCollection>();
78 rTrackExtras = evt.template getRefBeforePut<TrackExtraCollection>();
82 std::map<TrackRefKey, reco::TrackRef >
goodTracks;
83 TrackRefKey current = 0;
86 auto tkBegin = hSrcTrack->begin();
87 for (reco::TrackCollection::const_iterator it = tkBegin, ed = hSrcTrack->end(); it != ed; ++it, ++current) {
104 auto const firstHitIndex =
selHits_->size();
106 selHits_->push_back( (*hit)->clone() );
121 selTrajs_ = std::unique_ptr< std::vector<Trajectory> >(
new std::vector<Trajectory>());
123 for (
size_t i = 0,
n = hTraj->size();
i <
n; ++
i) {
126 if (match != hTTAss->
end()) {
128 TrackRefKey oldKey = trkRef.
key();
129 std::map<TrackRefKey, reco::TrackRef>::iterator getref = goodTracks.find(oldKey);
130 if (getref != goodTracks.end()) {
133 selTTAss_->insert (
edm::Ref< std::vector<Trajectory> >(TrajRefProd, selTrajs_->size() - 1),
163 std::unique_ptr<TrackingRecHitCollection>
selHits_;
165 std::unique_ptr< TrajTrackAssociationCollection >
selTTAss_;
T getParameter(std::string const &) const
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.
const TrackExtraRef & extra() const
reference to "extra" object
edm::EDGetTokenT< std::vector< Trajectory > > hTrajToken_
friend struct const_iterator
const_iterator end() const
last iterator over the map (read only)
bool getByToken(EDGetToken token, Handle< PROD > &result) const
void produce(edm::Event &evt, const edm::EventSetup &es) override
process one event
const_iterator find(const key_type &k) const
find element with specified reference key
TrackFullCloneSelectorBase(const edm::ParameterSet &cfg)
constructor
std::vector< Track > TrackCollection
collection of Tracks
bool innerOk() const
return true if the innermost hit is valid
edm::Ref< TrackExtraCollection > TrackExtraRef
persistent reference to a TrackExtra
key_type key() const
Accessor for product key.
const math::XYZPoint & outerPosition() const
position of the outermost hit
const math::XYZPoint & innerPosition() const
position of the innermost hit
CovarianceMatrix outerStateCovariance() const
outermost trajectory state curvilinear errors
unsigned int outerDetId() const
DetId of the detector on which surface the outermost state is located.
def template(fileName, svg, replaceme="REPLACEME")
bool copyExtras_
copy only the tracks, not extras and rechits (for AOD)
trackingRecHit_iterator recHitsBegin() const
Iterator to first hit on the track.
edm::AssociationMap< edm::OneToOne< std::vector< Trajectory >, reco::TrackCollection, unsigned short > > TrajTrackAssociationCollection
std::unique_ptr< TrajTrackAssociationCollection > selTTAss_
std::unique_ptr< std::vector< Trajectory > > selTrajs_
Selector selector_
filter event
~TrackFullCloneSelectorBase() override
destructor
std::vector< TrackExtra > TrackExtraCollection
collection of TrackExtra objects
edm::OwnVector< TrackingRecHit > TrackingRecHitCollection
collection of TrackingRecHits
const math::XYZVector & outerMomentum() const
momentum vector at the outermost hit position
bool outerOk() const
return true if the outermost hit is valid
const PropagationDirection & seedDirection() const
direction of how the hits were sorted in the original seed
edm::Ref< TrackCollection > TrackRef
persistent reference to a Track
CovarianceMatrix innerStateCovariance() const
innermost trajectory state curvilinear errors
edm::EDGetTokenT< reco::TrackCollection > hSrcTrackToken_
source collection label
std::unique_ptr< reco::TrackCollection > selTracks_
bool copyTrajectories_
copy also trajectories and trajectory->track associations
const math::XYZVector & innerMomentum() const
momentum vector at the innermost hit position
edm::EDGetTokenT< TrajTrackAssociationCollection > hTTAssToken_
std::unique_ptr< TrackingRecHitCollection > selHits_
std::pair< typename Association::data_type::first_type, double > match(Reference key, Association association, bool bestMatchByMaxValue)
Generic matching function.
std::unique_ptr< reco::TrackExtraCollection > selTrackExtras_
unsigned int innerDetId() const
DetId of the detector on which surface the innermost state is located.
trackingRecHit_iterator recHitsEnd() const
Iterator to last hit on the track.