Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions CommonTools/RecoAlgos/interface/RecoTrackSelectorBase.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ class RecoTrackSelectorBase {
maxChi2_(cfg.getParameter<double>("maxChi2")),
minHit_(cfg.getParameter<int>("minHit")),
minPixelHit_(cfg.getParameter<int>("minPixelHit")),
maxPixelHit_(cfg.getParameter<int>("maxPixelHit")),
minLayer_(cfg.getParameter<int>("minLayer")),
min3DLayer_(cfg.getParameter<int>("min3DLayer")),
usePV_(false),
Expand Down Expand Up @@ -97,6 +98,7 @@ class RecoTrackSelectorBase {
desc.add<int>("minHit", 0);
desc.add<int>("minLayer", 3);
desc.add<int>("minPixelHit", 0);
desc.add<int>("maxPixelHit", 99);
desc.add<std::vector<std::string> >("algorithm", {});
desc.add<std::vector<std::string> >("algorithmMaskContains", {});
desc.add<std::vector<std::string> >("originalAlgorithm", {});
Expand Down Expand Up @@ -149,6 +151,7 @@ class RecoTrackSelectorBase {

return ((algo_ok & quality_ok) && t.hitPattern().numberOfValidHits() >= minHit_ &&
t.hitPattern().numberOfValidPixelHits() >= minPixelHit_ &&
t.hitPattern().numberOfValidPixelHits() <= maxPixelHit_ &&
t.hitPattern().trackerLayersWithMeasurement() >= minLayer_ &&
t.hitPattern().pixelLayersWithMeasurement() + t.hitPattern().numberOfValidStripLayersWithMonoAndStereo() >=
min3DLayer_ &&
Expand All @@ -167,6 +170,7 @@ class RecoTrackSelectorBase {
double maxChi2_;
int minHit_;
int minPixelHit_;
int maxPixelHit_;
int minLayer_;
int min3DLayer_;
bool usePV_;
Expand Down
1 change: 1 addition & 0 deletions CommonTools/RecoAlgos/python/recoTrackSelectorPSet_cfi.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
min3DLayer = cms.int32(0),
minHit = cms.int32(0),
minPixelHit = cms.int32(0),
maxPixelHit = cms.int32(99),
beamSpot = cms.InputTag("offlineBeamSpot"),
usePV = cms.bool(False),
vertexTag = cms.InputTag('offlinePrimaryVertices'),
Expand Down
10 changes: 10 additions & 0 deletions CommonTools/UtilAlgos/interface/ObjectSelectorProducer.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ class ObjectSelectorProducer : public Base {
/// constructor
explicit ObjectSelectorProducer(const edm::ParameterSet& cfg)
: Base(cfg),
throwOnMissing_(cfg.template getParameter<bool>("throwOnMissing")),
srcToken_(
this->template consumes<typename Selector::collection>(cfg.template getParameter<edm::InputTag>("src"))),
selectorInit_(this->consumesCollector()),
Expand All @@ -45,6 +46,7 @@ class ObjectSelectorProducer : public Base {

static void fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
edm::ParameterSetDescription desc;
desc.add<bool>("throwOnMissing", true);
desc.add<edm::InputTag>("src", edm::InputTag(""));
Selector::fillPSetDescription(desc);
descriptions.addWithDefaultLabel(desc);
Expand All @@ -56,13 +58,21 @@ class ObjectSelectorProducer : public Base {
selectorInit_.init(selector_, evt, es);
edm::Handle<typename Selector::collection> source;
evt.getByToken(srcToken_, source);

// If the input source is not valid AND throwOnMissing is false skip the event
// This is necessary when filtering e.g. HLT collection that are not available for all events
if (!source.isValid() && !throwOnMissing_) {
return;
}

StoreManager manager(source);
selector_.select(source, evt, es);
manager.cloneAndStore(selector_.begin(), selector_.end(), evt);
edm::OrphanHandle<OutputCollection> filtered = manager.put(evt);
postProcessor_.process(filtered, evt);
}
/// source collection label
const bool throwOnMissing_;
edm::EDGetTokenT<typename Selector::collection> srcToken_;
/// Object collection selector
Init selectorInit_;
Expand Down
27 changes: 24 additions & 3 deletions Validation/RecoTrack/python/HLTmultiTrackValidator_cff.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

from Validation.RecoTrack.HLTmultiTrackValidator_cfi import *
from SimGeneral.TrackingAnalysis.trackingParticleNumberOfLayersProducer_cff import *
from Validation.RecoTrack.cutsRecoTracks_cfi import cutsRecoTracks as _cutsRecoTracks

hltTrackValidator = hltMultiTrackValidator.clone(
label = [
Expand All @@ -15,12 +16,30 @@
]
)

# Pixel-less track selector
hltPixelLessTracks = _cutsRecoTracks.clone(
throwOnMissing = cms.bool(False), # HLT collection might be missing
src = "hltMergedTracks",
minLayer = 3,
maxPixelHit = 0
)

# Tracks with at least one pixel hit
hltWithPixelTracks = _cutsRecoTracks.clone(
throwOnMissing = cms.bool(False), # HLT collection might be missing
src = "hltMergedTracks",
minLayer = 3,
minPixelHit = 1
)

hltMultiTrackValidationTask = cms.Task(
hltTPClusterProducer
, trackingParticleNumberOfLayersProducer
, hltTrackAssociatorByHits
)
hltMultiTrackValidation = cms.Sequence(
hltPixelLessTracks+
hltWithPixelTracks+
hltTrackValidator,
hltMultiTrackValidationTask
)
Expand All @@ -32,23 +51,25 @@ def _modifyForRun3(trackvalidator):
run3_common.toModify(hltTrackValidator, _modifyForRun3)

def _modifyForPhase2(trackvalidator):
trackvalidator.label = ["hltGeneralTracks", "hltPhase2PixelTracks", "hltInitialStepTrackSelectionHighPurity", "hltHighPtTripletStepTrackSelectionHighPurity"]
trackvalidator.label = ["hltGeneralTracks", "hltPhase2PixelTracks", "hltInitialStepTrackSelectionHighPurity", "hltHighPtTripletStepTrackSelectionHighPurity", "hltPixelLessTracks", "hltWithPixelTracks"]

from Configuration.Eras.Modifier_phase2_tracker_cff import phase2_tracker
phase2_tracker.toModify(hltTrackValidator, _modifyForPhase2)
phase2_tracker.toModify(hltPixelLessTracks, src = "hltGeneralTracks")
phase2_tracker.toModify(hltWithPixelTracks, src = "hltGeneralTracks")

from Configuration.ProcessModifiers.trackingLST_cff import trackingLST
from Configuration.ProcessModifiers.ngtScouting_cff import ngtScouting
from Configuration.ProcessModifiers.singleIterPatatrack_cff import singleIterPatatrack

def _modifyForSingleIterPatatrack(trackvalidator):
trackvalidator.label = ["hltGeneralTracks", "hltPhase2PixelTracks", "hltInitialStepTrackSelectionHighPurity"]
trackvalidator.label = ["hltGeneralTracks", "hltPhase2PixelTracks", "hltInitialStepTrackSelectionHighPurity", "hltPixelLessTracks", "hltWithPixelTracks"]
singleIterPatatrack.toModify(hltTrackValidator, _modifyForSingleIterPatatrack)

def _modifyForNGTScouting(trackvalidator):
trackvalidator.label = ["hltGeneralTracks", "hltPhase2PixelTracks"]
(ngtScouting & ~trackingLST).toModify(hltTrackValidator, _modifyForNGTScouting)

def _modifyForNGTScoutingLST(trackvalidator):
trackvalidator.label = ["hltGeneralTracks", "hltPhase2PixelTracks", "hltInitialStepTracksT5TCLST"]
trackvalidator.label = ["hltGeneralTracks", "hltPhase2PixelTracks", "hltInitialStepTracksT5TCLST", "hltPixelLessTracks", "hltWithPixelTracks"]
(ngtScouting & trackingLST).toModify(hltTrackValidator, _modifyForNGTScoutingLST)
1 change: 1 addition & 0 deletions Validation/RecoTrack/src/MTVHistoProducerAlgoForTracker.cc
Original file line number Diff line number Diff line change
Expand Up @@ -379,6 +379,7 @@ std::unique_ptr<RecoTrackSelectorBase> MTVHistoProducerAlgoForTracker::makeRecoT
psetTrack.addParameter("maxChi2", 1e10);
psetTrack.addParameter("minHit", 0);
psetTrack.addParameter("minPixelHit", 0);
psetTrack.addParameter("maxPixelHit", 99);
psetTrack.addParameter("minLayer", 0);
psetTrack.addParameter("min3DLayer", 0);
psetTrack.addParameter("quality", std::vector<std::string>{});
Expand Down