From d13bfce1028dc8a59a35c300f39ccac99e9dcc43 Mon Sep 17 00:00:00 2001 From: Matti Kortelainen Date: Tue, 5 Sep 2017 14:20:51 +0200 Subject: [PATCH 1/8] Always produce seed stop reason collection --- .../IsolatedParticles/python/isoTrack_cff.py | 2 - RecoMuon/L3MuonProducer/test/newL3.py | 3 -- .../plugins/CkfTrackCandidateMaker.h | 5 +-- .../CkfPattern/plugins/CkfTrajectoryMaker.h | 1 + .../python/CkfTrackCandidates_cfi.py | 1 - .../python/CkfTrajectoryBuilder_cfi.py | 1 - .../src/CkfTrackCandidateMakerBase.cc | 40 +++++++------------ .../interface/CkfDebugTrackCandidateMaker.h | 1 + .../python/customiseTrackingNtuple.py | 5 --- 9 files changed, 18 insertions(+), 41 deletions(-) diff --git a/Calibration/IsolatedParticles/python/isoTrack_cff.py b/Calibration/IsolatedParticles/python/isoTrack_cff.py index df49437112ebf..978c2007bfd86 100644 --- a/Calibration/IsolatedParticles/python/isoTrack_cff.py +++ b/Calibration/IsolatedParticles/python/isoTrack_cff.py @@ -233,7 +233,6 @@ maxNSeeds = cms.uint32( 100000 ), NavigationSchool = cms.string( "SimpleNavigationSchool" ), TrajectoryBuilder = cms.string( "hltESPCkfTrajectoryBuilder" ), - produceSeedStopReasons = cms.bool(False) ) hltHITCtfWithMaterialTracksHE = cms.EDProducer("TrackProducer", src = cms.InputTag( "hltHITCkfTrackCandidatesHE" ), @@ -393,7 +392,6 @@ maxNSeeds = cms.uint32( 100000 ), NavigationSchool = cms.string( "SimpleNavigationSchool" ), TrajectoryBuilder = cms.string( "hltESPCkfTrajectoryBuilder" ), - produceSeedStopReasons = cms.bool(False) ) hltHITCtfWithMaterialTracksHB = cms.EDProducer("TrackProducer", diff --git a/RecoMuon/L3MuonProducer/test/newL3.py b/RecoMuon/L3MuonProducer/test/newL3.py index 0facce21ff528..201391b1af739 100644 --- a/RecoMuon/L3MuonProducer/test/newL3.py +++ b/RecoMuon/L3MuonProducer/test/newL3.py @@ -262,7 +262,6 @@ def producers_by_type(process, type): ), MeasurementTrackerEvent = cms.InputTag("hltSiStripClusters"), reverseTrajectories = cms.bool( True ), - produceSeedStopReasons = cms.bool(False) ) ###------------- Fitter-Smoother ------------------- @@ -547,7 +546,6 @@ def producers_by_type(process, type): TrajectoryBuilderPSet = cms.PSet( refToPSet_ = cms.string( "HLTIter0HighPtTkMuPSetTrajectoryBuilderIT" ) ), NavigationSchool = cms.string( "SimpleNavigationSchool" ), TrajectoryBuilder = cms.string( "" ), - produceSeedStopReasons = cms.bool(False) ) process.hltIterL3Iter0HighPtTkMuCtfWithMaterialTracks = cms.EDProducer( "TrackProducer", src = cms.InputTag( "hltIterL3Iter0HighPtTkMuCkfTrackCandidates" ), @@ -712,7 +710,6 @@ def producers_by_type(process, type): TrajectoryBuilderPSet = cms.PSet( refToPSet_ = cms.string( "HLTIter2HighPtTkMuPSetTrajectoryBuilderIT" ) ), NavigationSchool = cms.string( "SimpleNavigationSchool" ), TrajectoryBuilder = cms.string( "" ), - produceSeedStopReasons = cms.bool(False) ) process.hltIterL3Iter2HighPtTkMuCtfWithMaterialTracks = cms.EDProducer( "TrackProducer", src = cms.InputTag( "hltIterL3Iter2HighPtTkMuCkfTrackCandidates" ), diff --git a/RecoTracker/CkfPattern/plugins/CkfTrackCandidateMaker.h b/RecoTracker/CkfPattern/plugins/CkfTrackCandidateMaker.h index 54d55bbda7e16..255617089ad50 100644 --- a/RecoTracker/CkfPattern/plugins/CkfTrackCandidateMaker.h +++ b/RecoTracker/CkfPattern/plugins/CkfTrackCandidateMaker.h @@ -28,11 +28,8 @@ namespace cms explicit CkfTrackCandidateMaker(const edm::ParameterSet& conf): CkfTrackCandidateMakerBase(conf, consumesCollector()){ - produceSeedStopReasons_ = conf.getParameter("produceSeedStopReasons"); produces(); - if(produceSeedStopReasons_) { - produces >(); - } + produces >(); } virtual ~CkfTrackCandidateMaker(){;} diff --git a/RecoTracker/CkfPattern/plugins/CkfTrajectoryMaker.h b/RecoTracker/CkfPattern/plugins/CkfTrajectoryMaker.h index 3becb5db0ef8b..77449246677ba 100644 --- a/RecoTracker/CkfPattern/plugins/CkfTrajectoryMaker.h +++ b/RecoTracker/CkfPattern/plugins/CkfTrajectoryMaker.h @@ -35,6 +35,7 @@ namespace cms if (theTrackCandidateOutput) produces(); produces(); + produces >(); } virtual ~CkfTrajectoryMaker(){;} diff --git a/RecoTracker/CkfPattern/python/CkfTrackCandidates_cfi.py b/RecoTracker/CkfPattern/python/CkfTrackCandidates_cfi.py index d9998071c6de0..599d1aa5ff372 100644 --- a/RecoTracker/CkfPattern/python/CkfTrackCandidates_cfi.py +++ b/RecoTracker/CkfPattern/python/CkfTrackCandidates_cfi.py @@ -31,6 +31,5 @@ numberMeasurementsForFit = cms.int32(4) ), MeasurementTrackerEvent = cms.InputTag("MeasurementTrackerEvent"), - produceSeedStopReasons = cms.bool(False), # useful only for ntuple/debugging ) diff --git a/RecoTracker/CkfPattern/python/CkfTrajectoryBuilder_cfi.py b/RecoTracker/CkfPattern/python/CkfTrajectoryBuilder_cfi.py index c6531ccc84da1..fd2190618bad5 100644 --- a/RecoTracker/CkfPattern/python/CkfTrajectoryBuilder_cfi.py +++ b/RecoTracker/CkfPattern/python/CkfTrajectoryBuilder_cfi.py @@ -16,7 +16,6 @@ # propagatorOpposite = cms.string('PropagatorWithMaterialParabolicMfOpposite'), lostHitPenalty = cms.double(30.0), #SharedSeedCheck = cms.bool(False) - produceSeedStopReasons = cms.bool(False), # useful only for ntuple/debugging ) diff --git a/RecoTracker/CkfPattern/src/CkfTrackCandidateMakerBase.cc b/RecoTracker/CkfPattern/src/CkfTrackCandidateMakerBase.cc index 22f47e34b69c9..2c236bde4713e 100644 --- a/RecoTracker/CkfPattern/src/CkfTrackCandidateMakerBase.cc +++ b/RecoTracker/CkfPattern/src/CkfTrackCandidateMakerBase.cc @@ -67,7 +67,6 @@ namespace cms{ doSeedingRegionRebuilding(conf.getParameter("doSeedingRegionRebuilding")), cleanTrajectoryAfterInOut(conf.getParameter("cleanTrajectoryAfterInOut")), reverseTrajectories(conf.existsAs("reverseTrajectories") && conf.getParameter("reverseTrajectories")), - produceSeedStopReasons_(false), theMaxNSeeds(conf.getParameter("maxNSeeds")), theTrajectoryBuilder(createBaseCkfTrajectoryBuilder(conf.getParameter("TrajectoryBuilderPSet"), iC)), theTrajectoryCleanerName(conf.getParameter("TrajectoryCleaner")), @@ -210,16 +209,13 @@ namespace cms{ // Step C: Create empty output collection auto output = std::make_unique(); auto outputT = std::make_unique>(); - std::unique_ptr > outputSeedStopReasons; - if(produceSeedStopReasons_) { - outputSeedStopReasons = std::make_unique >(collseed->size(), SeedStopReason::UNINITIALIZED); - } + auto outputSeedStopReasons = std::make_unique >(collseed->size(), SeedStopReason::UNINITIALIZED); if ( (*collseed).size()>theMaxNSeeds ) { LogError("TooManySeeds")<<"Exceeded maximum numeber of seeds! theMaxNSeeds="<buildTrajectories( (*collseed)[j], theTmpTrajectories, nullptr ); if(theTmpTrajectories.empty()) { - if(produceSeedStopReasons_) { - Lock lock(theMutex); - (*outputSeedStopReasons)[j] = SeedStopReason::NO_TRAJECTORY; - } + Lock lock(theMutex); + (*outputSeedStopReasons)[j] = SeedStopReason::NO_TRAJECTORY; return; // from the lambda! } @@ -350,7 +344,7 @@ namespace cms{ it!=theTmpTrajectories.end(); it++){ if( it->isValid() ) { it->setSeedRef(collseed->refAt(j)); - if(produceSeedStopReasons_) (*outputSeedStopReasons)[j] = SeedStopReason::NOT_STOPPED; + (*outputSeedStopReasons)[j] = SeedStopReason::NOT_STOPPED; // Store trajectory rawResult.push_back(std::move(*it)); // Tell seed cleaner which hits this trajectory used. @@ -410,14 +404,12 @@ namespace cms{ LogDebug("CkfPattern") << "removing invalid trajectories."; - if(produceSeedStopReasons_) { - // Assuming here that theLoop() gives at most one Trajectory per seed - for(const auto& traj: rawResult) { - if(!traj.isValid()) { - const auto seedIndex = traj.seedRef().key(); - if((*outputSeedStopReasons)[seedIndex] == SeedStopReason::NOT_STOPPED) { - (*outputSeedStopReasons)[seedIndex] = SeedStopReason::FINAL_CLEAN; - } + // Assuming here that theLoop() gives at most one Trajectory per seed + for(const auto& traj: rawResult) { + if(!traj.isValid()) { + const auto seedIndex = traj.seedRef().key(); + if((*outputSeedStopReasons)[seedIndex] == SeedStopReason::NOT_STOPPED) { + (*outputSeedStopReasons)[seedIndex] = SeedStopReason::FINAL_CLEAN; } } } @@ -506,10 +498,8 @@ namespace cms{ } while(failed && trialTrajectory.foundHits() > 3); if(failed) { - if(produceSeedStopReasons_) { - const auto seedIndex = it->seedRef().key(); - (*outputSeedStopReasons)[seedIndex] = SeedStopReason::SMOOTHING_FAILED; - } + const auto seedIndex = it->seedRef().key(); + (*outputSeedStopReasons)[seedIndex] = SeedStopReason::SMOOTHING_FAILED; continue; } @@ -549,7 +539,7 @@ namespace cms{ // Step G: write output to file if (theTrackCandidateOutput){e.put(std::move(output));} if (theTrajectoryOutput){e.put(std::move(outputT));} - if (produceSeedStopReasons_){e.put(std::move(outputSeedStopReasons));} + e.put(std::move(outputSeedStopReasons)); } } diff --git a/RecoTracker/DebugTools/interface/CkfDebugTrackCandidateMaker.h b/RecoTracker/DebugTools/interface/CkfDebugTrackCandidateMaker.h index 30dbdc0212378..973fd232a5e8b 100644 --- a/RecoTracker/DebugTools/interface/CkfDebugTrackCandidateMaker.h +++ b/RecoTracker/DebugTools/interface/CkfDebugTrackCandidateMaker.h @@ -11,6 +11,7 @@ namespace cms { public: CkfDebugTrackCandidateMaker(const edm::ParameterSet& conf) : CkfTrackCandidateMakerBase(conf, consumesCollector()) { produces(); + produces >(); } virtual void beginRun (edm::Run const & run, edm::EventSetup const & es) override { diff --git a/Validation/RecoTrack/python/customiseTrackingNtuple.py b/Validation/RecoTrack/python/customiseTrackingNtuple.py index 6fd7c9e998138..aca65fd8e63cd 100644 --- a/Validation/RecoTrack/python/customiseTrackingNtuple.py +++ b/Validation/RecoTrack/python/customiseTrackingNtuple.py @@ -17,11 +17,6 @@ def customiseTrackingNtuple(process): if not hasattr(process, "reconstruction_step"): raise Exception("TrackingNtuple includeSeeds=True needs reconstruction which is missing") - # enable seed stopping reason in track candidate producer - for trkCand in process.trackingNtuple.trackCandidates.value(): - producer = getattr(process, cms.InputTag(trkCand).getModuleLabel()) - producer.produceSeedStopReasons = True - # Replace validation_step with ntuplePath if not hasattr(process, "validation_step"): raise Exception("TrackingNtuple customise assumes process.validation_step exists") From d3c275fd9325ab90bc4cbe589d3e65275a9b0c72 Mon Sep 17 00:00:00 2001 From: Matti Kortelainen Date: Tue, 5 Sep 2017 15:44:50 +0200 Subject: [PATCH 2/8] Add SeedStopInfo, include SeedStopReason in it, and produce it instead of SeedStopReason --- .../TrackReco/interface/SeedStopInfo.h | 19 ++++++++++++ .../TrackReco/interface/SeedStopReason.h | 20 +++++-------- DataFormats/TrackReco/src/classes.h | 4 +++ DataFormats/TrackReco/src/classes_def.xml | 4 +++ .../plugins/CkfTrackCandidateMaker.h | 3 +- .../CkfPattern/plugins/CkfTrajectoryMaker.h | 3 +- .../src/CkfTrackCandidateMakerBase.cc | 20 ++++++------- .../interface/CkfDebugTrackCandidateMaker.h | 3 +- .../RecoTrack/plugins/TrackingNtuple.cc | 29 ++++++++++--------- 9 files changed, 66 insertions(+), 39 deletions(-) create mode 100644 DataFormats/TrackReco/interface/SeedStopInfo.h diff --git a/DataFormats/TrackReco/interface/SeedStopInfo.h b/DataFormats/TrackReco/interface/SeedStopInfo.h new file mode 100644 index 0000000000000..d1fd0b3dab1cc --- /dev/null +++ b/DataFormats/TrackReco/interface/SeedStopInfo.h @@ -0,0 +1,19 @@ +#ifndef DataFormats_TrackReco_SeedStopInfo_h +#define DataFormats_TrackReco_SeedStopInfo_h + +#include "DataFormats/TrackReco/interface/SeedStopReason.h" + +class SeedStopInfo { +public: + SeedStopInfo() {} + ~SeedStopInfo() = default; + + void setStopReason(SeedStopReason value) { stopReason_ = value; } + SeedStopReason stopReason() const { return stopReason_; } + unsigned char stopReasonUC() const { return static_cast(stopReason_); } + +private: + SeedStopReason stopReason_ = SeedStopReason::UNINITIALIZED; +}; + +#endif diff --git a/DataFormats/TrackReco/interface/SeedStopReason.h b/DataFormats/TrackReco/interface/SeedStopReason.h index dd34028a168f0..52dbd2752b601 100644 --- a/DataFormats/TrackReco/interface/SeedStopReason.h +++ b/DataFormats/TrackReco/interface/SeedStopReason.h @@ -1,18 +1,14 @@ #ifndef DataFormats_TrackReco_SeedStopReason_h #define DataFormats_TrackReco_SeedStopReason_h -// Using unscoped enum because all uses are casts to integer, so -// implicit casting is convenient -struct SeedStopReason { - enum { - UNINITIALIZED = 0, - NOT_STOPPED = 1, - SEED_CLEANING = 2, - NO_TRAJECTORY = 3, - FINAL_CLEAN = 4, - SMOOTHING_FAILED = 5, - SIZE = 6 - }; +enum class SeedStopReason { + UNINITIALIZED = 0, + NOT_STOPPED = 1, + SEED_CLEANING = 2, + NO_TRAJECTORY = 3, + FINAL_CLEAN = 4, + SMOOTHING_FAILED = 5, + SIZE = 6 }; #endif diff --git a/DataFormats/TrackReco/src/classes.h b/DataFormats/TrackReco/src/classes.h index b5e5d04934193..b2bbd270e4729 100644 --- a/DataFormats/TrackReco/src/classes.h +++ b/DataFormats/TrackReco/src/classes.h @@ -29,6 +29,7 @@ #include "DataFormats/Candidate/interface/Candidate.h" #include "DataFormats/TrackCandidate/interface/TrackCandidate.h" #include "DataFormats/TrackReco/interface/DeDxHitInfo.h" +#include "DataFormats/TrackReco/interface/SeedStopInfo.h" #include @@ -138,5 +139,8 @@ namespace DataFormats_TrackReco { reco::DeDxHitInfo::DeDxHitInfoContainer hitInfoContainerDEDX; reco::DeDxHitInfo::DeDxHitInfoContainerCollection hitInfoContainerDEDXc; + SeedStopInfo ssi; + std::vector vssi; + edm::Wrapper > wvssi; }; } diff --git a/DataFormats/TrackReco/src/classes_def.xml b/DataFormats/TrackReco/src/classes_def.xml index b9b15471232a9..3cd2a1b3bafa3 100644 --- a/DataFormats/TrackReco/src/classes_def.xml +++ b/DataFormats/TrackReco/src/classes_def.xml @@ -465,4 +465,8 @@ + + + + diff --git a/RecoTracker/CkfPattern/plugins/CkfTrackCandidateMaker.h b/RecoTracker/CkfPattern/plugins/CkfTrackCandidateMaker.h index 255617089ad50..870ce4c568187 100644 --- a/RecoTracker/CkfPattern/plugins/CkfTrackCandidateMaker.h +++ b/RecoTracker/CkfPattern/plugins/CkfTrackCandidateMaker.h @@ -17,6 +17,7 @@ #include "RecoTracker/CkfPattern/interface/RedundantSeedCleaner.h" #include "RecoTracker/CkfPattern/interface/CkfTrackCandidateMakerBase.h" #include "DataFormats/TrackCandidate/interface/TrackCandidateCollection.h" +#include "DataFormats/TrackReco/interface/SeedStopInfo.h" class TransientInitialStateEstimator; @@ -29,7 +30,7 @@ namespace cms explicit CkfTrackCandidateMaker(const edm::ParameterSet& conf): CkfTrackCandidateMakerBase(conf, consumesCollector()){ produces(); - produces >(); + produces >(); } virtual ~CkfTrackCandidateMaker(){;} diff --git a/RecoTracker/CkfPattern/plugins/CkfTrajectoryMaker.h b/RecoTracker/CkfPattern/plugins/CkfTrajectoryMaker.h index 77449246677ba..bea2715dc0157 100644 --- a/RecoTracker/CkfPattern/plugins/CkfTrajectoryMaker.h +++ b/RecoTracker/CkfPattern/plugins/CkfTrajectoryMaker.h @@ -17,6 +17,7 @@ #include "RecoTracker/CkfPattern/interface/RedundantSeedCleaner.h" #include "RecoTracker/CkfPattern/interface/CkfTrackCandidateMakerBase.h" #include "DataFormats/TrackCandidate/interface/TrackCandidateCollection.h" +#include "DataFormats/TrackReco/interface/SeedStopInfo.h" class TransientInitialStateEstimator; @@ -35,7 +36,7 @@ namespace cms if (theTrackCandidateOutput) produces(); produces(); - produces >(); + produces >(); } virtual ~CkfTrajectoryMaker(){;} diff --git a/RecoTracker/CkfPattern/src/CkfTrackCandidateMakerBase.cc b/RecoTracker/CkfPattern/src/CkfTrackCandidateMakerBase.cc index 2c236bde4713e..f6d24f19ac0eb 100644 --- a/RecoTracker/CkfPattern/src/CkfTrackCandidateMakerBase.cc +++ b/RecoTracker/CkfPattern/src/CkfTrackCandidateMakerBase.cc @@ -8,7 +8,7 @@ #include "DataFormats/Common/interface/OwnVector.h" #include "DataFormats/TrackCandidate/interface/TrackCandidateCollection.h" #include "DataFormats/Common/interface/View.h" -#include "DataFormats/TrackReco/interface/SeedStopReason.h" +#include "DataFormats/TrackReco/interface/SeedStopInfo.h" #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" @@ -209,13 +209,13 @@ namespace cms{ // Step C: Create empty output collection auto output = std::make_unique(); auto outputT = std::make_unique>(); - auto outputSeedStopReasons = std::make_unique >(collseed->size(), SeedStopReason::UNINITIALIZED); + auto outputSeedStopInfos = std::make_unique >(collseed->size()); if ( (*collseed).size()>theMaxNSeeds ) { LogError("TooManySeeds")<<"Exceeded maximum numeber of seeds! theMaxNSeeds="<buildTrajectories( (*collseed)[j], theTmpTrajectories, nullptr ); if(theTmpTrajectories.empty()) { Lock lock(theMutex); - (*outputSeedStopReasons)[j] = SeedStopReason::NO_TRAJECTORY; + (*outputSeedStopInfos)[j].setStopReason(SeedStopReason::NO_TRAJECTORY); return; // from the lambda! } @@ -344,7 +344,7 @@ namespace cms{ it!=theTmpTrajectories.end(); it++){ if( it->isValid() ) { it->setSeedRef(collseed->refAt(j)); - (*outputSeedStopReasons)[j] = SeedStopReason::NOT_STOPPED; + (*outputSeedStopInfos)[j].setStopReason(SeedStopReason::NOT_STOPPED); // Store trajectory rawResult.push_back(std::move(*it)); // Tell seed cleaner which hits this trajectory used. @@ -408,8 +408,8 @@ namespace cms{ for(const auto& traj: rawResult) { if(!traj.isValid()) { const auto seedIndex = traj.seedRef().key(); - if((*outputSeedStopReasons)[seedIndex] == SeedStopReason::NOT_STOPPED) { - (*outputSeedStopReasons)[seedIndex] = SeedStopReason::FINAL_CLEAN; + if((*outputSeedStopInfos)[seedIndex].stopReason() == SeedStopReason::NOT_STOPPED) { + (*outputSeedStopInfos)[seedIndex].setStopReason(SeedStopReason::FINAL_CLEAN); } } } @@ -499,7 +499,7 @@ namespace cms{ if(failed) { const auto seedIndex = it->seedRef().key(); - (*outputSeedStopReasons)[seedIndex] = SeedStopReason::SMOOTHING_FAILED; + (*outputSeedStopInfos)[seedIndex].setStopReason(SeedStopReason::SMOOTHING_FAILED); continue; } @@ -539,7 +539,7 @@ namespace cms{ // Step G: write output to file if (theTrackCandidateOutput){e.put(std::move(output));} if (theTrajectoryOutput){e.put(std::move(outputT));} - e.put(std::move(outputSeedStopReasons)); + e.put(std::move(outputSeedStopInfos)); } } diff --git a/RecoTracker/DebugTools/interface/CkfDebugTrackCandidateMaker.h b/RecoTracker/DebugTools/interface/CkfDebugTrackCandidateMaker.h index 973fd232a5e8b..0bf9044042e21 100644 --- a/RecoTracker/DebugTools/interface/CkfDebugTrackCandidateMaker.h +++ b/RecoTracker/DebugTools/interface/CkfDebugTrackCandidateMaker.h @@ -5,13 +5,14 @@ #include "RecoTracker/CkfPattern/interface/CkfTrackCandidateMakerBase.h" #include "RecoTracker/DebugTools/interface/CkfDebugTrajectoryBuilder.h" #include "FWCore/Framework/interface/EDProducer.h" +#include "DataFormats/TrackReco/interface/SeedStopInfo.h" namespace cms { class CkfDebugTrackCandidateMaker : public edm::EDProducer, public CkfTrackCandidateMakerBase { public: CkfDebugTrackCandidateMaker(const edm::ParameterSet& conf) : CkfTrackCandidateMakerBase(conf, consumesCollector()) { produces(); - produces >(); + produces(); } virtual void beginRun (edm::Run const & run, edm::EventSetup const & es) override { diff --git a/Validation/RecoTrack/plugins/TrackingNtuple.cc b/Validation/RecoTrack/plugins/TrackingNtuple.cc index d8d38e6b134d9..9936ce75a87e1 100644 --- a/Validation/RecoTrack/plugins/TrackingNtuple.cc +++ b/Validation/RecoTrack/plugins/TrackingNtuple.cc @@ -39,6 +39,7 @@ #include "DataFormats/TrackReco/interface/Track.h" #include "DataFormats/TrackReco/interface/TrackFwd.h" +#include "DataFormats/TrackReco/interface/SeedStopInfo.h" #include "TrackingTools/Records/interface/TransientRecHitRecord.h" #include "TrackingTools/TransientTrackingRecHit/interface/TransientTrackingRecHitBuilder.h" @@ -512,7 +513,7 @@ class TrackingNtuple : public edm::one::EDAnalyzer { // ----------member data --------------------------- std::vector > > seedTokens_; - std::vector > > seedStopReasonTokens_; + std::vector > > seedStopInfoTokens_; edm::EDGetTokenT > trackToken_; std::vector, edm::EDGetTokenT > > mvaQualityCollectionTokens_; edm::EDGetTokenT trackingParticleToken_; @@ -1141,11 +1142,11 @@ TrackingNtuple::TrackingNtuple(const edm::ParameterSet& iConfig): seedTokens_ = edm::vector_transform(iConfig.getUntrackedParameter >("seedTracks"), [&](const edm::InputTag& tag) { return consumes >(tag); }); - seedStopReasonTokens_ = edm::vector_transform(iConfig.getUntrackedParameter >("trackCandidates"), [&](const edm::InputTag& tag) { - return consumes >(tag); + seedStopInfoTokens_ = edm::vector_transform(iConfig.getUntrackedParameter >("trackCandidates"), [&](const edm::InputTag& tag) { + return consumes >(tag); }); - if(seedTokens_.size() != seedStopReasonTokens_.size()) { - throw cms::Exception("Configuration") << "Got " << seedTokens_.size() << " seed collections, but " << seedStopReasonTokens_.size() << " track candidate collections"; + if(seedTokens_.size() != seedStopInfoTokens_.size()) { + throw cms::Exception("Configuration") << "Got " << seedTokens_.size() << " seed collections, but " << seedStopInfoTokens_.size() << " track candidate collections"; } } @@ -2463,15 +2464,15 @@ void TrackingNtuple::fillSeeds(const edm::Event& iEvent, edm::EDConsumerBase::Labels labels; labelsForToken(seedToken, labels); - const auto& seedStopReasonToken = seedStopReasonTokens_[iColl]; - edm::Handle > seedStopReasonHandle; - iEvent.getByToken(seedStopReasonToken, seedStopReasonHandle); - const auto& seedStopReasons = *seedStopReasonHandle; - if(seedTracks.size() != seedStopReasons.size()) { + const auto& seedStopInfoToken = seedStopInfoTokens_[iColl]; + edm::Handle > seedStopInfoHandle; + iEvent.getByToken(seedStopInfoToken, seedStopInfoHandle); + const auto& seedStopInfos = *seedStopInfoHandle; + if(seedTracks.size() != seedStopInfos.size()) { edm::EDConsumerBase::Labels labels2; - labelsForToken(seedStopReasonToken, labels2); + labelsForToken(seedStopInfoToken, labels2); - throw cms::Exception("LogicError") << "Got " << seedTracks.size() << " seeds, but " << seedStopReasons.size() << " seed stopping reasons for collections " << labels.module << ", " << labels2.module; + throw cms::Exception("LogicError") << "Got " << seedTracks.size() << " seeds, but " << seedStopInfos.size() << " seed stopping infos for collections " << labels.module << ", " << labels2.module; } // The associator interfaces really need to be fixed... @@ -2505,7 +2506,7 @@ void TrackingNtuple::fillSeeds(const edm::Event& iEvent, const auto& seedRef = seedTrack.seedRef(); const auto& seed = *seedRef; - const auto seedStopReason = seedStopReasons[iSeed]; + const auto seedStopInfo = seedStopInfos[iSeed]; if(seedRef.id() != id) throw cms::Exception("LogicError") << "All tracks in 'TracksFromSeeds' collection should point to seeds in the same collection. Now the element 0 had ProductID " << id << " while the element " << seedTrackRef.key() << " had " << seedTrackRef.id() << ". The source collection is " << labels.module << "."; @@ -2549,7 +2550,7 @@ void TrackingNtuple::fillSeeds(const edm::Event& iEvent, see_dxyErr .push_back( seedFitOk ? seedTrack.dxyError() : 0); see_dzErr .push_back( seedFitOk ? seedTrack.dzError() : 0); see_algo .push_back( algo ); - see_stopReason.push_back( seedStopReason ); + see_stopReason.push_back( seedStopInfo.stopReasonUC() ); const auto& state = seedTrack.seedRef()->startingState(); const auto& pos = state.parameters().position(); From f99b5fbfbb0e59323aa5ca3bec250d633c252ecb Mon Sep 17 00:00:00 2001 From: Matti Kortelainen Date: Tue, 5 Sep 2017 16:54:31 +0200 Subject: [PATCH 3/8] Add candidates/seed to SeedStopInfo and propagate to TrackingNtuple --- .../TrackReco/interface/SeedStopInfo.h | 4 +++ .../interface/BaseCkfTrajectoryBuilder.h | 1 + .../interface/CkfTrajectoryBuilder.h | 5 ++-- .../plugins/GroupedCkfTrajectoryBuilder.cc | 26 ++++++++++++++----- .../plugins/GroupedCkfTrajectoryBuilder.h | 13 +++++----- .../src/CkfTrackCandidateMakerBase.cc | 12 ++++++--- .../CkfPattern/src/CkfTrajectoryBuilder.cc | 22 +++++++++++----- .../RecoTrack/plugins/TrackingNtuple.cc | 4 +++ 8 files changed, 63 insertions(+), 24 deletions(-) diff --git a/DataFormats/TrackReco/interface/SeedStopInfo.h b/DataFormats/TrackReco/interface/SeedStopInfo.h index d1fd0b3dab1cc..32a1cb0b6408e 100644 --- a/DataFormats/TrackReco/interface/SeedStopInfo.h +++ b/DataFormats/TrackReco/interface/SeedStopInfo.h @@ -8,11 +8,15 @@ class SeedStopInfo { SeedStopInfo() {} ~SeedStopInfo() = default; + void setCandidatesPerSeed(unsigned short value) { candidatesPerSeed_ = value; } + unsigned short candidatesPerSeed() const { return candidatesPerSeed_; } + void setStopReason(SeedStopReason value) { stopReason_ = value; } SeedStopReason stopReason() const { return stopReason_; } unsigned char stopReasonUC() const { return static_cast(stopReason_); } private: + unsigned short candidatesPerSeed_ = 0; SeedStopReason stopReason_ = SeedStopReason::UNINITIALIZED; }; diff --git a/RecoTracker/CkfPattern/interface/BaseCkfTrajectoryBuilder.h b/RecoTracker/CkfPattern/interface/BaseCkfTrajectoryBuilder.h index 27bfbe53c5c91..013567609bfc7 100644 --- a/RecoTracker/CkfPattern/interface/BaseCkfTrajectoryBuilder.h +++ b/RecoTracker/CkfPattern/interface/BaseCkfTrajectoryBuilder.h @@ -75,6 +75,7 @@ class BaseCkfTrajectoryBuilder : public TrajectoryBuilder { // new interface returning the start Trajectory... virtual TempTrajectory buildTrajectories (const TrajectorySeed& seed, TrajectoryContainer &ret, + unsigned int& nCandPerSeed, const TrajectoryFilter*) const { assert(0==1); return TempTrajectory();} diff --git a/RecoTracker/CkfPattern/interface/CkfTrajectoryBuilder.h b/RecoTracker/CkfPattern/interface/CkfTrajectoryBuilder.h index d72da468b3d9f..0aa5849a21ea3 100644 --- a/RecoTracker/CkfPattern/interface/CkfTrajectoryBuilder.h +++ b/RecoTracker/CkfPattern/interface/CkfTrajectoryBuilder.h @@ -51,6 +51,7 @@ class CkfTrajectoryBuilder :public BaseCkfTrajectoryBuilder { // new interface returning the start Trajectory... TempTrajectory buildTrajectories (const TrajectorySeed&, TrajectoryContainer &ret, + unsigned int& nCandPerSeed, const TrajectoryFilter*) const override; @@ -76,8 +77,8 @@ class CkfTrajectoryBuilder :public BaseCkfTrajectoryBuilder { virtual void findCompatibleMeasurements(const TrajectorySeed&seed, const TempTrajectory& traj, std::vector & result) const; - void limitedCandidates(const TrajectorySeed&seed, TempTrajectory& startingTraj, TrajectoryContainer& result) const; - void limitedCandidates(const boost::shared_ptr & sharedSeed, TempTrajectoryContainer &candidates, TrajectoryContainer& result) const; + unsigned int limitedCandidates(const TrajectorySeed&seed, TempTrajectory& startingTraj, TrajectoryContainer& result) const; + unsigned int limitedCandidates(const boost::shared_ptr & sharedSeed, TempTrajectoryContainer &candidates, TrajectoryContainer& result) const; void updateTrajectory( TempTrajectory& traj, TM && tm) const; diff --git a/RecoTracker/CkfPattern/plugins/GroupedCkfTrajectoryBuilder.cc b/RecoTracker/CkfPattern/plugins/GroupedCkfTrajectoryBuilder.cc index d95a19a000c4c..968f57ba860ed 100644 --- a/RecoTracker/CkfPattern/plugins/GroupedCkfTrajectoryBuilder.cc +++ b/RecoTracker/CkfPattern/plugins/GroupedCkfTrajectoryBuilder.cc @@ -179,7 +179,8 @@ GroupedCkfTrajectoryBuilder::trajectories (const TrajectorySeed& seed) const { TrajectoryContainer ret; ret.reserve(10); - buildTrajectories(seed, ret, 0); + unsigned int tmp; + buildTrajectories(seed, ret, tmp, 0); return ret; } @@ -189,15 +190,17 @@ GroupedCkfTrajectoryBuilder::trajectories (const TrajectorySeed& seed, { TrajectoryContainer ret; ret.reserve(10); + unsigned int tmp; RegionalTrajectoryFilter regionalCondition(region); - buildTrajectories(seed, ret, ®ionalCondition); + buildTrajectories(seed, ret, tmp, ®ionalCondition); return ret; } void GroupedCkfTrajectoryBuilder::trajectories (const TrajectorySeed& seed, GroupedCkfTrajectoryBuilder::TrajectoryContainer &ret) const { - buildTrajectories(seed,ret,0); + unsigned int tmp; + buildTrajectories(seed,ret,tmp,0); } void @@ -206,7 +209,8 @@ GroupedCkfTrajectoryBuilder::trajectories (const TrajectorySeed& seed, const TrackingRegion& region) const { RegionalTrajectoryFilter regionalCondition(region); - buildTrajectories(seed,ret,®ionalCondition); + unsigned int tmp; + buildTrajectories(seed,ret,tmp,®ionalCondition); } void @@ -255,6 +259,7 @@ GroupedCkfTrajectoryBuilder::rebuildTrajectories(TempTrajectory const & starting TempTrajectory GroupedCkfTrajectoryBuilder::buildTrajectories (const TrajectorySeed& seed, GroupedCkfTrajectoryBuilder::TrajectoryContainer &result, + unsigned int& nCandPerSeed, const TrajectoryFilter* regionalCondition) const { if (theMeasurementTracker == 0) { @@ -272,7 +277,7 @@ GroupedCkfTrajectoryBuilder::buildTrajectories (const TrajectorySeed& seed, work_.clear(); const bool inOut = true; - groupedLimitedCandidates(seed, startingTraj, regionalCondition, forwardPropagator(seed), inOut, work_); + nCandPerSeed = groupedLimitedCandidates(seed, startingTraj, regionalCondition, forwardPropagator(seed), inOut, work_); if ( work_.empty() ) return startingTraj; // cleaning now done here... @@ -325,7 +330,7 @@ std::cout << "ckf " << kt++ << ": "; for (auto c:chit) std::cout << c <<'/'; std } -void +unsigned int GroupedCkfTrajectoryBuilder::groupedLimitedCandidates (const TrajectorySeed& seed, TempTrajectory const& startingTraj, const TrajectoryFilter* regionalCondition, @@ -334,6 +339,8 @@ GroupedCkfTrajectoryBuilder::groupedLimitedCandidates (const TrajectorySeed& see TempTrajectoryContainer& result) const { unsigned int nIter=1; + unsigned int nCands=0; // ignore startingTraj + unsigned int prevNewCandSize=0; TempTrajectoryContainer candidates; TempTrajectoryContainer newCand; candidates.push_back( startingTraj); @@ -349,6 +356,11 @@ GroupedCkfTrajectoryBuilder::groupedLimitedCandidates (const TrajectorySeed& see } LogDebug("CkfPattern")<<"newCand(1): after advanced one layer:\n"< 1 candidate, don't increase count + // - 1 candidate -> 2 candidates, increase count by 1 + nCands += newCand.size() - prevNewCandSize; + prevNewCandSize = newCand.size(); if ((int)newCand.size() > theMaxCand) { //ShowCand()(newCand); @@ -383,6 +395,8 @@ GroupedCkfTrajectoryBuilder::groupedLimitedCandidates (const TrajectorySeed& see <<"\n "<buildTrajectories( (*collseed)[j], theTmpTrajectories, nullptr ); - if(theTmpTrajectories.empty()) { + unsigned int nCandPerSeed = 0; + auto const & startTraj = theTrajectoryBuilder->buildTrajectories( (*collseed)[j], theTmpTrajectories, nCandPerSeed, nullptr ); + { Lock lock(theMutex); - (*outputSeedStopInfos)[j].setStopReason(SeedStopReason::NO_TRAJECTORY); - return; // from the lambda! + (*outputSeedStopInfos)[j].setCandidatesPerSeed(nCandPerSeed); + if(theTmpTrajectories.empty()) { + (*outputSeedStopInfos)[j].setStopReason(SeedStopReason::NO_TRAJECTORY); + return; // from the lambda! + } } LogDebug("CkfPattern") << "======== In-out trajectory building found " << theTmpTrajectories.size() diff --git a/RecoTracker/CkfPattern/src/CkfTrajectoryBuilder.cc b/RecoTracker/CkfPattern/src/CkfTrajectoryBuilder.cc index aeb1986dee115..5802471be18d1 100644 --- a/RecoTracker/CkfPattern/src/CkfTrajectoryBuilder.cc +++ b/RecoTracker/CkfPattern/src/CkfTrajectoryBuilder.cc @@ -142,11 +142,13 @@ CkfTrajectoryBuilder::trajectories(const TrajectorySeed& seed, CkfTrajectoryBuil } */ - buildTrajectories(seed, result,nullptr); + unsigned int tmp; + buildTrajectories(seed, result, tmp, nullptr); } TempTrajectory CkfTrajectoryBuilder::buildTrajectories (const TrajectorySeed&seed, TrajectoryContainer &result, + unsigned int& nCandPerSeed, const TrajectoryFilter*) const { if (theMeasurementTracker == 0) { throw cms::Exception("LogicError") << "Asking to create trajectories to an un-initialized CkfTrajectoryBuilder.\nYou have to call clone(const MeasurementTrackerEvent *data) and then call trajectories on it instead.\n"; @@ -156,7 +158,7 @@ TempTrajectory CkfTrajectoryBuilder::buildTrajectories (const TrajectorySeed&see /// limitedCandidates( startingTraj, regionalCondition, result); /// FIXME: restore regionalCondition - limitedCandidates(seed, startingTraj, result); + nCandPerSeed = limitedCandidates(seed, startingTraj, result); return startingTraj; @@ -168,21 +170,23 @@ TempTrajectory CkfTrajectoryBuilder::buildTrajectories (const TrajectorySeed&see // analyseResult(result); } -void CkfTrajectoryBuilder:: +unsigned int CkfTrajectoryBuilder:: limitedCandidates(const TrajectorySeed&seed, TempTrajectory& startingTraj, TrajectoryContainer& result) const { TempTrajectoryContainer candidates; candidates.push_back( startingTraj); boost::shared_ptr sharedSeed(new TrajectorySeed(seed)); - limitedCandidates(sharedSeed, candidates,result); + return limitedCandidates(sharedSeed, candidates,result); } -void CkfTrajectoryBuilder:: +unsigned int CkfTrajectoryBuilder:: limitedCandidates(const boost::shared_ptr & sharedSeed, TempTrajectoryContainer &candidates, TrajectoryContainer& result) const { unsigned int nIter=1; + unsigned int nCands=0; // ignore startingTraj + unsigned int prevNewCandSize=0; TempTrajectoryContainer newCand; // = TrajectoryContainer(); newCand.reserve(2*theMaxCand); @@ -204,7 +208,7 @@ limitedCandidates(const boost::shared_ptr & sharedSeed, Te if(!analyzeMeasurementsDebugger(*traj,meas, theMeasurementTracker, forwardPropagator(*sharedSeed),theEstimator, - theTTRHBuilder)) return; + theTTRHBuilder)) return nCands; // --- if ( meas.empty()) { @@ -234,6 +238,11 @@ limitedCandidates(const boost::shared_ptr & sharedSeed, Te } } + // account only new candidates, i.e. + // - 1 candidate -> 1 candidate, don't increase count + // - 1 candidate -> 2 candidates, increase count by 1 + nCands += newCand.size() - prevNewCandSize; + prevNewCandSize = newCand.size(); /* auto trajVal = [&](TempTrajectory const & a) { @@ -298,6 +307,7 @@ limitedCandidates(const boost::shared_ptr & sharedSeed, Te < { std::vector see_nPhase2OT; std::vector see_algo ; std::vector see_stopReason; + std::vector see_nCands; std::vector see_trkIdx; std::vector see_isTrue; std::vector > see_shareFrac; // second index runs through matched TrackingParticles @@ -1448,6 +1449,7 @@ TrackingNtuple::TrackingNtuple(const edm::ParameterSet& iConfig): t->Branch("see_nPhase2OT", &see_nPhase2OT); t->Branch("see_algo" , &see_algo ); t->Branch("see_stopReason", &see_stopReason); + t->Branch("see_nCands" , &see_nCands ); t->Branch("see_trkIdx" , &see_trkIdx ); if(includeTrackingParticles_) { t->Branch("see_shareFrac", &see_shareFrac); @@ -1733,6 +1735,7 @@ void TrackingNtuple::clearVariables() { see_nPhase2OT.clear(); see_algo .clear(); see_stopReason.clear(); + see_nCands .clear(); see_trkIdx .clear(); if(includeTrackingParticles_) { see_shareFrac.clear(); @@ -2551,6 +2554,7 @@ void TrackingNtuple::fillSeeds(const edm::Event& iEvent, see_dzErr .push_back( seedFitOk ? seedTrack.dzError() : 0); see_algo .push_back( algo ); see_stopReason.push_back( seedStopInfo.stopReasonUC() ); + see_nCands .push_back( seedStopInfo.candidatesPerSeed() ); const auto& state = seedTrack.seedRef()->startingState(); const auto& pos = state.parameters().position(); From ba5fb158c0676764ba4f95f0fb3ad5d3cfb0b4eb Mon Sep 17 00:00:00 2001 From: Matti Kortelainen Date: Wed, 6 Sep 2017 10:12:51 +0200 Subject: [PATCH 4/8] Minor cleanup The intention is clearly to issue LogWarning in case a seed collection is missing, but the current code throws an exception as the Handle is dereferenced before isValid() check. Therefore I moved the Handle dereference inside the if(isValid) block. There is no need to construct RefToBase as edm::View has operator[] returning direclty const reference to the contained object. In TrackBuildingAnalyzer move the pointer initialization to the class definition, and initialize bool members in the constructor. --- .../interface/TrackBuildingAnalyzer.h | 96 +++++++++---------- .../src/TrackBuildingAnalyzer.cc | 61 ++++-------- DQM/TrackingMonitor/src/TrackingMonitor.cc | 8 +- 3 files changed, 70 insertions(+), 95 deletions(-) diff --git a/DQM/TrackingMonitor/interface/TrackBuildingAnalyzer.h b/DQM/TrackingMonitor/interface/TrackBuildingAnalyzer.h index c179d7cda99aa..7f06eb5999d66 100644 --- a/DQM/TrackingMonitor/interface/TrackBuildingAnalyzer.h +++ b/DQM/TrackingMonitor/interface/TrackBuildingAnalyzer.h @@ -38,7 +38,7 @@ class TrackBuildingAnalyzer using QualityMaskCollection = std::vector; TrackBuildingAnalyzer(const edm::ParameterSet&); - ~TrackBuildingAnalyzer(); + ~TrackBuildingAnalyzer() = default; void initHisto(DQMStore::IBooker & ibooker, const edm::ParameterSet&); void analyze ( @@ -77,40 +77,40 @@ class TrackBuildingAnalyzer // ----------member data --------------------------- // Candidates used for tracking regions - MonitorElement* TrackingRegionCandidatePt; - MonitorElement* TrackingRegionCandidateEta; - MonitorElement* TrackingRegionCandidatePhi; - MonitorElement* TrackingRegionCandidatePhiVsEta; + MonitorElement* TrackingRegionCandidatePt = nullptr; + MonitorElement* TrackingRegionCandidateEta = nullptr; + MonitorElement* TrackingRegionCandidatePhi = nullptr; + MonitorElement* TrackingRegionCandidatePhiVsEta = nullptr; // Track Seeds - MonitorElement* SeedPt; - MonitorElement* SeedEta; - MonitorElement* SeedPhi; - MonitorElement* SeedPhiVsEta; - MonitorElement* SeedTheta; - MonitorElement* SeedQ; - MonitorElement* SeedDxy; - MonitorElement* SeedDz; - MonitorElement* NumberOfRecHitsPerSeed; - MonitorElement* NumberOfRecHitsPerSeedVsPhiProfile; - MonitorElement* NumberOfRecHitsPerSeedVsEtaProfile; + MonitorElement* SeedPt = nullptr; + MonitorElement* SeedEta = nullptr; + MonitorElement* SeedPhi = nullptr; + MonitorElement* SeedPhiVsEta = nullptr; + MonitorElement* SeedTheta = nullptr; + MonitorElement* SeedQ = nullptr; + MonitorElement* SeedDxy = nullptr; + MonitorElement* SeedDz = nullptr; + MonitorElement* NumberOfRecHitsPerSeed = nullptr; + MonitorElement* NumberOfRecHitsPerSeedVsPhiProfile = nullptr; + MonitorElement* NumberOfRecHitsPerSeedVsEtaProfile = nullptr; // Track Candidate - MonitorElement* TrackCandPt; - MonitorElement* TrackCandEta; - MonitorElement* TrackCandPhi; - MonitorElement* TrackCandPhiVsEta; - MonitorElement* TrackCandTheta; - MonitorElement* TrackCandQ; - MonitorElement* TrackCandDxy; - MonitorElement* TrackCandDz; - MonitorElement* NumberOfRecHitsPerTrackCand; - MonitorElement* NumberOfRecHitsPerTrackCandVsPhiProfile; - MonitorElement* NumberOfRecHitsPerTrackCandVsEtaProfile; + MonitorElement* TrackCandPt = nullptr; + MonitorElement* TrackCandEta = nullptr; + MonitorElement* TrackCandPhi = nullptr; + MonitorElement* TrackCandPhiVsEta = nullptr; + MonitorElement* TrackCandTheta = nullptr; + MonitorElement* TrackCandQ = nullptr; + MonitorElement* TrackCandDxy = nullptr; + MonitorElement* TrackCandDz = nullptr; + MonitorElement* NumberOfRecHitsPerTrackCand = nullptr; + MonitorElement* NumberOfRecHitsPerTrackCandVsPhiProfile = nullptr; + MonitorElement* NumberOfRecHitsPerTrackCandVsEtaProfile = nullptr; - MonitorElement* stoppingSource; - MonitorElement* stoppingSourceVSeta; - MonitorElement* stoppingSourceVSphi; + MonitorElement* stoppingSource = nullptr; + MonitorElement* stoppingSourceVSeta = nullptr; + MonitorElement* stoppingSourceVSphi = nullptr; std::vector trackMVAs; std::vector trackMVAsHP; @@ -122,23 +122,23 @@ class TrackBuildingAnalyzer std::string histname; //for naming the histograms according to algorithm used //to disable some plots - bool doAllPlots; - bool doAllSeedPlots; - bool doTCPlots; - bool doAllTCPlots; - bool doPT; - bool doETA; - bool doPHI; - bool doPHIVsETA; - bool doTheta; - bool doQ; - bool doDxy; - bool doDz; - bool doNRecHits; - bool doProfPHI; - bool doProfETA; - bool doStopSource; - bool doMVAPlots; - bool doRegionPlots; + const bool doAllPlots; + const bool doAllSeedPlots; + const bool doTCPlots; + const bool doAllTCPlots; + const bool doPT; + const bool doETA; + const bool doPHI; + const bool doPHIVsETA; + const bool doTheta; + const bool doQ; + const bool doDxy; + const bool doDz; + const bool doNRecHits; + const bool doProfPHI; + const bool doProfETA; + const bool doStopSource; + const bool doMVAPlots; + const bool doRegionPlots; }; #endif diff --git a/DQM/TrackingMonitor/src/TrackBuildingAnalyzer.cc b/DQM/TrackingMonitor/src/TrackBuildingAnalyzer.cc index 5fb82445bcb3c..af3e852d0bf38 100644 --- a/DQM/TrackingMonitor/src/TrackBuildingAnalyzer.cc +++ b/DQM/TrackingMonitor/src/TrackBuildingAnalyzer.cc @@ -20,32 +20,28 @@ #include -TrackBuildingAnalyzer::TrackBuildingAnalyzer(const edm::ParameterSet& iConfig) - : TrackingRegionCandidatePt(nullptr) - , TrackingRegionCandidateEta(nullptr) - , TrackingRegionCandidatePhi(nullptr) - , TrackingRegionCandidatePhiVsEta(nullptr) - , SeedPt(nullptr) - , SeedEta(nullptr) - , SeedPhi(nullptr) - , SeedPhiVsEta(nullptr) - , SeedTheta(nullptr) - , SeedQ(nullptr) - , SeedDxy(nullptr) - , SeedDz(nullptr) - , NumberOfRecHitsPerSeed(nullptr) - , NumberOfRecHitsPerSeedVsPhiProfile(nullptr) - , NumberOfRecHitsPerSeedVsEtaProfile(nullptr) - , stoppingSource(nullptr) - , stoppingSourceVSeta(nullptr) - , stoppingSourceVSphi(nullptr) +TrackBuildingAnalyzer::TrackBuildingAnalyzer(const edm::ParameterSet& iConfig): + doAllPlots( iConfig.getParameter("doAllPlots")), + doAllSeedPlots(iConfig.getParameter("doSeedParameterHistos")), + doTCPlots( iConfig.getParameter("doTrackCandHistos")), + doAllTCPlots( iConfig.getParameter("doAllTrackCandHistos")), + doPT( iConfig.getParameter("doSeedPTHisto")), + doETA( iConfig.getParameter("doSeedETAHisto")), + doPHI( iConfig.getParameter("doSeedPHIHisto")), + doPHIVsETA( iConfig.getParameter("doSeedPHIVsETAHisto")), + doTheta( iConfig.getParameter("doSeedThetaHisto")), + doQ( iConfig.getParameter("doSeedQHisto")), + doDxy( iConfig.getParameter("doSeedDxyHisto")), + doDz( iConfig.getParameter("doSeedDzHisto")), + doNRecHits( iConfig.getParameter("doSeedNRecHitsHisto")), + doProfPHI( iConfig.getParameter("doSeedNVsPhiProf")), + doProfETA( iConfig.getParameter("doSeedNVsEtaProf")), + doStopSource( iConfig.getParameter("doStopSource")), + doMVAPlots( iConfig.getParameter("doMVAPlots")), + doRegionPlots( iConfig.getParameter("doRegionPlots")) { } -TrackBuildingAnalyzer::~TrackBuildingAnalyzer() -{ -} - void TrackBuildingAnalyzer::initHisto(DQMStore::IBooker & ibooker, const edm::ParameterSet& iConfig) { @@ -113,25 +109,6 @@ void TrackBuildingAnalyzer::initHisto(DQMStore::IBooker & ibooker, const edm::Pa std::vector mvaProducers = iConfig.getParameter >("MVAProducers"); edm::InputTag regionProducer = iConfig.getParameter("RegionProducer"); - doAllPlots = iConfig.getParameter("doAllPlots"); - doAllSeedPlots = iConfig.getParameter("doSeedParameterHistos"); - doTCPlots = iConfig.getParameter("doTrackCandHistos"); - doAllTCPlots = iConfig.getParameter("doAllTrackCandHistos"); - doPT = iConfig.getParameter("doSeedPTHisto"); - doETA = iConfig.getParameter("doSeedETAHisto"); - doPHI = iConfig.getParameter("doSeedPHIHisto"); - doPHIVsETA = iConfig.getParameter("doSeedPHIVsETAHisto"); - doTheta = iConfig.getParameter("doSeedThetaHisto"); - doQ = iConfig.getParameter("doSeedQHisto"); - doDxy = iConfig.getParameter("doSeedDxyHisto"); - doDz = iConfig.getParameter("doSeedDzHisto"); - doNRecHits = iConfig.getParameter("doSeedNRecHitsHisto"); - doProfPHI = iConfig.getParameter("doSeedNVsPhiProf"); - doProfETA = iConfig.getParameter("doSeedNVsEtaProf"); - doStopSource = iConfig.getParameter("doStopSource"); - doMVAPlots = iConfig.getParameter("doMVAPlots"); - doRegionPlots = iConfig.getParameter("doRegionPlots"); - // if (doAllPlots){doAllSeedPlots=true; doTCPlots=true;} ibooker.setCurrentFolder(MEFolderName); diff --git a/DQM/TrackingMonitor/src/TrackingMonitor.cc b/DQM/TrackingMonitor/src/TrackingMonitor.cc index f39e75ae67830..e0094397469f7 100644 --- a/DQM/TrackingMonitor/src/TrackingMonitor.cc +++ b/DQM/TrackingMonitor/src/TrackingMonitor.cc @@ -930,10 +930,10 @@ void TrackingMonitor::analyze(const edm::Event& iEvent, const edm::EventSetup& i // get the seed collection edm::Handle > seedHandle; iEvent.getByToken(seedToken_, seedHandle ); - const edm::View& seedCollection = *seedHandle; // fill the seed info if (seedHandle.isValid()) { + const auto& seedCollection = *seedHandle; if(doAllSeedPlots || doSeedNumberPlot) { NumberOfSeeds->Fill(seedCollection.size()); @@ -963,10 +963,8 @@ void TrackingMonitor::analyze(const edm::Event& iEvent, const edm::EventSetup& i const reco::BeamSpot& bs = *recoBeamSpotHandle; iSetup.get().get(builderName,theTTRHBuilder); - for(size_t i=0; i < seedHandle->size(); ++i) { - - edm::RefToBase seed(seedHandle, i); - theTrackBuildingAnalyzer->analyze(iEvent, iSetup, *seed, bs, theMF, theTTRHBuilder); + for(size_t i=0; i < seedCollection.size(); ++i) { + theTrackBuildingAnalyzer->analyze(iEvent, iSetup, seedCollection[i], bs, theMF, theTTRHBuilder); } } From 1496b1466d5281e5556e0afa40b9025875ce1808 Mon Sep 17 00:00:00 2001 From: Matti Kortelainen Date: Wed, 6 Sep 2017 12:58:52 +0200 Subject: [PATCH 5/8] Monitor seed stopping source and number of candidates per seed in DQM --- .../interface/TrackBuildingAnalyzer.h | 12 ++++ .../interface/TrackingMonitor.h | 1 + .../python/TrackingMonitor_cfi.py | 5 ++ .../src/TrackBuildingAnalyzer.cc | 62 ++++++++++++++++++- DQM/TrackingMonitor/src/TrackingMonitor.cc | 37 +++++++---- .../IterTrackingModules4seedMonitoring_cfi.py | 4 ++ .../python/TrackingSourceConfig_Tier0_cff.py | 3 + .../TrackReco/interface/SeedStopReason.h | 13 ++++ DataFormats/TrackReco/src/SeedStopReason.cc | 3 + 9 files changed, 126 insertions(+), 14 deletions(-) create mode 100644 DataFormats/TrackReco/src/SeedStopReason.cc diff --git a/DQM/TrackingMonitor/interface/TrackBuildingAnalyzer.h b/DQM/TrackingMonitor/interface/TrackBuildingAnalyzer.h index 7f06eb5999d66..c5ad7e4d25318 100644 --- a/DQM/TrackingMonitor/interface/TrackBuildingAnalyzer.h +++ b/DQM/TrackingMonitor/interface/TrackBuildingAnalyzer.h @@ -23,6 +23,7 @@ Monitoring source for general quantities related to tracks. #include "DataFormats/TrackCandidate/interface/TrackCandidate.h" #include "DataFormats/TrajectorySeed/interface/TrajectorySeedCollection.h" +#include "DataFormats/TrackReco/interface/SeedStopInfo.h" #include "DataFormats/TrackCandidate/interface/TrackCandidateCollection.h" #include "TrackingTools/TransientTrack/interface/TransientTrackBuilder.h" #include "TrackingTools/Records/interface/TransientTrackRecord.h" @@ -45,6 +46,7 @@ class TrackBuildingAnalyzer const edm::Event& iEvent, const edm::EventSetup& iSetup, const TrajectorySeed& seed, + const SeedStopInfo& stopInfo, const reco::BeamSpot& bs, const edm::ESHandle& theMF, const edm::ESHandle& theTTRHBuilder @@ -95,6 +97,16 @@ class TrackBuildingAnalyzer MonitorElement* NumberOfRecHitsPerSeedVsPhiProfile = nullptr; MonitorElement* NumberOfRecHitsPerSeedVsEtaProfile = nullptr; + MonitorElement *seedStoppingSource = nullptr; + MonitorElement *seedStoppingSourceVsPhi = nullptr; + MonitorElement *seedStoppingSourceVsEta = nullptr; + + MonitorElement *numberOfTrajCandsPerSeed = nullptr; + MonitorElement *numberOfTrajCandsPerSeedVsPhi = nullptr; + MonitorElement *numberOfTrajCandsPerSeedVsEta = nullptr; + + MonitorElement *seedStoppingSourceVsNumberOfTrajCandsPerSeed = nullptr; + // Track Candidate MonitorElement* TrackCandPt = nullptr; MonitorElement* TrackCandEta = nullptr; diff --git a/DQM/TrackingMonitor/interface/TrackingMonitor.h b/DQM/TrackingMonitor/interface/TrackingMonitor.h index a5af555916dfe..fb5b22471df25 100644 --- a/DQM/TrackingMonitor/interface/TrackingMonitor.h +++ b/DQM/TrackingMonitor/interface/TrackingMonitor.h @@ -93,6 +93,7 @@ class TrackingMonitor : public DQMEDAnalyzer edm::EDGetTokenT > trackToken_; edm::EDGetTokenT trackCandidateToken_; edm::EDGetTokenT > seedToken_; + edm::EDGetTokenT > seedStopInfoToken_; edm::EDGetTokenT > regionToken_; edm::EDGetTokenT regionCandidateToken_; diff --git a/DQM/TrackingMonitor/python/TrackingMonitor_cfi.py b/DQM/TrackingMonitor/python/TrackingMonitor_cfi.py index 6654b1b57c8f8..f29b82708f61e 100644 --- a/DQM/TrackingMonitor/python/TrackingMonitor_cfi.py +++ b/DQM/TrackingMonitor/python/TrackingMonitor_cfi.py @@ -424,6 +424,11 @@ TrackMon.RegionCandidatePtMax = cms.double(1000) TrackMon.RegionCandidatePtMin = cms.double(0) +# Number of candidates/seed within pattern recognition +TrackMon.SeedCandBin = cms.int32(20) +TrackMon.SeedCandMax = cms.double(19.5) +TrackMon.SeedCandMin = cms.double(-0.5) + from Configuration.Eras.Modifier_phase1Pixel_cff import phase1Pixel from Configuration.Eras.Modifier_phase2_tracker_cff import phase2_tracker phase1Pixel.toModify(TrackMon, EtaBin=30, EtaMin=-3, EtaMax=3) diff --git a/DQM/TrackingMonitor/src/TrackBuildingAnalyzer.cc b/DQM/TrackingMonitor/src/TrackBuildingAnalyzer.cc index af3e852d0bf38..17bd2c7abf845 100644 --- a/DQM/TrackingMonitor/src/TrackBuildingAnalyzer.cc +++ b/DQM/TrackingMonitor/src/TrackBuildingAnalyzer.cc @@ -229,6 +229,53 @@ void TrackBuildingAnalyzer::initHisto(DQMStore::IBooker & ibooker, const edm::Pa } } + if (doAllSeedPlots || doStopSource) { + const auto stopReasonSize = static_cast(SeedStopReason::SIZE); + + const auto candsBin = iConfig.getParameter( "SeedCandBin"); + const auto candsMin = iConfig.getParameter("SeedCandMin"); + const auto candsMax = iConfig.getParameter("SeedCandMax"); + + histname = "SeedStoppingSource_"+seedProducer.label() + "_"; + seedStoppingSource = ibooker.book1D(histname+CatagoryName, histname+CatagoryName, stopReasonSize, 0., stopReasonSize); + seedStoppingSource->setAxisTitle("Stopping reason",1); + seedStoppingSource->setAxisTitle("Number of seeds",2); + + histname = "StoppingSourceVsPhi_"+seedProducer.label() + "_"; + seedStoppingSourceVsPhi = ibooker.bookProfile(histname+CatagoryName, histname+CatagoryName, PhiBin, PhiMin, PhiMax, 2, 0., 2.); + seedStoppingSourceVsPhi->setAxisTitle("seed #phi",1); + seedStoppingSourceVsPhi->setAxisTitle("fraction stopped",2); + + histname = "StoppingSourceVsEta_"+seedProducer.label() + "_"; + seedStoppingSourceVsEta = ibooker.bookProfile(histname+CatagoryName, histname+CatagoryName, EtaBin, EtaMin, EtaMax, 2, 0., 2.); + seedStoppingSourceVsEta->setAxisTitle("seed #eta",1); + seedStoppingSourceVsEta->setAxisTitle("fraction stopped",2); + + histname = "NumberOfTrajCandsPerSeed_"+seedProducer.label() + "_"; + numberOfTrajCandsPerSeed = ibooker.book1D(histname+CatagoryName, histname+CatagoryName, candsBin, candsMin, candsMax); + numberOfTrajCandsPerSeed->setAxisTitle("Number of Trajectory Candidate for each Seed", 1); + numberOfTrajCandsPerSeed->setAxisTitle("Number of Seeds", 2); + + histname = "NumberOfTrajCandsPerSeedVsPhi_"+seedProducer.label() + "_"; + numberOfTrajCandsPerSeedVsPhi = ibooker.bookProfile(histname+CatagoryName, histname+CatagoryName, PhiBin, PhiMin, PhiMax, candsBin, candsMin, candsMax); + numberOfTrajCandsPerSeedVsPhi->setAxisTitle("Seed #phi", 1); + numberOfTrajCandsPerSeedVsPhi->setAxisTitle("Number of Trajectory Candidates for each Seed", 2); + + histname = "NumberOfTrajCandsPerSeedVsEta_"+seedProducer.label() + "_"; + numberOfTrajCandsPerSeedVsEta = ibooker.bookProfile(histname+CatagoryName, histname+CatagoryName, EtaBin, EtaMin, EtaMax, candsBin, candsMin, candsMax); + numberOfTrajCandsPerSeedVsEta->setAxisTitle("Seed #eta", 1); + numberOfTrajCandsPerSeedVsEta->setAxisTitle("Number of Trajectory Candidates for each Seed", 2); + + histname = "SeedStoppingSourceVsNumberOfTrajCandsPerSeed_"+seedProducer.label() + "_"; + seedStoppingSourceVsNumberOfTrajCandsPerSeed = ibooker.book2D(histname+CatagoryName, histname+CatagoryName, candsBin, candsMin, candsMax, stopReasonSize, 0, stopReasonSize); + seedStoppingSourceVsNumberOfTrajCandsPerSeed->setAxisTitle("Number of Trajectory Candidates for each Seed", 1); + + for(unsigned int i=0; isetBinLabel(i+1, SeedStopReasonName::SeedStopReasonName[i], 1); + seedStoppingSourceVsNumberOfTrajCandsPerSeed->setBinLabel(i+1, SeedStopReasonName::SeedStopReasonName[i], 2); + } + } + if (doAllTCPlots || doStopSource) { // DataFormats/TrackReco/interface/TrajectoryStopReasons.h size_t StopReasonNameSize = sizeof(StopReasonName::StopReasonName)/sizeof(std::string); @@ -399,6 +446,7 @@ void TrackBuildingAnalyzer::analyze const edm::Event& iEvent, const edm::EventSetup& iSetup, const TrajectorySeed& candidate, + const SeedStopInfo& stopInfo, const reco::BeamSpot& bs, const edm::ESHandle& theMF, const edm::ESHandle& theTTRHBuilder @@ -444,7 +492,19 @@ void TrackBuildingAnalyzer::analyze if (doAllSeedPlots || doNRecHits) NumberOfRecHitsPerSeed->Fill( numberOfHits ); if (doAllSeedPlots || doProfETA) NumberOfRecHitsPerSeedVsEtaProfile->Fill( eta, numberOfHits ); if (doAllSeedPlots || doProfPHI) NumberOfRecHitsPerSeedVsPhiProfile->Fill( phi, numberOfHits ); - + if (doAllSeedPlots || doStopSource) { + const double stopped = stopInfo.stopReason() == SeedStopReason::NOT_STOPPED ? 0. : 1.; + seedStoppingSource->Fill(stopInfo.stopReasonUC()); + seedStoppingSourceVsPhi->Fill(phi, stopped); + seedStoppingSourceVsEta->Fill(eta, stopped); + + const auto ncands = stopInfo.candidatesPerSeed(); + numberOfTrajCandsPerSeed->Fill(ncands); + numberOfTrajCandsPerSeedVsPhi->Fill(phi, ncands); + numberOfTrajCandsPerSeedVsEta->Fill(eta, ncands); + + seedStoppingSourceVsNumberOfTrajCandsPerSeed->Fill(ncands, stopInfo.stopReasonUC()); + } } // -- Analyse diff --git a/DQM/TrackingMonitor/src/TrackingMonitor.cc b/DQM/TrackingMonitor/src/TrackingMonitor.cc index e0094397469f7..6d12c333541eb 100644 --- a/DQM/TrackingMonitor/src/TrackingMonitor.cc +++ b/DQM/TrackingMonitor/src/TrackingMonitor.cc @@ -124,6 +124,7 @@ TrackingMonitor::TrackingMonitor(const edm::ParameterSet& iConfig) trackToken_ = consumes >(trackProducer); trackCandidateToken_ = consumes(tcProducer); seedToken_ = consumes >(seedProducer); + seedStopInfoToken_ = consumes >(tcProducer); doMVAPlots = iConfig.getParameter("doMVAPlots"); if(doMVAPlots) { @@ -951,21 +952,31 @@ void TrackingMonitor::analyze(const edm::Event& iEvent, const edm::EventSetup& i } if (doAllSeedPlots || runTrackBuildingAnalyzerForSeed){ + edm::Handle > stopHandle; + iEvent.getByToken(seedStopInfoToken_, stopHandle); + const auto& seedStopInfo = *stopHandle; + + if(seedStopInfo.size() == seedCollection.size()) { + //here duplication of mag field and be informations is needed to allow seed and track cand histos to be independent + // magnetic field + edm::ESHandle theMF; + iSetup.get().get(theMF); - //here duplication of mag field and be informations is needed to allow seed and track cand histos to be independent - // magnetic field - edm::ESHandle theMF; - iSetup.get().get(theMF); + // get the beam spot + edm::Handle recoBeamSpotHandle; + iEvent.getByToken(bsSrcToken_, recoBeamSpotHandle); + const reco::BeamSpot& bs = *recoBeamSpotHandle; - // get the beam spot - edm::Handle recoBeamSpotHandle; - iEvent.getByToken(bsSrcToken_, recoBeamSpotHandle ); - const reco::BeamSpot& bs = *recoBeamSpotHandle; - - iSetup.get().get(builderName,theTTRHBuilder); - for(size_t i=0; i < seedCollection.size(); ++i) { - theTrackBuildingAnalyzer->analyze(iEvent, iSetup, seedCollection[i], bs, theMF, theTTRHBuilder); - } + iSetup.get().get(builderName,theTTRHBuilder); + for(size_t i=0; i < seedCollection.size(); ++i) { + theTrackBuildingAnalyzer->analyze(iEvent, iSetup, seedCollection[i], seedStopInfo[i], bs, theMF, theTTRHBuilder); + } + } + else { + edm::LogWarning("TrackingMonitor") << "Seed collection size (" << seedCollection.size() + << ") differs from seed stop info collection size (" << seedStopInfo.size() + << "). This is a sign of inconsistency in the configuration. Not filling associated histograms."; + } } } else { diff --git a/DQM/TrackingMonitorSource/python/IterTrackingModules4seedMonitoring_cfi.py b/DQM/TrackingMonitorSource/python/IterTrackingModules4seedMonitoring_cfi.py index 9af1f8cc1d9d2..1eb7a8cecedff 100644 --- a/DQM/TrackingMonitorSource/python/IterTrackingModules4seedMonitoring_cfi.py +++ b/DQM/TrackingMonitorSource/python/IterTrackingModules4seedMonitoring_cfi.py @@ -12,6 +12,8 @@ clusterMax = {} regionLabel = {} regionCandidateLabel = {} +trajCandPerSeedBin = {} +trajCandPerSeedMax = {} seedInputTag ['initialStep'] = cms.InputTag("initialStepSeeds") trackCandInputTag['initialStep'] = cms.InputTag("initialStepTrackCandidates") @@ -147,6 +149,8 @@ clusterMax ['jetCoreRegionalStep'] = cms.double(100000) regionLabel ['jetCoreRegionalStep'] = "jetCoreRegionalStepTrackingRegions" regionCandidateLabel['jetCoreRegionalStep'] = "jetsForCoreTracking" +trajCandPerSeedBin['jetCoreRegionalStep'] = 50 +trajCandPerSeedMax['jetCoreRegionalStep'] = 49.5 for _eraName, _postfix, _era in _cfg.allEras(): locals()["selectedIterTrackingStep"+_postfix] = _cfg.iterationAlgos(_postfix) diff --git a/DQM/TrackingMonitorSource/python/TrackingSourceConfig_Tier0_cff.py b/DQM/TrackingMonitorSource/python/TrackingSourceConfig_Tier0_cff.py index 69f3970d563fe..6925774142ab4 100644 --- a/DQM/TrackingMonitorSource/python/TrackingSourceConfig_Tier0_cff.py +++ b/DQM/TrackingMonitorSource/python/TrackingSourceConfig_Tier0_cff.py @@ -247,6 +247,9 @@ locals()[label].doRegionPlots = True locals()[label].RegionProducer = regionLabel[step] locals()[label].RegionCandidates = regionCandidateLabel[step] + if step in trajCandPerSeedBin: + locals()[label].SeedCandBin = trajCandPerSeedBin[step] + locals()[label].SeedCandMax = trajCandPerSeedMax[step] # DQM Services dqmInfoTracking = cms.EDAnalyzer("DQMEventInfo", diff --git a/DataFormats/TrackReco/interface/SeedStopReason.h b/DataFormats/TrackReco/interface/SeedStopReason.h index 52dbd2752b601..ec18696296531 100644 --- a/DataFormats/TrackReco/interface/SeedStopReason.h +++ b/DataFormats/TrackReco/interface/SeedStopReason.h @@ -1,6 +1,8 @@ #ifndef DataFormats_TrackReco_SeedStopReason_h #define DataFormats_TrackReco_SeedStopReason_h +#include + enum class SeedStopReason { UNINITIALIZED = 0, NOT_STOPPED = 1, @@ -11,4 +13,15 @@ enum class SeedStopReason { SIZE = 6 }; +namespace SeedStopReasonName { + static const std::string SeedStopReasonName[] = { + "UNINITIALIZED", // 0 + "NOT_STOPPED", // 1 + "SEED_CLEANING", // 2 + "NO_TRAJECTORY", // 3 + "FINAL_CLEAN", // 4 + "SMOOTHING_FAILED" // 5 + }; +} + #endif diff --git a/DataFormats/TrackReco/src/SeedStopReason.cc b/DataFormats/TrackReco/src/SeedStopReason.cc new file mode 100644 index 0000000000000..6f269215e2482 --- /dev/null +++ b/DataFormats/TrackReco/src/SeedStopReason.cc @@ -0,0 +1,3 @@ +#include "DataFormats/TrackReco/interface/SeedStopReason.h" + +static_assert(sizeof(SeedStopReasonName::SeedStopReasonName)/sizeof(std::string) == static_cast(SeedStopReason::SIZE), "SeedStopReason enum and SeedStopReasonName are out of synch"); From 803ec66038ee30d5d1aad60431c815b7872fa452 Mon Sep 17 00:00:00 2001 From: Matti Kortelainen Date: Fri, 8 Sep 2017 13:58:25 +0200 Subject: [PATCH 6/8] Seeding region rebuild may return empty set of trajectories --- .../TrackReco/interface/SeedStopReason.h | 20 ++++++++++--------- .../src/CkfTrackCandidateMakerBase.cc | 5 +++++ .../RecoTrack/python/plotting/ntupleEnum.py | 7 ++++--- 3 files changed, 20 insertions(+), 12 deletions(-) diff --git a/DataFormats/TrackReco/interface/SeedStopReason.h b/DataFormats/TrackReco/interface/SeedStopReason.h index ec18696296531..c7b4aecc0f63e 100644 --- a/DataFormats/TrackReco/interface/SeedStopReason.h +++ b/DataFormats/TrackReco/interface/SeedStopReason.h @@ -8,19 +8,21 @@ enum class SeedStopReason { NOT_STOPPED = 1, SEED_CLEANING = 2, NO_TRAJECTORY = 3, - FINAL_CLEAN = 4, - SMOOTHING_FAILED = 5, - SIZE = 6 + SEED_REGION_REBUILD = 4, + FINAL_CLEAN = 5, + SMOOTHING_FAILED = 6, + SIZE = 7 }; namespace SeedStopReasonName { static const std::string SeedStopReasonName[] = { - "UNINITIALIZED", // 0 - "NOT_STOPPED", // 1 - "SEED_CLEANING", // 2 - "NO_TRAJECTORY", // 3 - "FINAL_CLEAN", // 4 - "SMOOTHING_FAILED" // 5 + "UNINITIALIZED", // 0 + "NOT_STOPPED", // 1 + "SEED_CLEANING", // 2 + "NO_TRAJECTORY", // 3 + "SEED_REGION_REBUILD", // 4 + "FINAL_CLEAN", // 5 + "SMOOTHING_FAILED" // 6 }; } diff --git a/RecoTracker/CkfPattern/src/CkfTrackCandidateMakerBase.cc b/RecoTracker/CkfPattern/src/CkfTrackCandidateMakerBase.cc index 2e6e9236ef03c..afeae04f4e839 100644 --- a/RecoTracker/CkfPattern/src/CkfTrackCandidateMakerBase.cc +++ b/RecoTracker/CkfPattern/src/CkfTrackCandidateMakerBase.cc @@ -333,6 +333,11 @@ namespace cms{ LogDebug("CkfPattern") << "======== Out-in trajectory building found " << theTmpTrajectories.size() << " valid/invalid trajectories from seed " << j << " ========\n" < Date: Fri, 8 Sep 2017 15:43:10 +0200 Subject: [PATCH 7/8] Code style checks --- .../CkfPattern/interface/BaseCkfTrajectoryBuilder.h | 6 +++--- .../CkfPattern/interface/CkfTrajectoryBuilder.h | 6 +++--- .../plugins/GroupedCkfTrajectoryBuilder.cc | 8 ++++---- .../CkfPattern/plugins/GroupedCkfTrajectoryBuilder.h | 2 +- .../CkfPattern/src/CkfTrackCandidateMakerBase.cc | 12 ++++++------ RecoTracker/CkfPattern/src/CkfTrajectoryBuilder.cc | 2 +- Validation/RecoTrack/plugins/TrackingNtuple.cc | 4 ++-- 7 files changed, 20 insertions(+), 20 deletions(-) diff --git a/RecoTracker/CkfPattern/interface/BaseCkfTrajectoryBuilder.h b/RecoTracker/CkfPattern/interface/BaseCkfTrajectoryBuilder.h index 013567609bfc7..19d32a0b349ef 100644 --- a/RecoTracker/CkfPattern/interface/BaseCkfTrajectoryBuilder.h +++ b/RecoTracker/CkfPattern/interface/BaseCkfTrajectoryBuilder.h @@ -70,7 +70,7 @@ class BaseCkfTrajectoryBuilder : public TrajectoryBuilder { TrajectoryFilter *inOutFilter=nullptr); BaseCkfTrajectoryBuilder(const BaseCkfTrajectoryBuilder &) = delete; BaseCkfTrajectoryBuilder& operator=(const BaseCkfTrajectoryBuilder&) = delete; - virtual ~BaseCkfTrajectoryBuilder(); + ~BaseCkfTrajectoryBuilder() override; // new interface returning the start Trajectory... virtual TempTrajectory buildTrajectories (const TrajectorySeed& seed, @@ -85,8 +85,8 @@ class BaseCkfTrajectoryBuilder : public TrajectoryBuilder { void setNavigationSchool(NavigationSchool const * nv) { theNavigationSchool=nv;} - virtual void setEvent(const edm::Event& event) const ; - virtual void unset() const; + void setEvent(const edm::Event& event) const override ; + void unset() const override; void setEvent(const edm::Event& iEvent, const edm::EventSetup& iSetup, const MeasurementTrackerEvent *data); diff --git a/RecoTracker/CkfPattern/interface/CkfTrajectoryBuilder.h b/RecoTracker/CkfPattern/interface/CkfTrajectoryBuilder.h index 0aa5849a21ea3..6e8f2471ca726 100644 --- a/RecoTracker/CkfPattern/interface/CkfTrajectoryBuilder.h +++ b/RecoTracker/CkfPattern/interface/CkfTrajectoryBuilder.h @@ -41,12 +41,12 @@ class CkfTrajectoryBuilder :public BaseCkfTrajectoryBuilder { CkfTrajectoryBuilder(const edm::ParameterSet& conf, edm::ConsumesCollector& iC); CkfTrajectoryBuilder(const edm::ParameterSet& conf, TrajectoryFilter *filter); - ~CkfTrajectoryBuilder() {} + ~CkfTrajectoryBuilder() override {} /// trajectories building starting from a seed - virtual TrajectoryContainer trajectories(const TrajectorySeed& seed) const override; + TrajectoryContainer trajectories(const TrajectorySeed& seed) const override; /// trajectories building starting from a seed - virtual void trajectories(const TrajectorySeed& seed, TrajectoryContainer &ret) const override; + void trajectories(const TrajectorySeed& seed, TrajectoryContainer &ret) const override; // new interface returning the start Trajectory... TempTrajectory buildTrajectories (const TrajectorySeed&, diff --git a/RecoTracker/CkfPattern/plugins/GroupedCkfTrajectoryBuilder.cc b/RecoTracker/CkfPattern/plugins/GroupedCkfTrajectoryBuilder.cc index 968f57ba860ed..5a6e785093b3a 100644 --- a/RecoTracker/CkfPattern/plugins/GroupedCkfTrajectoryBuilder.cc +++ b/RecoTracker/CkfPattern/plugins/GroupedCkfTrajectoryBuilder.cc @@ -180,7 +180,7 @@ GroupedCkfTrajectoryBuilder::trajectories (const TrajectorySeed& seed) const TrajectoryContainer ret; ret.reserve(10); unsigned int tmp; - buildTrajectories(seed, ret, tmp, 0); + buildTrajectories(seed, ret, tmp, nullptr); return ret; } @@ -200,7 +200,7 @@ void GroupedCkfTrajectoryBuilder::trajectories (const TrajectorySeed& seed, GroupedCkfTrajectoryBuilder::TrajectoryContainer &ret) const { unsigned int tmp; - buildTrajectories(seed,ret,tmp,0); + buildTrajectories(seed,ret,tmp,nullptr); } void @@ -262,7 +262,7 @@ GroupedCkfTrajectoryBuilder::buildTrajectories (const TrajectorySeed& seed, unsigned int& nCandPerSeed, const TrajectoryFilter* regionalCondition) const { - if (theMeasurementTracker == 0) { + if (theMeasurementTracker == nullptr) { throw cms::Exception("LogicError") << "Asking to create trajectories to an un-initialized GroupedCkfTrajectoryBuilder.\nYou have to call clone(const MeasurementTrackerEvent *data) and then call trajectories on it instead.\n"; } @@ -665,7 +665,7 @@ GroupedCkfTrajectoryBuilder::advanceOneLayer (const TrajectorySeed& seed, if ( !foundSegments ){ LogDebug("CkfPattern")<< "GCTB: adding input trajectory to result"; - if (stateAndLayers.second.size() > 0) + if (!stateAndLayers.second.empty()) traj.setStopReason(StopReason::NO_SEGMENTS_FOR_VALID_LAYERS); addToResult(traj, result, inOut); } diff --git a/RecoTracker/CkfPattern/plugins/GroupedCkfTrajectoryBuilder.h b/RecoTracker/CkfPattern/plugins/GroupedCkfTrajectoryBuilder.h index 0df0de12f6fdb..29290bb3b3c3a 100644 --- a/RecoTracker/CkfPattern/plugins/GroupedCkfTrajectoryBuilder.h +++ b/RecoTracker/CkfPattern/plugins/GroupedCkfTrajectoryBuilder.h @@ -28,7 +28,7 @@ class dso_internal GroupedCkfTrajectoryBuilder final : public BaseCkfTrajectoryB GroupedCkfTrajectoryBuilder(const edm::ParameterSet& conf, edm::ConsumesCollector& iC); /// destructor - virtual ~GroupedCkfTrajectoryBuilder(){} + ~GroupedCkfTrajectoryBuilder() override{} /// set Event for the internal MeasurementTracker data member // virtual void setEvent(const edm::Event& event) const; diff --git a/RecoTracker/CkfPattern/src/CkfTrackCandidateMakerBase.cc b/RecoTracker/CkfPattern/src/CkfTrackCandidateMakerBase.cc index afeae04f4e839..11a0b3a98664d 100644 --- a/RecoTracker/CkfPattern/src/CkfTrackCandidateMakerBase.cc +++ b/RecoTracker/CkfPattern/src/CkfTrackCandidateMakerBase.cc @@ -70,12 +70,12 @@ namespace cms{ theMaxNSeeds(conf.getParameter("maxNSeeds")), theTrajectoryBuilder(createBaseCkfTrajectoryBuilder(conf.getParameter("TrajectoryBuilderPSet"), iC)), theTrajectoryCleanerName(conf.getParameter("TrajectoryCleaner")), - theTrajectoryCleaner(0), + theTrajectoryCleaner(nullptr), theInitialState(new TransientInitialStateEstimator(conf.getParameter("TransientInitialStateEstimatorParameters"))), theMagFieldName(conf.exists("SimpleMagneticField") ? conf.getParameter("SimpleMagneticField") : ""), theNavigationSchoolName(conf.getParameter("NavigationSchool")), - theNavigationSchool(0), - theSeedCleaner(0), + theNavigationSchool(nullptr), + theSeedCleaner(nullptr), maxSeedsBeforeCleaning_(0), theMTELabel(iC.consumes(conf.getParameter("MeasurementTrackerEvent"))), skipClusters_(false), @@ -112,7 +112,7 @@ namespace cms{ conf.getParameter("onlyPixelHitsForSeedCleaner") : false; theSeedCleaner = new CachingSeedCleanerBySharedInput(numHitsForSeedCleaner,onlyPixelHits); } else if (cleaner == "none") { - theSeedCleaner = 0; + theSeedCleaner = nullptr; } else { throw cms::Exception("RedundantSeedCleaner not found", cleaner); } @@ -220,7 +220,7 @@ namespace cms{ } // Step D: Invoke the building algorithm - if ((*collseed).size()>0){ + if (!(*collseed).empty()){ unsigned int lastCleanResult=0; std::vector rawResult; @@ -433,7 +433,7 @@ namespace cms{ for (auto it = unsmoothedResult.begin(), ed = unsmoothedResult.end(); it != ed; ++it) { // reverse the trajectory only if it has valid hit on the last measurement (should happen) if (it->lastMeasurement().updatedState().isValid() && - it->lastMeasurement().recHit().get() != 0 && + it->lastMeasurement().recHit().get() != nullptr && it->lastMeasurement().recHit()->isValid()) { // I can't use reverse in place, because I want to change the seed // 1) reverse propagation direction diff --git a/RecoTracker/CkfPattern/src/CkfTrajectoryBuilder.cc b/RecoTracker/CkfPattern/src/CkfTrajectoryBuilder.cc index 5802471be18d1..8aa7e4c194217 100644 --- a/RecoTracker/CkfPattern/src/CkfTrajectoryBuilder.cc +++ b/RecoTracker/CkfPattern/src/CkfTrajectoryBuilder.cc @@ -150,7 +150,7 @@ TempTrajectory CkfTrajectoryBuilder::buildTrajectories (const TrajectorySeed&see TrajectoryContainer &result, unsigned int& nCandPerSeed, const TrajectoryFilter*) const { - if (theMeasurementTracker == 0) { + if (theMeasurementTracker == nullptr) { throw cms::Exception("LogicError") << "Asking to create trajectories to an un-initialized CkfTrajectoryBuilder.\nYou have to call clone(const MeasurementTrackerEvent *data) and then call trajectories on it instead.\n"; } diff --git a/Validation/RecoTrack/plugins/TrackingNtuple.cc b/Validation/RecoTrack/plugins/TrackingNtuple.cc index 4aa8bda2ae124..5377cd76caad7 100644 --- a/Validation/RecoTrack/plugins/TrackingNtuple.cc +++ b/Validation/RecoTrack/plugins/TrackingNtuple.cc @@ -334,13 +334,13 @@ namespace { class TrackingNtuple : public edm::one::EDAnalyzer { public: explicit TrackingNtuple(const edm::ParameterSet&); - ~TrackingNtuple(); + ~TrackingNtuple() override; static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); private: - virtual void analyze(const edm::Event&, const edm::EventSetup&) override; + void analyze(const edm::Event&, const edm::EventSetup&) override; void clearVariables(); From 48d452e0b824eb70f2741e76419e340f3f428c19 Mon Sep 17 00:00:00 2001 From: Matti Kortelainen Date: Fri, 8 Sep 2017 16:34:04 +0200 Subject: [PATCH 8/8] Use static_assert for TrajectoryStopReason as well --- DQM/TrackingMonitor/src/TrackAnalyzer.cc | 7 ------- DQM/TrackingMonitor/src/TrackBuildingAnalyzer.cc | 7 ------- DataFormats/TrackReco/src/TrajectoryStopReasons.cc | 3 +++ 3 files changed, 3 insertions(+), 14 deletions(-) create mode 100644 DataFormats/TrackReco/src/TrajectoryStopReasons.cc diff --git a/DQM/TrackingMonitor/src/TrackAnalyzer.cc b/DQM/TrackingMonitor/src/TrackAnalyzer.cc index 7d8c24e907db4..121c1b19ff796 100644 --- a/DQM/TrackingMonitor/src/TrackAnalyzer.cc +++ b/DQM/TrackingMonitor/src/TrackAnalyzer.cc @@ -636,13 +636,6 @@ void TrackAnalyzer::bookHistosForHitProperties(DQMStore::IBooker & ibooker) { } size_t StopReasonNameSize = sizeof(StopReasonName::StopReasonName)/sizeof(std::string); - if(StopReasonNameSize != static_cast(StopReason::SIZE)) { - throw cms::Exception("Assert") << "StopReason::SIZE is " << static_cast(StopReason::SIZE) - << " but StopReasonName's only for " - << StopReasonNameSize - << ". Please update DataFormats/TrackReco/interface/TrajectoryStopReasons.h."; - } - histname = "stoppingSource_"; stoppingSource = ibooker.book1D(histname+CategoryName, histname+CategoryName, StopReasonNameSize, 0., double(StopReasonNameSize)); stoppingSource->setAxisTitle("stopping reason",1); diff --git a/DQM/TrackingMonitor/src/TrackBuildingAnalyzer.cc b/DQM/TrackingMonitor/src/TrackBuildingAnalyzer.cc index 17bd2c7abf845..1bf138f54ec76 100644 --- a/DQM/TrackingMonitor/src/TrackBuildingAnalyzer.cc +++ b/DQM/TrackingMonitor/src/TrackBuildingAnalyzer.cc @@ -279,13 +279,6 @@ void TrackBuildingAnalyzer::initHisto(DQMStore::IBooker & ibooker, const edm::Pa if (doAllTCPlots || doStopSource) { // DataFormats/TrackReco/interface/TrajectoryStopReasons.h size_t StopReasonNameSize = sizeof(StopReasonName::StopReasonName)/sizeof(std::string); - if(StopReasonNameSize != static_cast(StopReason::SIZE)) { - throw cms::Exception("Assert") << "StopReason::SIZE is " << static_cast(StopReason::SIZE) - << " but StopReasonName's only for " - << StopReasonNameSize - << ". Please update DataFormats/TrackReco/interface/TrajectoryStopReasons.h."; - } - histname = "StoppingSource_"+seedProducer.label() + "_"; stoppingSource = ibooker.book1D(histname+CatagoryName, diff --git a/DataFormats/TrackReco/src/TrajectoryStopReasons.cc b/DataFormats/TrackReco/src/TrajectoryStopReasons.cc new file mode 100644 index 0000000000000..6c5ef0c0290cd --- /dev/null +++ b/DataFormats/TrackReco/src/TrajectoryStopReasons.cc @@ -0,0 +1,3 @@ +#include "DataFormats/TrackReco/interface/TrajectoryStopReasons.h" + +static_assert(sizeof(StopReasonName::StopReasonName)/sizeof(std::string) == static_cast(StopReason::SIZE), "StopReason enum and StopReasonName are out of synch");