235 std::unique_ptr<reco::TrackCollection> selTracks_;
236 std::unique_ptr<reco::TrackExtraCollection> selTrackExtras_;
237 std::unique_ptr<TrackingRecHitCollection> selHits_;
238 std::unique_ptr<std::vector<Trajectory>> selTrajs_;
239 std::unique_ptr<std::vector<const Trajectory*>> selTrajPtrs_;
240 std::unique_ptr<TrajTrackAssociationCollection> selTTAss_;
245 std::vector<reco::TrackRef> trackRefs_;
249 using namespace reco;
260 vertexBeamSpot = *hBsp;
265 std::vector<Point>
points;
266 std::vector<float> vterr, vzerr;
271 LogDebug(
"SelectVertex") <<
points.size() <<
" good pixel vertices";
281 selTracks_ = std::make_unique<TrackCollection>();
284 selTrackExtras_ = std::make_unique<TrackExtraCollection>();
285 selHits_ = std::make_unique<TrackingRecHitCollection>();
291 trackRefs_.resize(hSrcTrack->size());
293 std::vector<float> mvaVals_(hSrcTrack->size(), -99.f);
294 processMVA(evt, es, vertexBeamSpot, *vtxPtr, 0, mvaVals_,
true);
298 for (TrackCollection::const_iterator it = hSrcTrack->begin(), ed = hSrcTrack->end(); it != ed; ++it, ++current) {
299 const Track& trk = *it;
302 LogTrace(
"TrackSelection") <<
"ready to check track with pt=" << trk.
pt();
306 mvaVal = mvaVals_[current];
307 bool ok =
select(0, vertexBeamSpot, srcHits, trk,
points, vterr, vzerr, mvaVal);
309 LogTrace(
"TrackSelection") <<
"track with pt=" << trk.
pt() <<
" NOT selected";
316 LogTrace(
"TrackSelection") <<
"track with pt=" << trk.
pt() <<
" selected";
317 selTracks_->push_back(
Track(trk));
324 selTracks_->back().setQuality(TrackBase::tight);
328 selTracks_->back().setQuality(TrackBase::looseSetWithPV);
330 selTracks_->back().setQuality(TrackBase::looseSetWithPV);
331 selTracks_->back().setQuality(TrackBase::highPuritySetWithPV);
349 selTracks_->back().setExtra(
TrackExtraRef(rTrackExtras_, selTrackExtras_->size() - 1));
353 auto const firstHitIndex = selHits_->size();
355 selHits_->push_back((*hit)->clone());
357 tx.
setHits(rHits_, firstHitIndex, selHits_->size() - firstHitIndex);
361 trackRefs_[current] =
TrackRef(rTracks_, selTracks_->size() - 1);
369 selTrajs_ = std::make_unique<std::vector<Trajectory>>();
371 selTTAss_ = std::make_unique<TrajTrackAssociationCollection>(rTrajectories_, rTracks_);
372 for (
size_t i = 0,
n = hTraj->size();
i <
n; ++
i) {
377 short oldKey =
static_cast<short>(trkRef.
key());
378 if (trackRefs_[oldKey].isNonnull()) {
380 selTTAss_->insert(
Ref<vector<Trajectory>>(rTrajectories_, selTrajs_->size() - 1), trackRefs_[oldKey]);
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
CovarianceMatrix outerStateCovariance() const
outermost trajectory state curvilinear errors
bool get(ProductID const &oid, Handle< PROD > &result) const
edm::EDGetTokenT< TrajTrackAssociationCollection > srcTass_
const math::XYZPoint & outerPosition() const
position of the outermost hit
const math::XYZVector & outerMomentum() const
momentum vector at the outermost hit position
friend struct const_iterator
std::vector< bool > keepAllTracks_
bool copyTrajectories_
copy also trajectories and trajectory->track associations
std::vector< Track > TrackCollection
collection of Tracks
std::vector< Vertex > VertexCollection
collection of Vertex objects
edm::Ref< TrackExtraCollection > TrackExtraRef
persistent reference to a TrackExtra
bool getByToken(EDGetToken token, Handle< PROD > &result) const
const edm::RefToBase< TrajectorySeed > & seedRef() const
const TrackResiduals & residuals() const
get the residuals
edm::EDGetTokenT< TrackingRecHitCollection > hSrc_
edm::EDGetTokenT< std::vector< Trajectory > > srcTraj_
edm::EDGetTokenT< reco::VertexCollection > vertices_
key_type key() const
Accessor for product key.
const_iterator find(const key_type &k) const
find element with specified reference key
const_iterator end() const
last iterator over the map (read only)
CovarianceMatrix innerStateCovariance() const
innermost trajectory state curvilinear errors
double pt() const
track transverse momentum
edm::EDGetTokenT< reco::BeamSpot > beamspot_
std::vector< bool > setQualityBit_
do I have to set a quality bit?
void processMVA(edm::Event &evt, const edm::EventSetup &es, const reco::BeamSpot &beamspot, const reco::VertexCollection &vertices, int selIndex, std::vector< float > &mvaVals_, bool writeIt=false) const
trackingRecHit_iterator recHitsEnd() const
Iterator to last hit on the track.
void selectVertices(unsigned int tsNum, const reco::VertexCollection &vtxs, std::vector< Point > &points, std::vector< float > &vterr, std::vector< float > &vzerr) const
bool select(unsigned tsNum, const reco::BeamSpot &vertexBeamSpot, const TrackingRecHitCollection &recHits, const reco::Track &tk, const std::vector< Point > &points, std::vector< float > &vterr, std::vector< float > &vzerr, double mvaVal) const
return class, or -1 if rejected
unsigned int innerDetId() const
DetId of the detector on which surface the innermost state is located.
trackingRecHit_iterator recHitsBegin() const
Iterator to first hit on the track.
RefProd< PROD > getRefBeforePut()
bool innerOk() const
return true if the innermost hit is valid
const PropagationDirection & seedDirection() const
direction of how the hits were sorted in the original seed
std::vector< TrackExtra > TrackExtraCollection
collection of TrackExtra objects
std::vector< reco::TrackBase::TrackQuality > qualityToSet_
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.
bool copyExtras_
copy only the tracks, not extras and rechits (for AOD)
std::pair< typename Association::data_type::first_type, double > match(Reference key, Association association, bool bestMatchByMaxValue)
Generic matching function.
const math::XYZVector & innerMomentum() const
momentum vector at the innermost hit position
edm::EDGetTokenT< reco::TrackCollection > src_
source collection label
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