|
|
Go to the documentation of this file.
64 #include <Math/DistFunc.h>
102 produces<edm::ValueMap<float>>(
"MVAVals");
104 produces<MVACollection>(
"MVAValues");
107 if (
cfg.exists(
"useAnyMVA"))
117 copyExtras_ =
cfg.getUntrackedParameter<
bool>(
"copyExtras",
false);
129 res_par_.push_back(
cfg.getParameter<std::vector<double>>(
"res_par"));
132 d0_par1_.push_back(
cfg.getParameter<std::vector<double>>(
"d0_par1"));
133 dz_par1_.push_back(
cfg.getParameter<std::vector<double>>(
"dz_par1"));
134 d0_par2_.push_back(
cfg.getParameter<std::vector<double>>(
"d0_par2"));
135 dz_par2_.push_back(
cfg.getParameter<std::vector<double>>(
"dz_par2"));
140 max_d0_.push_back(
cfg.getParameter<
double>(
"max_d0"));
141 max_z0_.push_back(
cfg.getParameter<
double>(
"max_z0"));
142 nSigmaZ_.push_back(
cfg.getParameter<
double>(
"nSigmaZ"));
144 min_layers_.push_back(
cfg.getParameter<uint32_t>(
"minNumberLayers"));
149 min_nhits_.push_back(
cfg.getParameter<uint32_t>(
"min_nhits"));
151 cfg.existsAs<int32_t>(
"max_minMissHitOutOrIn") ?
cfg.getParameter<int32_t>(
"max_minMissHitOutOrIn") : 99);
153 cfg.existsAs<
double>(
"max_lostHitFraction") ?
cfg.getParameter<
double>(
"max_lostHitFraction") : 1.0);
154 min_eta_.push_back(
cfg.getParameter<
double>(
"min_eta"));
155 max_eta_.push_back(
cfg.getParameter<
double>(
"max_eta"));
159 keepAllTracks_.push_back(
cfg.exists(
"keepAllTracks") ?
cfg.getParameter<
bool>(
"keepAllTracks") :
false);
165 edm::LogError(
"MisConfiguration") <<
"vector of size less then 2";
169 if (
cfg.exists(
"qualityBit")) {
171 if (!qualityStr.empty()) {
179 <<
"If you set 'keepAllTracks' to true, you must specify which qualityBit to set.\n";
182 <<
"You can't set the quality bit " <<
cfg.getParameter<
std::string>(
"qualityBit")
183 <<
" as it is 'undefQuality' or unknown.\n";
193 bool thisMVA =
false;
194 if (
cfg.exists(
"useMVA"))
195 thisMVA =
cfg.getParameter<
bool>(
"useMVA");
199 if (
cfg.exists(
"minMVA"))
200 minVal =
cfg.getParameter<
double>(
"minMVA");
204 :
"MVASelectorIter0");
205 useMVAonly_.push_back(
cfg.exists(
"useMVAonly") ?
cfg.getParameter<
bool>(
"useMVAonly") :
false);
221 produces<reco::TrackCollection>().setBranchAlias(
alias +
"Tracks");
223 produces<reco::TrackExtraCollection>().setBranchAlias(
alias +
"TrackExtras");
224 produces<TrackingRecHitCollection>().setBranchAlias(
alias +
"RecHits");
227 produces<std::vector<Trajectory>>().setBranchAlias(
alias +
"Trajectories");
228 produces<TrajTrackAssociationCollection>().setBranchAlias(
alias +
"TrajectoryTrackAssociations");
236 std::unique_ptr<reco::TrackCollection> selTracks_;
237 std::unique_ptr<reco::TrackExtraCollection> selTrackExtras_;
238 std::unique_ptr<TrackingRecHitCollection> selHits_;
239 std::unique_ptr<std::vector<Trajectory>> selTrajs_;
240 std::unique_ptr<std::vector<const Trajectory*>> selTrajPtrs_;
241 std::unique_ptr<TrajTrackAssociationCollection> selTTAss_;
246 std::vector<reco::TrackRef> trackRefs_;
250 using namespace reco;
261 vertexBeamSpot = *hBsp;
266 std::vector<Point>
points;
267 std::vector<float> vterr, vzerr;
272 LogDebug(
"SelectVertex") <<
points.size() <<
" good pixel vertices";
282 selTracks_ = std::make_unique<TrackCollection>();
285 selTrackExtras_ = std::make_unique<TrackExtraCollection>();
286 selHits_ = std::make_unique<TrackingRecHitCollection>();
292 trackRefs_.resize(hSrcTrack->size());
294 std::vector<float> mvaVals_(hSrcTrack->size(), -99.f);
295 processMVA(evt, es, vertexBeamSpot, *vtxPtr, 0, mvaVals_,
true);
299 for (TrackCollection::const_iterator it = hSrcTrack->begin(), ed = hSrcTrack->end(); it != ed; ++it, ++current) {
300 const Track& trk = *it;
303 LogTrace(
"TrackSelection") <<
"ready to check track with pt=" << trk.
pt();
307 mvaVal = mvaVals_[current];
308 bool ok =
select(0, vertexBeamSpot, srcHits, trk,
points, vterr, vzerr, mvaVal);
310 LogTrace(
"TrackSelection") <<
"track with pt=" << trk.
pt() <<
" NOT selected";
317 LogTrace(
"TrackSelection") <<
"track with pt=" << trk.
pt() <<
" selected";
318 selTracks_->push_back(
Track(trk));
322 selTracks_->back().setQuality(TrackBase::loose);
324 selTracks_->back().setQuality(TrackBase::loose);
325 selTracks_->back().setQuality(TrackBase::tight);
329 selTracks_->back().setQuality(TrackBase::looseSetWithPV);
331 selTracks_->back().setQuality(TrackBase::looseSetWithPV);
332 selTracks_->back().setQuality(TrackBase::highPuritySetWithPV);
350 selTracks_->back().setExtra(
TrackExtraRef(rTrackExtras_, selTrackExtras_->size() - 1));
354 auto const firstHitIndex = selHits_->size();
356 selHits_->push_back((*hit)->clone());
358 tx.
setHits(rHits_, firstHitIndex, selHits_->
size() - firstHitIndex);
362 trackRefs_[current] =
TrackRef(rTracks_, selTracks_->size() - 1);
370 selTrajs_ = std::make_unique<std::vector<Trajectory>>();
372 selTTAss_ = std::make_unique<TrajTrackAssociationCollection>(rTrajectories_, rTracks_);
373 for (
size_t i = 0,
n = hTraj->size();
i <
n; ++
i) {
378 short oldKey = static_cast<short>(trkRef.
key());
379 if (trackRefs_[oldKey].isNonnull()) {
381 selTTAss_->insert(
Ref<vector<Trajectory>>(rTrajectories_, selTrajs_->size() - 1), trackRefs_[oldKey]);
const math::XYZPoint & outerPosition() const
position of the outermost hit
const math::XYZVector & outerMomentum() const
momentum vector at the outermost hit position
std::vector< std::vector< double > > d0_par1_
std::vector< double > max_eta_
CovarianceMatrix outerStateCovariance() const
outermost trajectory state curvilinear errors
RefProd< PROD > getRefBeforePut()
unsigned int outerDetId() const
DetId of the detector on which surface the outermost state is located.
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
const_iterator find(const key_type &k) const
find element with specified reference key
std::vector< double > max_relpterr_
std::vector< int32_t > vtxNumber_
vertex cuts
std::vector< uint32_t > min_nhits_
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 recHitsBegin() const
Iterator to first hit on the track.
std::vector< double > chi2n_no1Dmod_par_
bool copyTrajectories_
copy also trajectories and trajectory->track associations
double minEta_
eta restrictions
std::vector< Vertex > VertexCollection
collection of Vertex objects
edm::EDGetTokenT< std::vector< Trajectory > > srcTraj_
edm::EDGetTokenT< TrajTrackAssociationCollection > srcTass_
std::vector< double > max_z0NoPV_
std::vector< std::string > forestLabel_
std::vector< uint32_t > min_hits_bypass_
bool outerOk() const
return true if the outermost hit is valid
std::vector< bool > applyAbsCutsIfNoPV_
const TrackExtraRef & extra() const
reference to "extra" object
CovarianceMatrix innerStateCovariance() const
innermost trajectory state curvilinear errors
bool innerOk() const
return true if the innermost hit is valid
double pt() const
track transverse momentum
std::vector< std::string > mvaType_
const_iterator end() const
last iterator over the map (read only)
std::vector< std::vector< double > > dz_par2_
const math::XYZVector & innerMomentum() const
momentum vector at the innermost hit position
std::vector< int32_t > max_minMissHitOutOrIn_
#define DEFINE_FWK_MODULE(type)
std::vector< double > chi2n_par_
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
edm::EDGetTokenT< reco::VertexCollection > vertices_
std::vector< TrackExtra > TrackExtraCollection
collection of TrackExtra objects
bool getByToken(EDGetToken token, Handle< PROD > &result) const
edm::EDGetTokenT< reco::TrackCollection > src_
source collection label
edm::Ref< TrackCollection > TrackRef
persistent reference to a Track
std::vector< double > min_eta_
std::vector< std::vector< double > > d0_par2_
friend struct const_iterator
std::vector< double > max_d0NoPV_
const PropagationDirection & seedDirection() const
direction of how the hits were sorted in the original seed
XYZPointD XYZPoint
point in space with cartesian internal representation
AnalyticalTrackSelector(const edm::ParameterSet &cfg)
constructor
std::pair< typename Association::data_type::first_type, double > match(Reference key, Association association, bool bestMatchByMaxValue)
Generic matching function.
edm::Ref< TrackExtraCollection > TrackExtraRef
persistent reference to a TrackExtra
std::vector< bool > useMVA_
std::vector< std::vector< double > > dz_par1_
const math::XYZPoint & innerPosition() const
position of the innermost hit
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
unsigned int innerDetId() const
DetId of the detector on which surface the innermost state is located.
std::vector< uint32_t > min_layers_
Cuts on numbers of layers with hits/3D hits/lost hits.
std::vector< bool > applyAdaptedPVCuts_
Log< level::Error, false > LogError
~AnalyticalTrackSelector() override
destructor
std::vector< bool > keepAllTracks_
std::vector< unsigned int > preFilter_
std::vector< uint32_t > min_3Dlayers_
const edm::RefToBase< TrajectorySeed > & seedRef() const
void run(edm::Event &evt, const edm::EventSetup &es) const override
process one event
std::vector< reco::TrackBase::TrackQuality > qualityToSet_
const TrackResiduals & residuals() const
get the residuals
edm::EDGetTokenT< TrackingRecHitCollection > hSrc_
std::vector< double > nSigmaZ_
std::vector< uint32_t > max_lostLayers_
std::vector< double > max_d0_
Impact parameter absolute cuts.
key_type key() const
Accessor for product key.
std::vector< int32_t > max_lostHitFraction_
edm::EDGetTokenT< reco::BeamSpot > beamspot_
std::vector< GBRForest * > forest_
std::vector< StringCutObjectSelector< reco::Vertex > > vertexCut_
bool get(ProductID const &oid, Handle< PROD > &result) const
std::vector< Track > TrackCollection
collection of Tracks
bool copyExtras_
copy only the tracks, not extras and rechits (for AOD)
std::vector< double > max_z0_
std::vector< bool > useMVAonly_
std::vector< bool > setQualityBit_
do I have to set a quality bit?
std::vector< double > min_MVA_
std::vector< std::vector< double > > res_par_