Skip to content

Commit

Permalink
Merge pull request #20450 from makortel/seedStopReason
Browse files Browse the repository at this point in the history
Monitor seed stopping reason and number of trajectory candidates per seed in tracking DQM
  • Loading branch information
cmsbuild committed Sep 15, 2017
2 parents 1833e81 + 48d452e commit 30ee0a6
Show file tree
Hide file tree
Showing 30 changed files with 360 additions and 233 deletions.
2 changes: 0 additions & 2 deletions Calibration/IsolatedParticles/python/isoTrack_cff.py
Expand Up @@ -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" ),
Expand Down Expand Up @@ -393,7 +392,6 @@
maxNSeeds = cms.uint32( 100000 ),
NavigationSchool = cms.string( "SimpleNavigationSchool" ),
TrajectoryBuilder = cms.string( "hltESPCkfTrajectoryBuilder" ),
produceSeedStopReasons = cms.bool(False)
)

hltHITCtfWithMaterialTracksHB = cms.EDProducer("TrackProducer",
Expand Down
110 changes: 61 additions & 49 deletions DQM/TrackingMonitor/interface/TrackBuildingAnalyzer.h
Expand Up @@ -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"
Expand All @@ -38,13 +39,14 @@ class TrackBuildingAnalyzer
using QualityMaskCollection = std::vector<unsigned char>;

TrackBuildingAnalyzer(const edm::ParameterSet&);
~TrackBuildingAnalyzer();
~TrackBuildingAnalyzer() = default;
void initHisto(DQMStore::IBooker & ibooker, const edm::ParameterSet&);
void analyze
(
const edm::Event& iEvent,
const edm::EventSetup& iSetup,
const TrajectorySeed& seed,
const SeedStopInfo& stopInfo,
const reco::BeamSpot& bs,
const edm::ESHandle<MagneticField>& theMF,
const edm::ESHandle<TransientTrackingRecHitBuilder>& theTTRHBuilder
Expand Down Expand Up @@ -77,40 +79,50 @@ 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;

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;
MonitorElement* TrackCandEta;
MonitorElement* TrackCandPhi;
MonitorElement* TrackCandPhiVsEta;
MonitorElement* TrackCandTheta;
MonitorElement* TrackCandQ;
MonitorElement* TrackCandDxy;
MonitorElement* TrackCandDz;
MonitorElement* NumberOfRecHitsPerTrackCand;
MonitorElement* NumberOfRecHitsPerTrackCandVsPhiProfile;
MonitorElement* NumberOfRecHitsPerTrackCandVsEtaProfile;

MonitorElement* stoppingSource;
MonitorElement* stoppingSourceVSeta;
MonitorElement* stoppingSourceVSphi;
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 = nullptr;
MonitorElement* stoppingSourceVSeta = nullptr;
MonitorElement* stoppingSourceVSphi = nullptr;

std::vector<MonitorElement *> trackMVAs;
std::vector<MonitorElement *> trackMVAsHP;
Expand All @@ -122,23 +134,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
1 change: 1 addition & 0 deletions DQM/TrackingMonitor/interface/TrackingMonitor.h
Expand Up @@ -93,6 +93,7 @@ class TrackingMonitor : public DQMEDAnalyzer
edm::EDGetTokenT<edm::View<reco::Track> > trackToken_;
edm::EDGetTokenT<TrackCandidateCollection> trackCandidateToken_;
edm::EDGetTokenT<edm::View<TrajectorySeed> > seedToken_;
edm::EDGetTokenT<std::vector<SeedStopInfo> > seedStopInfoToken_;
edm::EDGetTokenT<edm::OwnVector<TrackingRegion> > regionToken_;
edm::EDGetTokenT<reco::CandidateView> regionCandidateToken_;

Expand Down
5 changes: 5 additions & 0 deletions DQM/TrackingMonitor/python/TrackingMonitor_cfi.py
Expand Up @@ -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)
Expand Down
7 changes: 0 additions & 7 deletions DQM/TrackingMonitor/src/TrackAnalyzer.cc
Expand Up @@ -636,13 +636,6 @@ void TrackAnalyzer::bookHistosForHitProperties(DQMStore::IBooker & ibooker) {
}

size_t StopReasonNameSize = sizeof(StopReasonName::StopReasonName)/sizeof(std::string);
if(StopReasonNameSize != static_cast<unsigned int>(StopReason::SIZE)) {
throw cms::Exception("Assert") << "StopReason::SIZE is " << static_cast<unsigned int>(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);
Expand Down
130 changes: 80 additions & 50 deletions DQM/TrackingMonitor/src/TrackBuildingAnalyzer.cc
Expand Up @@ -20,32 +20,28 @@

#include <iostream>

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<bool>("doAllPlots")),
doAllSeedPlots(iConfig.getParameter<bool>("doSeedParameterHistos")),
doTCPlots( iConfig.getParameter<bool>("doTrackCandHistos")),
doAllTCPlots( iConfig.getParameter<bool>("doAllTrackCandHistos")),
doPT( iConfig.getParameter<bool>("doSeedPTHisto")),
doETA( iConfig.getParameter<bool>("doSeedETAHisto")),
doPHI( iConfig.getParameter<bool>("doSeedPHIHisto")),
doPHIVsETA( iConfig.getParameter<bool>("doSeedPHIVsETAHisto")),
doTheta( iConfig.getParameter<bool>("doSeedThetaHisto")),
doQ( iConfig.getParameter<bool>("doSeedQHisto")),
doDxy( iConfig.getParameter<bool>("doSeedDxyHisto")),
doDz( iConfig.getParameter<bool>("doSeedDzHisto")),
doNRecHits( iConfig.getParameter<bool>("doSeedNRecHitsHisto")),
doProfPHI( iConfig.getParameter<bool>("doSeedNVsPhiProf")),
doProfETA( iConfig.getParameter<bool>("doSeedNVsEtaProf")),
doStopSource( iConfig.getParameter<bool>("doStopSource")),
doMVAPlots( iConfig.getParameter<bool>("doMVAPlots")),
doRegionPlots( iConfig.getParameter<bool>("doRegionPlots"))
{
}

TrackBuildingAnalyzer::~TrackBuildingAnalyzer()
{
}

void TrackBuildingAnalyzer::initHisto(DQMStore::IBooker & ibooker, const edm::ParameterSet& iConfig)
{

Expand Down Expand Up @@ -113,25 +109,6 @@ void TrackBuildingAnalyzer::initHisto(DQMStore::IBooker & ibooker, const edm::Pa
std::vector<std::string> mvaProducers = iConfig.getParameter<std::vector<std::string> >("MVAProducers");
edm::InputTag regionProducer = iConfig.getParameter<edm::InputTag>("RegionProducer");

doAllPlots = iConfig.getParameter<bool>("doAllPlots");
doAllSeedPlots = iConfig.getParameter<bool>("doSeedParameterHistos");
doTCPlots = iConfig.getParameter<bool>("doTrackCandHistos");
doAllTCPlots = iConfig.getParameter<bool>("doAllTrackCandHistos");
doPT = iConfig.getParameter<bool>("doSeedPTHisto");
doETA = iConfig.getParameter<bool>("doSeedETAHisto");
doPHI = iConfig.getParameter<bool>("doSeedPHIHisto");
doPHIVsETA = iConfig.getParameter<bool>("doSeedPHIVsETAHisto");
doTheta = iConfig.getParameter<bool>("doSeedThetaHisto");
doQ = iConfig.getParameter<bool>("doSeedQHisto");
doDxy = iConfig.getParameter<bool>("doSeedDxyHisto");
doDz = iConfig.getParameter<bool>("doSeedDzHisto");
doNRecHits = iConfig.getParameter<bool>("doSeedNRecHitsHisto");
doProfPHI = iConfig.getParameter<bool>("doSeedNVsPhiProf");
doProfETA = iConfig.getParameter<bool>("doSeedNVsEtaProf");
doStopSource = iConfig.getParameter<bool>("doStopSource");
doMVAPlots = iConfig.getParameter<bool>("doMVAPlots");
doRegionPlots = iConfig.getParameter<bool>("doRegionPlots");

// if (doAllPlots){doAllSeedPlots=true; doTCPlots=true;}

ibooker.setCurrentFolder(MEFolderName);
Expand Down Expand Up @@ -252,16 +229,56 @@ void TrackBuildingAnalyzer::initHisto(DQMStore::IBooker & ibooker, const edm::Pa
}
}

if (doAllSeedPlots || doStopSource) {
const auto stopReasonSize = static_cast<unsigned int>(SeedStopReason::SIZE);

const auto candsBin = iConfig.getParameter<int>( "SeedCandBin");
const auto candsMin = iConfig.getParameter<double>("SeedCandMin");
const auto candsMax = iConfig.getParameter<double>("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; i<stopReasonSize; ++i) {
seedStoppingSource->setBinLabel(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);
if(StopReasonNameSize != static_cast<unsigned int>(StopReason::SIZE)) {
throw cms::Exception("Assert") << "StopReason::SIZE is " << static_cast<unsigned int>(StopReason::SIZE)
<< " but StopReasonName's only for "
<< StopReasonNameSize
<< ". Please update DataFormats/TrackReco/interface/TrajectoryStopReasons.h.";
}


histname = "StoppingSource_"+seedProducer.label() + "_";
stoppingSource = ibooker.book1D(histname+CatagoryName,
Expand Down Expand Up @@ -422,6 +439,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<MagneticField>& theMF,
const edm::ESHandle<TransientTrackingRecHitBuilder>& theTTRHBuilder
Expand Down Expand Up @@ -467,7 +485,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
Expand Down

0 comments on commit 30ee0a6

Please sign in to comment.