CMS 3D CMS Logo

List of all members | Classes | Public Member Functions | Protected Member Functions | Private Member Functions | Private Attributes | Static Private Attributes
CTPPSDiamondDQMSource Class Reference
Inheritance diagram for CTPPSDiamondDQMSource:
DQMOneEDAnalyzer< edm::LuminosityBlockCache< dds::Cache > > edm::one::EDProducer< edm::EndRunProducer, edm::one::WatchRuns, edm::Accumulator, Args... > edm::one::EDProducerBase edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper

Classes

struct  ChannelPlots
 plots related to one Diamond channel More...
 
struct  DiamondShifts
 
struct  GlobalPlots
 plots related to the whole system More...
 
struct  PlanePlots
 plots related to one Diamond plane More...
 
struct  PotPlots
 plots related to one Diamond detector package More...
 
struct  SectorPlots
 plots related to one sector More...
 

Public Member Functions

 CTPPSDiamondDQMSource (const edm::ParameterSet &)
 
- Public Member Functions inherited from DQMOneEDAnalyzer< edm::LuminosityBlockCache< dds::Cache > >
void accumulate (edm::Event const &event, edm::EventSetup const &setup) override
 
void beginRun (edm::Run const &run, edm::EventSetup const &setup) final
 
 DQMOneEDAnalyzer ()
 
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::Accumulator, Args... >
 EDProducer ()=default
 
 EDProducer (const EDProducer &)=delete
 
SerialTaskQueueglobalLuminosityBlocksQueue () final
 
SerialTaskQueueglobalRunsQueue () final
 
bool hasAbilityToProduceInBeginLumis () const final
 
bool hasAbilityToProduceInBeginProcessBlocks () const final
 
bool hasAbilityToProduceInBeginRuns () const final
 
bool hasAbilityToProduceInEndLumis () const final
 
bool hasAbilityToProduceInEndProcessBlocks () const final
 
bool hasAbilityToProduceInEndRuns () const final
 
const EDProduceroperator= (const EDProducer &)=delete
 
bool wantsGlobalLuminosityBlocks () const final
 
bool wantsGlobalRuns () const final
 
bool wantsInputProcessBlocks () const final
 
bool wantsProcessBlocks () 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
 
std::vector< bool > const & recordProvenanceList () 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)
 
TypeLabelList const & typeLabelList () const
 used by the fwk to register the list of products of this module More...
 
 ~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
 
ESResolverIndex const * esGetTokenIndices (edm::Transition iTrans) const
 
std::vector< ESResolverIndex > const & esGetTokenIndicesVector (edm::Transition iTrans) const
 
std::vector< ESRecordIndex > const & esGetTokenRecordIndicesVector (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::array< std::vector< ModuleDescription const *> *, NumBranchTypes > &modulesAll, std::vector< ModuleProcessName > &modulesInPreviousProcesses, 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
 
void selectInputProcessBlocks (ProductRegistry const &productRegistry, ProcessBlockHelperBase const &processBlockHelperBase)
 
ProductResolverIndexAndSkipBit uncheckedIndexFrom (EDGetToken) const
 
void updateLookup (BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet)
 
void updateLookup (eventsetup::ESRecordsToProductResolverIndices const &)
 
virtual ~EDConsumerBase () noexcept(false)
 

Protected Member Functions

void analyze (const edm::Event &, const edm::EventSetup &) override
 
void bookHistograms (DQMStore::IBooker &, const edm::Run &, const edm::EventSetup &) override
 
void dqmBeginRun (const edm::Run &, const edm::EventSetup &) override
 
void dqmEndRun (edm::Run const &, edm::EventSetup const &) override
 
std::shared_ptr< dds::CacheglobalBeginLuminosityBlock (const edm::LuminosityBlock &, const edm::EventSetup &) const override
 
void globalEndLuminosityBlock (const edm::LuminosityBlock &, const edm::EventSetup &) override
 
- Protected Member Functions inherited from edm::ProducerBase
template<Transition Tr = Transition::Event>
auto produces (std::string instanceName) noexcept
 declare what type of product will make and with which optional label More...
 
template<Transition B>
BranchAliasSetter produces (const TypeID &id, std::string instanceName=std::string(), bool recordProvenance=true)
 
template<BranchType B>
BranchAliasSetter produces (const TypeID &id, std::string instanceName=std::string(), bool recordProvenance=true)
 
BranchAliasSetter produces (const TypeID &id, std::string instanceName=std::string(), bool recordProvenance=true)
 
template<typename ProductType , Transition B>
BranchAliasSetterT< ProductType > produces (std::string instanceName)
 
template<class ProductType >
BranchAliasSetterT< ProductType > produces ()
 
template<typename ProductType , BranchType B>
BranchAliasSetterT< ProductType > produces (std::string instanceName)
 
template<typename ProductType , BranchType B>
BranchAliasSetterT< ProductType > produces ()
 
template<class ProductType >
BranchAliasSetterT< ProductType > produces (std::string instanceName)
 
template<typename ProductType , Transition B>
BranchAliasSetterT< ProductType > produces ()
 
template<Transition Tr = Transition::Event>
auto produces () noexcept
 
ProducesCollector producesCollector ()
 
- Protected Member Functions inherited from edm::EDConsumerBase
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
template<BranchType B = InEvent>
EDConsumerBaseAdaptor< Bconsumes (edm::InputTag tag) noexcept
 
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 ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes ()
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes (ESInputTag const &tag)
 
template<Transition Tr = Transition::Event>
constexpr auto esConsumes ()
 
template<Transition Tr = Transition::Event>
auto esConsumes (ESInputTag tag)
 
template<Transition Tr = Transition::Event>
ESGetTokenGeneric esConsumes (eventsetup::EventSetupRecordKey const &iRecord, eventsetup::DataKey const &iKey)
 Used with EventSetupRecord::doGet. More...
 
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)
 
void resetItemsToGetFrom (BranchType iType)
 

Private Member Functions

void checkEventNumber (const CTPPSDiamondDetId &, const TotemFEDInfo &, const TotemVFATStatus &, PotPlots &, int &) const
 

Private Attributes

int centralOOT_
 
std::unordered_map< unsigned int, ChannelPlotschannelPlots_
 
edm::ESGetToken< CTPPSGeometry, VeryForwardRealGeometryRecordctppsGeometryEventToken_
 
edm::ESGetToken< CTPPSGeometry, VeryForwardRealGeometryRecordctppsGeometryRunToken_
 
std::unordered_map< CTPPSDetId, DiamondShiftsdiamShifts_
 
int EC_difference_45_
 
int EC_difference_56_
 
bool excludeMultipleHits_
 
const bool extract_digi_info_
 
GlobalPlots globalPlot_
 
bool perLSsaving_
 
std::unordered_map< unsigned int, PlanePlotsplanePlots_
 
const bool plotOffline_
 
const bool plotOnline_
 
std::unordered_map< unsigned int, PotPlotspotPlots_
 
std::vector< std::pair< edm::EventRange, int > > runParameters_
 
std::unordered_map< unsigned int, SectorPlotssectorPlots_
 
edm::EDGetTokenT< edm::DetSetVector< CTPPSDiamondRecHit > > tokenDiamondHit_
 
edm::EDGetTokenT< edm::DetSetVector< CTPPSDiamondLocalTrack > > tokenDiamondTrack_
 
edm::EDGetTokenT< edm::DetSetVector< CTPPSDiamondDigi > > tokenDigi_
 
edm::EDGetTokenT< std::vector< TotemFEDInfo > > tokenFEDInfo_
 
edm::EDGetTokenT< edm::DetSetVector< CTPPSPixelLocalTrack > > tokenPixelTrack_
 
edm::EDGetTokenT< edm::DetSetVector< TotemVFATStatus > > tokenStatus_
 
unsigned int trackCorrelationThreshold_
 
unsigned int verbosity_
 
unsigned int windowsNum_
 

Static Private Attributes

static constexpr unsigned short CHANNEL_OF_VFAT_CLOCK = 30
 Channel ID of the VFAT that contains clock data. More...
 
static constexpr unsigned short CTPPS_DIAMOND_NUM_OF_CHANNELS = 12
 
static constexpr unsigned short CTPPS_FAR_RP_ID = 3
 
static constexpr unsigned short CTPPS_FED_ID_45 = 583
 
static constexpr unsigned short CTPPS_FED_ID_56 = 582
 
static constexpr unsigned short CTPPS_PIXEL_STATION_ID = 2
 
static constexpr double DISPLAY_RESOLUTION_FOR_HITS_MM = 0.1
 Bin width of histograms showing hits and tracks (in mm) More...
 
static constexpr unsigned int FIRST_RUN_W_PIXELS = 300000
 Number of OOT indices monitored. More...
 
static constexpr unsigned short HPTDC_0_CHANNEL = 6
 
static constexpr unsigned short HPTDC_1_CHANNEL = 7
 
static constexpr double HPTDC_BIN_WIDTH_NS = 25. / 1024
 ns per HPTDC bin More...
 
static constexpr double INV_DISPLAY_RESOLUTION_FOR_HITS_MM = 1. / DISPLAY_RESOLUTION_FOR_HITS_MM
 
static constexpr double SEC_PER_LUMI_SECTION = 23.31
 Number of seconds per lumisection: used to compute hit rates in Hz. More...
 

Additional Inherited Members

- Public Types inherited from DQMOneEDAnalyzer< edm::LuminosityBlockCache< dds::Cache > >
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
template<typename T >
using BranchAliasSetterT = ProductRegistryHelper::BranchAliasSetterT< T >
 
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 Attributes inherited from DQMOneEDAnalyzer< edm::LuminosityBlockCache< dds::Cache > >
edm::EDPutTokenT< DQMTokenrunToken_
 

Detailed Description

Definition at line 71 of file CTPPSDiamondDQMSource.cc.

Constructor & Destructor Documentation

◆ CTPPSDiamondDQMSource()

CTPPSDiamondDQMSource::CTPPSDiamondDQMSource ( const edm::ParameterSet ps)

Definition at line 587 of file CTPPSDiamondDQMSource.cc.

References extract_digi_info_, edm::ParameterSet::getParameter(), edm::ParameterSet::getUntrackedParameter(), muonDTDigis_cfi::pset, runParameters_, tokenDigi_, tokenFEDInfo_, and tokenStatus_.

588  : perLSsaving_(ps.getUntrackedParameter<bool>("perLSsaving", false)),
590  ps.getUntrackedParameter<edm::InputTag>("tagPixelLocalTracks"))),
592  ps.getUntrackedParameter<edm::InputTag>("tagDiamondRecHits"))),
594  ps.getUntrackedParameter<edm::InputTag>("tagDiamondLocalTracks"))),
595  ctppsGeometryRunToken_(esConsumes<CTPPSGeometry, VeryForwardRealGeometryRecord, edm::Transition::BeginRun>()),
596  ctppsGeometryEventToken_(esConsumes<CTPPSGeometry, VeryForwardRealGeometryRecord>()),
597  // ctppsLhcInfoToken_(esConsumes<LHCInfo, LHCInfoRcd>()),
598  excludeMultipleHits_(ps.getParameter<bool>("excludeMultipleHits")),
599  extract_digi_info_(ps.getParameter<bool>("extractDigiInfo")),
600  centralOOT_(-999),
601  verbosity_(ps.getUntrackedParameter<unsigned int>("verbosity", 0)),
602  plotOnline_(ps.getUntrackedParameter<bool>("plotOnline", true)),
603  plotOffline_(ps.getUntrackedParameter<bool>("plotOffline", false)),
604  windowsNum_(ps.getUntrackedParameter<unsigned int>("windowsNum", 3)),
605  trackCorrelationThreshold_(ps.getUntrackedParameter<unsigned int>("trackCorrelationThreshold", 3)),
606  EC_difference_56_(-500),
607  EC_difference_45_(-500) {
608  if (extract_digi_info_) {
609  tokenStatus_ = consumes<edm::DetSetVector<TotemVFATStatus>>(ps.getUntrackedParameter<edm::InputTag>("tagStatus"));
610  tokenFEDInfo_ = consumes<std::vector<TotemFEDInfo>>(ps.getUntrackedParameter<edm::InputTag>("tagFEDInfo"));
611  tokenDigi_ = consumes<edm::DetSetVector<CTPPSDiamondDigi>>(ps.getUntrackedParameter<edm::InputTag>("tagDigi"));
612  }
613  for (const auto& pset : ps.getParameter<std::vector<edm::ParameterSet>>("offsetsOOT")) {
614  runParameters_.emplace_back(
615  std::make_pair(pset.getParameter<edm::EventRange>("validityRange"), pset.getParameter<int>("centralOOT")));
616  }
617 }
edm::EDGetTokenT< edm::DetSetVector< CTPPSDiamondRecHit > > tokenDiamondHit_
T getParameter(std::string const &) const
Definition: ParameterSet.h:307
edm::ESGetToken< CTPPSGeometry, VeryForwardRealGeometryRecord > ctppsGeometryRunToken_
edm::EDGetTokenT< std::vector< TotemFEDInfo > > tokenFEDInfo_
edm::ESGetToken< CTPPSGeometry, VeryForwardRealGeometryRecord > ctppsGeometryEventToken_
edm::EDGetTokenT< edm::DetSetVector< CTPPSDiamondLocalTrack > > tokenDiamondTrack_
edm::EDGetTokenT< edm::DetSetVector< CTPPSPixelLocalTrack > > tokenPixelTrack_
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
T getUntrackedParameter(std::string const &, T const &) const
std::vector< std::pair< edm::EventRange, int > > runParameters_
edm::EDGetTokenT< edm::DetSetVector< CTPPSDiamondDigi > > tokenDigi_
edm::EDGetTokenT< edm::DetSetVector< TotemVFATStatus > > tokenStatus_

Member Function Documentation

◆ analyze()

void CTPPSDiamondDQMSource::analyze ( const edm::Event event,
const edm::EventSetup iSetup 
)
overrideprotectedvirtual

Reimplemented from DQMOneEDAnalyzer< edm::LuminosityBlockCache< dds::Cache > >.

Definition at line 706 of file CTPPSDiamondDQMSource.cc.

References CTPPSDetId::arm(), centralOOT_, CHANNEL_OF_VFAT_CLOCK, channelAlignedWithTrack(), channelPlots_, checkEventNumber(), CTPPS_FAR_RP_ID, CTPPS_FED_ID_45, CTPPS_FED_ID_56, CTPPS_PIXEL_STATION_ID, ctppsGeometryEventToken_, hcalRecHitTable_cff::detId, diamShifts_, EC_difference_45_, EC_difference_56_, HPTDCErrorFlags::errorId(), excludeMultipleHits_, extract_digi_info_, HcalObjRepresent::Fill(), edm::EventSetup::getData(), HPTDC_0_CHANNEL, HPTDC_1_CHANNEL, HPTDC_BIN_WIDTH_NS, mps_fire::i, edm::eventsetup::heterocontainer::insert(), INV_DISPLAY_RESOLUTION_FOR_HITS_MM, edm::HandleBase::isValid(), perLSsaving_, BeamSpotProblemMonitor_cff::pixelTracks, planePlots_, plotOffline_, plotOnline_, potPlots_, HI_PhotonSkim_cff::rechits, sectorPlots_, edm::shift, mps_update::status, CTPPSDiamondRecHit::TIMESLICE_WITHOUT_LEADING, tokenDiamondHit_, tokenDiamondTrack_, tokenDigi_, tokenFEDInfo_, tokenPixelTrack_, tokenStatus_, HLT_2023v12_cff::track, trackCorrelationThreshold_, pwdgSkimBPark_cfi::tracks, validateGeometry_cfg::valid, verbosity_, windowsNum_, and y.

706  {
707  // get event data
708 
712  if (extract_digi_info_) {
713  event.getByToken(tokenStatus_, diamondVFATStatus);
714  event.getByToken(tokenDigi_, diamondDigis);
715  event.getByToken(tokenFEDInfo_, fedInfo);
716  }
717 
719  event.getByToken(tokenPixelTrack_, pixelTracks);
720 
722  event.getByToken(tokenDiamondHit_, diamondRecHits);
723 
725  event.getByToken(tokenDiamondTrack_, diamondLocalTracks);
726 
727  const CTPPSGeometry* ctppsGeometry = &iSetup.getData(ctppsGeometryEventToken_);
728  // const LHCInfo* hLhcInfo = &iSetup.getData(ctppsLhcInfoToken_);
729 
730  // check validity
731  bool valid = true;
732  if (extract_digi_info_) { // drop DIGI-level validity checks if not monitored
733  valid &= diamondVFATStatus.isValid();
734  valid &= diamondDigis.isValid();
735  valid &= fedInfo.isValid();
736  }
737  valid &= pixelTracks.isValid();
738  valid &= diamondRecHits.isValid();
739  valid &= diamondLocalTracks.isValid();
740 
741  if (!valid) {
742  if (verbosity_)
743  edm::LogProblem("CTPPSDiamondDQMSource")
744  << "ERROR in CTPPSDiamondDQMSource::analyze > some of the required inputs are not valid. Skipping this "
745  "event.\n"
746  << " DIGI-level: (checked? " << std::boolalpha << extract_digi_info_ << ")\n"
747  << " diamondVFATStatus.isValid = " << diamondVFATStatus.isValid() << "\n"
748  << " diamondDigis.isValid = " << diamondDigis.isValid() << "\n"
749  << " fedInfo.isValid = " << fedInfo.isValid() << "\n"
750  << " RECO-level:\n"
751  << " pixelTracks.isValid = " << pixelTracks.isValid() << "\n"
752  << " diamondRecHits.isValid = " << diamondRecHits.isValid() << "\n"
753  << " diamondLocalTracks.isValid = " << diamondLocalTracks.isValid();
754  return;
755  }
756 
757  //------------------------------
758  // Sector Plots
759  //------------------------------
760  // Using CTPPSDiamondLocalTrack
761  if (plotOffline_)
762  for (const auto& tracks : *diamondLocalTracks) {
763  const CTPPSDiamondDetId detId_near(tracks.detId());
764 
765  for (const auto& track : tracks) {
766  if (!track.isValid())
767  continue;
768  if (potPlots_.count(detId_near.rpId()) == 0)
769  continue;
770  TH1F* trackHistoInTimeTmp = potPlots_[detId_near.rpId()].trackDistribution->getTH1F();
771  int startBin_near =
772  trackHistoInTimeTmp->FindBin(track.x0() - diamShifts_[detId_near.rpId()].global - track.x0Sigma());
773  int numOfBins_near = 2 * track.x0Sigma() * INV_DISPLAY_RESOLUTION_FOR_HITS_MM;
774 
775  for (const auto& tracks_far : *diamondLocalTracks) {
776  CTPPSDiamondDetId detId_far(tracks_far.detId());
777  if (detId_near.arm() != detId_far.arm() || detId_near.station() == detId_far.station())
778  continue;
779  for (const auto& track_far : tracks_far) {
780  if (!track.isValid())
781  continue;
782  if (sectorPlots_.count(detId_far.armId()) == 0)
783  continue;
784  TH2F* trackHistoTmp = sectorPlots_[detId_far.armId()].trackCorrelation->getTH2F();
785  TAxis* trackHistoTmpXAxis = trackHistoTmp->GetXaxis();
786  TAxis* trackHistoTmpYAxis = trackHistoTmp->GetYaxis();
787  int startBin_far = trackHistoTmpYAxis->FindBin(track_far.x0() - diamShifts_[detId_far.rpId()].global -
788  track_far.x0Sigma());
789  int numOfBins_far = 2 * track_far.x0Sigma() * INV_DISPLAY_RESOLUTION_FOR_HITS_MM;
790  for (int i = 0; i < numOfBins_near; ++i)
791  for (int y = 0; y < numOfBins_far; ++y) {
792  trackHistoTmp->Fill(trackHistoTmpXAxis->GetBinCenter(startBin_near + i),
793  trackHistoTmpYAxis->GetBinCenter(startBin_far + y));
794  if (tracks.size() < 3 && tracks_far.size() < trackCorrelationThreshold_)
795  sectorPlots_[detId_far.armId()].trackCorrelationLowMultiplicity->Fill(
796  trackHistoTmpXAxis->GetBinCenter(startBin_near + i),
797  trackHistoTmpYAxis->GetBinCenter(startBin_far + y));
798  }
799  }
800  }
801  }
802  }
803 
804  //------------------------------
805  // RP Plots
806  //------------------------------
807 
808  //------------------------------
809  // Correlation Plots
810  //------------------------------
811 
812  if (extract_digi_info_) {
813  // Using CTPPSDiamondDigi
814  for (const auto& digis : *diamondDigis) {
815  const CTPPSDiamondDetId detId(digis.detId()), detId_pot(detId.rpId());
816  for (const auto& digi : digis) {
817  if (detId.channel() == CHANNEL_OF_VFAT_CLOCK)
818  continue;
819  if (potPlots_.count(detId_pot) == 0)
820  continue;
821  //Leading without trailing investigation
822  if (digi.leadingEdge() != 0 || digi.trailingEdge() != 0) {
823  ++potPlots_[detId_pot].HitCounter;
824  if (digi.leadingEdge() != 0) {
825  potPlots_[detId_pot].leadingEdgeCumulative_all->Fill(HPTDC_BIN_WIDTH_NS * digi.leadingEdge());
826  }
827  if (digi.leadingEdge() != 0 && digi.trailingEdge() == 0) {
828  ++potPlots_[detId_pot].LeadingOnlyCounter;
829  potPlots_[detId_pot].leadingEdgeCumulative_le->Fill(HPTDC_BIN_WIDTH_NS * digi.leadingEdge());
830  }
831  if (digi.leadingEdge() == 0 && digi.trailingEdge() != 0) {
832  ++potPlots_[detId_pot].TrailingOnlyCounter;
833  potPlots_[detId_pot].trailingEdgeCumulative_te->Fill(HPTDC_BIN_WIDTH_NS * digi.trailingEdge());
834  }
835  if (digi.leadingEdge() != 0 && digi.trailingEdge() != 0) {
836  ++potPlots_[detId_pot].CompleteCounter;
837  // potPlots_[detId_pot].leadingTrailingCorrelationPot->Fill(HPTDC_BIN_WIDTH_NS * digi.leadingEdge(),
838  // HPTDC_BIN_WIDTH_NS * digi.trailingEdge());
839  }
840  }
841 
842  // HPTDC Errors
843  const HPTDCErrorFlags hptdcErrors = digi.hptdcErrorFlags();
844  if (detId.channel() == HPTDC_0_CHANNEL ||
845  detId.channel() == HPTDC_1_CHANNEL) { // ch6 for HPTDC 0 and ch7 for HPTDC 1
846  int verticalIndex = 2 * detId.plane() + (detId.channel() - HPTDC_0_CHANNEL);
847  for (unsigned short hptdcErrorIndex = 1; hptdcErrorIndex < 16; ++hptdcErrorIndex)
848  if (hptdcErrors.errorId(hptdcErrorIndex - 1))
849  potPlots_[detId_pot].HPTDCErrorFlags_2D->Fill(hptdcErrorIndex, verticalIndex);
850  }
851  if (digi.multipleHit())
852  ++potPlots_[detId_pot].MHCounter;
853  }
854  }
855  }
856 
857  // EC Errors
858  if (extract_digi_info_) {
859  for (const auto& vfat_status : *diamondVFATStatus) {
860  const CTPPSDiamondDetId detId(vfat_status.detId());
861  for (const auto& status : vfat_status) {
862  if (!status.isOK())
863  continue;
864  if (potPlots_.count(detId.rpId()) == 0)
865  continue;
866  if (channelPlots_.count(detId) == 0)
867  continue;
868 
869  // Check Event Number
870  for (const auto& optorx : *fedInfo) {
871  if (detId.arm() == 1 && optorx.fedId() == CTPPS_FED_ID_56)
873  else if (detId.arm() == 0 && optorx.fedId() == CTPPS_FED_ID_45)
875  }
876  }
877  }
878  }
879 
880  // Using CTPPSDiamondRecHit
881  std::unordered_map<unsigned int, std::set<unsigned int>> planes;
882  std::unordered_map<unsigned int, std::set<unsigned int>> planes_inclusive;
883 
884  auto lumiCache = luminosityBlockCache(event.getLuminosityBlock().index());
885  for (const auto& rechits : *diamondRecHits) {
886  const CTPPSDiamondDetId detId(rechits.detId()), detId_pot(detId.rpId());
887  const auto& x_shift = diamShifts_.at(detId_pot);
888 
889  for (const auto& rechit : rechits) {
890  planes_inclusive[detId_pot].insert(detId.plane());
891  if (excludeMultipleHits_ && rechit.multipleHits() > 0)
892  continue;
893  if (rechit.toT() != 0 && centralOOT_ != -999 && rechit.ootIndex() == centralOOT_)
894  planes[detId_pot].insert(detId.plane());
895 
896  if (potPlots_.count(detId_pot) == 0)
897  continue;
898 
899  potPlots_[detId_pot].recHitTime->Fill(rechit.time());
900 
901  float UFSDShift = 0.0;
902  if (rechit.yWidth() < 3)
903  UFSDShift = 0.5; // Display trick for UFSD that have 2 pixels with same X
904 
905  if (rechit.toT() != 0 && centralOOT_ != -999 && rechit.ootIndex() == centralOOT_) {
906  TH2F* hitHistoTmp = potPlots_[detId_pot].hitDistribution2d->getTH2F();
907  TAxis* hitHistoTmpYAxis = hitHistoTmp->GetYaxis();
908  int startBin = hitHistoTmpYAxis->FindBin(rechit.x() - x_shift.global - 0.5 * rechit.xWidth());
909  int numOfBins = rechit.xWidth() * INV_DISPLAY_RESOLUTION_FOR_HITS_MM;
910  for (int i = 0; i < numOfBins; ++i)
911  hitHistoTmp->Fill(detId.plane() + UFSDShift, hitHistoTmpYAxis->GetBinCenter(startBin + i));
912 
913  if (!perLSsaving_ && plotOnline_) {
914  hitHistoTmp = lumiCache->hitDistribution2dMap[detId_pot].get();
915  hitHistoTmpYAxis = hitHistoTmp->GetYaxis();
916  startBin = hitHistoTmpYAxis->FindBin(rechit.x() - x_shift.global - 0.5 * rechit.xWidth());
917  numOfBins = rechit.xWidth() * INV_DISPLAY_RESOLUTION_FOR_HITS_MM;
918  for (int i = 0; i < numOfBins; ++i)
919  hitHistoTmp->Fill(detId.plane() + UFSDShift, hitHistoTmpYAxis->GetBinCenter(startBin + i));
920  }
921  }
922 
923  if (rechit.toT() > 0) {
924  // Both
925  potPlots_[detId_pot].leadingEdgeCumulative_both->Fill(rechit.time() + 25 * rechit.ootIndex());
926  potPlots_[detId_pot].timeOverThresholdCumulativePot->Fill(rechit.toT());
927 
928  TH2F* hitHistoOOTTmp = potPlots_[detId_pot].hitDistribution2dOOT->getTH2F();
929  TAxis* hitHistoOOTTmpYAxis = hitHistoOOTTmp->GetYaxis();
930  int startBin = hitHistoOOTTmpYAxis->FindBin(rechit.x() - x_shift.global - 0.5 * rechit.xWidth());
931  int numOfBins = rechit.xWidth() * INV_DISPLAY_RESOLUTION_FOR_HITS_MM;
932  for (int i = 0; i < numOfBins; ++i)
933  hitHistoOOTTmp->Fill(detId.plane() + 1. / windowsNum_ * rechit.ootIndex(),
934  hitHistoOOTTmpYAxis->GetBinCenter(startBin + i));
935 
936  } else if (rechit.ootIndex() != CTPPSDiamondRecHit::TIMESLICE_WITHOUT_LEADING && plotOnline_) {
937  // Only leading
938  TH2F* hitHistoOOTTmp = potPlots_[detId_pot].hitDistribution2dOOT_le->getTH2F();
939  TAxis* hitHistoOOTTmpYAxis = hitHistoOOTTmp->GetYaxis();
940  int startBin = hitHistoOOTTmpYAxis->FindBin(rechit.x() - x_shift.global - 0.5 * rechit.xWidth());
941  int numOfBins = rechit.xWidth() * INV_DISPLAY_RESOLUTION_FOR_HITS_MM;
942  for (int i = 0; i < numOfBins; ++i)
943  hitHistoOOTTmp->Fill(detId.plane() + 1. / windowsNum_ * rechit.ootIndex(),
944  hitHistoOOTTmpYAxis->GetBinCenter(startBin + i));
945  }
946  if (rechit.ootIndex() != CTPPSDiamondRecHit::TIMESLICE_WITHOUT_LEADING &&
947  potPlots_[detId_pot].activity_per_bx.count(rechit.ootIndex()) > 0)
948  potPlots_[detId_pot].activity_per_bx.at(rechit.ootIndex())->Fill(event.bunchCrossing());
949 
950  // if(plotOffline_)
951  // potPlots_[detId_pot].TOTVsLS->Fill(event.luminosityBlock(),rechit.toT());
952  }
953  }
954 
955  for (const auto& plt : potPlots_) {
956  plt.second.activePlanes->Fill(planes[plt.first].size());
957  if (plotOnline_)
958  plt.second.activePlanesInclusive->Fill(planes_inclusive[plt.first].size());
959  }
960 
961  // Using CTPPSDiamondLocalTrack
962  for (const auto& tracks : *diamondLocalTracks) {
963  const CTPPSDiamondDetId detId(tracks.detId()), detId_pot(detId.rpId());
964  const auto& x_shift = diamShifts_.at(detId_pot);
965 
966  for (const auto& track : tracks) {
967  if (!track.isValid())
968  continue;
970  continue;
971  if (excludeMultipleHits_ && track.multipleHits() > 0)
972  continue;
973  if (potPlots_.count(detId_pot) == 0)
974  continue;
975 
976  TH2F* trackHistoOOTTmp = potPlots_[detId_pot].trackDistributionOOT->getTH2F();
977  TAxis* trackHistoOOTTmpYAxis = trackHistoOOTTmp->GetYaxis();
978  int startBin = trackHistoOOTTmpYAxis->FindBin(track.x0() - x_shift.global - track.x0Sigma());
979  int numOfBins = 2 * track.x0Sigma() * INV_DISPLAY_RESOLUTION_FOR_HITS_MM;
980  for (int i = 0; i < numOfBins; ++i)
981  trackHistoOOTTmp->Fill(track.ootIndex(), trackHistoOOTTmpYAxis->GetBinCenter(startBin + i));
982 
983  if (centralOOT_ != -999 && track.ootIndex() == centralOOT_) {
984  TH1F* trackHistoInTimeTmp = potPlots_[detId_pot].trackDistribution->getTH1F();
985  int startBin = trackHistoInTimeTmp->FindBin(track.x0() - x_shift.global - track.x0Sigma());
986  int numOfBins = 2 * track.x0Sigma() * INV_DISPLAY_RESOLUTION_FOR_HITS_MM;
987  for (int i = 0; i < numOfBins; ++i)
988  trackHistoInTimeTmp->Fill(trackHistoInTimeTmp->GetBinCenter(startBin + i));
989  }
990  if (plotOffline_ && !perLSsaving_) {
991  // potPlots_[detId_pot].trackTimeVsLS->Fill(event.luminosityBlock(),track.time());
992  potPlots_[detId_pot].trackTimeVsBX->Fill(event.bunchCrossing(), track.time());
993  //potPlots_[detId_pot].trackTimeVsXAngle->Fill(hLhcInfo->crossingAngle(), track.time());
994  }
995  }
996  }
997 
998  // Channel efficiency using CTPPSDiamondLocalTrack
999  for (const auto& tracks : *diamondLocalTracks) {
1000  const CTPPSDiamondDetId detId(tracks.detId()), detId_pot(detId.rpId());
1001  for (const auto& track : tracks) {
1002  // Find hits and planes in the track
1003  int numOfHits = 0;
1004  std::set<int> planesInTrackSet;
1005  for (const auto& vec : *diamondRecHits) {
1006  const CTPPSDiamondDetId detid(vec.detId());
1007  if (detid.arm() != detId_pot.arm())
1008  continue;
1009 
1010  for (const auto& hit : vec) {
1011  // first check if the hit contributes to the track
1012  if (track.containsHit(hit)) {
1013  ++numOfHits;
1014  planesInTrackSet.insert(detid.plane());
1015  }
1016  }
1017  }
1018 
1019  if (numOfHits > 0 && numOfHits <= 10 && planesInTrackSet.size() > 2) {
1020  for (const auto& plt_vs_ch : channelPlots_) { // loop over all channels registered in geometry
1021  const CTPPSDiamondDetId detId(plt_vs_ch.first);
1022  if (detId.rpId() != detId_pot)
1023  continue;
1024  const unsigned short map_index = detId.plane() * 100 + detId.channel();
1025  if (potPlots_[detId_pot].effDoublecountingChMap.count(map_index) == 0) {
1026  potPlots_[detId_pot].effTriplecountingChMap[map_index] = 0;
1027  potPlots_[detId_pot].effDoublecountingChMap[map_index] = 0;
1028  }
1029  if (channelAlignedWithTrack(ctppsGeometry, detId, track, 0.2)) {
1030  // Channel should fire
1031  ++potPlots_[detId_pot].effDoublecountingChMap[map_index];
1032  for (const auto& rechits : *diamondRecHits) {
1033  const CTPPSDiamondDetId detId_hit(rechits.detId());
1034  if (detId_hit == detId)
1035  for (const auto& rechit : rechits)
1036  if (track.containsHit(rechit, 1)) // Channel fired
1037  ++potPlots_[detId_pot].effTriplecountingChMap[map_index];
1038  }
1039  }
1040  }
1041  }
1042  }
1043  }
1044 
1045  // Tomography of diamonds using pixel
1046  for (const auto& rechits : *diamondRecHits) {
1047  const CTPPSDiamondDetId detId(rechits.detId()), detId_pot(detId.rpId());
1048  const auto pix_shift = diamShifts_.at(detId_pot).withPixels;
1049  for (const auto& rechit : rechits) {
1050  if (excludeMultipleHits_ && rechit.multipleHits() > 0)
1051  continue;
1052  if (rechit.toT() == 0)
1053  continue;
1054  if (!pixelTracks.isValid())
1055  continue;
1056  if (potPlots_.count(detId_pot) == 0)
1057  continue;
1058 
1059  for (const auto& ds : *pixelTracks) {
1060  if (ds.size() > 1)
1061  continue;
1062  const CTPPSPixelDetId pixId(ds.detId());
1063  if (pixId.station() != CTPPS_PIXEL_STATION_ID || pixId.rp() != CTPPS_FAR_RP_ID)
1064  continue;
1065  for (const auto& lt : ds) {
1066  if (lt.isValid() && pixId.arm() == detId_pot.arm()) {
1067  if (rechit.ootIndex() != CTPPSDiamondRecHit::TIMESLICE_WITHOUT_LEADING && rechit.ootIndex() >= 0 &&
1068  potPlots_[detId_pot].pixelTomographyAll.count(rechit.ootIndex()) > 0 && lt.x0() - pix_shift < 24)
1069  potPlots_[detId_pot]
1070  .pixelTomographyAll.at(rechit.ootIndex())
1071  ->Fill(lt.x0() - pix_shift + 25 * detId.plane(), lt.y0());
1072  }
1073  }
1074  }
1075  }
1076  }
1077 
1078  //------------------------------
1079  // Clock Plots
1080  //------------------------------
1081  // Commented out to save space in the DQM files, but code should be kept
1082  // for ( const auto& digis : *diamondDigis ) {
1083  // const CTPPSDiamondDetId detId(digis.detId()), detId_pot(detId.rpId());
1084  // if ( detId.channel() == CHANNEL_OF_VFAT_CLOCK ) {
1085  // for ( const auto& digi : digis ) {
1086  // if ( digi.leadingEdge() != 0 ) {
1087  // if ( detId.plane() == 1 ) {
1088  // potPlots_[detId_pot].clock_Digi1_le->Fill( HPTDC_BIN_WIDTH_NS * digi.leadingEdge() );
1089  // potPlots_[detId_pot].clock_Digi1_te->Fill( HPTDC_BIN_WIDTH_NS * digi.trailingEdge() );
1090  // }
1091  // if ( detId.plane() == 3 ) {
1092  // potPlots_[detId_pot].clock_Digi3_le->Fill( HPTDC_BIN_WIDTH_NS * digi.leadingEdge() );
1093  // potPlots_[detId_pot].clock_Digi3_te->Fill( HPTDC_BIN_WIDTH_NS * digi.trailingEdge() );
1094  // }
1095  // }
1096  // }
1097  // }
1098  // }
1099 
1100  //------------------------------
1101  // Plane Plots
1102  //------------------------------
1103 
1104  // Using CTPPSDiamondDigi
1105  std::unordered_map<unsigned int, unsigned int> channelsPerPlane;
1106  if (extract_digi_info_) {
1107  for (const auto& digis : *diamondDigis) {
1108  const CTPPSDiamondDetId detId(digis.detId()), detId_plane(detId.planeId());
1109  for (const auto& digi : digis) {
1110  if (detId.channel() == CHANNEL_OF_VFAT_CLOCK)
1111  continue;
1112  if (planePlots_.count(detId_plane) == 0)
1113  continue;
1114 
1115  if (digi.leadingEdge() != 0) {
1116  planePlots_[detId_plane].digiProfileCumulativePerPlane->Fill(detId.channel());
1117  channelsPerPlane[detId_plane]++;
1118  }
1119  }
1120  }
1121  }
1122 
1123  for (const auto& plt : channelsPerPlane)
1124  planePlots_[plt.first].hit_multiplicity->Fill(plt.second);
1125 
1126  // Using CTPPSDiamondRecHit
1127  for (const auto& rechits : *diamondRecHits) {
1128  const CTPPSDiamondDetId detId(rechits.detId()), detId_plane(detId.planeId()), detId_pot(detId.rpId());
1129  for (const auto& rechit : rechits) {
1130  if (excludeMultipleHits_ && rechit.multipleHits() > 0)
1131  continue;
1132  if (rechit.toT() == 0)
1133  continue;
1134  if (planePlots_.count(detId_plane) != 0) {
1135  if (centralOOT_ != -999 && rechit.ootIndex() == centralOOT_) {
1136  TH1F* hitHistoTmp = planePlots_[detId_plane].hitProfile->getTH1F();
1137  int startBin = hitHistoTmp->FindBin(rechit.x() - diamShifts_.at(detId_pot).global - 0.5 * rechit.xWidth());
1138  int numOfBins = rechit.xWidth() * INV_DISPLAY_RESOLUTION_FOR_HITS_MM;
1139  for (int i = 0; i < numOfBins; ++i)
1140  hitHistoTmp->Fill(hitHistoTmp->GetBinCenter(startBin + i));
1141  }
1142  }
1143  }
1144  }
1145 
1146  //Tomography of diamonds using pixel and Efficiency WRT Pixels
1147  for (const auto& ds : *pixelTracks) {
1148  const CTPPSPixelDetId pixId(ds.detId());
1149  if (pixId.station() != CTPPS_PIXEL_STATION_ID || pixId.rp() != CTPPS_FAR_RP_ID)
1150  continue;
1151  if (ds.size() > 1)
1152  continue;
1153  for (const auto& lt : ds) {
1154  if (lt.isValid()) {
1155  for (const auto& sh_vs_id : diamShifts_) {
1156  const CTPPSDiamondDetId& detId_pot = sh_vs_id.first;
1157  const auto& shift = sh_vs_id.second;
1158  if (detId_pot.arm() == pixId.arm())
1159  // For efficieny
1160  potPlots_[detId_pot].pixelTracksMap.Fill(lt.x0() - shift.withPixels, lt.y0());
1161  }
1162 
1163  std::set<CTPPSDiamondDetId> planesWitHits_set;
1164  for (const auto& rechits : *diamondRecHits) {
1165  const CTPPSDiamondDetId detId(rechits.detId()), detId_plane(detId.planeId()), detId_pot(detId.rpId());
1166  const auto pix_shift = diamShifts_.at(detId_pot).withPixels;
1167  for (const auto& rechit : rechits) {
1168  if (excludeMultipleHits_ && rechit.multipleHits() > 0)
1169  continue;
1170  if (rechit.ootIndex() == CTPPSDiamondRecHit::TIMESLICE_WITHOUT_LEADING || rechit.toT() == 0)
1171  continue;
1172  if (planePlots_.count(detId_plane) == 0)
1173  continue;
1174  if (pixId.arm() == detId_plane.arm() && lt.x0() - pix_shift < 24) {
1175  planePlots_[detId_plane].pixelTomography_far->Fill(lt.x0() - pix_shift + 25 * rechit.ootIndex(), lt.y0());
1176  if (centralOOT_ != -999 && rechit.ootIndex() == centralOOT_)
1177  planesWitHits_set.insert(detId_plane);
1178  }
1179  }
1180  }
1181 
1182  for (auto& planeId : planesWitHits_set)
1183  planePlots_[planeId].pixelTracksMapWithDiamonds.Fill(lt.x0() - diamShifts_.at(planeId.rpId()).withPixels,
1184  lt.y0());
1185  }
1186  }
1187  }
1188 
1189  //------------------------------
1190  // Channel Plots
1191  //------------------------------
1192 
1193  // digi profile cumulative
1194  if (extract_digi_info_) {
1195  for (const auto& digis : *diamondDigis) {
1196  const CTPPSDiamondDetId detId(digis.detId());
1197  for (const auto& digi : digis) {
1198  if (detId.channel() == CHANNEL_OF_VFAT_CLOCK)
1199  continue;
1200  if (channelPlots_.count(detId) != 0) {
1201  // HPTDC Errors
1202  const HPTDCErrorFlags hptdcErrors = digi.hptdcErrorFlags();
1203  for (unsigned short hptdcErrorIndex = 1; hptdcErrorIndex < 16; ++hptdcErrorIndex)
1204  if (hptdcErrors.errorId(hptdcErrorIndex - 1))
1205  channelPlots_[detId].HPTDCErrorFlags->Fill(hptdcErrorIndex);
1206  if (digi.multipleHit())
1207  ++channelPlots_[detId].MHCounter;
1208 
1209  // Check dropped trailing edges
1210  if (digi.leadingEdge() != 0 || digi.trailingEdge() != 0) {
1211  ++channelPlots_[detId].HitCounter;
1212  if (digi.trailingEdge() == 0) {
1213  ++channelPlots_[detId].LeadingOnlyCounter;
1214  channelPlots_[detId].leadingEdgeCumulative_le->Fill(HPTDC_BIN_WIDTH_NS * digi.leadingEdge());
1215  } else if (digi.leadingEdge() == 0) {
1216  ++channelPlots_[detId].TrailingOnlyCounter;
1217  channelPlots_[detId].trailingEdgeCumulative_te->Fill(HPTDC_BIN_WIDTH_NS * digi.trailingEdge());
1218  } else {
1219  ++channelPlots_[detId].CompleteCounter;
1220  // channelPlots_[detId].LeadingTrailingCorrelationPerChannel->Fill(HPTDC_BIN_WIDTH_NS * digi.leadingEdge(),
1221  // HPTDC_BIN_WIDTH_NS * digi.trailingEdge());
1222  }
1223  }
1224  }
1225  }
1226  }
1227  }
1228 
1229  // Using CTPPSDiamondRecHit
1230 
1231  for (const auto& rechits : *diamondRecHits) {
1232  CTPPSDiamondDetId detId(rechits.detId());
1233  for (const auto& rechit : rechits) {
1234  if (excludeMultipleHits_ && rechit.multipleHits() > 0)
1235  continue;
1236  if (channelPlots_.count(detId) != 0) {
1237  channelPlots_[detId].recHitTime->Fill(rechit.time());
1238  if (rechit.ootIndex() != CTPPSDiamondRecHit::TIMESLICE_WITHOUT_LEADING && rechit.toT() != 0) {
1239  channelPlots_[detId].leadingEdgeCumulative_both->Fill(rechit.time() + 25 * rechit.ootIndex());
1240  channelPlots_[detId].TimeOverThresholdCumulativePerChannel->Fill(rechit.toT());
1241  }
1242  ++lumiCache->hitsCounterMap[detId];
1243 
1244  if (rechit.ootIndex() != CTPPSDiamondRecHit::TIMESLICE_WITHOUT_LEADING &&
1245  channelPlots_[detId].activity_per_bx.count(rechit.ootIndex()) > 0)
1246  channelPlots_[detId].activity_per_bx.at(rechit.ootIndex())->Fill(event.bunchCrossing());
1247  }
1248  }
1249  }
1250 
1251  // Tomography of diamonds using pixel
1252  for (const auto& rechits : *diamondRecHits) {
1253  const CTPPSDiamondDetId detId(rechits.detId()), detId_pot(detId.rpId());
1254  const auto shift_pix = diamShifts_.at(detId_pot).withPixels;
1255  for (const auto& rechit : rechits) {
1256  if (excludeMultipleHits_ && rechit.multipleHits() > 0)
1257  continue;
1258  if (rechit.ootIndex() == CTPPSDiamondRecHit::TIMESLICE_WITHOUT_LEADING || rechit.toT() == 0)
1259  continue;
1260  if (!pixelTracks.isValid())
1261  continue;
1262  if (channelPlots_.count(detId) == 0)
1263  continue;
1264 
1265  for (const auto& ds : *pixelTracks) {
1266  const CTPPSPixelDetId pixId(ds.detId());
1267  if (pixId.station() != CTPPS_PIXEL_STATION_ID || pixId.rp() != CTPPS_FAR_RP_ID)
1268  continue;
1269  if (ds.size() > 1)
1270  continue;
1271  for (const auto& lt : ds) {
1272  if (lt.isValid() && pixId.arm() == detId.arm() && lt.x0() - shift_pix < 24)
1273  channelPlots_[detId].pixelTomography_far->Fill(lt.x0() - shift_pix + 25 * rechit.ootIndex(), lt.y0());
1274  }
1275  }
1276  }
1277  }
1278 }
static constexpr unsigned short CTPPS_FED_ID_45
edm::EDGetTokenT< edm::DetSetVector< CTPPSDiamondRecHit > > tokenDiamondHit_
edm::EDGetTokenT< std::vector< TotemFEDInfo > > tokenFEDInfo_
std::unordered_map< CTPPSDetId, DiamondShifts > diamShifts_
T const & getData(const ESGetToken< T, R > &iToken) const noexcept(false)
Definition: EventSetup.h:119
static constexpr unsigned short CTPPS_FAR_RP_ID
uint32_t arm() const
Definition: CTPPSDetId.h:57
static constexpr unsigned short CTPPS_PIXEL_STATION_ID
edm::ESGetToken< CTPPSGeometry, VeryForwardRealGeometryRecord > ctppsGeometryEventToken_
edm::EDGetTokenT< edm::DetSetVector< CTPPSDiamondLocalTrack > > tokenDiamondTrack_
edm::EDGetTokenT< edm::DetSetVector< CTPPSPixelLocalTrack > > tokenPixelTrack_
static constexpr unsigned short HPTDC_0_CHANNEL
edm::EDGetTokenT< edm::DetSetVector< CTPPSDiamondDigi > > tokenDigi_
void Fill(HcalDetId &id, double val, std::vector< TH2F > &depth)
std::unordered_map< unsigned int, ChannelPlots > channelPlots_
edm::EDGetTokenT< edm::DetSetVector< TotemVFATStatus > > tokenStatus_
static constexpr unsigned short CHANNEL_OF_VFAT_CLOCK
Channel ID of the VFAT that contains clock data.
bool errorId(unsigned short id) const
bool insert(Storage &iStorage, ItemType *iItem, const IdTag &iIdTag)
Definition: HCMethods.h:50
The manager class for TOTEM RP geometry.
Definition: CTPPSGeometry.h:30
std::unordered_map< unsigned int, SectorPlots > sectorPlots_
bool channelAlignedWithTrack(const CTPPSGeometry *geom, const CTPPSDiamondDetId &detid, const CTPPSDiamondLocalTrack &localTrack, const float tolerance=1)
bool isValid() const
Definition: HandleBase.h:70
std::unordered_map< unsigned int, PotPlots > potPlots_
static constexpr int TIMESLICE_WITHOUT_LEADING
void checkEventNumber(const CTPPSDiamondDetId &, const TotemFEDInfo &, const TotemVFATStatus &, PotPlots &, int &) const
static constexpr unsigned short CTPPS_FED_ID_56
static constexpr double HPTDC_BIN_WIDTH_NS
ns per HPTDC bin
static constexpr double INV_DISPLAY_RESOLUTION_FOR_HITS_MM
static unsigned int const shift
Detector ID class for CTPPS Timing Diamond detectors. Bits [19:31] : Assigend in CTPPSDetId Calss Bit...
std::unordered_map< unsigned int, PlanePlots > planePlots_
static constexpr unsigned short HPTDC_1_CHANNEL
Definition: event.py:1
Log< level::Error, true > LogProblem

◆ bookHistograms()

void CTPPSDiamondDQMSource::bookHistograms ( DQMStore::IBooker ibooker,
const edm::Run ,
const edm::EventSetup iSetup 
)
overrideprotectedvirtual

Implements DQMOneEDAnalyzer< edm::LuminosityBlockCache< dds::Cache > >.

Definition at line 649 of file CTPPSDiamondDQMSource.cc.

References CTPPSDetId::armId(), dqm::implementation::NavigatorBase::cd(), channelPlots_, CTPPSDiamondDetId::check(), ctppsGeometryRunToken_, relativeConstraints::geom, edm::EventSetup::getData(), globalPlot_, perLSsaving_, CTPPSDiamondDetId::planeId(), planePlots_, plotOffline_, plotOnline_, potPlots_, CTPPSDetId::rpId(), sectorPlots_, dqm::implementation::NavigatorBase::setCurrentFolder(), and windowsNum_.

649  {
650  ibooker.cd();
651  ibooker.setCurrentFolder("CTPPS");
652 
653  globalPlot_ = GlobalPlots(ibooker);
654 
655  // book plots from the geometry
657  for (auto it = geom.beginSensor(); it != geom.endSensor(); ++it) {
658  if (!CTPPSDiamondDetId::check(it->first))
659  continue;
660  // per-channel plots
661  const CTPPSDiamondDetId chId(it->first);
662  if (plotOnline_ && channelPlots_.count(chId) == 0)
663  channelPlots_[chId] = ChannelPlots(ibooker, chId, windowsNum_);
664 
665  // per-plane plots
666  const CTPPSDiamondDetId plId(chId.planeId());
667  if (planePlots_.count(plId) == 0)
668  planePlots_[plId] = PlanePlots(ibooker, plId, windowsNum_);
669  // per-pot plots
670  const CTPPSDiamondDetId rpId(chId.rpId());
671  if (potPlots_.count(rpId) == 0)
672  potPlots_[rpId] = PotPlots(ibooker, rpId, windowsNum_, plotOnline_, plotOffline_, perLSsaving_);
673 
674  // per-sector plots
675  const CTPPSDiamondDetId secId(chId.armId());
676  if (plotOffline_ && sectorPlots_.count(secId) == 0)
677  sectorPlots_[secId] = SectorPlots(ibooker, secId, plotOnline_);
678  }
679 }
edm::ESGetToken< CTPPSGeometry, VeryForwardRealGeometryRecord > ctppsGeometryRunToken_
T const & getData(const ESGetToken< T, R > &iToken) const noexcept(false)
Definition: EventSetup.h:119
virtual void setCurrentFolder(std::string const &fullpath)
Definition: DQMStore.cc:36
std::unordered_map< unsigned int, ChannelPlots > channelPlots_
static bool check(unsigned int raw)
returns true if the raw ID is a PPS-timing one
The manager class for TOTEM RP geometry.
Definition: CTPPSGeometry.h:30
std::unordered_map< unsigned int, SectorPlots > sectorPlots_
std::unordered_map< unsigned int, PotPlots > potPlots_
Detector ID class for CTPPS Timing Diamond detectors. Bits [19:31] : Assigend in CTPPSDetId Calss Bit...
std::unordered_map< unsigned int, PlanePlots > planePlots_

◆ checkEventNumber()

void CTPPSDiamondDQMSource::checkEventNumber ( const CTPPSDiamondDetId detId,
const TotemFEDInfo optorx,
const TotemVFATStatus status,
CTPPSDiamondDQMSource::PotPlots plots,
int &  EC_difference 
) const
private

Definition at line 1355 of file CTPPSDiamondDQMSource.cc.

References funct::abs(), TauDecayModes::dec, hcalRecHitTable_cff::detId, TotemFEDInfo::fedId(), HPTDC_0_CHANNEL, HPTDC_1_CHANNEL, TotemFEDInfo::lv1(), plotOnline_, HLTObjectsMonitor_cfi::plots, mps_update::status, and verbosity_.

Referenced by analyze().

1359  {
1360  const CTPPSDiamondDetId detId_pot(detId.rpId());
1361  if (plotOnline_)
1362  plots.ECCheck->Fill((int)((optorx.lv1() & 0xFF) - ((unsigned int)status.ec() & 0xFF)) & 0xFF);
1363  if ((static_cast<int>((optorx.lv1() & 0xFF) - status.ec()) != EC_difference) &&
1364  (static_cast<uint8_t>((optorx.lv1() & 0xFF) - status.ec()) < 128))
1365  EC_difference = static_cast<int>(optorx.lv1() & 0xFF) - (static_cast<unsigned int>(status.ec()) & 0xFF);
1366  if (EC_difference != 1 && EC_difference != -500 && std::abs(EC_difference) < 127) {
1367  if (detId.channel() == HPTDC_0_CHANNEL || detId.channel() == HPTDC_1_CHANNEL)
1368  plots.HPTDCErrorFlags_2D->Fill(16, 2 * detId.plane() + (detId.channel() - HPTDC_0_CHANNEL));
1369  if (verbosity_)
1370  edm::LogProblem("CTPPSDiamondDQMSource")
1371  << "FED " << optorx.fedId() << ": ECError at EV: 0x" << std::hex << optorx.lv1() << "\t\tVFAT EC: 0x"
1372  << static_cast<unsigned int>(status.ec()) << "\twith ID: " << std::dec << detId
1373  << "\tdiff: " << EC_difference;
1374  }
1375 }
static constexpr unsigned short HPTDC_0_CHANNEL
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
int fedId() const
Definition: TotemFEDInfo.h:22
uint32_t lv1() const
Definition: TotemFEDInfo.h:26
Detector ID class for CTPPS Timing Diamond detectors. Bits [19:31] : Assigend in CTPPSDetId Calss Bit...
static constexpr unsigned short HPTDC_1_CHANNEL
Log< level::Error, true > LogProblem

◆ dqmBeginRun()

void CTPPSDiamondDQMSource::dqmBeginRun ( const edm::Run iRun,
const edm::EventSetup iSetup 
)
overrideprotectedvirtual

Reimplemented from DQMOneEDAnalyzer< edm::LuminosityBlockCache< dds::Cache > >.

Definition at line 621 of file CTPPSDiamondDQMSource.cc.

References CTPPSDetId::arm(), centralOOT_, CTPPSDiamondDetId::check(), edm::contains(), CTPPS_FAR_RP_ID, CTPPS_PIXEL_STATION_ID, ctppsGeometryRunToken_, diamShifts_, FIRST_RUN_W_PIXELS, relativeConstraints::geom, edm::EventSetup::getData(), edm::RunBase::run(), and runParameters_.

621  {
622  centralOOT_ = -999;
623  for (const auto& oot : runParameters_) {
624  if (edm::contains(oot.first, edm::EventID(iRun.run(), 0, 1))) {
625  centralOOT_ = oot.second;
626  break;
627  }
628  }
629 
630  // Get detector shifts from the geometry
632  for (auto it = geom.beginRP(); it != geom.endRP(); ++it)
633  if (CTPPSDiamondDetId::check(it->first)) {
634  const CTPPSDiamondDetId diam_id(it->first);
635  const auto diam = geom.sensor(it->first);
636  diamShifts_[diam_id].global = diam->translation().x() - diam->getDiamondDimensions().xHalfWidth;
637  if (iRun.run() > FIRST_RUN_W_PIXELS) { // pixel installed
638  const CTPPSPixelDetId pixid(diam_id.arm(), CTPPS_PIXEL_STATION_ID, CTPPS_FAR_RP_ID);
639  auto pix = geom.sensor(pixid);
640  // Rough alignement of pixel detector for diamond tomography
641  diamShifts_[diam_id].withPixels =
642  pix->translation().x() - pix->getDiamondDimensions().xHalfWidth - diamShifts_[diam_id].global - 1.;
643  }
644  }
645 }
edm::ESGetToken< CTPPSGeometry, VeryForwardRealGeometryRecord > ctppsGeometryRunToken_
std::unordered_map< CTPPSDetId, DiamondShifts > diamShifts_
bool contains(EventRange const &lh, EventID const &rh)
Definition: EventRange.cc:37
T const & getData(const ESGetToken< T, R > &iToken) const noexcept(false)
Definition: EventSetup.h:119
static constexpr unsigned short CTPPS_FAR_RP_ID
static constexpr unsigned short CTPPS_PIXEL_STATION_ID
std::vector< std::pair< edm::EventRange, int > > runParameters_
RunNumber_t run() const
Definition: RunBase.h:40
static constexpr unsigned int FIRST_RUN_W_PIXELS
Number of OOT indices monitored.
static bool check(unsigned int raw)
returns true if the raw ID is a PPS-timing one
The manager class for TOTEM RP geometry.
Definition: CTPPSGeometry.h:30
Detector ID class for CTPPS Timing Diamond detectors. Bits [19:31] : Assigend in CTPPSDetId Calss Bit...

◆ dqmEndRun()

void CTPPSDiamondDQMSource::dqmEndRun ( edm::Run const &  ,
edm::EventSetup const &   
)
overrideprotectedvirtual

Reimplemented from DQMOneEDAnalyzer< edm::LuminosityBlockCache< dds::Cache > >.

Definition at line 1379 of file CTPPSDiamondDQMSource.cc.

References perLSsaving_, plotOffline_, HLTObjectsMonitor_cfi::plots, and potPlots_.

1379  {
1380  if (plotOffline_ && !perLSsaving_)
1381  for (const auto& rpPlots : potPlots_) {
1382  auto plots = rpPlots.second;
1383  // *(plots.TOTVsLSProfile->getTProfile())=*plots.TOTVsLS->getTH2F()->ProfileX();
1384  // *(plots.trackTimeVsLSProfile->getTProfile())=*plots.trackTimeVsLS->getTH2F()->ProfileX();
1385  *(plots.trackTimeVsBXProfile->getTProfile()) = *plots.trackTimeVsBX->getTH2F()->ProfileX();
1386  // *(plots.trackTimeVsXAngleProfile->getTProfile()) = *plots.trackTimeVsXAngle->getTH2F()->ProfileX();
1387  }
1388 }
std::unordered_map< unsigned int, PotPlots > potPlots_

◆ globalBeginLuminosityBlock()

std::shared_ptr< dds::Cache > CTPPSDiamondDQMSource::globalBeginLuminosityBlock ( const edm::LuminosityBlock ,
const edm::EventSetup  
) const
overrideprotected

Definition at line 683 of file CTPPSDiamondDQMSource.cc.

References ztail::d, INV_DISPLAY_RESOLUTION_FOR_HITS_MM, perLSsaving_, plotFactory::plot, plotOnline_, potPlots_, and AlCaHLTBitMon_QueryRunRegistry::string.

684  {
685  auto d = std::make_shared<dds::Cache>();
686  d->hitDistribution2dMap.reserve(potPlots_.size());
687  if (!perLSsaving_ && plotOnline_) {
688  for (auto& plot : potPlots_) {
689  d->hitDistribution2dMap[plot.first] = std::make_unique<TH2F>(
690  "hits in planes lumisection",
691  (std::string(plot.second.hitDistribution2d_lumisection->getTH2F()->GetTitle()) + ";plane number;x (mm)")
692  .c_str(),
693  10,
694  -0.5,
695  4.5,
697  -0.5,
698  18.5);
699  }
700  }
701  return d;
702 }
d
Definition: ztail.py:151
std::unordered_map< unsigned int, PotPlots > potPlots_
static constexpr double INV_DISPLAY_RESOLUTION_FOR_HITS_MM

◆ globalEndLuminosityBlock()

void CTPPSDiamondDQMSource::globalEndLuminosityBlock ( const edm::LuminosityBlock iLumi,
const edm::EventSetup  
)
overrideprotected

Definition at line 1282 of file CTPPSDiamondDQMSource.cc.

References CTPPSDetId::arm(), CTPPSDiamondDetId::channel(), channelPlots_, hcalRecHitTable_cff::detId, L1TObjectsTimingClient_cff::efficiency, edm::LuminosityBlock::index(), perLSsaving_, CTPPSDiamondDetId::plane(), planePlots_, plotFactory::plot, plotOnline_, potPlots_, CTPPSDetId::rp(), SEC_PER_LUMI_SECTION, and dqmMemoryStats::total.

1282  {
1283  auto lumiCache = luminosityBlockCache(iLumi.index());
1284  if (!perLSsaving_) {
1285  if (plotOnline_)
1286  for (auto& plot : potPlots_)
1287  *(plot.second.hitDistribution2d_lumisection->getTH2F()) = *(lumiCache->hitDistribution2dMap[plot.first]);
1288 
1289  for (auto& plot : channelPlots_) {
1290  auto hitsCounterPerLumisection = lumiCache->hitsCounterMap[plot.first];
1291  if (hitsCounterPerLumisection != 0) {
1292  plot.second.hit_rate->Fill((double)hitsCounterPerLumisection / SEC_PER_LUMI_SECTION);
1293  }
1294 
1295  double HundredOverHitCounter = .0;
1296  if (plot.second.HitCounter != 0)
1297  HundredOverHitCounter = 100. / plot.second.HitCounter;
1298  plot.second.HPTDCErrorFlags->setBinContent(16, HundredOverHitCounter * plot.second.MHCounter);
1299  plot.second.leadingWithoutTrailing->setBinContent(1, HundredOverHitCounter * plot.second.LeadingOnlyCounter);
1300  plot.second.leadingWithoutTrailing->setBinContent(2, HundredOverHitCounter * plot.second.TrailingOnlyCounter);
1301  plot.second.leadingWithoutTrailing->setBinContent(3, HundredOverHitCounter * plot.second.CompleteCounter);
1302  }
1303 
1304  for (auto& plot : potPlots_) {
1305  double HundredOverHitCounterPot = 0.;
1306  if (plot.second.HitCounter != 0)
1307  HundredOverHitCounterPot = 100. / plot.second.HitCounter;
1308  plot.second.leadingWithoutTrailingCumulativePot->setBinContent(
1309  1, HundredOverHitCounterPot * plot.second.LeadingOnlyCounter);
1310  plot.second.leadingWithoutTrailingCumulativePot->setBinContent(
1311  2, HundredOverHitCounterPot * plot.second.TrailingOnlyCounter);
1312  plot.second.leadingWithoutTrailingCumulativePot->setBinContent(
1313  3, HundredOverHitCounterPot * plot.second.CompleteCounter);
1314 
1315  plot.second.MHComprensive->Reset();
1316  const CTPPSDiamondDetId rpId(plot.first);
1317  for (auto& chPlot : channelPlots_) {
1318  const CTPPSDiamondDetId chId(chPlot.first);
1319  if (chId.arm() == rpId.arm() && chId.rp() == rpId.rp()) {
1320  plot.second.MHComprensive->Fill(
1321  chId.plane(), chId.channel(), chPlot.second.HPTDCErrorFlags->getBinContent(16));
1322  }
1323  }
1324  }
1325  // Efficiencies of single channels
1326  if (plotOnline_)
1327  for (auto& plot : potPlots_) {
1328  plot.second.EfficiencyOfChannelsInPot->Reset();
1329  for (auto& element : plot.second.effTriplecountingChMap) {
1330  if (plot.second.effDoublecountingChMap[element.first] > 0) {
1331  int plane = element.first / 100;
1332  int channel = element.first % 100;
1333  double counted = element.second;
1334  double total = plot.second.effDoublecountingChMap[element.first];
1335  double efficiency = counted / total;
1336  // double error = std::sqrt( efficiency * ( 1 - efficiency ) / total );
1337 
1338  plot.second.EfficiencyOfChannelsInPot->Fill(plane, channel, 100 * efficiency);
1339  }
1340  }
1341  }
1342 
1343  // Efficeincy wrt pixels //TODO
1344  for (auto& plot : planePlots_) {
1345  TH2F* hitHistoTmp = plot.second.EfficiencyWRTPixelsInPlane->getTH2F();
1346 
1347  const CTPPSDiamondDetId detId(plot.first), detId_pot(detId.rpId());
1348  hitHistoTmp->Divide(&(plot.second.pixelTracksMapWithDiamonds), &(potPlots_[detId_pot].pixelTracksMap));
1349  }
1350  } //perLSsaving
1351 }
static constexpr double SEC_PER_LUMI_SECTION
Number of seconds per lumisection: used to compute hit rates in Hz.
std::unordered_map< unsigned int, ChannelPlots > channelPlots_
std::unordered_map< unsigned int, PotPlots > potPlots_
LuminosityBlockIndex index() const
Detector ID class for CTPPS Timing Diamond detectors. Bits [19:31] : Assigend in CTPPSDetId Calss Bit...
std::unordered_map< unsigned int, PlanePlots > planePlots_

Member Data Documentation

◆ centralOOT_

int CTPPSDiamondDQMSource::centralOOT_
private

Definition at line 232 of file CTPPSDiamondDQMSource.cc.

Referenced by analyze(), and dqmBeginRun().

◆ CHANNEL_OF_VFAT_CLOCK

constexpr unsigned short CTPPSDiamondDQMSource::CHANNEL_OF_VFAT_CLOCK = 30
staticprivate

Channel ID of the VFAT that contains clock data.

Definition at line 89 of file CTPPSDiamondDQMSource.cc.

Referenced by analyze().

◆ channelPlots_

std::unordered_map<unsigned int, ChannelPlots> CTPPSDiamondDQMSource::channelPlots_
private

Definition at line 243 of file CTPPSDiamondDQMSource.cc.

Referenced by analyze(), bookHistograms(), and globalEndLuminosityBlock().

◆ CTPPS_DIAMOND_NUM_OF_CHANNELS

constexpr unsigned short CTPPSDiamondDQMSource::CTPPS_DIAMOND_NUM_OF_CHANNELS = 12
staticprivate

◆ CTPPS_FAR_RP_ID

constexpr unsigned short CTPPSDiamondDQMSource::CTPPS_FAR_RP_ID = 3
staticprivate

Definition at line 96 of file CTPPSDiamondDQMSource.cc.

Referenced by analyze(), and dqmBeginRun().

◆ CTPPS_FED_ID_45

constexpr unsigned short CTPPSDiamondDQMSource::CTPPS_FED_ID_45 = 583
staticprivate

Definition at line 98 of file CTPPSDiamondDQMSource.cc.

Referenced by analyze().

◆ CTPPS_FED_ID_56

constexpr unsigned short CTPPSDiamondDQMSource::CTPPS_FED_ID_56 = 582
staticprivate

Definition at line 99 of file CTPPSDiamondDQMSource.cc.

Referenced by analyze().

◆ CTPPS_PIXEL_STATION_ID

constexpr unsigned short CTPPSDiamondDQMSource::CTPPS_PIXEL_STATION_ID = 2
staticprivate

Definition at line 95 of file CTPPSDiamondDQMSource.cc.

Referenced by analyze(), and dqmBeginRun().

◆ ctppsGeometryEventToken_

edm::ESGetToken<CTPPSGeometry, VeryForwardRealGeometryRecord> CTPPSDiamondDQMSource::ctppsGeometryEventToken_
private

Definition at line 222 of file CTPPSDiamondDQMSource.cc.

Referenced by analyze().

◆ ctppsGeometryRunToken_

edm::ESGetToken<CTPPSGeometry, VeryForwardRealGeometryRecord> CTPPSDiamondDQMSource::ctppsGeometryRunToken_
private

Definition at line 221 of file CTPPSDiamondDQMSource.cc.

Referenced by bookHistograms(), and dqmBeginRun().

◆ diamShifts_

std::unordered_map<CTPPSDetId, DiamondShifts> CTPPSDiamondDQMSource::diamShifts_
private

Definition at line 230 of file CTPPSDiamondDQMSource.cc.

Referenced by analyze(), and dqmBeginRun().

◆ DISPLAY_RESOLUTION_FOR_HITS_MM

constexpr double CTPPSDiamondDQMSource::DISPLAY_RESOLUTION_FOR_HITS_MM = 0.1
staticprivate

Bin width of histograms showing hits and tracks (in mm)

Definition at line 91 of file CTPPSDiamondDQMSource.cc.

◆ EC_difference_45_

int CTPPSDiamondDQMSource::EC_difference_45_
private

Definition at line 245 of file CTPPSDiamondDQMSource.cc.

Referenced by analyze().

◆ EC_difference_56_

int CTPPSDiamondDQMSource::EC_difference_56_
private

Definition at line 245 of file CTPPSDiamondDQMSource.cc.

Referenced by analyze().

◆ excludeMultipleHits_

bool CTPPSDiamondDQMSource::excludeMultipleHits_
private

Definition at line 225 of file CTPPSDiamondDQMSource.cc.

Referenced by analyze().

◆ extract_digi_info_

const bool CTPPSDiamondDQMSource::extract_digi_info_
private

Definition at line 226 of file CTPPSDiamondDQMSource.cc.

Referenced by analyze(), and CTPPSDiamondDQMSource().

◆ FIRST_RUN_W_PIXELS

constexpr unsigned int CTPPSDiamondDQMSource::FIRST_RUN_W_PIXELS = 300000
staticprivate

Number of OOT indices monitored.

Definition at line 103 of file CTPPSDiamondDQMSource.cc.

Referenced by dqmBeginRun().

◆ globalPlot_

GlobalPlots CTPPSDiamondDQMSource::globalPlot_
private

Definition at line 239 of file CTPPSDiamondDQMSource.cc.

Referenced by bookHistograms().

◆ HPTDC_0_CHANNEL

constexpr unsigned short CTPPSDiamondDQMSource::HPTDC_0_CHANNEL = 6
staticprivate

Definition at line 100 of file CTPPSDiamondDQMSource.cc.

Referenced by analyze(), and checkEventNumber().

◆ HPTDC_1_CHANNEL

constexpr unsigned short CTPPSDiamondDQMSource::HPTDC_1_CHANNEL = 7
staticprivate

Definition at line 101 of file CTPPSDiamondDQMSource.cc.

Referenced by analyze(), and checkEventNumber().

◆ HPTDC_BIN_WIDTH_NS

constexpr double CTPPSDiamondDQMSource::HPTDC_BIN_WIDTH_NS = 25. / 1024
staticprivate

ns per HPTDC bin

Definition at line 94 of file CTPPSDiamondDQMSource.cc.

Referenced by analyze().

◆ INV_DISPLAY_RESOLUTION_FOR_HITS_MM

constexpr double CTPPSDiamondDQMSource::INV_DISPLAY_RESOLUTION_FOR_HITS_MM = 1. / DISPLAY_RESOLUTION_FOR_HITS_MM
staticprivate

◆ perLSsaving_

bool CTPPSDiamondDQMSource::perLSsaving_
private

◆ planePlots_

std::unordered_map<unsigned int, PlanePlots> CTPPSDiamondDQMSource::planePlots_
private

Definition at line 242 of file CTPPSDiamondDQMSource.cc.

Referenced by analyze(), bookHistograms(), and globalEndLuminosityBlock().

◆ plotOffline_

const bool CTPPSDiamondDQMSource::plotOffline_
private

Definition at line 235 of file CTPPSDiamondDQMSource.cc.

Referenced by analyze(), bookHistograms(), and dqmEndRun().

◆ plotOnline_

const bool CTPPSDiamondDQMSource::plotOnline_
private

◆ potPlots_

std::unordered_map<unsigned int, PotPlots> CTPPSDiamondDQMSource::potPlots_
private

◆ runParameters_

std::vector<std::pair<edm::EventRange, int> > CTPPSDiamondDQMSource::runParameters_
private

Definition at line 231 of file CTPPSDiamondDQMSource.cc.

Referenced by CTPPSDiamondDQMSource(), and dqmBeginRun().

◆ SEC_PER_LUMI_SECTION

constexpr double CTPPSDiamondDQMSource::SEC_PER_LUMI_SECTION = 23.31
staticprivate

Number of seconds per lumisection: used to compute hit rates in Hz.

Definition at line 87 of file CTPPSDiamondDQMSource.cc.

Referenced by globalEndLuminosityBlock().

◆ sectorPlots_

std::unordered_map<unsigned int, SectorPlots> CTPPSDiamondDQMSource::sectorPlots_
private

Definition at line 241 of file CTPPSDiamondDQMSource.cc.

Referenced by analyze(), and bookHistograms().

◆ tokenDiamondHit_

edm::EDGetTokenT<edm::DetSetVector<CTPPSDiamondRecHit> > CTPPSDiamondDQMSource::tokenDiamondHit_
private

Definition at line 217 of file CTPPSDiamondDQMSource.cc.

Referenced by analyze().

◆ tokenDiamondTrack_

edm::EDGetTokenT<edm::DetSetVector<CTPPSDiamondLocalTrack> > CTPPSDiamondDQMSource::tokenDiamondTrack_
private

Definition at line 218 of file CTPPSDiamondDQMSource.cc.

Referenced by analyze().

◆ tokenDigi_

edm::EDGetTokenT<edm::DetSetVector<CTPPSDiamondDigi> > CTPPSDiamondDQMSource::tokenDigi_
private

Definition at line 216 of file CTPPSDiamondDQMSource.cc.

Referenced by analyze(), and CTPPSDiamondDQMSource().

◆ tokenFEDInfo_

edm::EDGetTokenT<std::vector<TotemFEDInfo> > CTPPSDiamondDQMSource::tokenFEDInfo_
private

Definition at line 219 of file CTPPSDiamondDQMSource.cc.

Referenced by analyze(), and CTPPSDiamondDQMSource().

◆ tokenPixelTrack_

edm::EDGetTokenT<edm::DetSetVector<CTPPSPixelLocalTrack> > CTPPSDiamondDQMSource::tokenPixelTrack_
private

Definition at line 215 of file CTPPSDiamondDQMSource.cc.

Referenced by analyze().

◆ tokenStatus_

edm::EDGetTokenT<edm::DetSetVector<TotemVFATStatus> > CTPPSDiamondDQMSource::tokenStatus_
private

Definition at line 214 of file CTPPSDiamondDQMSource.cc.

Referenced by analyze(), and CTPPSDiamondDQMSource().

◆ trackCorrelationThreshold_

unsigned int CTPPSDiamondDQMSource::trackCorrelationThreshold_
private

Definition at line 237 of file CTPPSDiamondDQMSource.cc.

Referenced by analyze().

◆ verbosity_

unsigned int CTPPSDiamondDQMSource::verbosity_
private

Definition at line 233 of file CTPPSDiamondDQMSource.cc.

Referenced by analyze(), and checkEventNumber().

◆ windowsNum_

unsigned int CTPPSDiamondDQMSource::windowsNum_
private

Definition at line 236 of file CTPPSDiamondDQMSource.cc.

Referenced by analyze(), and bookHistograms().