ATLAS Offline Software
Public Member Functions | Private Member Functions | Private Attributes | List of all members
TrigSignatureMoni::RateHistogram Class Reference
Collaboration diagram for TrigSignatureMoni::RateHistogram:

Public Member Functions

 RateHistogram ()=default
 
 ~RateHistogram ()
 
StatusCode init (const std::string &histoName, const std::string &histoTitle, const int x, const int y, const std::string &registerPath, const ServiceHandle< ITHistSvc > &histSvc)
 
LockedHandle< TH2 > &getHistogram ATLAS_NOT_CONST_THREAD_SAFE () const
 
LockedHandle< TH2 > &getBuffer ATLAS_NOT_CONST_THREAD_SAFE () const
 
std::unique_ptr< Athena::AlgorithmTimer > & getTimer ()
 
void startTimer (unsigned int duration, unsigned int intervals)
 
void stopTimer ()
 
void fill (const double x, const double y) const
 

Private Member Functions

void updatePublished (unsigned int duration) const
 
void callback ()
 

Private Attributes

LockedHandle< TH2 > m_bufferHistogram ATLAS_THREAD_SAFE
 
LockedHandle< TH2 > m_histogram ATLAS_THREAD_SAFE
 
std::mutex m_mutex
 
std::unique_ptr< Athena::AlgorithmTimerm_timer
 
std::unique_ptr< TimeDividerm_timeDivider
 
unsigned int m_duration {0}
 

Detailed Description

Definition at line 50 of file TrigSignatureMoni.h.

Constructor & Destructor Documentation

◆ RateHistogram()

TrigSignatureMoni::RateHistogram::RateHistogram ( )
default

◆ ~RateHistogram()

TrigSignatureMoni::RateHistogram::~RateHistogram ( )

Definition at line 499 of file TrigSignatureMoni.cxx.

499  {
500  delete m_bufferHistogram.get();
501 }

Member Function Documentation

◆ ATLAS_NOT_CONST_THREAD_SAFE() [1/2]

LockedHandle<TH2>& getHistogram TrigSignatureMoni::RateHistogram::ATLAS_NOT_CONST_THREAD_SAFE ( ) const

◆ ATLAS_NOT_CONST_THREAD_SAFE() [2/2]

LockedHandle<TH2>& getBuffer TrigSignatureMoni::RateHistogram::ATLAS_NOT_CONST_THREAD_SAFE ( ) const

◆ callback()

void TrigSignatureMoni::RateHistogram::callback ( )
private

Definition at line 555 of file TrigSignatureMoni.cxx.

555  {
556  // Ask time divider if we need to switch to new interval
557  time_t t = time(0);
558  unsigned int newinterval;
559  unsigned int oldinterval;
560 
561  if (m_timeDivider->isPassed(t, newinterval, oldinterval)) {
563  }
564 
565  // Schedule itself in another 1/20 of the integration period in milliseconds
566  if (m_timer) m_timer->start(m_duration*50);
567 }

◆ fill()

void TrigSignatureMoni::RateHistogram::fill ( const double  x,
const double  y 
) const

Definition at line 527 of file TrigSignatureMoni.cxx.

527  {
528  m_bufferHistogram->Fill(x, y);
529 }

◆ getTimer()

std::unique_ptr< Athena::AlgorithmTimer > & TrigSignatureMoni::RateHistogram::getTimer ( )

Definition at line 523 of file TrigSignatureMoni.cxx.

523  {
524  return m_timer;
525 }

◆ init()

StatusCode TrigSignatureMoni::RateHistogram::init ( const std::string &  histoName,
const std::string &  histoTitle,
const int  x,
const int  y,
const std::string &  registerPath,
const ServiceHandle< ITHistSvc > &  histSvc 
)

Definition at line 503 of file TrigSignatureMoni.cxx.

504  {
505  std::unique_ptr<TH2> h = std::make_unique<TH2F>(histoName.c_str(), histoTitle.c_str(), x, 1, x + 1, y, 1, y + 1);
506  ATH_CHECK( histSvc->regShared( registerPath.c_str(), std::move(h), m_histogram));
507 
508  TH2I * hB = new TH2I( (histoName + "Buffer").c_str(), histoTitle.c_str(), x, 1, x + 1, y, 1, y + 1);
509  m_bufferHistogram.set(hB, &m_mutex);
510  m_bufferHistogram->SetDirectory(0);
511 
512  return StatusCode::SUCCESS;
513 }

◆ startTimer()

void TrigSignatureMoni::RateHistogram::startTimer ( unsigned int  duration,
unsigned int  intervals 
)

Definition at line 531 of file TrigSignatureMoni.cxx.

531  {
533  m_timeDivider = std::make_unique<TimeDivider>(intervals, duration, TimeDivider::seconds);
534  m_timer = std::make_unique<Athena::AlgorithmTimer>(duration*50, std::bind(&RateHistogram::callback, this));
535 }

◆ stopTimer()

void TrigSignatureMoni::RateHistogram::stopTimer ( )

Definition at line 537 of file TrigSignatureMoni.cxx.

537  {
538  if (m_timer) {
539  m_timer->stop();
540  time_t t = time(0);
541  unsigned int interval;
542  unsigned int duration = m_timeDivider->forcePassed(t, interval);
543  updatePublished(duration); // Divide by time that really passed not by interval duration
544  }
545 
546 }

◆ updatePublished()

void TrigSignatureMoni::RateHistogram::updatePublished ( unsigned int  duration) const
private

Definition at line 548 of file TrigSignatureMoni.cxx.

548  {
549  m_histogram->Reset("ICES");
550  m_histogram->Add(m_bufferHistogram.get(), 1./duration);
551  m_bufferHistogram->Reset("ICES");
552 }

Member Data Documentation

◆ ATLAS_THREAD_SAFE [1/2]

LockedHandle<TH2> m_bufferHistogram TrigSignatureMoni::RateHistogram::ATLAS_THREAD_SAFE
mutableprivate

Definition at line 84 of file TrigSignatureMoni.h.

◆ ATLAS_THREAD_SAFE [2/2]

LockedHandle<TH2> m_histogram TrigSignatureMoni::RateHistogram::ATLAS_THREAD_SAFE
mutableprivate

Definition at line 85 of file TrigSignatureMoni.h.

◆ m_duration

unsigned int TrigSignatureMoni::RateHistogram::m_duration {0}
private

Definition at line 89 of file TrigSignatureMoni.h.

◆ m_mutex

std::mutex TrigSignatureMoni::RateHistogram::m_mutex
private

Definition at line 86 of file TrigSignatureMoni.h.

◆ m_timeDivider

std::unique_ptr<TimeDivider> TrigSignatureMoni::RateHistogram::m_timeDivider
private

Definition at line 88 of file TrigSignatureMoni.h.

◆ m_timer

std::unique_ptr<Athena::AlgorithmTimer> TrigSignatureMoni::RateHistogram::m_timer
private

Definition at line 87 of file TrigSignatureMoni.h.


The documentation for this class was generated from the following files:
TrigSignatureMoni::RateHistogram::m_timer
std::unique_ptr< Athena::AlgorithmTimer > m_timer
Definition: TrigSignatureMoni.h:87
TrigSignatureMoni::RateHistogram::m_duration
unsigned int m_duration
Definition: TrigSignatureMoni.h:89
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
x
#define x
TH2I
Definition: rootspy.cxx:410
getLatestRuns.interval
interval
Definition: getLatestRuns.py:24
MuonSegmentReaderConfig.histSvc
histSvc
Definition: MuonSegmentReaderConfig.py:96
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
PixelAthHitMonAlgCfg.duration
duration
Definition: PixelAthHitMonAlgCfg.py:152
TrigSignatureMoni::RateHistogram::callback
void callback()
Definition: TrigSignatureMoni.cxx:555
TrigSignatureMoni::RateHistogram::m_timeDivider
std::unique_ptr< TimeDivider > m_timeDivider
Definition: TrigSignatureMoni.h:88
TimeDivider::seconds
@ seconds
Definition: TimeDivider.h:22
TrigSignatureMoni::RateHistogram::m_mutex
std::mutex m_mutex
Definition: TrigSignatureMoni.h:86
y
#define y
h
CaloSwCorrections.time
def time(flags, cells_name, *args, **kw)
Definition: CaloSwCorrections.py:242
TrigSignatureMoni::RateHistogram::updatePublished
void updatePublished(unsigned int duration) const
Definition: TrigSignatureMoni.cxx:548