Skip to content

Commit

Permalink
Merge pull request #10472 from makortel/trackingValidationTrackDz
Browse files Browse the repository at this point in the history
Add efficiency and fake rate vs. dxy/dz wrt PV to MultiTrackValidator, and make normalization+cumulative histograms before efficiency in DQMGenericClient
  • Loading branch information
cmsbuild committed Aug 10, 2015
2 parents 06ed0cd + 8e7724e commit 11b2f0d
Show file tree
Hide file tree
Showing 13 changed files with 290 additions and 32 deletions.
25 changes: 14 additions & 11 deletions DQMServices/ClientConfig/plugins/DQMGenericClient.cc
Original file line number Diff line number Diff line change
Expand Up @@ -358,6 +358,20 @@ void DQMGenericClient::dqmEndJob(DQMStore::IBooker & ibooker, DQMStore::IGetter
iSubDir != subDirSet.end(); ++iSubDir) {
const string& dirName = *iSubDir;

// First normalize, then make cumulative, and only then efficiency
// This allows to use the cumulative distributions for efficiency calculation
for ( vector<NormOption>::const_iterator normOption = normOptions_.begin();
normOption != normOptions_.end(); ++normOption )
{
normalizeToEntries(ibooker, igetter, dirName, normOption->name, normOption->normHistName);
}

for ( vector<CDOption>::const_iterator cdOption = cdOptions_.begin();
cdOption != cdOptions_.end(); ++cdOption )
{
makeCumulativeDist(ibooker, igetter, dirName, cdOption->name);
}

for ( vector<EfficOption>::const_iterator efficOption = efficOptions_.begin();
efficOption != efficOptions_.end(); ++efficOption )
{
Expand All @@ -376,17 +390,6 @@ void DQMGenericClient::dqmEndJob(DQMStore::IBooker & ibooker, DQMStore::IGetter
computeProfile(ibooker, igetter, dirName, profileOption.name, profileOption.title, profileOption.srcName);
}

for ( vector<NormOption>::const_iterator normOption = normOptions_.begin();
normOption != normOptions_.end(); ++normOption )
{
normalizeToEntries(ibooker, igetter, dirName, normOption->name, normOption->normHistName);
}

for ( vector<CDOption>::const_iterator cdOption = cdOptions_.begin();
cdOption != cdOptions_.end(); ++cdOption )
{
makeCumulativeDist(ibooker, igetter, dirName, cdOption->name);
}
}

if ( ! outputFileName_.empty() ) theDQM->save(outputFileName_);
Expand Down
10 changes: 8 additions & 2 deletions Validation/RecoTrack/interface/MTVHistoProducerAlgo.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,9 @@ class MTVHistoProducerAlgo{

virtual void bookSimHistos(DQMStore::IBooker& ibook)=0;
virtual void bookSimTrackHistos(DQMStore::IBooker& ibook)=0;
virtual void bookSimTrackPVAssociationHistos(DQMStore::IBooker& ibook)=0;
virtual void bookRecoHistos(DQMStore::IBooker& ibook)=0;
virtual void bookRecoPVAssociationHistos(DQMStore::IBooker& ibook)=0;
virtual void bookRecodEdxHistos(DQMStore::IBooker& ibook)=0;

virtual void fill_generic_simTrack_histos(const TrackingParticle::Vector&,const TrackingParticle::Point& vertex, int bx)=0;
Expand All @@ -42,11 +44,14 @@ class MTVHistoProducerAlgo{
virtual void fill_recoAssociated_simTrack_histos(int count,
const TrackingParticle& tp,
const TrackingParticle::Vector& momentumTP, const TrackingParticle::Point& vertexTP,
double dxy, double dz, int nSimHits,
double dxy, double dz,
double dxyPV, double dzPV,
int nSimHits,
int nSimLayers, int nSimPixelLayers, int nSimStripMonoAndStereoLayers,
const reco::Track* track,
int numVertices,
double dR)=0;
double dR,
const math::XYZPoint *pvPosition)=0;

virtual void fill_recoAssociated_simTrack_histos(int count,
const reco::GenParticle& tp,
Expand All @@ -58,6 +63,7 @@ class MTVHistoProducerAlgo{
virtual void fill_generic_recoTrack_histos(int count,
const reco::Track& track,
const math::XYZPoint& bsPosition,
const math::XYZPoint *pvPosition,
bool isMatched,
bool isSigMatched,
bool isChargeMatched,
Expand Down
19 changes: 17 additions & 2 deletions Validation/RecoTrack/interface/MTVHistoProducerAlgoForTracker.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,9 @@ class MTVHistoProducerAlgoForTracker: public MTVHistoProducerAlgo {

void bookSimHistos(DQMStore::IBooker& ibook) override;
void bookSimTrackHistos(DQMStore::IBooker& ibook) override;
void bookSimTrackPVAssociationHistos(DQMStore::IBooker& ibook) override;
void bookRecoHistos(DQMStore::IBooker& ibook) override;
void bookRecoPVAssociationHistos(DQMStore::IBooker& ibook) override;
void bookRecodEdxHistos(DQMStore::IBooker& ibook) override;


Expand All @@ -42,11 +44,14 @@ class MTVHistoProducerAlgoForTracker: public MTVHistoProducerAlgo {
void fill_recoAssociated_simTrack_histos(int count,
const TrackingParticle& tp,
const TrackingParticle::Vector& momentumTP, const TrackingParticle::Point& vertexTP,
double dxy, double dz, int nSimHits,
double dxy, double dz,
double dxyPV, double dzPV,
int nSimHits,
int nSimLayers, int nSimPixelLayers, int nSimStripMonoAndStereoLayers,
const reco::Track* track,
int numVertices,
double dR);
double dR,
const math::XYZPoint *pvPosition);

void fill_recoAssociated_simTrack_histos(int count,
const reco::GenParticle& tp,
Expand All @@ -59,6 +64,7 @@ class MTVHistoProducerAlgoForTracker: public MTVHistoProducerAlgo {
void fill_generic_recoTrack_histos(int count,
const reco::Track& track,
const math::XYZPoint& bsPosition,
const math::XYZPoint *pvPosition,
bool isMatched,
bool isSigMatched,
bool isChargeMatched,
Expand Down Expand Up @@ -140,6 +146,8 @@ class MTVHistoProducerAlgoForTracker: public MTVHistoProducerAlgo {
double dxyRes_rangeMin,dxyRes_rangeMax; int dxyRes_nbin;
double dzRes_rangeMin,dzRes_rangeMax; int dzRes_nbin;

double maxDzpvCum; int nintDzpvCum;
double maxDzpvsigCum; int nintDzpvsigCum;

//sim
MonitorElement *h_ptSIM, *h_etaSIM, *h_tracksSIM, *h_vertposSIM, *h_bunchxSIM;
Expand All @@ -156,6 +164,8 @@ class MTVHistoProducerAlgoForTracker: public MTVHistoProducerAlgo {
std::vector<MonitorElement*> h_recophi, h_assocphi, h_assoc2phi, h_simulphi, h_looperphi, h_misidphi, h_pileupphi;
std::vector<MonitorElement*> h_recodxy, h_assocdxy, h_assoc2dxy, h_simuldxy, h_looperdxy, h_misiddxy, h_pileupdxy;
std::vector<MonitorElement*> h_recodz, h_assocdz, h_assoc2dz, h_simuldz, h_looperdz, h_misiddz, h_pileupdz;
std::vector<MonitorElement*> h_recodxypv, h_assocdxypv, h_assoc2dxypv, h_simuldxypv, h_looperdxypv, h_misiddxypv, h_pileupdxypv;
std::vector<MonitorElement*> h_recodzpv, h_assocdzpv, h_assoc2dzpv, h_simuldzpv, h_looperdzpv, h_misiddzpv, h_pileupdzpv;

std::vector<MonitorElement*> h_assocvertpos, h_simulvertpos, h_assoczpos, h_simulzpos;
std::vector<MonitorElement*> h_assocdr, h_assoc2dr, h_simuldr, h_recodr, h_pileupdr;
Expand All @@ -167,6 +177,11 @@ class MTVHistoProducerAlgoForTracker: public MTVHistoProducerAlgo {
std::vector<MonitorElement*> h_reco_ootpu_eta, h_reco_ootpu_vertcount;
std::vector<MonitorElement*> h_con_eta, h_con_vertcount, h_con_zpos;

std::vector<MonitorElement*> h_reco_dzpvcut, h_assoc_dzpvcut, h_assoc2_dzpvcut, h_simul_dzpvcut, h_simul2_dzpvcut, h_pileup_dzpvcut;
std::vector<MonitorElement*> h_reco_dzpvsigcut, h_assoc_dzpvsigcut, h_assoc2_dzpvsigcut, h_simul_dzpvsigcut, h_simul2_dzpvsigcut, h_pileup_dzpvsigcut;

std::vector<MonitorElement*> h_reco_dzpvcut_pt, h_assoc_dzpvcut_pt, h_assoc2_dzpvcut_pt, h_simul_dzpvcut_pt, h_simul2_dzpvcut_pt, h_pileup_dzpvcut_pt;
std::vector<MonitorElement*> h_reco_dzpvsigcut_pt, h_assoc_dzpvsigcut_pt, h_assoc2_dzpvsigcut_pt, h_simul_dzpvsigcut_pt, h_simul2_dzpvsigcut_pt, h_pileup_dzpvsigcut_pt;

// dE/dx
// in the future these might become an array
Expand Down
1 change: 1 addition & 0 deletions Validation/RecoTrack/interface/MultiTrackValidator.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ class MultiTrackValidator : public DQMEDAnalyzer, protected MultiTrackValidatorB
const bool doSimTrackPlots_;
const bool doRecoTrackPlots_;
const bool dodEdxPlots_;
const bool doPVAssociationPlots_;
MTVHistoProducerAlgo* histoProducerAlgo_;

private:
Expand Down
41 changes: 32 additions & 9 deletions Validation/RecoTrack/plugins/MultiTrackValidator.cc
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,8 @@ MultiTrackValidator::MultiTrackValidator(const edm::ParameterSet& pset):
doSimPlots_(pset.getUntrackedParameter<bool>("doSimPlots")),
doSimTrackPlots_(pset.getUntrackedParameter<bool>("doSimTrackPlots")),
doRecoTrackPlots_(pset.getUntrackedParameter<bool>("doRecoTrackPlots")),
dodEdxPlots_(pset.getUntrackedParameter<bool>("dodEdxPlots"))
dodEdxPlots_(pset.getUntrackedParameter<bool>("dodEdxPlots")),
doPVAssociationPlots_(pset.getUntrackedParameter<bool>("doPVAssociationPlots"))
{
//theExtractor = IsoDepositExtractorFactory::get()->create( extractorName, extractorPSet, consumesCollector());

Expand All @@ -65,7 +66,7 @@ MultiTrackValidator::MultiTrackValidator(const edm::ParameterSet& pset):
m_dEdx2Tag = consumes<edm::ValueMap<reco::DeDxData> >(pset.getParameter< edm::InputTag >("dEdx2Tag"));
}

if(doPlotsOnlyForTruePV_) {
if(doPlotsOnlyForTruePV_ || doPVAssociationPlots_) {
label_tv = consumes<TrackingVertexCollection>(pset.getParameter< edm::InputTag >("label_tv"));
recoVertexToken_ = consumes<edm::View<reco::Vertex> >(pset.getUntrackedParameter<edm::InputTag>("label_vertex"));
vertexAssociatorToken_ = consumes<reco::VertexToTrackingVertexAssociator>(pset.getUntrackedParameter<edm::InputTag>("vertexAssociator"));
Expand Down Expand Up @@ -209,12 +210,14 @@ void MultiTrackValidator::bookHistograms(DQMStore::IBooker& ibook, edm::Run cons

if(doSimTrackPlots_) {
histoProducerAlgo_->bookSimTrackHistos(ibook);
if(doPVAssociationPlots_) histoProducerAlgo_->bookSimTrackPVAssociationHistos(ibook);
}

//Booking histograms concerning with reconstructed tracks
if(doRecoTrackPlots_) {
histoProducerAlgo_->bookRecoHistos(ibook);
if (dodEdxPlots_) histoProducerAlgo_->bookRecodEdxHistos(ibook);
if (doPVAssociationPlots_) histoProducerAlgo_->bookRecoPVAssociationHistos(ibook);
}
}//end loop www
}// end loop ww
Expand Down Expand Up @@ -250,7 +253,9 @@ void MultiTrackValidator::analyze(const edm::Event& event, const edm::EventSetup
cosmictpSelector.initEvent(simHitsTPAssoc);
}

if(doPlotsOnlyForTruePV_) {
const reco::Vertex::Point *thePVposition = nullptr;
const TrackingVertex::LorentzVector *theSimPVPosition = nullptr;
if(doPlotsOnlyForTruePV_ || doPVAssociationPlots_) {
edm::Handle<TrackingVertexCollection> htv;
event.getByToken(label_tv, htv);

Expand All @@ -262,10 +267,18 @@ void MultiTrackValidator::analyze(const edm::Event& event, const edm::EventSetup

auto v_r2s = hvassociator->associateRecoToSim(hvertex, htv);
auto pvPtr = hvertex->refAt(0);
if(pvPtr->isFake() || pvPtr->ndof() < 0) // skip junk vertices
return;
auto pvFound = v_r2s.find(pvPtr);
if(pvFound == v_r2s.end())
if(!(pvPtr->isFake() || pvPtr->ndof() < 0)) { // skip junk vertices
auto pvFound = v_r2s.find(pvPtr);
if(pvFound != v_r2s.end()) {
if(doPVAssociationPlots_) {
thePVposition = &(pvPtr->position());
theSimPVPosition = &(pvFound->val[0].first->position());
}
}
else if(doPlotsOnlyForTruePV_)
return;
}
else if(doPlotsOnlyForTruePV_)
return;
}

Expand Down Expand Up @@ -508,6 +521,8 @@ void MultiTrackValidator::analyze(const edm::Event& event, const edm::EventSetup

double dxySim(0);
double dzSim(0);
double dxyPVSim = 0;
double dzPVSim = 0;
double dR=dR_tPCeff[iTP];

//---------- THIS PART HAS TO BE CLEANED UP. THE PARAMETER DEFINER WAS NOT MEANT TO BE USED IN THIS WAY ----------
Expand All @@ -522,6 +537,12 @@ void MultiTrackValidator::analyze(const edm::Event& event, const edm::EventSetup
dxySim = (-vertex.x()*sin(momentum.phi())+vertex.y()*cos(momentum.phi()));
dzSim = vertex.z() - (vertex.x()*momentum.x()+vertex.y()*momentum.y())/sqrt(momentum.perp2())
* momentum.z()/sqrt(momentum.perp2());

if(theSimPVPosition) {
// As in TrackBase::dxy(Point) and dz(Point)
dxyPVSim = -(vertex.x()-theSimPVPosition->x())*sin(momentum.phi()) + (vertex.y()-theSimPVPosition->y())*cos(momentum.phi());
dzPVSim = vertex.z()-theSimPVPosition->z() - ( (vertex.x()-theSimPVPosition->x()) + (vertex.y()-theSimPVPosition->y()) )/sqrt(momentum.perp2()) * momentum.z()/sqrt(momentum.perp2());
}
}
//If the TrackingParticle is comics, get the momentum and vertex at PCA
else
Expand All @@ -531,6 +552,8 @@ void MultiTrackValidator::analyze(const edm::Event& event, const edm::EventSetup
dxySim = (-vertexTP.x()*sin(momentumTP.phi())+vertexTP.y()*cos(momentumTP.phi()));
dzSim = vertexTP.z() - (vertexTP.x()*momentumTP.x()+vertexTP.y()*momentumTP.y())/sqrt(momentumTP.perp2())
* momentumTP.z()/sqrt(momentumTP.perp2());

// Do dxy and dz vs. PV make any sense for cosmics? I guess not
}
//---------- THE PART ABOVE HAS TO BE CLEANED UP. THE PARAMETER DEFINER WAS NOT MEANT TO BE USED IN THIS WAY ----------

Expand Down Expand Up @@ -578,7 +601,7 @@ void MultiTrackValidator::analyze(const edm::Event& event, const edm::EventSetup
int nSimLayers = nLayers_tPCeff[tpr];
int nSimPixelLayers = nPixelLayers_tPCeff[tpr];
int nSimStripMonoAndStereoLayers = nStripMonoAndStereoLayers_tPCeff[tpr];
histoProducerAlgo_->fill_recoAssociated_simTrack_histos(w,tp,momentumTP,vertexTP,dxySim,dzSim,nSimHits,nSimLayers,nSimPixelLayers,nSimStripMonoAndStereoLayers,matchedTrackPointer,puinfo.getPU_NumInteractions(), dR);
histoProducerAlgo_->fill_recoAssociated_simTrack_histos(w,tp,momentumTP,vertexTP,dxySim,dzSim,dxyPVSim,dzPVSim,nSimHits,nSimLayers,nSimPixelLayers,nSimStripMonoAndStereoLayers,matchedTrackPointer,puinfo.getPU_NumInteractions(), dR, thePVposition);
sts++;
if(matchedTrackPointer)
asts++;
Expand Down Expand Up @@ -677,7 +700,7 @@ void MultiTrackValidator::analyze(const edm::Event& event, const edm::EventSetup
}

double dR=dR_trk[i];
histoProducerAlgo_->fill_generic_recoTrack_histos(w,*track,bs.position(),isSimMatched,isSigSimMatched, isChargeMatched, numAssocRecoTracks, puinfo.getPU_NumInteractions(), nSimHits, sharedFraction,dR);
histoProducerAlgo_->fill_generic_recoTrack_histos(w,*track,bs.position(), thePVposition, isSimMatched,isSigSimMatched, isChargeMatched, numAssocRecoTracks, puinfo.getPU_NumInteractions(), nSimHits, sharedFraction, dR);
h_reco_coll[ww]->Fill(www);
if(isSimMatched) {
h_assoc2_coll[ww]->Fill(www);
Expand Down
2 changes: 1 addition & 1 deletion Validation/RecoTrack/plugins/MultiTrackValidatorGenPs.cc
Original file line number Diff line number Diff line change
Expand Up @@ -345,7 +345,7 @@ void MultiTrackValidatorGenPs::analyze(const edm::Event& event, const edm::Event


double dR=0;//fixme: plots vs dR not implemented for now
histoProducerAlgo_->fill_generic_recoTrack_histos(w,*track,bs.position(),isGenMatched,isSigGenMatched, isChargeMatched, numAssocRecoTracks, puinfo.getPU_NumInteractions(), nSimHits, sharedFraction,dR);
histoProducerAlgo_->fill_generic_recoTrack_histos(w,*track,bs.position(), nullptr, isGenMatched,isSigGenMatched, isChargeMatched, numAssocRecoTracks, puinfo.getPU_NumInteractions(), nSimHits, sharedFraction,dR);

// dE/dx
if (dodEdxPlots_) histoProducerAlgo_->fill_dedx_recoTrack_histos(w,track, v_dEdx);
Expand Down
6 changes: 3 additions & 3 deletions Validation/RecoTrack/plugins/TrackerSeedValidator.cc
Original file line number Diff line number Diff line change
Expand Up @@ -277,8 +277,8 @@ void TrackerSeedValidator::analyze(const edm::Event& event, const edm::EventSetu
}

double dR=0;//fixme: plots vs dR not implemented for now
histoProducerAlgo_->fill_recoAssociated_simTrack_histos(w,*tp,tp->momentum(),tp->vertex(),dxySim,dzSim,nSimHits,nSimLayers,nSimPixelLayers,nSimStripMonoAndStereoLayers,
matchedTrackPointer,puinfo.getPU_NumInteractions(),dR);
histoProducerAlgo_->fill_recoAssociated_simTrack_histos(w,*tp,tp->momentum(),tp->vertex(),dxySim,dzSim,0,0,nSimHits,nSimLayers,nSimPixelLayers,nSimStripMonoAndStereoLayers,
matchedTrackPointer,puinfo.getPU_NumInteractions(),dR, nullptr);

sts++;
if (matchedTrackPointer) asts++;
Expand Down Expand Up @@ -363,7 +363,7 @@ void TrackerSeedValidator::analyze(const edm::Event& event, const edm::EventSetu
}

double dR = 0.;//fixme: plots vs dR not implemented for now
histoProducerAlgo_->fill_generic_recoTrack_histos(w,*trackFromSeed,bs.position(),isSimMatched,isSigSimMatched,
histoProducerAlgo_->fill_generic_recoTrack_histos(w,*trackFromSeed,bs.position(), nullptr, isSimMatched,isSigSimMatched,
isChargeMatched, numAssocSeeds,
puinfo.getPU_NumInteractions(),
nSimHits, sharedFraction, dR);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -114,4 +114,10 @@
dzRes_rangeMax = cms.double(+0.05),
dzRes_nbin = cms.int32(150),


maxDzpvCumulative = cms.double(0.6),
nintDzpvCumulative = cms.int32(240),

maxDzpvsigCumulative = cms.double(10),
nintDzpvsigCumulative = cms.int32(200),
)
1 change: 1 addition & 0 deletions Validation/RecoTrack/python/MultiTrackValidator_cfi.py
Original file line number Diff line number Diff line change
Expand Up @@ -78,4 +78,5 @@
doSimTrackPlots = cms.untracked.bool(True),
doRecoTrackPlots = cms.untracked.bool(True),
dodEdxPlots = cms.untracked.bool(False),
doPVAssociationPlots = cms.untracked.bool(False), # do plots that require true PV, if True, label_vertex and vertexAssociator are read
)

0 comments on commit 11b2f0d

Please sign in to comment.