51 pixelFlag_(config_.getParameter<
bool>(
"PixelPlotFillingFlag")),
52 geomType_(config_.getParameter<
std::
string>(
"GeometryType")),
53 otDigiSrc_(config_.getParameter<
edm::
InputTag>(
"OuterTrackerDigiSource")),
54 otDigiSimLinkSrc_(config_.getParameter<
edm::
InputTag>(
"OuterTrackerDigiSimLinkSource")),
55 itPixelDigiSrc_(config_.getParameter<
edm::
InputTag>(
"InnerPixelDigiSource")),
56 itPixelDigiSimLinkSrc_(config_.getParameter<
edm::
InputTag>(
"InnerPixelDigiSimLinkSource")),
57 pSimHitSrc_(config_.getParameter<
std::vector<
edm::
InputTag> >(
"PSimHitSource")),
58 simTrackSrc_(config_.getParameter<
edm::
InputTag>(
"SimTrackSource")),
59 simVertexSrc_(config_.getParameter<
edm::
InputTag>(
"SimVertexSource")),
62 itPixelDigiToken_(consumes<
edm::DetSetVector<
PixelDigi> >(itPixelDigiSrc_)),
63 itPixelDigiSimLinkToken_(consumes<
edm::DetSetVector<
PixelDigiSimLink> >(itPixelDigiSimLinkSrc_)),
66 GeVperElectron(3.61E-09),
69 simHitTokens_.push_back(consumes<edm::PSimHitContainer>(itag));
76 edm::LogInfo(
"Phase2TrackerValidateDigi") <<
">>> Construct Phase2TrackerValidateDigi ";
85 edm::LogInfo(
"Phase2TrackerValidateDigi") <<
">>> Destroy Phase2TrackerValidateDigi ";
91 edm::LogInfo(
"Phase2TrackerValidateDigi") <<
"Initialize Phase2TrackerValidateDigi ";
119 if (theTkDigiGeomWatcher.
check(iSetup)) {
131 for (edm::SimTrackContainer::const_iterator simTrkItr =
simTracks->begin(); simTrkItr !=
simTracks->end();
133 if (simTrkItr->charge() == 0)
135 int vtxIndex = simTrkItr->vertIndex();
145 if (vtxIndex == 0 || vtxParent == 0)
155 float simTk_pt = simTrkItr->momentum().pt();
156 float simTk_eta = simTrkItr->momentum().eta();
157 float simTk_phi = simTrkItr->momentum().phi();
168 it.second.nDigis = 0;
178 for (
auto& it : layerMEs) {
179 DigiMEs& local_mes = it.second;
180 if (it.second.nHits < nHitCutoff) {
181 if (std::fabs(simTk_eta) < 1.0)
183 if (simTk_pt >
ptCut_ && std::fabs(simTk_eta) < 1.0)
185 if (std::fabs(simTk_eta) < 1.0 && simTk_pt >
ptCut_)
206 unsigned int id = simTrk.
trackId();
213 for (edm::PSimHitContainer::const_iterator isim = simHits.begin(); isim != simHits.end(); ++isim) {
214 if ((*isim).trackId() !=
id)
221 unsigned int rawid = (*isim).detUnitId();
235 const DetId detId(rawid);
236 float dZ = (*isim).entryPoint().z() - (*isim).exitPoint().z();
237 if (fabs(dZ) <= 0.01)
258 int nColumns = tkDetUnit->specificTopology().ncolumns();
267 local_mes.
SimHitDx->
Fill(std::fabs((*isim).entryPoint().x() - (*isim).exitPoint().x()));
269 local_mes.
SimHitDy->
Fill(std::fabs((*isim).entryPoint().y() - (*isim).exitPoint().y()));
271 local_mes.
SimHitDz->
Fill(std::fabs((*isim).entryPoint().z() - (*isim).exitPoint().z()));
314 pos->second.nDigis++;
342 if (DSVIter != digis->
end()) {
344 int col = di->column();
362 if (DSVIter != digis->
end()) {
364 int col = di->column();
386 folder_name << top_folder <<
"/" 390 edm::LogInfo(
"Phase2TrackerValidateDigi") <<
" Booking Histograms in : " << folder_name.str();
394 HistoName <<
"NumberOfSimulatedTracks";
398 HistoName <<
"NumberOfSimulatedTracksP";
402 HistoName <<
"NumberOfSimulatedTracksS";
406 HistoName <<
"NumberOfSimulatedVertices";
411 HistoName <<
"SimulatedTrackPt";
428 HistoName <<
"SimulatedTrackPtP";
438 HistoName <<
"SimulatedTrackPtS";
450 HistoName <<
"SimulatedTrackEta";
460 HistoName <<
"SimulatedTrackEtaP";
470 HistoName <<
"SimulatedTrackEtaS";
482 HistoName <<
"SimulatedTrackPhi";
493 HistoName <<
"SimulatedTrackPhiP";
504 HistoName <<
"SimulatedTrackPhiS";
516 HistoName <<
"SimulatedXPosVsYPos";
531 HistoName <<
"SimulatedRPosVsZPos";
547 HistoName <<
"SimulatedTOFVsEta";
561 HistoName <<
"SimulatedTOFVsPhi";
575 HistoName <<
"SimulatedTOFVsR";
589 HistoName <<
"SimulatedTOFVsZ";
603 HistoName <<
"NumberOfSimHitsPerTrackVsLayer";
611 if (theTkDigiGeomWatcher.
check(iSetup)) {
616 for (
auto const& det_u : tGeom->
detUnits()) {
617 unsigned int detId_raw = det_u->geographicalId().rawId();
623 folder_name << top_folder <<
"/" 629 HistoName <<
"MatchedSimXPosVsYPos";
644 HistoName <<
"MatchedSimRPosVsZPos";
672 std::map<uint32_t, DigiMEs>::iterator
pos =
layerMEs.find(layer);
677 std::ostringstream fname1, fname2,
tag;
680 fname2 <<
"Layer_" << layer;
682 int side = layer / 100;
683 int idisc = layer - side * 100;
684 fname1 <<
"EndCap_Side_" << side;
685 fname2 <<
"Disc_" << idisc;
689 folder_name << top_folder <<
"/" 691 <<
"/" << fname1.str() <<
"/" << fname2.str();
692 edm::LogInfo(
"Phase2TrackerValidateDigi") <<
" Booking Histograms in : " << folder_name.str();
702 HistoName <<
"SimTrackPt_" << fname2.str();
712 HistoName <<
"MatchedTrackPt_" << fname2.str();
722 HistoName <<
"MissedHitTrackPt_" << fname2.str();
732 HistoName <<
"MissedDigiTrackPt_" << fname2.str();
744 HistoName <<
"SimTrackEta_" << fname2.str();
754 HistoName <<
"MatchedTrackEta_" << fname2.str();
764 HistoName <<
"MissedHitTrackEta_" << fname2.str();
774 HistoName <<
"MissedDigiTrackEta_" << fname2.str();
786 HistoName <<
"SimTrackPhi_" << fname2.str();
796 HistoName <<
"MatchedTrackPhi_" << fname2.str();
806 HistoName <<
"MissedHitTrackPhi_" << fname2.str();
816 HistoName <<
"MissedDigiTrackPhi_" << fname2.str();
828 HistoName <<
"MatchedSimHitElossS_" << fname2.str();
838 HistoName <<
"MatchedSimHitElossP_" << fname2.str();
848 HistoName <<
"MissedDigiSimHitElossS_" << fname2.str();
858 HistoName <<
"MissedDigiSimHitElossP_" << fname2.str();
870 HistoName <<
"SimHitDx_" << fname2.str();
882 HistoName <<
"SimHitDy_" << fname2.str();
894 HistoName <<
"SimHitDz_" << fname2.str();
905 HistoName <<
"BunchXingWindow_" << fname2.str();
909 HistoName <<
"FractionOfOOTPUDigi_" << fname2.str();
913 HistoName <<
"MissedDigiLocalXPosvsYPos_" << fname2.str();
915 ibooker.
book2D(HistoName.str(), HistoName.str(), 130, -6.5, 6.5, 130, -6.5, 6.5);
919 HistoName <<
"MissedDigiTimeWindow_" << fname2.str();
925 layerMEs.insert(std::make_pair(layer, local_mes));
933 unsigned int& channel) {
936 unsigned int simTrkId(0);
937 if (isearch == simLinks->
end())
945 if (channel == it->channel()) {
946 simTrkId = it->SimTrackId();
957 unsigned int rawid = DSViter->id;
964 std::map<uint32_t, DigiMEs>::iterator
pos =
layerMEs.find(layer);
967 DigiMEs& local_mes = pos->second;
969 std::map<int, float> bxMap;
972 int bx = di->eventId().bunchCrossing();
973 std::map<int, float>::iterator ic = bxMap.find(bx);
974 if (ic == bxMap.end())
979 for (
const auto&
v : bxMap) {
992 unsigned int rawid = DSViter->id;
999 std::map<uint32_t, DigiMEs>::iterator
pos =
layerMEs.find(layer);
1002 DigiMEs& local_mes = pos->second;
1004 std::map<int, float> bxMap;
1007 int bx = di->eventId().bunchCrossing();
1008 std::map<int, float>::iterator ic = bxMap.find(bx);
1009 if (ic == bxMap.end())
1014 for (
const auto&
v : bxMap) {
1027 for (
unsigned int it = 0; it < sim_tracks.size(); it++) {
1028 if (sim_tracks[it].trackId() == simTrkId) {
1038 bool retval =
false;
1039 unsigned int trkId = simTrk.
trackId();
1040 if (trkId != simHit.
trackId())
1044 if ((vtxIndex == 0) && (ptype == 0))
1055 if (th2 && primary == 1)
1057 if (th3 && primary != 1)
1065 const DigiMEs& local_mes = it.second;
1066 unsigned int layer = it.first;
1070 else if (layer / 100 == 1)
1071 lval = 100 - (layer + 10);
1072 else if (layer / 100 == 2)
1073 lval = (layer + 10) - 200;
MonitorElement * SimulatedTrackEtaP
GlobalPoint toGlobal(const Point2DBase< Scalar, LocalTag > lp) const
MonitorElement * book1D(TString const &name, TString const &title, int const nchX, double const lowX, double const highX)
T getParameter(std::string const &) const
MonitorElement * MatchedRZPositionMap
const edm::EDGetTokenT< edm::DetSetVector< Phase2TrackerDigi > > otDigiToken_
const unsigned int nTracks(const reco::Vertex &sv)
const float GeVperElectron
MonitorElement * MissedDigiTrackPhi
iterator find(det_id_type id)
MonitorElement * MatchedSimHitElossS
edm::Handle< edm::SimTrackContainer > simTracks
std::map< unsigned int, DigiMEs > layerMEs
bool isPrimary(const SimTrack &simTrk, const PSimHit &simHit)
MonitorElement * MatchedTrackPt
MonitorElement * BunchXTimeBin
const edm::EDGetTokenT< edm::DetSetVector< PixelDigiSimLink > > itPixelDigiSimLinkToken_
edm::Handle< edm::DetSetVector< PixelDigiSimLink > > itPixelSimLinkHandle_
const DetContainer & detUnits() const override
Returm a vector of all GeomDet.
bool getByToken(EDGetToken token, Handle< PROD > &result) const
edm::ESHandle< TrackerTopology > tTopoHandle_
void setCurrentFolder(std::string const &fullpath)
bool findOTDigi(unsigned int detid, unsigned int id)
MonitorElement * MissedHitTrackPhi
Geom::Phi< T > phi() const
MonitorElement * nSimulatedTracksS
MonitorElement * SimulatedTOFPhiMap
int matchedSimTrack(edm::Handle< edm::SimTrackContainer > &SimTk, unsigned int simTrkId)
MonitorElement * MatchedTrackPhi
MonitorElement * SimHitDx
void dqmBeginRun(const edm::Run &iRun, const edm::EventSetup &iSetup) override
std::vector< edm::InputTag > pSimHitSrc_
const Plane & surface() const
The nominal surface of the GeomDet.
MonitorElement * MissedDigiTimeWindow
MonitorElement * MissedDigiTrackPt
MonitorElement * SimulatedTOFRMap
int fillSimHitInfo(const edm::Event &iEvent, const SimTrack simTrk, const edm::ESHandle< TrackerGeometry > gHandle)
static int pixelToChannel(int row, int col)
const edm::EDGetTokenT< edm::SimVertexContainer > simVertexToken_
MonitorElement * SimulatedTrackPhiP
MonitorElement * SimulatedTOFZMap
unsigned int getSimTrackId(const edm::DetSetVector< PixelDigiSimLink > *simLinks, const DetId &detId, unsigned int &channel)
MonitorElement * SimulatedTrackPhi
const TrackerGeomDet * idToDetUnit(DetId) const override
Return the pointer to the GeomDetUnit corresponding to a given DetId.
MonitorElement * SimHitDz
MonitorElement * SimulatedTrackEta
#define DEFINE_FWK_MODULE(type)
edm::Handle< edm::DetSetVector< PixelDigiSimLink > > otSimLinkHandle_
MonitorElement * MissedHitTrackEta
bool findITPixelDigi(unsigned int detid, unsigned int id)
MonitorElement * SimTrackPhi
vector< ParameterSet > Parameters
edm::Handle< edm::PSimHitContainer > simHits
std::vector< edm::EDGetTokenT< edm::PSimHitContainer > > simHitTokens_
static PackedDigiType pixelToChannel(unsigned int row, unsigned int col)
MonitorElement * SimulatedTOFEtaMap
void analyze(const edm::Event &iEvent, const edm::EventSetup &iSetup) override
MonitorElement * bookProfile(TString const &name, TString const &title, int nchX, double lowX, double highX, int nchY, double lowY, double highY, char const *option="s")
void bookLayerHistos(DQMStore::IBooker &ibooker, unsigned int det_id, const TrackerTopology *tTopo, bool flag)
MonitorElement * SimulatedRZPositionMap
edm::Handle< edm::DetSetVector< PixelDigi > > itPixelDigiHandle_
MonitorElement * nSimulatedTracksP
void fillHistogram(MonitorElement *th1, MonitorElement *th2, MonitorElement *th3, float val, int primary)
MonitorElement * SimulatedTrackPhiS
MonitorElement * SimulatedTrackEtaS
MonitorElement * MissedDigiSimHitElossP
MonitorElement * MissedDigiSimHitElossS
int getITPixelLayerNumber(const DetId &id) const
iterator end()
Return the off-the-end iterator.
edm::Handle< edm::SimVertexContainer > simVertices
MonitorElement * FractionOfOOTDigis
MonitorElement * SimHitDy
MonitorElement * nSimulatedTracks
int vertIndex() const
index of the vertex in the Event container (-1 if no vertex)
MonitorElement * MatchedXYPositionMap
MonitorElement * MissedHitTrackPt
const edm::EDGetTokenT< edm::DetSetVector< PixelDigi > > itPixelDigiToken_
unsigned int trackId() const
T const * product() const
const edm::EDGetTokenT< edm::DetSetVector< PixelDigiSimLink > > otDigiSimLinkToken_
MonitorElement * MatchedSimHitElossP
std::vector< SimVertex > SimVertexContainer
MonitorElement * nSimVertices
MonitorElement * SimulatedTrackPt
unsigned short processType() const
bool check(const edm::EventSetup &iSetup)
MonitorElement * SimulatedXYPositionMap
MonitorElement * MissedDigiLocalXposVsYPos
Phase2TrackerValidateDigi(const edm::ParameterSet &)
const edm::EDGetTokenT< edm::SimTrackContainer > simTrackToken_
MonitorElement * SimTrackEta
MonitorElement * book2D(TString const &name, TString const &title, int nchX, double lowX, double highX, int nchY, double lowY, double highY)
~Phase2TrackerValidateDigi() override
const math::XYZTLorentzVectorD & momentum() const
MonitorElement * SimulatedTrackPtP
MonitorElement * SimTrackPt
const TrackerGeomDet * idToDet(DetId) const override
unsigned int trackId() const
MonitorElement * nSimHitsPerTrack
std::vector< PSimHit > PSimHitContainer
iterator begin()
Return an iterator to the first DetSet.
MonitorElement * MatchedTrackEta
edm::Handle< edm::DetSetVector< Phase2TrackerDigi > > otDigiHandle_
collection_type::const_iterator const_iterator
collection_type::const_iterator const_iterator
MonitorElement * MissedDigiTrackEta
void bookHistograms(DQMStore::IBooker &ibooker, edm::Run const &iRun, edm::EventSetup const &iSetup) override
MonitorElement * SimulatedTrackPtS
T const * product() const
edm::ParameterSet config_
std::vector< SimTrack > SimTrackContainer
int getOTLayerNumber(const DetId &id) const