CMS 3D CMS Logo

List of all members | Classes | Public Member Functions | Public Attributes | Private Member Functions | Private Attributes
Phase2TrackerMonitorDigi Class Reference

#include <Phase2TrackerMonitorDigi.h>

Inheritance diagram for Phase2TrackerMonitorDigi:
DQMEDAnalyzer edm::one::EDProducer< edm::EndRunProducer, edm::one::WatchRuns, edm::EndLuminosityBlockProducer, edm::one::WatchLuminosityBlocks, edm::Accumulator > edm::one::EDProducerBase edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper

Classes

struct  DigiMEs
 

Public Member Functions

void analyze (const edm::Event &iEvent, const edm::EventSetup &iSetup) override
 
void bookHistograms (DQMStore::IBooker &ibooker, edm::Run const &iRun, edm::EventSetup const &iSetup) override
 
 Phase2TrackerMonitorDigi (const edm::ParameterSet &)
 
 ~Phase2TrackerMonitorDigi () override
 
- Public Member Functions inherited from DQMEDAnalyzer
void accumulate (edm::Event const &event, edm::EventSetup const &setup) final
 
virtual void analyze (edm::Event const &, edm::EventSetup const &)
 
void beginLuminosityBlock (edm::LuminosityBlock const &lumi, edm::EventSetup const &setup) final
 
void beginRun (edm::Run const &run, edm::EventSetup const &setup) final
 
virtual void dqmBeginLuminosityBlock (edm::LuminosityBlock const &, edm::EventSetup const &)
 
virtual void dqmBeginRun (edm::Run const &, edm::EventSetup const &)
 
 DQMEDAnalyzer ()
 
virtual void dqmEndLuminosityBlock (edm::LuminosityBlock const &, edm::EventSetup const &)
 
virtual void dqmEndRun (edm::Run const &, edm::EventSetup const &)
 
void endLuminosityBlock (edm::LuminosityBlock const &, edm::EventSetup const &) final
 
void endLuminosityBlockProduce (edm::LuminosityBlock &lumi, edm::EventSetup const &setup) final
 
void endRun (edm::Run const &, edm::EventSetup const &) final
 
void endRunProduce (edm::Run &run, edm::EventSetup const &setup) final
 
virtual bool getCanSaveByLumi ()
 
- Public Member Functions inherited from edm::one::EDProducer< edm::EndRunProducer, edm::one::WatchRuns, edm::EndLuminosityBlockProducer, edm::one::WatchLuminosityBlocks, edm::Accumulator >
 EDProducer ()=default
 
SerialTaskQueueglobalLuminosityBlocksQueue () final
 
SerialTaskQueueglobalRunsQueue () final
 
bool hasAbilityToProduceInBeginLumis () const final
 
bool hasAbilityToProduceInBeginRuns () const final
 
bool hasAbilityToProduceInEndLumis () const final
 
bool hasAbilityToProduceInEndRuns () const final
 
bool wantsGlobalLuminosityBlocks () const final
 
bool wantsGlobalRuns () const final
 
- Public Member Functions inherited from edm::one::EDProducerBase
 EDProducerBase ()
 
ModuleDescription const & moduleDescription () const
 
bool wantsStreamLuminosityBlocks () const
 
bool wantsStreamRuns () const
 
 ~EDProducerBase () override
 
- Public Member Functions inherited from edm::ProducerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
std::vector< edm::ProductResolverIndex > const & indiciesForPutProducts (BranchType iBranchType) const
 
 ProducerBase ()
 
std::vector< edm::ProductResolverIndex > const & putTokenIndexToProductResolverIndex () const
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
std::function< void(BranchDescription const &)> registrationCallback () const
 used by the fwk to register list of products More...
 
void resolvePutIndicies (BranchType iBranchType, ModuleToResolverIndicies const &iIndicies, std::string const &moduleLabel)
 
 ~ProducerBase () noexcept(false) override
 
- Public Member Functions inherited from edm::EDConsumerBase
std::vector< ConsumesInfoconsumesInfo () const
 
void convertCurrentProcessAlias (std::string const &processName)
 Convert "@currentProcess" in InputTag process names to the actual current process name. More...
 
 EDConsumerBase ()
 
 EDConsumerBase (EDConsumerBase const &)=delete
 
 EDConsumerBase (EDConsumerBase &&)=default
 
ESProxyIndex const * esGetTokenIndices (edm::Transition iTrans) const
 
ProductResolverIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
std::vector< ProductResolverIndexAndSkipBit > const & itemsToGetFrom (BranchType iType) const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void modulesWhoseProductsAreConsumed (std::vector< ModuleDescription const * > &modules, ProductRegistry const &preg, std::map< std::string, ModuleDescription const * > const &labelsToDesc, std::string const &processName) const
 
EDConsumerBase const & operator= (EDConsumerBase const &)=delete
 
EDConsumerBaseoperator= (EDConsumerBase &&)=default
 
bool registeredToConsume (ProductResolverIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
ProductResolverIndexAndSkipBit uncheckedIndexFrom (EDGetToken) const
 
void updateLookup (BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet)
 
void updateLookup (eventsetup::ESRecordsToProxyIndices const &)
 
virtual ~EDConsumerBase () noexcept(false)
 

Public Attributes

MonitorElementRZOccupancyMap
 
MonitorElementRZPositionMap
 
MonitorElementXYOccupancyMap
 
MonitorElementXYPositionMap
 

Private Member Functions

void bookLayerHistos (DQMStore::IBooker &ibooker, unsigned int det_id, const TrackerTopology *tTopo)
 
void fillITPixelDigiHistos (const edm::Handle< edm::DetSetVector< PixelDigi >> handle, const edm::ESHandle< TrackerGeometry > gHandle)
 
void fillOTDigiHistos (const edm::Handle< edm::DetSetVector< Phase2TrackerDigi >> handle, const edm::ESHandle< TrackerGeometry > gHandle)
 

Private Attributes

edm::ParameterSet config_
 
std::string geomType_
 
edm::InputTag itPixelDigiSrc_
 
const edm::EDGetTokenT< edm::DetSetVector< PixelDigi > > itPixelDigiToken_
 
std::map< unsigned int, DigiMEslayerMEs
 
edm::InputTag otDigiSrc_
 
const edm::EDGetTokenT< edm::DetSetVector< Phase2TrackerDigi > > otDigiToken_
 
bool pixelFlag_
 
edm::ESHandle< TrackerTopologytTopoHandle_
 

Additional Inherited Members

- Public Types inherited from DQMEDAnalyzer
typedef dqm::reco::DQMStore DQMStore
 
typedef dqm::reco::MonitorElement MonitorElement
 
- Public Types inherited from edm::one::EDProducerBase
typedef EDProducerBase ModuleType
 
- Public Types inherited from edm::ProducerBase
using ModuleToResolverIndicies = std::unordered_multimap< std::string, std::tuple< edm::TypeID const *, const char *, edm::ProductResolverIndex >>
 
typedef ProductRegistryHelper::TypeLabelList TypeLabelList
 
- Public Types inherited from edm::EDConsumerBase
typedef ProductLabels Labels
 
- Static Public Member Functions inherited from edm::one::EDProducerBase
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &descriptions)
 
- Protected Member Functions inherited from edm::ProducerBase
ProducesCollector producesCollector ()
 
- Protected Member Functions inherited from edm::EDConsumerBase
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
EDGetToken consumes (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken consumes (TypeToGet const &id, edm::InputTag const &tag)
 
ConsumesCollector consumesCollector ()
 Use a ConsumesCollector to gather consumes information from helper functions. More...
 
template<typename ProductType , BranchType B = InEvent>
void consumesMany ()
 
void consumesMany (const TypeToGet &id)
 
template<BranchType B>
void consumesMany (const TypeToGet &id)
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes ()
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes (ESInputTag const &tag)
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > mayConsume (edm::InputTag const &tag)
 
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
- Protected Attributes inherited from DQMEDAnalyzer
edm::EDPutTokenT< DQMTokenlumiToken_
 
edm::EDPutTokenT< DQMTokenrunToken_
 

Detailed Description

Description: It generates various histograms of digi properties. Manual switching is enabled for each histogram. Seperate Histograms are there for P type and S type sensors of the outer Tracker

Definition at line 18 of file Phase2TrackerMonitorDigi.h.

Constructor & Destructor Documentation

Phase2TrackerMonitorDigi::Phase2TrackerMonitorDigi ( const edm::ParameterSet iConfig)
explicit

Definition at line 47 of file Phase2TrackerMonitorDigi.cc.

48  : config_(iConfig),
49  pixelFlag_(config_.getParameter<bool>("PixelPlotFillingFlag")),
50  geomType_(config_.getParameter<std::string>("GeometryType")),
51  otDigiSrc_(config_.getParameter<edm::InputTag>("OuterTrackerDigiSource")),
52  itPixelDigiSrc_(config_.getParameter<edm::InputTag>("InnerPixelDigiSource")),
55  edm::LogInfo("Phase2TrackerMonitorDigi") << ">>> Construct Phase2TrackerMonitorDigi ";
56 }
T getParameter(std::string const &) const
const edm::EDGetTokenT< edm::DetSetVector< PixelDigi > > itPixelDigiToken_
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
const edm::EDGetTokenT< edm::DetSetVector< Phase2TrackerDigi > > otDigiToken_
Phase2TrackerMonitorDigi::~Phase2TrackerMonitorDigi ( )
override

Definition at line 61 of file Phase2TrackerMonitorDigi.cc.

61  {
62  // do anything here that needs to be done at desctruction time
63  // (e.g. close files, deallocate resources etc.)
64  edm::LogInfo("Phase2TrackerMonitorDigi") << ">>> Destroy Phase2TrackerMonitorDigi ";
65 }

Member Function Documentation

void Phase2TrackerMonitorDigi::analyze ( const edm::Event iEvent,
const edm::EventSetup iSetup 
)
override

Definition at line 69 of file Phase2TrackerMonitorDigi.cc.

References edm::ESWatcher< T >::check(), fillITPixelDigiHistos(), fillOTDigiHistos(), geomType_, edm::EventSetup::get(), edm::Event::getByToken(), itPixelDigiToken_, otDigiToken_, pixelFlag_, and tTopoHandle_.

69  {
70  using namespace edm;
71 
72  // Get digis
74  iEvent.getByToken(itPixelDigiToken_, pixDigiHandle);
75 
77  iEvent.getByToken(otDigiToken_, otDigiHandle);
78 
79  // Tracker Topology
80  iSetup.get<TrackerTopologyRcd>().get(tTopoHandle_);
81 
82  edm::ESWatcher<TrackerDigiGeometryRecord> theTkDigiGeomWatcher;
83  if (theTkDigiGeomWatcher.check(iSetup)) {
85  iSetup.get<TrackerDigiGeometryRecord>().get(geomType_, geomHandle);
86 
87  if (pixelFlag_)
88  fillITPixelDigiHistos(pixDigiHandle, geomHandle);
89  else
90  fillOTDigiHistos(otDigiHandle, geomHandle);
91  }
92 }
void fillOTDigiHistos(const edm::Handle< edm::DetSetVector< Phase2TrackerDigi >> handle, const edm::ESHandle< TrackerGeometry > gHandle)
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:525
const edm::EDGetTokenT< edm::DetSetVector< PixelDigi > > itPixelDigiToken_
void fillITPixelDigiHistos(const edm::Handle< edm::DetSetVector< PixelDigi >> handle, const edm::ESHandle< TrackerGeometry > gHandle)
bool check(const edm::EventSetup &iSetup)
Definition: ESWatcher.h:52
HLT enums.
T get() const
Definition: EventSetup.h:73
const edm::EDGetTokenT< edm::DetSetVector< Phase2TrackerDigi > > otDigiToken_
edm::ESHandle< TrackerTopology > tTopoHandle_
void Phase2TrackerMonitorDigi::bookHistograms ( DQMStore::IBooker ibooker,
edm::Run const &  iRun,
edm::EventSetup const &  iSetup 
)
overridevirtual

Implements DQMEDAnalyzer.

Definition at line 355 of file Phase2TrackerMonitorDigi.cc.

References dqm::dqmstoreimpl::DQMStore::IBooker::book2D(), bookLayerHistos(), dqm::dqmstoreimpl::DQMStore::IBooker::bookProfile2D(), dqm::dqmstoreimpl::DQMStore::IBooker::cd(), config_, TrackerGeometry::detUnits(), fed_dqm_sourceclient-live_cfg::folder_name, geomType_, edm::EventSetup::get(), edm::ParameterSet::getParameter(), edm::ESHandle< T >::product(), RZOccupancyMap, RZPositionMap, dqm::dqmstoreimpl::DQMStore::IBooker::setCurrentFolder(), AlCaHLTBitMon_QueryRunRegistry::string, tTopoHandle_, XYOccupancyMap, and XYPositionMap.

357  {
358  std::string top_folder = config_.getParameter<std::string>("TopFolderName");
359  edm::ESWatcher<TrackerDigiGeometryRecord> theTkDigiGeomWatcher;
360 
361  iSetup.get<TrackerTopologyRcd>().get(tTopoHandle_);
362  const TrackerTopology* const tTopo = tTopoHandle_.product();
363 
364  if (theTkDigiGeomWatcher.check(iSetup)) {
365  edm::ESHandle<TrackerGeometry> geom_handle;
366  iSetup.get<TrackerDigiGeometryRecord>().get(geomType_, geom_handle);
367  const TrackerGeometry* tGeom = geom_handle.product();
368  for (auto const& det_u : tGeom->detUnits()) {
369  unsigned int detId_raw = det_u->geographicalId().rawId();
370  bookLayerHistos(ibooker, detId_raw, tTopo);
371  }
372  }
373  ibooker.cd();
374  std::stringstream folder_name;
375  folder_name << top_folder << "/"
376  << "DigiMonitor";
377  ibooker.setCurrentFolder(folder_name.str());
378 
380  edm::ParameterSet ParametersOcc = config_.getParameter<edm::ParameterSet>("DigiOccupancyPH");
381  if (Parameters.getParameter<bool>("switch"))
382  XYPositionMap = ibooker.book2D("DigiXPosVsYPos",
383  "DigiXPosVsYPos",
384  Parameters.getParameter<int32_t>("Nxbins"),
385  Parameters.getParameter<double>("xmin"),
386  Parameters.getParameter<double>("xmax"),
387  Parameters.getParameter<int32_t>("Nybins"),
388  Parameters.getParameter<double>("ymin"),
389  Parameters.getParameter<double>("ymax"));
390  else
391  XYPositionMap = nullptr;
392 
393  if (Parameters.getParameter<bool>("switch") && ParametersOcc.getParameter<bool>("switch"))
394  XYOccupancyMap = ibooker.bookProfile2D("OccupancyInXY",
395  "OccupancyInXY",
396  Parameters.getParameter<int32_t>("Nxbins"),
397  Parameters.getParameter<double>("xmin"),
398  Parameters.getParameter<double>("xmax"),
399  Parameters.getParameter<int32_t>("Nybins"),
400  Parameters.getParameter<double>("ymin"),
401  Parameters.getParameter<double>("ymax"),
402  ParametersOcc.getParameter<double>("xmin"),
403  ParametersOcc.getParameter<double>("xmax"));
404  else
405  XYOccupancyMap = nullptr;
406 
407  Parameters = config_.getParameter<edm::ParameterSet>("RZPositionMapH");
408  if (Parameters.getParameter<bool>("switch"))
409  RZPositionMap = ibooker.book2D("DigiRPosVsZPos",
410  "DigiRPosVsZPos",
411  Parameters.getParameter<int32_t>("Nxbins"),
412  Parameters.getParameter<double>("xmin"),
413  Parameters.getParameter<double>("xmax"),
414  Parameters.getParameter<int32_t>("Nybins"),
415  Parameters.getParameter<double>("ymin"),
416  Parameters.getParameter<double>("ymax"));
417  else
418  RZPositionMap = nullptr;
419 
420  if (Parameters.getParameter<bool>("switch") && ParametersOcc.getParameter<bool>("switch"))
421  RZOccupancyMap = ibooker.bookProfile2D("OccupancyInRZ",
422  "OccupancyInRZ",
423  Parameters.getParameter<int32_t>("Nxbins"),
424  Parameters.getParameter<double>("xmin"),
425  Parameters.getParameter<double>("xmax"),
426  Parameters.getParameter<int32_t>("Nybins"),
427  Parameters.getParameter<double>("ymin"),
428  Parameters.getParameter<double>("ymax"),
429  ParametersOcc.getParameter<double>("xmin"),
430  ParametersOcc.getParameter<double>("xmax"));
431  else
432  RZOccupancyMap = nullptr;
433 }
T getParameter(std::string const &) const
const DetContainer & detUnits() const override
Returm a vector of all GeomDet.
vector< ParameterSet > Parameters
void bookLayerHistos(DQMStore::IBooker &ibooker, unsigned int det_id, const TrackerTopology *tTopo)
T const * product() const
Definition: ESHandle.h:86
edm::ESHandle< TrackerTopology > tTopoHandle_
void Phase2TrackerMonitorDigi::bookLayerHistos ( DQMStore::IBooker ibooker,
unsigned int  det_id,
const TrackerTopology tTopo 
)
private

Definition at line 437 of file Phase2TrackerMonitorDigi.cc.

References dqm::dqmstoreimpl::DQMStore::IBooker::book1D(), dqm::dqmstoreimpl::DQMStore::IBooker::book2D(), dqm::dqmstoreimpl::DQMStore::IBooker::bookProfile(), dqm::dqmstoreimpl::DQMStore::IBooker::cd(), Phase2TrackerMonitorDigi::DigiMEs::ChargeOfDigis, Phase2TrackerMonitorDigi::DigiMEs::ChargeOfDigisVsWidth, Phase2TrackerMonitorDigi::DigiMEs::ChargeXYMap, Phase2TrackerMonitorDigi::DigiMEs::ClusterPositionP, Phase2TrackerMonitorDigi::DigiMEs::ClusterPositionS, Phase2TrackerMonitorDigi::DigiMEs::ClusterWidth, config_, DEFINE_FWK_MODULE, Phase2TrackerMonitorDigi::DigiMEs::DigiOccupancyP, Phase2TrackerMonitorDigi::DigiMEs::DigiOccupancyS, Phase2TrackerMonitorDigi::DigiMEs::EtaOccupancyProfP, Phase2TrackerMonitorDigi::DigiMEs::EtaOccupancyProfS, fed_dqm_sourceclient-live_cfg::folder_name, Phase2TrackerMonitorDigi::DigiMEs::FractionOfOvTBits, Phase2TrackerMonitorDigi::DigiMEs::FractionOfOvTBitsVsEta, TrackerTopology::getITPixelLayerNumber(), TrackerTopology::getOTLayerNumber(), edm::ParameterSet::getParameter(), layerMEs, Phase2TrackerMonitorDigi::DigiMEs::nDigiPerLayer, Phase2TrackerMonitorDigi::DigiMEs::nHitDetsPerLayer, Phase2TrackerMonitorDigi::DigiMEs::NumberOfClustersPerDet, Phase2TrackerMonitorDigi::DigiMEs::NumberOfDigisPerDet, Phase2TrackerMonitorDigi::DigiMEs::NumberOfHitDetectorsPerLayer, pixelFlag_, Phase2TrackerMonitorDigi::DigiMEs::PositionOfDigisP, Phase2TrackerMonitorDigi::DigiMEs::PositionOfDigisS, dqm::dqmstoreimpl::DQMStore::IBooker::setCurrentFolder(), AlCaHLTBitMon_QueryRunRegistry::string, GlobalPosition_Frontier_DevDB_cff::tag, and Phase2TrackerMonitorDigi::DigiMEs::TotalNumberOfDigisPerLayer.

Referenced by bookHistograms().

439  {
440  int layer;
441  if (pixelFlag_)
442  layer = tTopo->getITPixelLayerNumber(det_id);
443  else
444  layer = tTopo->getOTLayerNumber(det_id);
445 
446  if (layer < 0)
447  return;
448  std::map<uint32_t, DigiMEs>::iterator pos = layerMEs.find(layer);
449  if (pos == layerMEs.end()) {
450  std::string top_folder = config_.getParameter<std::string>("TopFolderName");
451  std::stringstream folder_name;
452 
453  // initialise Histograms
454  std::ostringstream fname1, fname2, tag;
455  int side = 0;
456  int idisc = 0;
457  if (layer < 100) {
458  fname1 << "Barrel";
459  fname2 << "Layer_" << layer;
460  } else {
461  side = layer / 100;
462  idisc = layer - side * 100;
463  fname1 << "EndCap_Side_" << side;
464  fname2 << "Disc_" << idisc;
465  }
466 
467  ibooker.cd();
468  folder_name << top_folder << "/"
469  << "DigiMonitor"
470  << "/" << fname1.str() << "/" << fname2.str();
471  ibooker.setCurrentFolder(folder_name.str());
472 
473  edm::LogInfo("Phase2TrackerMonitorDigi") << " Booking Histograms in : " << folder_name.str();
474 
475  std::ostringstream HistoName;
476  DigiMEs local_mes;
477 
478  local_mes.nDigiPerLayer = 0;
479  local_mes.nHitDetsPerLayer = 0;
480 
482  edm::ParameterSet EtaParameters = config_.getParameter<edm::ParameterSet>("EtaH");
483  HistoName.str("");
484  HistoName << "NumberOfDigisPerDet_" << fname2.str();
485  if (Parameters.getParameter<bool>("switch"))
486  local_mes.NumberOfDigisPerDet = ibooker.book1D(HistoName.str(),
487  HistoName.str(),
488  Parameters.getParameter<int32_t>("Nbins"),
489  Parameters.getParameter<double>("xmin"),
490  Parameters.getParameter<double>("xmax"));
491  else
492  local_mes.NumberOfDigisPerDet = nullptr;
493 
494  if (pixelFlag_ || (layer < 4 || layer > 6)) {
495  Parameters = config_.getParameter<edm::ParameterSet>("DigiOccupancyPH");
496  HistoName.str("");
497  HistoName << "DigiOccupancyP_" << fname2.str();
498  if (Parameters.getParameter<bool>("switch"))
499  local_mes.DigiOccupancyP = ibooker.book1D(HistoName.str(),
500  HistoName.str(),
501  Parameters.getParameter<int32_t>("Nbins"),
502  Parameters.getParameter<double>("xmin"),
503  Parameters.getParameter<double>("xmax"));
504  else
505  local_mes.DigiOccupancyP = nullptr;
506 
507  HistoName.str("");
508  HistoName << "DigiOccupancyVsEtaP_" << fname2.str();
509  if (Parameters.getParameter<bool>("switch") && EtaParameters.getParameter<bool>("switch"))
510  local_mes.EtaOccupancyProfP = ibooker.bookProfile(HistoName.str(),
511  HistoName.str(),
512  EtaParameters.getParameter<int32_t>("Nbins"),
513  EtaParameters.getParameter<double>("xmin"),
514  EtaParameters.getParameter<double>("xmax"),
515  Parameters.getParameter<double>("xmin"),
516  Parameters.getParameter<double>("xmax"),
517  "");
518  else
519  local_mes.EtaOccupancyProfP = nullptr;
520 
521  Parameters = config_.getParameter<edm::ParameterSet>("PositionOfDigisPH");
522  HistoName.str("");
523  HistoName << "PositionOfDigisP_" << fname2.str().c_str();
524  if (Parameters.getParameter<bool>("switch"))
525  local_mes.PositionOfDigisP = ibooker.book2D(HistoName.str(),
526  HistoName.str(),
527  Parameters.getParameter<int32_t>("Nxbins"),
528  Parameters.getParameter<double>("xmin"),
529  Parameters.getParameter<double>("xmax"),
530  Parameters.getParameter<int32_t>("Nybins"),
531  Parameters.getParameter<double>("ymin"),
532  Parameters.getParameter<double>("ymax"));
533  else
534  local_mes.PositionOfDigisP = nullptr;
535 
536  Parameters = config_.getParameter<edm::ParameterSet>("ClusterPositionPH");
537  HistoName.str("");
538  HistoName << "ClusterPositionP_" << fname2.str();
539  if (Parameters.getParameter<bool>("switch"))
540  local_mes.ClusterPositionP = ibooker.book2D(HistoName.str(),
541  HistoName.str(),
542  Parameters.getParameter<int32_t>("Nxbins"),
543  Parameters.getParameter<double>("xmin"),
544  Parameters.getParameter<double>("xmax"),
545  Parameters.getParameter<int32_t>("Nybins"),
546  Parameters.getParameter<double>("ymin"),
547  Parameters.getParameter<double>("ymax"));
548  else
549  local_mes.ClusterPositionP = nullptr;
550  }
551 
552  Parameters = config_.getParameter<edm::ParameterSet>("ChargeXYMapH");
553  HistoName.str("");
554  HistoName << "ChargeXYMap_" << fname2.str().c_str();
555  if (Parameters.getParameter<bool>("switch"))
556  local_mes.ChargeXYMap = ibooker.book2D(HistoName.str(),
557  HistoName.str(),
558  Parameters.getParameter<int32_t>("Nxbins"),
559  Parameters.getParameter<double>("xmin"),
560  Parameters.getParameter<double>("xmax"),
561  Parameters.getParameter<int32_t>("Nybins"),
562  Parameters.getParameter<double>("ymin"),
563  Parameters.getParameter<double>("ymax"));
564  else
565  local_mes.ChargeXYMap = nullptr;
566 
567  Parameters = config_.getParameter<edm::ParameterSet>("TotalNumberOfDigisPerLayerH");
568  HistoName.str("");
569  HistoName << "TotalNumberOfDigisPerLayer_" << fname2.str();
570  if (Parameters.getParameter<bool>("switch"))
571  local_mes.TotalNumberOfDigisPerLayer = ibooker.book1D(HistoName.str(),
572  HistoName.str(),
573  Parameters.getParameter<int32_t>("Nbins"),
574  Parameters.getParameter<double>("xmin"),
575  Parameters.getParameter<double>("xmax"));
576  else
577  local_mes.TotalNumberOfDigisPerLayer = nullptr;
578 
579  Parameters = config_.getParameter<edm::ParameterSet>("NumberOfHitDetsPerLayerH");
580  HistoName.str("");
581  HistoName << "NumberOfHitDetectorsPerLayer_" << fname2.str();
582  if (Parameters.getParameter<bool>("switch"))
583  local_mes.NumberOfHitDetectorsPerLayer = ibooker.book1D(HistoName.str(),
584  HistoName.str(),
585  Parameters.getParameter<int32_t>("Nbins"),
586  Parameters.getParameter<double>("xmin"),
587  Parameters.getParameter<double>("xmax"));
588  else
589  local_mes.NumberOfHitDetectorsPerLayer = nullptr;
590 
591  Parameters = config_.getParameter<edm::ParameterSet>("NumberOfClustersPerDetH");
592  HistoName.str("");
593  HistoName << "NumberOfClustersPerDet_" << fname2.str();
594  if (Parameters.getParameter<bool>("switch"))
595  local_mes.NumberOfClustersPerDet = ibooker.book1D(HistoName.str(),
596  HistoName.str(),
597  Parameters.getParameter<int32_t>("Nbins"),
598  Parameters.getParameter<double>("xmin"),
599  Parameters.getParameter<double>("xmax"));
600  else
601  local_mes.NumberOfClustersPerDet = nullptr;
602 
603  Parameters = config_.getParameter<edm::ParameterSet>("ClusterWidthH");
604  HistoName.str("");
605  HistoName << "ClusterWidth_" << fname2.str();
606  if (Parameters.getParameter<bool>("switch"))
607  local_mes.ClusterWidth = ibooker.book1D(HistoName.str(),
608  HistoName.str(),
609  Parameters.getParameter<int32_t>("Nbins"),
610  Parameters.getParameter<double>("xmin"),
611  Parameters.getParameter<double>("xmax"));
612  else
613  local_mes.ClusterWidth = nullptr;
614 
615  if (!pixelFlag_) {
616  Parameters = config_.getParameter<edm::ParameterSet>("DigiOccupancySH");
617  HistoName.str("");
618  HistoName << "DigiOccupancyS_" << fname2.str();
619  if (Parameters.getParameter<bool>("switch"))
620  local_mes.DigiOccupancyS = ibooker.book1D(HistoName.str(),
621  HistoName.str(),
622  Parameters.getParameter<int32_t>("Nbins"),
623  Parameters.getParameter<double>("xmin"),
624  Parameters.getParameter<double>("xmax"));
625  else
626  local_mes.DigiOccupancyS = nullptr;
627 
628  HistoName.str("");
629  HistoName << "DigiOccupancyVsEtaS_" << fname2.str();
630  if (Parameters.getParameter<bool>("switch") && EtaParameters.getParameter<bool>("switch"))
631  local_mes.EtaOccupancyProfS = ibooker.bookProfile(HistoName.str(),
632  HistoName.str(),
633  EtaParameters.getParameter<int32_t>("Nbins"),
634  EtaParameters.getParameter<double>("xmin"),
635  EtaParameters.getParameter<double>("xmax"),
636  Parameters.getParameter<double>("xmin"),
637  Parameters.getParameter<double>("xmax"),
638  "");
639  else
640  local_mes.EtaOccupancyProfS = nullptr;
641 
642  HistoName.str("");
643  HistoName << "FractionOfOverThresholdDigis_" << fname2.str();
644  local_mes.FractionOfOvTBits = ibooker.book1D(HistoName.str(), HistoName.str(), 11, -0.05, 1.05);
645 
646  Parameters = config_.getParameter<edm::ParameterSet>("NumberOfDigisPerDetH");
647  HistoName.str("");
648  HistoName << "FractionOfOverThresholdDigisVaEta_" << fname2.str();
649  if (Parameters.getParameter<bool>("switch") && EtaParameters.getParameter<bool>("switch"))
650  local_mes.FractionOfOvTBitsVsEta = ibooker.bookProfile(HistoName.str(),
651  HistoName.str(),
652  EtaParameters.getParameter<int32_t>("Nbins"),
653  EtaParameters.getParameter<double>("xmin"),
654  EtaParameters.getParameter<double>("xmax"),
655  Parameters.getParameter<double>("xmin"),
656  Parameters.getParameter<double>("xmax"),
657  "");
658  else
659  local_mes.FractionOfOvTBitsVsEta = nullptr;
660 
661  Parameters = config_.getParameter<edm::ParameterSet>("ClusterPositionSH");
662  HistoName.str("");
663  HistoName << "ClusterPositionS_" << fname2.str();
664  if (Parameters.getParameter<bool>("switch"))
665  local_mes.ClusterPositionS = ibooker.book2D(HistoName.str(),
666  HistoName.str(),
667  Parameters.getParameter<int32_t>("Nxbins"),
668  Parameters.getParameter<double>("xmin"),
669  Parameters.getParameter<double>("xmax"),
670  Parameters.getParameter<int32_t>("Nybins"),
671  Parameters.getParameter<double>("ymin"),
672  Parameters.getParameter<double>("ymax"));
673  else
674  local_mes.ClusterPositionS = nullptr;
675 
676  Parameters = config_.getParameter<edm::ParameterSet>("PositionOfDigisSH");
677  HistoName.str("");
678  HistoName << "PositionOfDigisS_" << fname2.str().c_str();
679  if (Parameters.getParameter<bool>("switch"))
680  local_mes.PositionOfDigisS = ibooker.book2D(HistoName.str(),
681  HistoName.str(),
682  Parameters.getParameter<int32_t>("Nxbins"),
683  Parameters.getParameter<double>("xmin"),
684  Parameters.getParameter<double>("xmax"),
685  Parameters.getParameter<int32_t>("Nybins"),
686  Parameters.getParameter<double>("ymin"),
687  Parameters.getParameter<double>("ymax"));
688  else
689  local_mes.PositionOfDigisS = nullptr;
690  } else {
691  Parameters = config_.getParameter<edm::ParameterSet>("DigiChargeH");
692  HistoName.str("");
693  HistoName << "ChargeOfDigis_" << fname2.str();
694  if (Parameters.getParameter<bool>("switch"))
695  local_mes.ChargeOfDigis = ibooker.book1D(HistoName.str(),
696  HistoName.str(),
697  Parameters.getParameter<int32_t>("Nbins"),
698  Parameters.getParameter<double>("xmin"),
699  Parameters.getParameter<double>("xmax"));
700  else
701  local_mes.ChargeOfDigis = nullptr;
702 
703  edm::ParameterSet WidthParameters = config_.getParameter<edm::ParameterSet>("ClusterWidthH");
704  HistoName.str("");
705  HistoName << "ChargeOfDigisVsWidth_" << fname2.str();
706  if (Parameters.getParameter<bool>("switch") && WidthParameters.getParameter<bool>("switch"))
707  local_mes.ChargeOfDigisVsWidth = ibooker.book2D(HistoName.str(),
708  HistoName.str(),
709  Parameters.getParameter<int32_t>("Nbins"),
710  Parameters.getParameter<double>("xmin"),
711  Parameters.getParameter<double>("xmax"),
712  WidthParameters.getParameter<int32_t>("Nbins"),
713  WidthParameters.getParameter<double>("xmin"),
714  WidthParameters.getParameter<double>("xmax"));
715  else
716  local_mes.ChargeOfDigisVsWidth = nullptr;
717  }
718 
719  layerMEs.insert(std::make_pair(layer, local_mes));
720  }
721 }
T getParameter(std::string const &) const
vector< ParameterSet > Parameters
int getITPixelLayerNumber(const DetId &id) const
std::string HistoName
std::map< unsigned int, DigiMEs > layerMEs
int getOTLayerNumber(const DetId &id) const
void Phase2TrackerMonitorDigi::fillITPixelDigiHistos ( const edm::Handle< edm::DetSetVector< PixelDigi >>  handle,
const edm::ESHandle< TrackerGeometry gHandle 
)
private

Definition at line 93 of file Phase2TrackerMonitorDigi.cc.

References funct::abs(), ecalMGPA::adc(), edm::DetSetVector< T >::begin(), Phase2TrackerMonitorDigi::DigiMEs::ChargeOfDigis, Phase2TrackerMonitorDigi::DigiMEs::ChargeOfDigisVsWidth, CosmicGenFilterHelix_cfi::charges, Phase2TrackerMonitorDigi::DigiMEs::ChargeXYMap, Phase2TrackerMonitorDigi::DigiMEs::ClusterPositionP, Phase2TrackerMonitorDigi::DigiMEs::ClusterWidth, cuy::col, TauDecayModes::dec, Phase2TrackerMonitorDigi::DigiMEs::DigiOccupancyP, edm::DetSetVector< T >::end(), PV3DBase< T, PVType, FrameType >::eta(), Phase2TrackerMonitorDigi::DigiMEs::EtaOccupancyProfP, dqm::impl::MonitorElement::Fill(), TrackerTopology::getITPixelLayerNumber(), runTauDisplay::gp, patZpeak::handle, TrackerGeometry::idToDet(), TrackerGeometry::idToDetUnit(), layerMEs, Topology::localPosition(), hgcaltilesconstants::nColumns, PixelTopology::ncolumns(), Phase2TrackerMonitorDigi::DigiMEs::nDigiPerLayer, Phase2TrackerMonitorDigi::DigiMEs::nHitDetsPerLayer, hgcaltilesconstants::nRows, PixelTopology::nrows(), Phase2TrackerMonitorDigi::DigiMEs::NumberOfClustersPerDet, Phase2TrackerMonitorDigi::DigiMEs::NumberOfDigisPerDet, Phase2TrackerMonitorDigi::DigiMEs::NumberOfHitDetectorsPerLayer, position, Phase2TrackerMonitorDigi::DigiMEs::PositionOfDigisP, edm::ESHandle< T >::product(), RZOccupancyMap, RZPositionMap, PixelGeomDetUnit::specificTopology(), GeomDet::surface(), Surface::toGlobal(), GeomDet::topology(), Phase2TrackerMonitorDigi::DigiMEs::TotalNumberOfDigisPerLayer, align::Tracker, tTopoHandle_, findQualityFiles::v, ApeEstimator_cff::width, PV3DBase< T, PVType, FrameType >::x(), XYOccupancyMap, XYPositionMap, PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().

Referenced by analyze().

94  {
95  const edm::DetSetVector<PixelDigi>* digis = handle.product();
96 
97  const TrackerTopology* tTopo = tTopoHandle_.product();
98  const TrackerGeometry* tGeom = gHandle.product();
99 
100  for (typename edm::DetSetVector<PixelDigi>::const_iterator DSViter = digis->begin(); DSViter != digis->end();
101  DSViter++) {
102  unsigned int rawid = DSViter->id;
103  edm::LogInfo("Phase2TrackerMonitorDigi") << " Det Id = " << rawid;
104  int layer = tTopo->getITPixelLayerNumber(rawid);
105  if (layer < 0)
106  continue;
107  std::map<uint32_t, DigiMEs>::iterator pos = layerMEs.find(layer);
108  if (pos == layerMEs.end())
109  continue;
110 
111  const DetId detId(rawid);
112 
113  if (DetId(detId).det() != DetId::Detector::Tracker)
114  continue;
115 
116  const GeomDetUnit* gDetUnit = tGeom->idToDetUnit(detId);
117  const GeomDet* geomDet = tGeom->idToDet(detId);
118 
119  const Phase2TrackerGeomDetUnit* tkDetUnit = dynamic_cast<const Phase2TrackerGeomDetUnit*>(gDetUnit);
120  int nRows = tkDetUnit->specificTopology().nrows();
121  int nColumns = tkDetUnit->specificTopology().ncolumns();
122  if (nRows * nColumns == 0)
123  continue;
124 
125  DigiMEs& local_mes = pos->second;
126 
127  local_mes.nHitDetsPerLayer++;
128 
129  int nDigi = 0;
130  int row_last = -1;
131  int col_last = -1;
132  int nclus = 0;
133  int width = 1;
134  int position = 0;
135  std::vector<int> charges;
136  for (typename edm::DetSet<PixelDigi>::const_iterator di = DSViter->begin(); di != DSViter->end(); di++) {
137  int col = di->column(); // column
138  int row = di->row(); // row
139  int adc = di->adc(); // digi charge
140  if (geomDet) {
141  MeasurementPoint mp(row + 0.5, col + 0.5);
142  GlobalPoint pdPos = geomDet->surface().toGlobal(gDetUnit->topology().localPosition(mp));
143  if (XYPositionMap)
144  XYPositionMap->Fill(pdPos.x() * 10., pdPos.y() * 10.);
145  if (RZPositionMap)
146  RZPositionMap->Fill(pdPos.z() * 10., std::hypot(pdPos.x(), pdPos.y()) * 10.);
147  }
148  nDigi++;
149  edm::LogInfo("Phase2TrackerMonitorDigi") << " column " << col << " row " << row << std::dec << std::endl;
150  if (local_mes.ChargeXYMap)
151  local_mes.ChargeXYMap->Fill(col, row, adc);
152  if (local_mes.PositionOfDigisP)
153  local_mes.PositionOfDigisP->Fill(row + 1, col + 1);
154  if (local_mes.ChargeOfDigis)
155  local_mes.ChargeOfDigis->Fill(adc);
156  if (row_last == -1) {
157  position = row + 1;
158  nclus++;
159  charges.push_back(adc);
160  } else {
161  if (abs(row - row_last) == 1 && col == col_last) {
162  position += row + 1;
163  width++;
164  charges.push_back(adc);
165  } else {
166  position /= width;
167  if (local_mes.ClusterWidth)
168  local_mes.ClusterWidth->Fill(width);
169  if (local_mes.ClusterPositionP)
170  local_mes.ClusterPositionP->Fill(position, col + 1);
171  for (auto v : charges)
172  if (local_mes.ChargeOfDigisVsWidth)
173  local_mes.ChargeOfDigisVsWidth->Fill(v, width);
174  charges.clear();
175  charges.push_back(adc);
176  width = 1;
177  position = row + 1;
178  nclus++;
179  }
180  }
181  edm::LogInfo("Phase2TrackerMonitorDigi") << " row " << row << " col " << col << " row_last " << row_last
182  << " col_last " << col_last << " width " << width;
183  row_last = row;
184  col_last = col;
185  }
186  if (local_mes.NumberOfClustersPerDet)
187  local_mes.NumberOfClustersPerDet->Fill(nclus);
188  if (local_mes.NumberOfDigisPerDet)
189  local_mes.NumberOfDigisPerDet->Fill(nDigi);
190  local_mes.nDigiPerLayer += nDigi;
191  float occupancy = 1.0;
192  if (nRows * nColumns > 0)
193  occupancy = nDigi * 1.0 / (nRows * nColumns);
194  if (geomDet) {
195  GlobalPoint gp = geomDet->surface().toGlobal(
196  gDetUnit->topology().localPosition(MeasurementPoint(nRows / 2.0, nColumns / 2.0)));
197  if (XYOccupancyMap)
198  XYOccupancyMap->Fill(gp.x() * 10., gp.y() * 10, occupancy);
199  if (RZOccupancyMap)
200  RZOccupancyMap->Fill(gp.z() * 10., std::hypot(gp.x(), gp.y()) * 10., occupancy);
201  if (local_mes.EtaOccupancyProfP)
202  local_mes.EtaOccupancyProfP->Fill(gp.eta(), occupancy);
203  }
204 
205  if (local_mes.DigiOccupancyP)
206  local_mes.DigiOccupancyP->Fill(occupancy);
207  }
208  // Fill histograms after loop over digis are complete
209  for (auto& ilayer : layerMEs) {
210  DigiMEs& local_mes = ilayer.second;
211  if (local_mes.TotalNumberOfDigisPerLayer)
212  local_mes.TotalNumberOfDigisPerLayer->Fill(local_mes.nDigiPerLayer);
213  if (local_mes.NumberOfHitDetectorsPerLayer)
214  local_mes.NumberOfHitDetectorsPerLayer->Fill(local_mes.nHitDetsPerLayer);
215  local_mes.nDigiPerLayer = 0;
216  local_mes.nHitDetsPerLayer = 0;
217  }
218 }
GlobalPoint toGlobal(const Point2DBase< Scalar, LocalTag > lp) const
Definition: Surface.h:81
virtual int nrows() const =0
virtual const Topology & topology() const
Definition: GeomDet.cc:67
T y() const
Definition: PV3DBase.h:60
const Plane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:37
void Fill(long long x)
const TrackerGeomDet * idToDetUnit(DetId) const override
Return the pointer to the GeomDetUnit corresponding to a given DetId.
Measurement2DPoint MeasurementPoint
Measurement points are two-dimensional by default.
T z() const
Definition: PV3DBase.h:61
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
constexpr int adc(sample_type sample)
get the ADC sample (12 bits)
int getITPixelLayerNumber(const DetId &id) const
iterator end()
Return the off-the-end iterator.
Definition: DetSetVector.h:325
Definition: DetId.h:17
T const * product() const
Definition: Handle.h:69
virtual const PixelTopology & specificTopology() const
Returns a reference to the pixel proxy topology.
virtual LocalPoint localPosition(const MeasurementPoint &) const =0
T eta() const
Definition: PV3DBase.h:73
virtual int ncolumns() const =0
static int position[264][3]
Definition: ReadPGInfo.cc:289
col
Definition: cuy.py:1010
const TrackerGeomDet * idToDet(DetId) const override
std::map< unsigned int, DigiMEs > layerMEs
iterator begin()
Return an iterator to the first DetSet.
Definition: DetSetVector.h:314
charges
only generated particles of these IDs are considered
collection_type::const_iterator const_iterator
Definition: DetSet.h:32
collection_type::const_iterator const_iterator
Definition: DetSetVector.h:102
T x() const
Definition: PV3DBase.h:59
T const * product() const
Definition: ESHandle.h:86
edm::ESHandle< TrackerTopology > tTopoHandle_
void Phase2TrackerMonitorDigi::fillOTDigiHistos ( const edm::Handle< edm::DetSetVector< Phase2TrackerDigi >>  handle,
const edm::ESHandle< TrackerGeometry gHandle 
)
private

Definition at line 219 of file Phase2TrackerMonitorDigi.cc.

References funct::abs(), edm::DetSetVector< T >::begin(), Phase2TrackerMonitorDigi::DigiMEs::ClusterPositionP, Phase2TrackerMonitorDigi::DigiMEs::ClusterPositionS, Phase2TrackerMonitorDigi::DigiMEs::ClusterWidth, cuy::col, TauDecayModes::dec, DetId::det(), Phase2TrackerMonitorDigi::DigiMEs::DigiOccupancyP, Phase2TrackerMonitorDigi::DigiMEs::DigiOccupancyS, edm::DetSetVector< T >::end(), PV3DBase< T, PVType, FrameType >::eta(), Phase2TrackerMonitorDigi::DigiMEs::EtaOccupancyProfP, Phase2TrackerMonitorDigi::DigiMEs::EtaOccupancyProfS, dqm::impl::MonitorElement::Fill(), Phase2TrackerMonitorDigi::DigiMEs::FractionOfOvTBits, Phase2TrackerMonitorDigi::DigiMEs::FractionOfOvTBitsVsEta, TrackerTopology::getOTLayerNumber(), runTauDisplay::gp, patZpeak::handle, TrackerGeometry::idToDet(), TrackerGeometry::idToDetUnit(), layerMEs, Topology::localPosition(), hgcaltilesconstants::nColumns, PixelTopology::ncolumns(), Phase2TrackerMonitorDigi::DigiMEs::nDigiPerLayer, Phase2TrackerMonitorDigi::DigiMEs::nHitDetsPerLayer, hgcaltilesconstants::nRows, PixelTopology::nrows(), Phase2TrackerMonitorDigi::DigiMEs::NumberOfClustersPerDet, Phase2TrackerMonitorDigi::DigiMEs::NumberOfDigisPerDet, Phase2TrackerMonitorDigi::DigiMEs::NumberOfHitDetectorsPerLayer, position, Phase2TrackerMonitorDigi::DigiMEs::PositionOfDigisP, Phase2TrackerMonitorDigi::DigiMEs::PositionOfDigisS, edm::ESHandle< T >::product(), RZOccupancyMap, RZPositionMap, PixelGeomDetUnit::specificTopology(), GeomDet::surface(), Surface::toGlobal(), GeomDet::topology(), Phase2TrackerMonitorDigi::DigiMEs::TotalNumberOfDigisPerLayer, align::Tracker, tTopoHandle_, ApeEstimator_cff::width, PV3DBase< T, PVType, FrameType >::x(), XYOccupancyMap, XYPositionMap, PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().

Referenced by analyze().

220  {
221  const edm::DetSetVector<Phase2TrackerDigi>* digis = handle.product();
222 
223  const TrackerTopology* tTopo = tTopoHandle_.product();
224  const TrackerGeometry* tGeom = gHandle.product();
225 
226  for (typename edm::DetSetVector<Phase2TrackerDigi>::const_iterator DSViter = digis->begin(); DSViter != digis->end();
227  DSViter++) {
228  unsigned int rawid = DSViter->id;
229  DetId detId(rawid);
230  edm::LogInfo("Phase2TrackerMonitorDigi") << " Det Id = " << rawid;
231  int layer = tTopo->getOTLayerNumber(rawid);
232  if (layer < 0)
233  continue;
234  std::map<uint32_t, DigiMEs>::iterator pos = layerMEs.find(layer);
235  if (pos == layerMEs.end())
236  continue;
237  DigiMEs& local_mes = pos->second;
238 
239  local_mes.nHitDetsPerLayer++;
240  if (DetId(detId).det() != DetId::Detector::Tracker)
241  continue;
242 
243  const GeomDetUnit* gDetUnit = tGeom->idToDetUnit(detId);
244  const GeomDet* geomDet = tGeom->idToDet(detId);
245 
246  const Phase2TrackerGeomDetUnit* tkDetUnit = dynamic_cast<const Phase2TrackerGeomDetUnit*>(gDetUnit);
247  int nRows = tkDetUnit->specificTopology().nrows();
248  int nColumns = tkDetUnit->specificTopology().ncolumns();
249  if (nRows * nColumns == 0)
250  continue;
251 
252  int nDigi = 0;
253  int row_last = -1;
254  int col_last = -1;
255  int nclus = 0;
256  int width = 1;
257  int position = 0;
258  float frac_ot = 0.;
259  for (typename edm::DetSet<Phase2TrackerDigi>::const_iterator di = DSViter->begin(); di != DSViter->end(); di++) {
260  int col = di->column(); // column
261  int row = di->row(); // row
262  const DetId detId(rawid);
263 
264  if (geomDet) {
265  MeasurementPoint mp(row + 0.5, col + 0.5);
266  GlobalPoint pdPos = geomDet->surface().toGlobal(gDetUnit->topology().localPosition(mp));
267  if (XYPositionMap)
268  XYPositionMap->Fill(pdPos.x() * 10., pdPos.y() * 10.);
269  if (RZPositionMap)
270  RZPositionMap->Fill(pdPos.z() * 10., std::hypot(pdPos.x(), pdPos.y()) * 10.);
271  }
272  nDigi++;
273  if (di->overThreshold())
274  frac_ot++;
275  edm::LogInfo("Phase2TrackerMonitorDigi") << " column " << col << " row " << row << std::dec << std::endl;
276  if (nColumns > 2 && local_mes.PositionOfDigisP)
277  local_mes.PositionOfDigisP->Fill(row + 1, col + 1);
278  if (nColumns <= 2 && local_mes.PositionOfDigisS)
279  local_mes.PositionOfDigisS->Fill(row + 1, col + 1);
280 
281  if (row_last == -1) {
282  position = row + 1;
283  nclus++;
284  } else {
285  if (abs(row - row_last) == 1 && col == col_last) {
286  position += row + 1;
287  width++;
288  } else {
289  position /= width;
290  if (local_mes.ClusterWidth)
291  local_mes.ClusterWidth->Fill(width);
292  if (local_mes.ClusterPositionP && nColumns > 2)
293  local_mes.ClusterPositionP->Fill(position, col + 1);
294  if (local_mes.ClusterPositionS && nColumns <= 2)
295  local_mes.ClusterPositionS->Fill(position, col + 1);
296 
297  width = 1;
298  position = row + 1;
299  nclus++;
300  }
301  }
302  edm::LogInfo("Phase2TrackerMonitorDigi") << " row " << row << " col " << col << " row_last " << row_last
303  << " col_last " << col_last << " width " << width;
304  row_last = row;
305  col_last = col;
306  }
307  if (local_mes.NumberOfClustersPerDet)
308  local_mes.NumberOfClustersPerDet->Fill(nclus);
309  if (local_mes.NumberOfDigisPerDet)
310  local_mes.NumberOfDigisPerDet->Fill(nDigi);
311  local_mes.nDigiPerLayer += nDigi;
312  if (nDigi)
313  frac_ot /= nDigi;
314  if (local_mes.FractionOfOvTBits && nColumns <= 2)
315  local_mes.FractionOfOvTBits->Fill(frac_ot);
316 
317  float occupancy = 1.0;
318  if (nRows * nColumns > 0)
319  occupancy = nDigi * 1.0 / (nRows * nColumns);
320  if (geomDet) {
321  GlobalPoint gp = geomDet->surface().toGlobal(gDetUnit->topology().localPosition(MeasurementPoint(0.0, 0.0)));
322  if (XYOccupancyMap)
323  XYOccupancyMap->Fill(gp.x() * 10., gp.y() * 10., occupancy);
324  if (RZOccupancyMap)
325  RZOccupancyMap->Fill(gp.z() * 10., std::hypot(gp.x(), gp.y()) * 10., occupancy);
326  if (nColumns > 2) {
327  if (local_mes.DigiOccupancyP)
328  local_mes.DigiOccupancyP->Fill(occupancy);
329  if (local_mes.EtaOccupancyProfP)
330  local_mes.EtaOccupancyProfP->Fill(gp.eta(), occupancy);
331  } else {
332  if (local_mes.DigiOccupancyS)
333  local_mes.DigiOccupancyS->Fill(occupancy);
334  if (local_mes.EtaOccupancyProfS)
335  local_mes.EtaOccupancyProfS->Fill(gp.eta(), occupancy);
336  if (local_mes.FractionOfOvTBitsVsEta)
337  local_mes.FractionOfOvTBitsVsEta->Fill(gp.eta(), frac_ot);
338  }
339  }
340  }
341  // Fill histograms after loop over digis are complete
342  for (auto& ilayer : layerMEs) {
343  DigiMEs& local_mes = ilayer.second;
344  if (local_mes.TotalNumberOfDigisPerLayer)
345  local_mes.TotalNumberOfDigisPerLayer->Fill(local_mes.nDigiPerLayer);
346  if (local_mes.NumberOfHitDetectorsPerLayer)
347  local_mes.NumberOfHitDetectorsPerLayer->Fill(local_mes.nHitDetsPerLayer);
348  local_mes.nDigiPerLayer = 0;
349  local_mes.nHitDetsPerLayer = 0;
350  }
351 }
GlobalPoint toGlobal(const Point2DBase< Scalar, LocalTag > lp) const
Definition: Surface.h:81
virtual int nrows() const =0
virtual const Topology & topology() const
Definition: GeomDet.cc:67
T y() const
Definition: PV3DBase.h:60
const Plane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:37
void Fill(long long x)
const TrackerGeomDet * idToDetUnit(DetId) const override
Return the pointer to the GeomDetUnit corresponding to a given DetId.
Measurement2DPoint MeasurementPoint
Measurement points are two-dimensional by default.
T z() const
Definition: PV3DBase.h:61
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
iterator end()
Return the off-the-end iterator.
Definition: DetSetVector.h:325
Definition: DetId.h:17
T const * product() const
Definition: Handle.h:69
virtual const PixelTopology & specificTopology() const
Returns a reference to the pixel proxy topology.
virtual LocalPoint localPosition(const MeasurementPoint &) const =0
T eta() const
Definition: PV3DBase.h:73
virtual int ncolumns() const =0
static int position[264][3]
Definition: ReadPGInfo.cc:289
col
Definition: cuy.py:1010
const TrackerGeomDet * idToDet(DetId) const override
std::map< unsigned int, DigiMEs > layerMEs
iterator begin()
Return an iterator to the first DetSet.
Definition: DetSetVector.h:314
collection_type::const_iterator const_iterator
Definition: DetSet.h:32
collection_type::const_iterator const_iterator
Definition: DetSetVector.h:102
T x() const
Definition: PV3DBase.h:59
T const * product() const
Definition: ESHandle.h:86
int getOTLayerNumber(const DetId &id) const
edm::ESHandle< TrackerTopology > tTopoHandle_
constexpr Detector det() const
get the detector field from this detid
Definition: DetId.h:46

Member Data Documentation

edm::ParameterSet Phase2TrackerMonitorDigi::config_
private

Definition at line 60 of file Phase2TrackerMonitorDigi.h.

Referenced by bookHistograms(), and bookLayerHistos().

std::string Phase2TrackerMonitorDigi::geomType_
private

Definition at line 64 of file Phase2TrackerMonitorDigi.h.

Referenced by analyze(), and bookHistograms().

edm::InputTag Phase2TrackerMonitorDigi::itPixelDigiSrc_
private

Definition at line 66 of file Phase2TrackerMonitorDigi.h.

const edm::EDGetTokenT<edm::DetSetVector<PixelDigi> > Phase2TrackerMonitorDigi::itPixelDigiToken_
private

Definition at line 68 of file Phase2TrackerMonitorDigi.h.

Referenced by analyze().

std::map<unsigned int, DigiMEs> Phase2TrackerMonitorDigi::layerMEs
private
edm::InputTag Phase2TrackerMonitorDigi::otDigiSrc_
private

Definition at line 65 of file Phase2TrackerMonitorDigi.h.

const edm::EDGetTokenT<edm::DetSetVector<Phase2TrackerDigi> > Phase2TrackerMonitorDigi::otDigiToken_
private

Definition at line 67 of file Phase2TrackerMonitorDigi.h.

Referenced by analyze().

bool Phase2TrackerMonitorDigi::pixelFlag_
private

Definition at line 63 of file Phase2TrackerMonitorDigi.h.

Referenced by analyze(), and bookLayerHistos().

MonitorElement* Phase2TrackerMonitorDigi::RZOccupancyMap
MonitorElement* Phase2TrackerMonitorDigi::RZPositionMap
edm::ESHandle<TrackerTopology> Phase2TrackerMonitorDigi::tTopoHandle_
private
MonitorElement* Phase2TrackerMonitorDigi::XYOccupancyMap
MonitorElement* Phase2TrackerMonitorDigi::XYPositionMap