Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

TkDQM: add rechit harvester module for IT #33863

Merged
merged 11 commits into from
Jun 17, 2021
20 changes: 20 additions & 0 deletions DQM/SiTrackerPhase2/interface/TrackerPhase2HarvestingUtil.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
#ifndef _DQM_SiTrackerPhase2_Phase2TrackerHarvestingUtil_h
#define _DQM_SiTrackerPhase2_Phase2TrackerHarvestingUtil_h
#include "DataFormats/TrackerCommon/interface/TrackerTopology.h"
#include "FWCore/ParameterSet/interface/ParameterSet.h"
#include "DQMServices/Core/interface/MonitorElement.h"
#include "DQMServices/Core/interface/DQMStore.h"
#include <string>

namespace phase2tkharvestutil {

typedef dqm::harvesting::MonitorElement MonitorElement;
typedef dqm::harvesting::DQMStore DQMStore;

MonitorElement* book1DFromPSet(const edm::ParameterSet& hpars, DQMStore::IBooker& ibooker);

MonitorElement* book2DFromPSet(const edm::ParameterSet& hpars, DQMStore::IBooker& ibooker);

MonitorElement* bookProfile1DFromPSet(const edm::ParameterSet& hpars, DQMStore::IBooker& ibooker);
} // namespace phase2tkharvestutil
#endif
43 changes: 43 additions & 0 deletions DQM/SiTrackerPhase2/src/TrackerPhase2HarvestingUtil.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
#include "DQM/SiTrackerPhase2/interface/TrackerPhase2HarvestingUtil.h"
typedef dqm::harvesting::MonitorElement MonitorElement;
typedef dqm::harvesting::DQMStore DQMStore;
MonitorElement* phase2tkharvestutil::book1DFromPSet(const edm::ParameterSet& hpars, DQMStore::IBooker& ibooker) {
MonitorElement* temp = nullptr;
if (hpars.getParameter<bool>("switch")) {
temp = ibooker.book1D(hpars.getParameter<std::string>("name"),
hpars.getParameter<std::string>("title"),
hpars.getParameter<int32_t>("NxBins"),
hpars.getParameter<double>("xmin"),
hpars.getParameter<double>("xmax"));
}
return temp;
}

MonitorElement* phase2tkharvestutil::book2DFromPSet(const edm::ParameterSet& hpars, DQMStore::IBooker& ibooker) {
MonitorElement* temp = nullptr;
if (hpars.getParameter<bool>("switch")) {
temp = ibooker.book2D(hpars.getParameter<std::string>("name"),
hpars.getParameter<std::string>("title"),
hpars.getParameter<int32_t>("NxBins"),
hpars.getParameter<double>("xmin"),
hpars.getParameter<double>("xmax"),
hpars.getParameter<int32_t>("NyBins"),
hpars.getParameter<double>("ymin"),
hpars.getParameter<double>("ymax"));
}
return temp;
}

MonitorElement* phase2tkharvestutil::bookProfile1DFromPSet(const edm::ParameterSet& hpars, DQMStore::IBooker& ibooker) {
MonitorElement* temp = nullptr;
if (hpars.getParameter<bool>("switch")) {
temp = ibooker.bookProfile(hpars.getParameter<std::string>("name"),
hpars.getParameter<std::string>("title"),
hpars.getParameter<int32_t>("NxBins"),
hpars.getParameter<double>("xmin"),
hpars.getParameter<double>("xmax"),
hpars.getParameter<double>("ymin"),
hpars.getParameter<double>("ymax"));
}
return temp;
}
4 changes: 3 additions & 1 deletion DQM/SiTrackerPhase2/test/harvestingstep_phase2tk_cfg.py
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,9 @@
process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:phase2_realistic_T21', '')

# Path and EndPath definitions
process.trackerphase2ValidationHarvesting_step = cms.Path(process.trackerphase2ValidationHarvesting)
process.trackerphase2ValidationHarvesting_step = cms.Path(process.trackerphase2ValidationHarvesting_standalone
##default path in production
#process.trackerphase2ValidationHarvesting_step = cms.Path(process.trackerphase2ValidationHarvesting)
process.dqmsave_step = cms.Path(process.DQMSaver)

# Schedule definition
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,9 @@ class Phase2ITValidateRecHitBase : public DQMEDAnalyzer {
MonitorElement* pullX = nullptr;
MonitorElement* pullY = nullptr;
MonitorElement* deltaX_eta = nullptr;
MonitorElement* deltaX_phi = nullptr;
MonitorElement* deltaY_eta = nullptr;
MonitorElement* deltaY_phi = nullptr;
MonitorElement* deltaX_clsizex = nullptr;
MonitorElement* deltaX_clsizey = nullptr;
MonitorElement* deltaY_clsizex = nullptr;
Expand Down
103 changes: 103 additions & 0 deletions Validation/SiTrackerPhase2V/interface/Phase2OTValidateRecHitBase.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
// Package: Phase2OTValidateRecHitBase
// Class: Phase2OTValidateRecHitBase
//
/**\class Phase2OTValidateRecHitBase Phase2OTValidateRecHitBase.cc
Description: Standalone Plugin for Phase2 RecHit validation
*/
//
// Author: Suvankar Roy Chowdhury
// Date: March 2021
//
// system include files
// STL includes
#include <memory>
#include <map>
#include <vector>
#include <algorithm>

// system include files
#include "DataFormats/Common/interface/Handle.h"
#include "DataFormats/TrackerCommon/interface/TrackerTopology.h"
#include "DataFormats/TrackerRecHit2D/interface/SiPixelRecHitCollection.h"
#include "FWCore/Framework/interface/ESHandle.h"
#include "FWCore/Framework/interface/Event.h"
#include "FWCore/Framework/interface/Frameworkfwd.h"
#include "FWCore/Framework/interface/MakerMacros.h"
#include "FWCore/MessageLogger/interface/MessageLogger.h"
#include "FWCore/ParameterSet/interface/ParameterSet.h"
#include "FWCore/ParameterSet/interface/ParameterSetDescription.h"

#include "FWCore/ServiceRegistry/interface/Service.h"
#include "FWCore/Utilities/interface/InputTag.h"
#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h"
#include "Geometry/Records/interface/TrackerTopologyRcd.h"
#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h"
#include "SimDataFormats/TrackingHit/interface/PSimHit.h"
#include "SimDataFormats/Track/interface/SimTrackContainer.h"

//DQM
#include "DQMServices/Core/interface/DQMEDAnalyzer.h"
#include "DQMServices/Core/interface/DQMStore.h"
#include "DQMServices/Core/interface/MonitorElement.h"
#include "DataFormats/TrackerRecHit2D/interface/Phase2TrackerRecHit1D.h"

class Phase2OTValidateRecHitBase : public DQMEDAnalyzer {
public:
explicit Phase2OTValidateRecHitBase(const edm::ParameterSet&);
~Phase2OTValidateRecHitBase() override;
void bookHistograms(DQMStore::IBooker& ibooker, edm::Run const& iRun, edm::EventSetup const& iSetup) override;
void dqmBeginRun(const edm::Run& iRun, const edm::EventSetup& iSetup) override;
void fillOTRecHitHistos(const PSimHit* simhitClosest,
const Phase2TrackerRecHit1D* rechit,
const std::map<unsigned int, SimTrack>& selectedSimTrackMap,
std::map<std::string, unsigned int>& nrechitLayerMapP_primary,
std::map<std::string, unsigned int>& nrechitLayerMapS_primary);

static void fillPSetDescription(edm::ParameterSetDescription& desc);
void bookLayerHistos(DQMStore::IBooker& ibooker, unsigned int det_id, std::string& subdir);

protected:
edm::ParameterSet config_;
std::string geomType_;
const edm::ESGetToken<TrackerGeometry, TrackerDigiGeometryRecord> geomToken_;
const edm::ESGetToken<TrackerTopology, TrackerTopologyRcd> topoToken_;
const TrackerGeometry* tkGeom_ = nullptr;
const TrackerTopology* tTopo_ = nullptr;

struct RecHitME {
// use TH1D instead of TH1F to avoid stauration at 2^31
// above this increments with +1 don't work for float, need double
MonitorElement* deltaX_P = nullptr;
MonitorElement* deltaX_S = nullptr;
MonitorElement* deltaY_P = nullptr;
MonitorElement* deltaY_S = nullptr;
MonitorElement* pullX_P = nullptr;
MonitorElement* pullX_S = nullptr;
MonitorElement* pullY_P = nullptr;
MonitorElement* pullY_S = nullptr;
MonitorElement* deltaX_eta_P = nullptr;
MonitorElement* deltaX_eta_S = nullptr;
MonitorElement* deltaY_eta_P = nullptr;
MonitorElement* deltaY_eta_S = nullptr;
MonitorElement* deltaX_phi_P = nullptr;
MonitorElement* deltaX_phi_S = nullptr;
MonitorElement* deltaY_phi_P = nullptr;
MonitorElement* deltaY_phi_S = nullptr;
MonitorElement* pullX_eta_P = nullptr;
MonitorElement* pullX_eta_S = nullptr;
MonitorElement* pullY_eta_P = nullptr;
MonitorElement* pullY_eta_S = nullptr;
//For rechits matched to simhits from highPT tracks
MonitorElement* pullX_primary_P;
MonitorElement* pullX_primary_S;
MonitorElement* pullY_primary_P;
MonitorElement* pullY_primary_S;
MonitorElement* deltaX_primary_P;
MonitorElement* deltaX_primary_S;
MonitorElement* deltaY_primary_P;
MonitorElement* deltaY_primary_S;
MonitorElement* numberRecHitsprimary_P;
MonitorElement* numberRecHitsprimary_S;
};
std::map<std::string, RecHitME> layerMEs_;
};