CMS 3D CMS Logo

List of all members | Classes | Public Member Functions | Protected Member Functions | Private Attributes | Static Private Attributes
CTPPSDiamondDQMSource Class Reference
Inheritance diagram for CTPPSDiamondDQMSource:
DQMEDAnalyzer edm::one::EDProducer< edm::Accumulator, edm::EndLuminosityBlockProducer, edm::EndRunProducer, edm::one::WatchLuminosityBlocks, edm::one::WatchRuns > edm::one::EDProducerBase edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper

Classes

struct  ChannelPlots
 plots related to one Diamond channel More...
 
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...
 

Public Member Functions

 CTPPSDiamondDQMSource (const edm::ParameterSet &)
 
 ~CTPPSDiamondDQMSource () override
 
- Public Member Functions inherited from DQMEDAnalyzer
void accumulate (edm::Event const &ev, edm::EventSetup const &es) final
 
virtual void analyze (edm::Event const &, edm::EventSetup const &)
 
void beginLuminosityBlock (edm::LuminosityBlock const &lumi, edm::EventSetup const &setup) override
 
void beginRun (edm::Run const &run, edm::EventSetup const &setup) final
 
virtual void bookHistograms (DQMStore::IBooker &i, edm::Run const &, edm::EventSetup const &)=0
 
virtual void dqmBeginRun (edm::Run const &, edm::EventSetup const &)
 
 DQMEDAnalyzer ()
 
 DQMEDAnalyzer (DQMEDAnalyzer const &)=delete
 
 DQMEDAnalyzer (DQMEDAnalyzer &&)=delete
 
void endLuminosityBlock (edm::LuminosityBlock const &, edm::EventSetup const &) override
 
void endLuminosityBlockProduce (edm::LuminosityBlock &lumi, edm::EventSetup const &setup) final
 
void endRun (edm::Run const &run, edm::EventSetup const &setup) override
 
void endRunProduce (edm::Run &run, edm::EventSetup const &setup) override
 
 ~DQMEDAnalyzer () override=default
 
- Public Member Functions inherited from edm::one::EDProducer< edm::Accumulator, edm::EndLuminosityBlockProducer, edm::EndRunProducer, edm::one::WatchLuminosityBlocks, edm::one::WatchRuns >
 EDProducer ()=default
 
SerialTaskQueueglobalLuminosityBlocksQueue () final
 
SerialTaskQueueglobalRunsQueue () final
 
bool hasAbilityToProduceInLumis () const final
 
bool hasAbilityToProduceInRuns () 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
 
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)
 
virtual ~EDConsumerBase () noexcept(false)
 

Protected Member Functions

void analyze (const edm::Event &, const edm::EventSetup &) override
 
void beginLuminosityBlock (const edm::LuminosityBlock &, 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 endLuminosityBlock (const edm::LuminosityBlock &, const edm::EventSetup &) override
 
void endRun (const edm::Run &, const edm::EventSetup &) override
 
- 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 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)
 

Private Attributes

int centralOOT_
 
std::unordered_map< unsigned int, ChannelPlotschannelPlots_
 
int EC_difference_45_
 
int EC_difference_56_
 
bool excludeMultipleHits_
 
GlobalPlots globalPlot_
 
double horizontalShiftBwDiamondPixels_
 
double horizontalShiftOfDiamond_
 
std::unordered_map< unsigned int, PlanePlotsplanePlots_
 
std::unordered_map< unsigned int, PotPlotspotPlots_
 
std::vector< std::pair< edm::EventRange, int > > runParameters_
 
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 verbosity_
 

Static Private Attributes

static const int CHANNEL_OF_VFAT_CLOCK = 30
 
static const int CTPPS_DIAMOND_NUM_OF_CHANNELS = 12
 
static const int CTPPS_DIAMOND_NUM_OF_PLANES = 4
 
static const int CTPPS_DIAMOND_RP_ID = 6
 
static const int CTPPS_DIAMOND_STATION_ID = 1
 
static const int CTPPS_FAR_RP_ID = 3
 
static const int CTPPS_FED_ID_45 = 583
 
static const int CTPPS_FED_ID_56 = 582
 
static const int CTPPS_NEAR_RP_ID = 2
 
static const int CTPPS_NUM_OF_ARMS = 2
 
static const int CTPPS_PIXEL_STATION_ID = 2
 
static const double DISPLAY_RESOLUTION_FOR_HITS_MM = 0.1
 
static const double HPTDC_BIN_WIDTH_NS = 25./1024
 
static const double INV_DISPLAY_RESOLUTION_FOR_HITS_MM = 1./DISPLAY_RESOLUTION_FOR_HITS_MM
 
static const double SEC_PER_LUMI_SECTION = 23.31
 

Additional Inherited Members

- 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 Attributes inherited from DQMEDAnalyzer
edm::EDPutTokenT< DQMTokenlumiToken_
 
edm::EDPutTokenT< DQMTokenrunToken_
 

Detailed Description

Definition at line 59 of file CTPPSDiamondDQMSource.cc.

Constructor & Destructor Documentation

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

Definition at line 369 of file CTPPSDiamondDQMSource.cc.

References edm::ParameterSet::getParameter(), muonDTDigis_cfi::pset, and runParameters_.

369  :
375  tokenFEDInfo_ ( consumes< std::vector<TotemFEDInfo> > ( ps.getParameter<edm::InputTag>( "tagFEDInfo" ) ) ),
376  excludeMultipleHits_ ( ps.getParameter<bool>( "excludeMultipleHits" ) ),
377  centralOOT_( -999 ),
378  verbosity_ ( ps.getUntrackedParameter<unsigned int>( "verbosity", 0 ) ),
379  EC_difference_56_( -500 ), EC_difference_45_( -500 )
380 {
381  for ( const auto& pset : ps.getParameter< std::vector<edm::ParameterSet> >( "offsetsOOT" ) ) {
382  runParameters_.emplace_back( std::make_pair( pset.getParameter<edm::EventRange>( "validityRange" ), pset.getParameter<int>( "centralOOT" ) ) );
383  }
384 }
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
edm::EDGetTokenT< edm::DetSetVector< CTPPSDiamondDigi > > tokenDigi_
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
std::vector< std::pair< edm::EventRange, int > > runParameters_
edm::EDGetTokenT< edm::DetSetVector< CTPPSPixelLocalTrack > > tokenPixelTrack_
edm::EDGetTokenT< edm::DetSetVector< CTPPSDiamondLocalTrack > > tokenDiamondTrack_
edm::EDGetTokenT< edm::DetSetVector< CTPPSDiamondRecHit > > tokenDiamondHit_
edm::EDGetTokenT< std::vector< TotemFEDInfo > > tokenFEDInfo_
edm::EDGetTokenT< edm::DetSetVector< TotemVFATStatus > > tokenStatus_
CTPPSDiamondDQMSource::~CTPPSDiamondDQMSource ( )
override

Definition at line 388 of file CTPPSDiamondDQMSource.cc.

389 {}

Member Function Documentation

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

Definition at line 457 of file CTPPSDiamondDQMSource.cc.

References funct::abs(), edm::EventBase::bunchCrossing(), centralOOT_, CHANNEL_OF_VFAT_CLOCK, channelAlignedWithTrack(), channelPlots_, CTPPS_DIAMOND_RP_ID, CTPPS_DIAMOND_STATION_ID, CTPPS_FAR_RP_ID, CTPPS_FED_ID_45, CTPPS_FED_ID_56, CTPPS_PIXEL_STATION_ID, TauDecayModes::dec, EC_difference_45_, EC_difference_56_, excludeMultipleHits_, HcalObjRepresent::Fill(), edm::EventSetup::get(), HPTDCErrorFlags::getErrorId(), horizontalShiftBwDiamondPixels_, horizontalShiftOfDiamond_, HPTDC_BIN_WIDTH_NS, mps_fire::i, edm::eventsetup::heterocontainer::insert(), createfilelist::int, INV_DISPLAY_RESOLUTION_FOR_HITS_MM, edm::HandleBase::isValid(), PixelTracks_cff::pixelTracks, planePlots_, potPlots_, edm::ESHandle< T >::product(), TrackInfoProducer_cfi::rechits, CTPPSDiamondDetId::setChannel(), CTPPSDiamondDetId::setPlane(), mps_update::status, CTPPSDiamondRecHit::TIMESLICE_WITHOUT_LEADING, tokenDiamondHit_, tokenDiamondTrack_, tokenDigi_, tokenFEDInfo_, tokenPixelTrack_, tokenStatus_, HiIsolationCommonParameters_cff::track, l1t::tracks, and verbosity_.

458 {
459  // get event data
461  event.getByToken( tokenStatus_, diamondVFATStatus );
462 
464  event.getByToken( tokenPixelTrack_, pixelTracks );
465 
467  event.getByToken( tokenDigi_, diamondDigis );
468 
470  event.getByToken( tokenFEDInfo_, fedInfo );
471 
473  event.getByToken( tokenDiamondHit_, diamondRecHits );
474 
476  event.getByToken( tokenDiamondTrack_, diamondLocalTracks );
477 
479  iSetup.get<VeryForwardRealGeometryRecord>().get( geometry_ );
480 
481  // check validity
482  bool valid = true;
483  valid &= diamondVFATStatus.isValid();
484  valid &= diamondDigis.isValid();
485  valid &= fedInfo.isValid();
486 
487  if ( !valid ) {
488  if ( verbosity_ ) {
489  edm::LogProblem("CTPPSDiamondDQMSource")
490  << "ERROR in CTPPSDiamondDQMSource::analyze > some of the required inputs are not valid. Skipping this event.\n"
491  << " diamondVFATStatus.isValid = " << diamondVFATStatus.isValid() << "\n"
492  << " diamondDigis.isValid = " << diamondDigis.isValid() << "\n"
493  << " fedInfo.isValid = " << fedInfo.isValid();
494  }
495 
496  return;
497  }
498 
499  //------------------------------
500  // RP Plots
501  //------------------------------
502 
503  //------------------------------
504  // Correlation Plots
505  //------------------------------
506 
507  // Using CTPPSDiamondDigi
508  for ( const auto& digis : *diamondDigis ) {
509  const CTPPSDiamondDetId detId( digis.detId() );
510  CTPPSDiamondDetId detId_pot( digis.detId() );
511 
512  for ( const auto& digi : digis ) {
513  detId_pot.setPlane( 0 );
514  detId_pot.setChannel( 0 );
515  if ( detId.channel() == CHANNEL_OF_VFAT_CLOCK ) continue;
516  if ( potPlots_.find( detId_pot ) == potPlots_.end() ) continue;
517  //Leading without trailing investigation
518  if ( digi.getLeadingEdge() != 0 || digi.getTrailingEdge() != 0 ) {
519  ++(potPlots_[detId_pot].HitCounter);
520  if ( digi.getLeadingEdge() != 0 ) {
521  potPlots_[detId_pot].leadingEdgeCumulative_all->Fill( HPTDC_BIN_WIDTH_NS * digi.getLeadingEdge() );
522  }
523  if ( digi.getLeadingEdge() != 0 && digi.getTrailingEdge() == 0 ) {
524  ++(potPlots_[detId_pot].LeadingOnlyCounter);
525  potPlots_[detId_pot].leadingEdgeCumulative_le->Fill( HPTDC_BIN_WIDTH_NS * digi.getLeadingEdge() );
526  }
527  if ( digi.getLeadingEdge() == 0 && digi.getTrailingEdge() != 0 ) {
528  ++(potPlots_[detId_pot].TrailingOnlyCounter);
529  potPlots_[detId_pot].trailingEdgeCumulative_te->Fill( HPTDC_BIN_WIDTH_NS * digi.getTrailingEdge() );
530  }
531  if ( digi.getLeadingEdge() != 0 && digi.getTrailingEdge() != 0 ) {
532  ++(potPlots_[detId_pot].CompleteCounter);
533  potPlots_[detId_pot].leadingTrailingCorrelationPot->Fill( HPTDC_BIN_WIDTH_NS * digi.getLeadingEdge(), HPTDC_BIN_WIDTH_NS * digi.getTrailingEdge() );
534  }
535  }
536 
537  // HPTDC Errors
538  const HPTDCErrorFlags hptdcErrors = digi.getHPTDCErrorFlags();
539  if ( detId.channel() == 6 || detId.channel() == 7 ) // ch6 for HPTDC 0 and ch7 for HPTDC 1
540  {
541  int verticalIndex = 2*detId.plane() + (detId.channel() - 6);
542  for ( unsigned short hptdcErrorIndex = 1; hptdcErrorIndex < 16; ++hptdcErrorIndex )
543  if ( hptdcErrors.getErrorId( hptdcErrorIndex-1 ) ) potPlots_[detId_pot].HPTDCErrorFlags_2D->Fill( hptdcErrorIndex, verticalIndex );
544  }
545  if ( digi.getMultipleHit() ) ++(potPlots_[detId_pot].MHCounter);
546  }
547  }
548 
549  // EC Errors
550  for ( const auto& vfat_status : *diamondVFATStatus ) {
551  const CTPPSDiamondDetId detId( vfat_status.detId() );
552  CTPPSDiamondDetId detId_pot( vfat_status.detId() );
553  detId_pot.setPlane( 0 );
554  detId_pot.setChannel( 0 );
555  for ( const auto& status : vfat_status ) {
556  if ( !status.isOK() ) continue;
557  if ( potPlots_.find(detId_pot) == potPlots_.end() ) continue;
558  if ( channelPlots_.find(detId) == channelPlots_.end() ) continue;
559 
560  // Check Event Number
561  for ( const auto& optorx : *fedInfo ) {
562  if ( detId.arm() == 1 && optorx.getFEDId() == CTPPS_FED_ID_56 ) {
563  potPlots_[detId_pot].ECCheck->Fill((int)((optorx.getLV1()& 0xFF)-((unsigned int) status.getEC() & 0xFF)) & 0xFF);
564  if ( ( static_cast<int>( ( optorx.getLV1() & 0xFF )-status.getEC() ) != EC_difference_56_ ) && ( static_cast<uint8_t>( ( optorx.getLV1() & 0xFF )-status.getEC() ) < 128 ) )
565  EC_difference_56_ = static_cast<int>( optorx.getLV1() & 0xFF )-( static_cast<unsigned int>( status.getEC() ) & 0xFF );
566  if ( EC_difference_56_ != 1 && EC_difference_56_ != -500 && std::abs(EC_difference_56_) < 127 )
567  {
568  if ( detId.channel() == 6 || detId.channel() == 7 ) potPlots_[detId_pot].HPTDCErrorFlags_2D->Fill( 16, 2*detId.plane() + (detId.channel() - 6) );
569  if (verbosity_)
570  edm::LogProblem("CTPPSDiamondDQMSource") << "FED " << CTPPS_FED_ID_56 << ": ECError at EV: 0x"<< std::hex << optorx.getLV1()
571  << "\t\tVFAT EC: 0x"<< static_cast<unsigned int>( status.getEC() )
572  << "\twith ID: " << std::dec << detId
573  << "\tdiff: " << EC_difference_56_;
574  }
575  }
576  else if ( detId.arm() == 0 && optorx.getFEDId()== CTPPS_FED_ID_45 ) {
577  potPlots_[detId_pot].ECCheck->Fill((int)((optorx.getLV1()& 0xFF)-status.getEC()) & 0xFF);
578  if ( ( static_cast<int>( ( optorx.getLV1() & 0xFF )-status.getEC() ) != EC_difference_45_ ) && ( static_cast<uint8_t>( ( optorx.getLV1() & 0xFF )-status.getEC() ) < 128 ) )
579  EC_difference_45_ = static_cast<int>( optorx.getLV1() & 0xFF )-( static_cast<unsigned int>( status.getEC() ) & 0xFF );
580  if ( EC_difference_45_ != 1 && EC_difference_45_ != -500 && std::abs(EC_difference_45_) < 127 )
581  {
582  if ( detId.channel() == 6 || detId.channel() == 7 ) potPlots_[detId_pot].HPTDCErrorFlags_2D->Fill( 16, 2*detId.plane() + (detId.channel() - 6) );
583  if (verbosity_)
584  edm::LogProblem("CTPPSDiamondDQMSource") << "FED " << CTPPS_FED_ID_45 << ": ECError at EV: 0x"<< std::hex << optorx.getLV1()
585  << "\t\tVFAT EC: 0x"<< static_cast<unsigned int>( status.getEC() )
586  << "\twith ID: " << std::dec << detId
587  << "\tdiff: " << EC_difference_45_;
588  }
589  }
590  }
591  }
592  }
593 
594  // Using CTPPSDiamondRecHit
595  std::unordered_map<unsigned int, std::set<unsigned int> > planes;
596  std::unordered_map<unsigned int, std::set<unsigned int> > planes_inclusive;
597 
598 
599  for ( const auto& rechits : *diamondRecHits ) {
600  CTPPSDiamondDetId detId_pot( rechits.detId() );
601  detId_pot.setPlane( 0 );
602  detId_pot.setChannel( 0 );
603  const CTPPSDiamondDetId detId( rechits.detId() );
604 
605  for ( const auto& rechit : rechits ) {
606  planes_inclusive[detId_pot].insert( detId.plane() );
607  if ( excludeMultipleHits_ && rechit.getMultipleHits() > 0 ) continue;
608  if ( rechit.getToT() != 0 && centralOOT_ != -999 && rechit.getOOTIndex() == centralOOT_ )
609  planes[detId_pot].insert( detId.plane() );
610 
611  if ( potPlots_.find( detId_pot ) == potPlots_.end() ) continue;
612 
613  float UFSDShift = 0.0;
614  if ( rechit.getYWidth() < 3 ) UFSDShift = 0.5; // Display trick for UFSD that have 2 pixels with same X
615 
616  if ( rechit.getToT() != 0 && centralOOT_ != -999 && rechit.getOOTIndex() == centralOOT_ ) {
617  TH2F *hitHistoTmp = potPlots_[detId_pot].hitDistribution2d->getTH2F();
618  TAxis *hitHistoTmpYAxis = hitHistoTmp->GetYaxis();
619  int startBin = hitHistoTmpYAxis->FindBin( rechit.getX() - horizontalShiftOfDiamond_ - 0.5*rechit.getXWidth() );
620  int numOfBins = rechit.getXWidth()*INV_DISPLAY_RESOLUTION_FOR_HITS_MM;
621  for ( int i=0; i<numOfBins; ++i) {
622  hitHistoTmp->Fill( detId.plane() + UFSDShift, hitHistoTmpYAxis->GetBinCenter(startBin+i) );
623  }
624 
625  hitHistoTmp = potPlots_[detId_pot].hitDistribution2d_lumisection->getTH2F();
626  hitHistoTmpYAxis = hitHistoTmp->GetYaxis();
627  startBin = hitHistoTmpYAxis->FindBin( rechit.getX() - horizontalShiftOfDiamond_ - 0.5*rechit.getXWidth() );
628  numOfBins = rechit.getXWidth()*INV_DISPLAY_RESOLUTION_FOR_HITS_MM;
629  for ( int i=0; i<numOfBins; ++i) {
630  hitHistoTmp->Fill( detId.plane() + UFSDShift, hitHistoTmpYAxis->GetBinCenter(startBin+i) );
631  }
632 
633  }
634 
635  if ( rechit.getToT() != 0 ) {
636  // Both
637  potPlots_[detId_pot].leadingEdgeCumulative_both->Fill( rechit.getT() + 25*rechit.getOOTIndex() );
638  potPlots_[detId_pot].timeOverThresholdCumulativePot->Fill( rechit.getToT() );
639 
640  TH2F *hitHistoOOTTmp = potPlots_[detId_pot].hitDistribution2dOOT->getTH2F();
641  TAxis *hitHistoOOTTmpYAxis = hitHistoOOTTmp->GetYaxis();
642  int startBin = hitHistoOOTTmpYAxis->FindBin( rechit.getX() - horizontalShiftOfDiamond_ - 0.5*rechit.getXWidth() );
643  int numOfBins = rechit.getXWidth()*INV_DISPLAY_RESOLUTION_FOR_HITS_MM;
644  for ( int i=0; i<numOfBins; ++i) {
645  hitHistoOOTTmp->Fill( detId.plane() + 0.25 * rechit.getOOTIndex(), hitHistoOOTTmpYAxis->GetBinCenter(startBin+i) );
646  }
647  }
648  else {
649  if ( rechit.getOOTIndex() != CTPPSDiamondRecHit::TIMESLICE_WITHOUT_LEADING ) {
650  // Only leading
651  TH2F *hitHistoOOTTmp = potPlots_[detId_pot].hitDistribution2dOOT_le->getTH2F();
652  TAxis *hitHistoOOTTmpYAxis = hitHistoOOTTmp->GetYaxis();
653  int startBin = hitHistoOOTTmpYAxis->FindBin( rechit.getX() - horizontalShiftOfDiamond_ - 0.5*rechit.getXWidth() );
654  int numOfBins = rechit.getXWidth()*INV_DISPLAY_RESOLUTION_FOR_HITS_MM;
655  for ( int i=0; i<numOfBins; ++i) {
656  hitHistoOOTTmp->Fill( detId.plane() + 0.25 * rechit.getOOTIndex(), hitHistoOOTTmpYAxis->GetBinCenter(startBin+i) );
657  }
658  }
659  }
660  if ( rechit.getOOTIndex() != CTPPSDiamondRecHit::TIMESLICE_WITHOUT_LEADING && rechit.getOOTIndex() < (int) potPlots_[detId_pot].activity_per_bx.size() )
661  potPlots_[detId_pot].activity_per_bx.at( rechit.getOOTIndex() )->Fill( event.bunchCrossing() );
662  }
663  }
664 
665  for ( const auto& plt : potPlots_ ) {
666  plt.second.activePlanes->Fill( planes[plt.first].size() );
667  plt.second.activePlanesInclusive->Fill( planes_inclusive[plt.first].size() );
668  }
669 
670  // Using CTPPSDiamondLocalTrack
671  for ( const auto& tracks : *diamondLocalTracks ) {
672  CTPPSDiamondDetId detId_pot( tracks.detId() );
673  detId_pot.setPlane( 0 );
674  detId_pot.setChannel( 0 );
675  const CTPPSDiamondDetId detId( tracks.detId() );
676 
677  for ( const auto& track : tracks ) {
678  if ( ! track.isValid() ) continue;
679  if ( track.getOOTIndex() == CTPPSDiamondRecHit::TIMESLICE_WITHOUT_LEADING ) continue;
680  if ( excludeMultipleHits_ && track.getMultipleHits() > 0 ) continue;
681  if ( potPlots_.find( detId_pot ) == potPlots_.end() ) continue;
682 
683  TH2F *trackHistoOOTTmp = potPlots_[detId_pot].trackDistributionOOT->getTH2F();
684  TAxis *trackHistoOOTTmpYAxis = trackHistoOOTTmp->GetYaxis();
685  int startBin = trackHistoOOTTmpYAxis->FindBin( track.getX0() - horizontalShiftOfDiamond_ - track.getX0Sigma() );
686  int numOfBins = 2*track.getX0Sigma()*INV_DISPLAY_RESOLUTION_FOR_HITS_MM;
687  for ( int i=0; i<numOfBins; ++i) {
688  trackHistoOOTTmp->Fill( track.getOOTIndex(), trackHistoOOTTmpYAxis->GetBinCenter(startBin+i) );
689  }
690 
691  if ( centralOOT_ != -999 && track.getOOTIndex() == centralOOT_ ) {
692  TH1F *trackHistoInTimeTmp = potPlots_[detId_pot].trackDistribution->getTH1F();
693  int startBin = trackHistoInTimeTmp->FindBin( track.getX0() - horizontalShiftOfDiamond_ - track.getX0Sigma() );
694  int numOfBins = 2*track.getX0Sigma()*INV_DISPLAY_RESOLUTION_FOR_HITS_MM;
695  for ( int i=0; i<numOfBins; ++i) {
696  trackHistoInTimeTmp->Fill( trackHistoInTimeTmp->GetBinCenter(startBin+i) );
697  }
698  }
699  }
700  }
701 
702  // Channel efficiency using CTPPSDiamondLocalTrack
703  for ( const auto& tracks : *diamondLocalTracks ) {
704  CTPPSDiamondDetId detId_pot( tracks.detId() );
705  detId_pot.setPlane( 0 );
706  detId_pot.setChannel( 0 );
707  for ( const auto& track : tracks ) {
708  // Find hits and planes in the track
709  int numOfHits = 0;
710  std::set<int> planesInTrackSet;
711  for ( const auto& vec : *diamondRecHits ) {
712  const CTPPSDiamondDetId detid( vec.detId() );
713  if ( detid.arm() != detId_pot.arm() ) continue;
714 
715  for ( const auto& hit : vec ) {
716  // first check if the hit contributes to the track
717  if ( track.containsHit(hit) ) {
718  ++numOfHits;
719  planesInTrackSet.insert(detid.plane());
720  }
721  }
722  }
723 
724  if ( numOfHits > 0 && numOfHits <= 10 && planesInTrackSet.size() > 2 ) {
725  for ( int plane=0; plane<4; ++plane ) {
726  for ( int channel=0; channel<12; ++channel ) {
727  int map_index = plane*100 + channel;
728  if ( potPlots_[detId_pot].effDoublecountingChMap.find( map_index ) == potPlots_[detId_pot].effDoublecountingChMap.end() ) {
729  potPlots_[detId_pot].effTriplecountingChMap[map_index] = 0;
730  potPlots_[detId_pot].effDoublecountingChMap[map_index] = 0;
731  }
732  CTPPSDiamondDetId detId( detId_pot.arm(), CTPPS_DIAMOND_STATION_ID, CTPPS_DIAMOND_RP_ID, plane, channel);
733  if ( channelAlignedWithTrack( geometry_.product(), detId, track, 0.2) ) {
734  // Channel should fire
735  ++(potPlots_[detId_pot].effDoublecountingChMap[map_index]);
736  for ( const auto& rechits : *diamondRecHits ) {
737  CTPPSDiamondDetId detId_hit( rechits.detId() );
738  if ( detId_hit == detId ) {
739  for ( const auto& rechit : rechits ) {
740  if ( track.containsHit( rechit, 1 ) ) {
741  // Channel fired
742  ++(potPlots_[detId_pot].effTriplecountingChMap[map_index]);
743  }
744  }
745  }
746  }
747  }
748  }
749  }
750  }
751  }
752  }
753 
754  // Tomography of diamonds using pixel
755  for ( const auto& rechits : *diamondRecHits ) {
756  CTPPSDiamondDetId detId_pot( rechits.detId() );
757  detId_pot.setPlane( 0 );
758  detId_pot.setChannel( 0 );
759  const CTPPSDiamondDetId detId( rechits.detId() );
760  for ( const auto& rechit : rechits ) {
761  if ( excludeMultipleHits_ && rechit.getMultipleHits() > 0 ) continue;
762  if ( rechit.getToT() == 0 ) continue;
763  if ( !pixelTracks.isValid() ) continue;
764  if ( potPlots_.find( detId_pot ) == potPlots_.end() ) continue;
765 
766  for ( const auto& ds : *pixelTracks ) {
767  if ( ds.size() > 1 ) continue;
768  const CTPPSPixelDetId pixId( ds.detId() );
769  if ( pixId.station() != CTPPS_PIXEL_STATION_ID || pixId.rp() != CTPPS_FAR_RP_ID ) continue;
770  for ( const auto& lt : ds ) {
771  if ( lt.isValid() && pixId.arm() == detId_pot.arm() ) {
772  if ( rechit.getOOTIndex() != CTPPSDiamondRecHit::TIMESLICE_WITHOUT_LEADING && rechit.getOOTIndex() < (int) potPlots_[detId_pot].pixelTomographyAll.size() && rechit.getOOTIndex() >= 0 && lt.getX0() - horizontalShiftBwDiamondPixels_ < 24 )
773  potPlots_[detId_pot].pixelTomographyAll.at( rechit.getOOTIndex() )->Fill( lt.getX0() - horizontalShiftBwDiamondPixels_ + 25*detId.plane(), lt.getY0() );
774  }
775  }
776  }
777  }
778  }
779 
780  //------------------------------
781  // Clock Plots
782  //------------------------------
783  // Commented out to save space in the DQM files, but code should be kept
784  // for ( const auto& digis : *diamondDigis ) {
785  // const CTPPSDiamondDetId detId( digis.detId() );
786  // CTPPSDiamondDetId detId_pot( digis.detId() );
787  // if ( detId.channel() == CHANNEL_OF_VFAT_CLOCK ) {
788  // detId_pot.setPlane( 0 );
789  // detId_pot.setChannel( 0 );
790  // for ( const auto& digi : digis ) {
791  // if ( digi.getLeadingEdge() != 0 ) {
792  // if ( detId.plane() == 1 ) {
793  // potPlots_[detId_pot].clock_Digi1_le->Fill( HPTDC_BIN_WIDTH_NS * digi.getLeadingEdge() );
794  // potPlots_[detId_pot].clock_Digi1_te->Fill( HPTDC_BIN_WIDTH_NS * digi.getTrailingEdge() );
795  // }
796  // if ( detId.plane() == 3 ) {
797  // potPlots_[detId_pot].clock_Digi3_le->Fill( HPTDC_BIN_WIDTH_NS * digi.getLeadingEdge() );
798  // potPlots_[detId_pot].clock_Digi3_te->Fill( HPTDC_BIN_WIDTH_NS * digi.getTrailingEdge() );
799  // }
800  // }
801  // }
802  // }
803  // }
804 
805  //------------------------------
806  // Plane Plots
807  //------------------------------
808 
809  // Using CTPPSDiamondDigi
810  std::unordered_map<unsigned int, unsigned int> channelsPerPlane;
811  for ( const auto& digis : *diamondDigis ) {
812  const CTPPSDiamondDetId detId( digis.detId() );
813  CTPPSDiamondDetId detId_plane( digis.detId() );
814  for ( const auto& digi : digis ) {
815  detId_plane.setChannel( 0 );
816  if ( detId.channel() == CHANNEL_OF_VFAT_CLOCK ) continue;
817  if ( planePlots_.find( detId_plane ) == planePlots_.end() ) continue;
818 
819  if ( digi.getLeadingEdge() != 0 ) {
820  planePlots_[detId_plane].digiProfileCumulativePerPlane->Fill( detId.channel() );
821  if ( channelsPerPlane.find(detId_plane) != channelsPerPlane.end() ) channelsPerPlane[detId_plane]++;
822  else channelsPerPlane[detId_plane] = 0;
823  }
824  }
825  }
826 
827  for ( const auto& plt : channelsPerPlane ) {
828  planePlots_[plt.first].hit_multiplicity->Fill( plt.second );
829  }
830 
831  // Using CTPPSDiamondRecHit
832  for ( const auto& rechits : *diamondRecHits ) {
833  CTPPSDiamondDetId detId_plane( rechits.detId() );
834  detId_plane.setChannel( 0 );
835  for ( const auto& rechit : rechits ) {
836  if ( excludeMultipleHits_ && rechit.getMultipleHits() > 0 ) continue;
837  if ( rechit.getToT() == 0 ) continue;
838  if ( planePlots_.find( detId_plane ) != planePlots_.end() ) {
839  if ( centralOOT_ != -999 && rechit.getOOTIndex() == centralOOT_ ) {
840  TH1F *hitHistoTmp = planePlots_[detId_plane].hitProfile->getTH1F();
841  int startBin = hitHistoTmp->FindBin( rechit.getX() - horizontalShiftOfDiamond_ - 0.5*rechit.getXWidth() );
842  int numOfBins = rechit.getXWidth()*INV_DISPLAY_RESOLUTION_FOR_HITS_MM;
843  for ( int i=0; i<numOfBins; ++i) {
844  hitHistoTmp->Fill( hitHistoTmp->GetBinCenter(startBin+i) );
845  }
846  }
847  }
848  }
849  }
850 
851 
852  //Tomography of diamonds using pixel and Efficiency WRT Pixels
853  for ( const auto& ds : *pixelTracks ) {
854  const CTPPSPixelDetId pixId( ds.detId() );
855  if ( pixId.station() != CTPPS_PIXEL_STATION_ID || pixId.rp() != CTPPS_FAR_RP_ID ) continue;
856  if ( ds.size() > 1 ) continue;
857  for ( const auto& lt : ds ) {
858  if ( lt.isValid() ) {
859  // For efficieny
861  potPlots_[detId_pot].pixelTracksMap.Fill( lt.getX0() - horizontalShiftBwDiamondPixels_, lt.getY0() );
862 
863  std::set< CTPPSDiamondDetId > planesWitHits_set;
864  for ( const auto& rechits : *diamondRecHits ) {
865  CTPPSDiamondDetId detId_plane( rechits.detId() );
866  detId_plane.setChannel( 0 );
867  for ( const auto& rechit : rechits ) {
868  if ( excludeMultipleHits_ && rechit.getMultipleHits() > 0 ) continue;
869  if ( rechit.getOOTIndex() == CTPPSDiamondRecHit::TIMESLICE_WITHOUT_LEADING || rechit.getToT() == 0 ) continue;
870  if ( planePlots_.find(detId_plane) == planePlots_.end() ) continue;
871  if ( pixId.arm() == detId_plane.arm() && lt.getX0() - horizontalShiftBwDiamondPixels_ < 24 ) {
872  planePlots_[detId_plane].pixelTomography_far->Fill( lt.getX0() - horizontalShiftBwDiamondPixels_ + 25*rechit.getOOTIndex(), lt.getY0() );
873  if ( centralOOT_ != -999 && rechit.getOOTIndex() == centralOOT_ ) planesWitHits_set.insert( detId_plane );
874  }
875 
876  }
877  }
878 
879  for (auto& planeId : planesWitHits_set)
880  planePlots_[planeId].pixelTracksMapWithDiamonds.Fill( lt.getX0() - horizontalShiftBwDiamondPixels_, lt.getY0() );
881 
882  }
883 
884  }
885  }
886 
887 
888  //------------------------------
889  // Channel Plots
890  //------------------------------
891 
892  // digi profile cumulative
893  for ( const auto& digis : *diamondDigis ) {
894  const CTPPSDiamondDetId detId( digis.detId() );
895  for ( const auto& digi : digis ) {
896  if ( detId.channel() == CHANNEL_OF_VFAT_CLOCK ) continue;
897  if ( channelPlots_.find( detId ) != channelPlots_.end() ) {
898  // HPTDC Errors
899  const HPTDCErrorFlags hptdcErrors = digi.getHPTDCErrorFlags();
900  for ( unsigned short hptdcErrorIndex = 1; hptdcErrorIndex < 16; ++hptdcErrorIndex )
901  if ( hptdcErrors.getErrorId( hptdcErrorIndex-1 ) ) channelPlots_[detId].HPTDCErrorFlags->Fill( hptdcErrorIndex );
902  if ( digi.getMultipleHit() ) ++(channelPlots_[detId].MHCounter);
903 
904  // Check dropped trailing edges
905  if ( digi.getLeadingEdge() != 0 || digi.getTrailingEdge() != 0 ) {
906  ++(channelPlots_[detId].HitCounter);
907  if ( digi.getLeadingEdge() != 0 && digi.getTrailingEdge() == 0 ) {
908  ++(channelPlots_[detId].LeadingOnlyCounter);
909  channelPlots_[detId].leadingEdgeCumulative_le->Fill( HPTDC_BIN_WIDTH_NS * digi.getLeadingEdge() );
910  }
911  if ( digi.getLeadingEdge() == 0 && digi.getTrailingEdge() != 0 ) {
912  ++(channelPlots_[detId].TrailingOnlyCounter);
913  channelPlots_[detId].trailingEdgeCumulative_te->Fill( HPTDC_BIN_WIDTH_NS * digi.getTrailingEdge() );
914  }
915  if ( digi.getLeadingEdge() != 0 && digi.getTrailingEdge() != 0 ) {
916  ++(channelPlots_[detId].CompleteCounter);
917  channelPlots_[detId].LeadingTrailingCorrelationPerChannel->Fill( HPTDC_BIN_WIDTH_NS * digi.getLeadingEdge(), HPTDC_BIN_WIDTH_NS * digi.getTrailingEdge() );
918  }
919  }
920  }
921  }
922  }
923 
924  // Using CTPPSDiamondRecHit
925  for ( const auto& rechits : *diamondRecHits ) {
926  CTPPSDiamondDetId detId( rechits.detId() );
927  for ( const auto& rechit : rechits ) {
928  if ( excludeMultipleHits_ && rechit.getMultipleHits() > 0 ) continue;
929  if ( channelPlots_.find( detId ) != channelPlots_.end() ) {
930  if ( rechit.getOOTIndex() != CTPPSDiamondRecHit::TIMESLICE_WITHOUT_LEADING && rechit.getToT() != 0 ) {
931  channelPlots_[detId].leadingEdgeCumulative_both->Fill( rechit.getT() + 25*rechit.getOOTIndex() );
932  channelPlots_[detId].TimeOverThresholdCumulativePerChannel->Fill( rechit.getToT() );
933  }
934  ++(channelPlots_[detId].hitsCounterPerLumisection);
935  }
936 
937  if ( rechit.getOOTIndex() != CTPPSDiamondRecHit::TIMESLICE_WITHOUT_LEADING && rechit.getOOTIndex() < (int) channelPlots_[detId].activity_per_bx.size() )
938  channelPlots_[detId].activity_per_bx.at( rechit.getOOTIndex() )->Fill( event.bunchCrossing() );
939  }
940 
941  }
942 
943  // Tomography of diamonds using pixel
944  for ( const auto& rechits : *diamondRecHits ) {
945  const CTPPSDiamondDetId detId( rechits.detId() );
946  for ( const auto& rechit : rechits ) {
947  if ( excludeMultipleHits_ && rechit.getMultipleHits() > 0 ) continue;
948  if ( rechit.getOOTIndex() == CTPPSDiamondRecHit::TIMESLICE_WITHOUT_LEADING || rechit.getToT() == 0 ) continue;
949  if ( !pixelTracks.isValid() ) continue;
950  if (channelPlots_.find(detId) == channelPlots_.end()) continue;
951 
952  for ( const auto& ds : *pixelTracks ) {
953  const CTPPSPixelDetId pixId( ds.detId() );
954  if ( pixId.station() != CTPPS_PIXEL_STATION_ID || pixId.rp() != CTPPS_FAR_RP_ID ) continue;
955  if ( ds.size() > 1 ) continue;
956  for ( const auto& lt : ds ) {
957  if ( lt.isValid() && pixId.arm() == detId.arm() && lt.getX0() - horizontalShiftBwDiamondPixels_ < 24 )
958  channelPlots_[detId].pixelTomography_far->Fill( lt.getX0() - horizontalShiftBwDiamondPixels_ + 25*rechit.getOOTIndex(), lt.getY0() );
959  }
960  }
961  }
962  }
963 
964 }
static const int CTPPS_FED_ID_56
static const int CHANNEL_OF_VFAT_CLOCK
void setPlane(uint32_t channel)
void setChannel(uint32_t channel)
edm::EDGetTokenT< edm::DetSetVector< CTPPSDiamondDigi > > tokenDigi_
bool getErrorId(unsigned short id) const
int bunchCrossing() const
Definition: EventBase.h:66
Event setup record containing the real (actual) geometry information.
static const int CTPPS_PIXEL_STATION_ID
static const int CTPPS_DIAMOND_STATION_ID
void Fill(HcalDetId &id, double val, std::vector< TH2F > &depth)
std::unordered_map< unsigned int, ChannelPlots > channelPlots_
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
edm::EDGetTokenT< edm::DetSetVector< CTPPSPixelLocalTrack > > tokenPixelTrack_
bool insert(Storage &iStorage, ItemType *iItem, const IdTag &iIdTag)
Definition: HCMethods.h:49
bool isValid() const
Definition: HandleBase.h:74
edm::EDGetTokenT< edm::DetSetVector< CTPPSDiamondLocalTrack > > tokenDiamondTrack_
static const double HPTDC_BIN_WIDTH_NS
static const double INV_DISPLAY_RESOLUTION_FOR_HITS_MM
bool channelAlignedWithTrack(const CTPPSGeometry *geom, const CTPPSDiamondDetId &detid, const CTPPSDiamondLocalTrack &localTrack, const float tolerance=1)
std::unordered_map< unsigned int, PotPlots > potPlots_
static constexpr int TIMESLICE_WITHOUT_LEADING
edm::EDGetTokenT< edm::DetSetVector< CTPPSDiamondRecHit > > tokenDiamondHit_
static const int CTPPS_FAR_RP_ID
T get() const
Definition: EventSetup.h:63
Detector ID class for CTPPS Timing Diamond detectors. Bits [19:31] : Assigend in CTPPSDetId Calss Bit...
std::unordered_map< unsigned int, PlanePlots > planePlots_
static const int CTPPS_DIAMOND_RP_ID
edm::EDGetTokenT< std::vector< TotemFEDInfo > > tokenFEDInfo_
static const int CTPPS_FED_ID_45
T const * product() const
Definition: ESHandle.h:86
edm::EDGetTokenT< edm::DetSetVector< TotemVFATStatus > > tokenStatus_
void CTPPSDiamondDQMSource::beginLuminosityBlock ( const edm::LuminosityBlock ,
const edm::EventSetup  
)
overrideprotected

Definition at line 448 of file CTPPSDiamondDQMSource.cc.

References plotFactory::plot, and potPlots_.

449 {
450  for ( auto& plot : potPlots_ )
451  plot.second.hitDistribution2d_lumisection->Reset();
452 }
std::unordered_map< unsigned int, PotPlots > potPlots_
void CTPPSDiamondDQMSource::bookHistograms ( DQMStore::IBooker ibooker,
const edm::Run ,
const edm::EventSetup  
)
overrideprotected

Definition at line 423 of file CTPPSDiamondDQMSource.cc.

References DQMStore::IBooker::cd(), channelPlots_, CTPPS_DIAMOND_NUM_OF_CHANNELS, CTPPS_DIAMOND_NUM_OF_PLANES, CTPPS_DIAMOND_RP_ID, CTPPS_DIAMOND_STATION_ID, CTPPS_NUM_OF_ARMS, globalPlot_, planePlots_, potPlots_, and DQMStore::IBooker::setCurrentFolder().

424 {
425  ibooker.cd();
426  ibooker.setCurrentFolder( "CTPPS" );
427 
428  globalPlot_= GlobalPlots( ibooker );
429 
430  for ( unsigned short arm = 0; arm < CTPPS_NUM_OF_ARMS; ++arm ) {
432  potPlots_[rpId] = PotPlots( ibooker, rpId );
433  for ( unsigned short pl = 0; pl < CTPPS_DIAMOND_NUM_OF_PLANES; ++pl ) {
435  planePlots_[plId] = PlanePlots( ibooker, plId);
436  for ( unsigned short ch = 0; ch < CTPPS_DIAMOND_NUM_OF_CHANNELS; ++ch ) {
438  channelPlots_[chId] = ChannelPlots( ibooker, chId );
439  }
440  }
441  }
442 }
static const int CTPPS_DIAMOND_NUM_OF_PLANES
static const int CTPPS_NUM_OF_ARMS
static const int CTPPS_DIAMOND_NUM_OF_CHANNELS
static const int CTPPS_DIAMOND_STATION_ID
std::unordered_map< unsigned int, ChannelPlots > channelPlots_
void setCurrentFolder(const std::string &fullpath)
Definition: DQMStore.cc:274
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_
static const int CTPPS_DIAMOND_RP_ID
void CTPPSDiamondDQMSource::dqmBeginRun ( const edm::Run iRun,
const edm::EventSetup iSetup 
)
overrideprotected

Definition at line 394 of file CTPPSDiamondDQMSource.cc.

References centralOOT_, edm::contains(), CTPPS_DIAMOND_RP_ID, CTPPS_DIAMOND_STATION_ID, CTPPS_FAR_RP_ID, CTPPS_PIXEL_STATION_ID, relativeConstraints::geom, edm::EventSetup::get(), CTPPSGeometry::getSensor(), horizontalShiftBwDiamondPixels_, horizontalShiftOfDiamond_, DetGeomDesc::params(), edm::ESHandle< T >::product(), edm::RunBase::run(), runParameters_, and DetGeomDesc::translation().

395 {
396  centralOOT_ = -999;
397  for ( const auto& oot : runParameters_ ) {
398  if ( edm::contains( oot.first, edm::EventID( iRun.run(), 0, 1 ) ) ) {
399  centralOOT_ = oot.second; break;
400  }
401  }
402 
403  // Get detector shifts from the geometry
405  iSetup.get<VeryForwardRealGeometryRecord>().get( geometry_ );
406  const CTPPSGeometry *geom = geometry_.product();
408  const DetGeomDesc* det = geom->getSensor( detid );
409  horizontalShiftOfDiamond_ = det->translation().x() - det->params().at( 0 );
410 
411  // Rough alignement of pixel detector for diamond thomography
413  if ( iRun.run()>300000 ) { //Pixel installed
414  det = geom->getSensor( pixid );
416  }
417 }
bool contains(EventRange const &lh, EventID const &rh)
Definition: EventRange.cc:38
RunNumber_t run() const
Definition: RunBase.h:40
Event setup record containing the real (actual) geometry information.
static const int CTPPS_PIXEL_STATION_ID
static const int CTPPS_DIAMOND_STATION_ID
const DetGeomDesc * getSensor(unsigned int id) const
returns geometry of a detector performs necessary checks, returns NULL if fails
std::vector< std::pair< edm::EventRange, int > > runParameters_
Geometrical description of a sensor.
Definition: DetGeomDesc.h:37
DDTranslation translation() const
Definition: DetGeomDesc.h:84
The manager class for TOTEM RP geometry.
Definition: CTPPSGeometry.h:33
static const int CTPPS_FAR_RP_ID
T get() const
Definition: EventSetup.h:63
std::vector< double > params() const
Definition: DetGeomDesc.h:89
Detector ID class for CTPPS Timing Diamond detectors. Bits [19:31] : Assigend in CTPPSDetId Calss Bit...
static const int CTPPS_DIAMOND_RP_ID
T const * product() const
Definition: ESHandle.h:86
void CTPPSDiamondDQMSource::endLuminosityBlock ( const edm::LuminosityBlock ,
const edm::EventSetup  
)
overrideprotected

Definition at line 969 of file CTPPSDiamondDQMSource.cc.

References CTPPSDetId::arm(), CTPPSDiamondDetId::channel(), channelPlots_, PostProcessor_cff::efficiency, CTPPSDiamondDetId::plane(), planePlots_, plotFactory::plot, potPlots_, CTPPSDetId::rp(), SEC_PER_LUMI_SECTION, CTPPSDiamondDetId::setPlane(), and pileupDistInMC::total.

970 {
971  for ( auto& plot : channelPlots_ ) {
972  if ( plot.second.hitsCounterPerLumisection != 0 ) {
973  plot.second.hit_rate->Fill( (double) plot.second.hitsCounterPerLumisection / SEC_PER_LUMI_SECTION );
974  }
975  plot.second.hitsCounterPerLumisection = 0;
976 
977  double HundredOverHitCounter = .0;
978  if ( plot.second.HitCounter != 0 )
979  HundredOverHitCounter = 100. / plot.second.HitCounter;
980  plot.second.HPTDCErrorFlags->setBinContent( 16, HundredOverHitCounter * plot.second.MHCounter );
981  plot.second.leadingWithoutTrailing->setBinContent(1, HundredOverHitCounter * plot.second.LeadingOnlyCounter );
982  plot.second.leadingWithoutTrailing->setBinContent(2, HundredOverHitCounter * plot.second.TrailingOnlyCounter );
983  plot.second.leadingWithoutTrailing->setBinContent(3, HundredOverHitCounter * plot.second.CompleteCounter );
984  }
985 
986  for ( auto& plot : potPlots_ ) {
987  double HundredOverHitCounterPot = 0.;
988  if ( plot.second.HitCounter !=0 )
989  HundredOverHitCounterPot = 100. / plot.second.HitCounter;
990  plot.second.leadingWithoutTrailingCumulativePot->setBinContent(1, HundredOverHitCounterPot * plot.second.LeadingOnlyCounter );
991  plot.second.leadingWithoutTrailingCumulativePot->setBinContent(2, HundredOverHitCounterPot * plot.second.TrailingOnlyCounter );
992  plot.second.leadingWithoutTrailingCumulativePot->setBinContent(3, HundredOverHitCounterPot * plot.second.CompleteCounter );
993 
994  plot.second.MHComprensive->Reset();
995  CTPPSDiamondDetId rpId(plot.first);
996  for ( auto& chPlot : channelPlots_ ) {
997  CTPPSDiamondDetId chId(chPlot.first);
998  if ( chId.arm() == rpId.arm() && chId.rp() == rpId.rp() ) {
999  plot.second.MHComprensive->Fill(chId.plane(), chId.channel(), chPlot.second.HPTDCErrorFlags->getBinContent( 16 ) );
1000  }
1001  }
1002 
1003  }
1004 
1005  // Efficiencies of single channels
1006  for ( auto& plot : potPlots_ ) {
1007  plot.second.EfficiencyOfChannelsInPot->Reset();
1008  for ( auto& element : plot.second.effTriplecountingChMap ) {
1009  if ( plot.second.effDoublecountingChMap[ element.first ] > 0) {
1010  int plane = element.first / 100;
1011  int channel = element.first % 100;
1012  double counted = element.second;
1013  double total = plot.second.effDoublecountingChMap[ element.first ];
1014  double efficiency = counted / total;
1015 // double error = std::sqrt( efficiency * ( 1 - efficiency ) / total );
1016 
1017  plot.second.EfficiencyOfChannelsInPot->Fill(plane, channel, 100*efficiency);
1018  }
1019  }
1020  }
1021 
1022  // Efficeincy wrt pixels //TODO
1023  for ( auto& plot : planePlots_ ) {
1024  TH2F *hitHistoTmp = plot.second.EfficiencyWRTPixelsInPlane->getTH2F();
1025 
1026  CTPPSDiamondDetId detId_pot( plot.first );
1027  detId_pot.setPlane( 0 );
1028 
1029  hitHistoTmp->Divide( &(plot.second.pixelTracksMapWithDiamonds), &(potPlots_[detId_pot].pixelTracksMap) );
1030  }
1031 }
std::unordered_map< unsigned int, ChannelPlots > channelPlots_
std::unordered_map< unsigned int, PotPlots > potPlots_
static const double SEC_PER_LUMI_SECTION
Detector ID class for CTPPS Timing Diamond detectors. Bits [19:31] : Assigend in CTPPSDetId Calss Bit...
std::unordered_map< unsigned int, PlanePlots > planePlots_
void CTPPSDiamondDQMSource::endRun ( const edm::Run ,
const edm::EventSetup  
)
overrideprotected

Definition at line 1036 of file CTPPSDiamondDQMSource.cc.

References DEFINE_FWK_MODULE.

1037 {}

Member Data Documentation

int CTPPSDiamondDQMSource::centralOOT_
private

Definition at line 102 of file CTPPSDiamondDQMSource.cc.

Referenced by analyze(), and dqmBeginRun().

const int CTPPSDiamondDQMSource::CHANNEL_OF_VFAT_CLOCK = 30
staticprivate

Definition at line 76 of file CTPPSDiamondDQMSource.cc.

Referenced by analyze().

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

Definition at line 205 of file CTPPSDiamondDQMSource.cc.

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

const int CTPPSDiamondDQMSource::CTPPS_DIAMOND_NUM_OF_CHANNELS = 12
staticprivate

Definition at line 87 of file CTPPSDiamondDQMSource.cc.

Referenced by bookHistograms().

const int CTPPSDiamondDQMSource::CTPPS_DIAMOND_NUM_OF_PLANES = 4
staticprivate

Definition at line 86 of file CTPPSDiamondDQMSource.cc.

Referenced by bookHistograms().

const int CTPPSDiamondDQMSource::CTPPS_DIAMOND_RP_ID = 6
staticprivate

Definition at line 82 of file CTPPSDiamondDQMSource.cc.

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

const int CTPPSDiamondDQMSource::CTPPS_DIAMOND_STATION_ID = 1
staticprivate

Definition at line 81 of file CTPPSDiamondDQMSource.cc.

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

const int CTPPSDiamondDQMSource::CTPPS_FAR_RP_ID = 3
staticprivate

Definition at line 85 of file CTPPSDiamondDQMSource.cc.

Referenced by analyze(), and dqmBeginRun().

const int CTPPSDiamondDQMSource::CTPPS_FED_ID_45 = 583
staticprivate

Definition at line 88 of file CTPPSDiamondDQMSource.cc.

Referenced by analyze().

const int CTPPSDiamondDQMSource::CTPPS_FED_ID_56 = 582
staticprivate

Definition at line 89 of file CTPPSDiamondDQMSource.cc.

Referenced by analyze().

const int CTPPSDiamondDQMSource::CTPPS_NEAR_RP_ID = 2
staticprivate

Definition at line 84 of file CTPPSDiamondDQMSource.cc.

const int CTPPSDiamondDQMSource::CTPPS_NUM_OF_ARMS = 2
staticprivate

Definition at line 80 of file CTPPSDiamondDQMSource.cc.

Referenced by bookHistograms().

const int CTPPSDiamondDQMSource::CTPPS_PIXEL_STATION_ID = 2
staticprivate

Definition at line 83 of file CTPPSDiamondDQMSource.cc.

Referenced by analyze(), and dqmBeginRun().

const double CTPPSDiamondDQMSource::DISPLAY_RESOLUTION_FOR_HITS_MM = 0.1
staticprivate

Definition at line 77 of file CTPPSDiamondDQMSource.cc.

int CTPPSDiamondDQMSource::EC_difference_45_
private

Definition at line 162 of file CTPPSDiamondDQMSource.cc.

Referenced by analyze().

int CTPPSDiamondDQMSource::EC_difference_56_
private

Definition at line 162 of file CTPPSDiamondDQMSource.cc.

Referenced by analyze().

bool CTPPSDiamondDQMSource::excludeMultipleHits_
private

Definition at line 98 of file CTPPSDiamondDQMSource.cc.

Referenced by analyze().

GlobalPlots CTPPSDiamondDQMSource::globalPlot_
private

Definition at line 112 of file CTPPSDiamondDQMSource.cc.

Referenced by bookHistograms().

double CTPPSDiamondDQMSource::horizontalShiftBwDiamondPixels_
private

Definition at line 99 of file CTPPSDiamondDQMSource.cc.

Referenced by analyze(), and dqmBeginRun().

double CTPPSDiamondDQMSource::horizontalShiftOfDiamond_
private

Definition at line 100 of file CTPPSDiamondDQMSource.cc.

Referenced by analyze(), and dqmBeginRun().

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

Definition at line 79 of file CTPPSDiamondDQMSource.cc.

Referenced by analyze().

const double CTPPSDiamondDQMSource::INV_DISPLAY_RESOLUTION_FOR_HITS_MM = 1./DISPLAY_RESOLUTION_FOR_HITS_MM
staticprivate
std::unordered_map<unsigned int, PlanePlots> CTPPSDiamondDQMSource::planePlots_
private

Definition at line 180 of file CTPPSDiamondDQMSource.cc.

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

std::unordered_map<unsigned int, PotPlots> CTPPSDiamondDQMSource::potPlots_
private
std::vector< std::pair<edm::EventRange, int> > CTPPSDiamondDQMSource::runParameters_
private

Definition at line 101 of file CTPPSDiamondDQMSource.cc.

Referenced by CTPPSDiamondDQMSource(), and dqmBeginRun().

const double CTPPSDiamondDQMSource::SEC_PER_LUMI_SECTION = 23.31
staticprivate

Definition at line 75 of file CTPPSDiamondDQMSource.cc.

Referenced by endLuminosityBlock().

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

Definition at line 94 of file CTPPSDiamondDQMSource.cc.

Referenced by analyze().

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

Definition at line 95 of file CTPPSDiamondDQMSource.cc.

Referenced by analyze().

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

Definition at line 93 of file CTPPSDiamondDQMSource.cc.

Referenced by analyze().

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

Definition at line 96 of file CTPPSDiamondDQMSource.cc.

Referenced by analyze().

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

Definition at line 92 of file CTPPSDiamondDQMSource.cc.

Referenced by analyze().

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

Definition at line 91 of file CTPPSDiamondDQMSource.cc.

Referenced by analyze().

unsigned int CTPPSDiamondDQMSource::verbosity_
private

Definition at line 103 of file CTPPSDiamondDQMSource.cc.

Referenced by analyze().