ATLAS Offline Software
Trigger
TrigMonitoring
TrigSteerMonitor
src
TimeDivider.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
3
*/
4
5
#include <algorithm>
6
#include <time.h>
7
8
#include "
TimeDivider.h
"
9
10
TimeDivider::TimeDivider
(
unsigned
int
intervals,
unsigned
int
duration
,
unit
u
)
11
: m_intervals(intervals),
12
m_duration(
duration
),
13
m_unit(
u
),
14
m_current_interval(0) {
15
unsigned
int
temp_iv;
16
time_t temp_time =
time
(0);
17
m_beginning
= temp_time;
18
isPassed
(temp_time, temp_iv, temp_iv);
19
}
20
21
bool
TimeDivider::isPassed
(time_t
time
,
unsigned
int
& newinterval,
unsigned
int
& oldinterval) {
22
23
// convert to tm structure for seconds & minutes
24
struct
tm
t
;
25
gmtime_r(&
time
, &
t
);
26
unsigned
count
= 0;
27
if
(
m_unit
==
seconds
) {
28
count
=
t
.tm_sec;
29
}
else
if
(
m_unit
==
minutes
) {
30
count
=
t
.tm_min;
31
}
32
33
// calculate next interval
34
unsigned
int
iv = (
count
% (
m_intervals
*
m_duration
))/
m_duration
;
35
36
// is new interval differnt than recently returned? If so signal it.
37
if
(
m_current_interval
!= iv ) {
38
oldinterval =
m_current_interval
;
39
newinterval =
m_current_interval
= iv;
40
m_beginning
=
time
;
41
return
true
;
42
}
43
newinterval = oldinterval =
m_current_interval
;
44
return
false
;
45
}
46
47
unsigned
int
TimeDivider::forcePassed
(time_t
time
,
unsigned
int
&
interval
) {
48
interval
=
m_current_interval
;
49
return
std::max
((
time
-
m_beginning
), (
long
int
)1);
// never return 0
50
}
51
52
53
/* this can be used to test TimeDivider
54
int main() {
55
TimeDivider ts(6, 10, TimeDivider::seconds);
56
TimeDivider sts(10, 5, TimeDivider::seconds);
57
TimeDivider tmin(3, 1, TimeDivider::minutes);
58
59
for ( int i = 0; i < 900; ++i ) {
60
61
usleep(500000);
62
time_t t = time(0);
63
tm gmt = *gmtime(&t);
64
unsigned interval;
65
bool switchNow;
66
switchNow = ts.isPassed(t, interval);
67
cout << "second divider " << switchNow << " to " << interval << " " << ctime(&t);
68
69
//switchNow = sts.isPassed(t, interval);
70
// cout << "second (short) divider " << switchNow << " to " << interval << " " << ctime(&t);
71
72
// switchNow = tmin.isPassed(t, interval);
73
// cout << "minutes divider " << switchNow << " to " << interval << " " << gmt.tm_min << ":" << gmt.tm_sec << endl;
74
75
}
76
}
77
*/
TimeDivider.h
max
#define max(a, b)
Definition:
cfImp.cxx:41
TimeDivider::m_intervals
unsigned int m_intervals
Definition:
TimeDivider.h:50
TimeDivider::TimeDivider
TimeDivider(unsigned int intervals, unsigned int duration, unit u)
construct the TimeDivider
Definition:
TimeDivider.cxx:10
TimeDivider::isPassed
bool isPassed(time_t time, unsigned int &newinterval, unsigned int &oldinterval)
method to know if one shoudl switch to new interval
Definition:
TimeDivider.cxx:21
read_hist_ntuple.t
t
Definition:
read_hist_ntuple.py:5
Trk::u
@ u
Enums for curvilinear frames.
Definition:
ParamDefs.h:77
XMLtoHeader.count
count
Definition:
XMLtoHeader.py:85
TimeDivider::m_duration
unsigned int m_duration
Definition:
TimeDivider.h:51
TimeDivider::m_beginning
time_t m_beginning
Definition:
TimeDivider.h:54
TimeDivider::forcePassed
unsigned int forcePassed(time_t time, unsigned int &oldinterval)
method
Definition:
TimeDivider.cxx:47
getLatestRuns.interval
interval
Definition:
getLatestRuns.py:24
PixelAthHitMonAlgCfg.duration
duration
Definition:
PixelAthHitMonAlgCfg.py:152
TimeDivider::m_current_interval
unsigned int m_current_interval
Definition:
TimeDivider.h:53
TimeDivider::seconds
@ seconds
Definition:
TimeDivider.h:22
TimeDivider::unit
unit
Definition:
TimeDivider.h:22
CaloSwCorrections.time
def time(flags, cells_name, *args, **kw)
Definition:
CaloSwCorrections.py:242
TimeDivider::minutes
@ minutes
Definition:
TimeDivider.h:22
TimeDivider::m_unit
unit m_unit
Definition:
TimeDivider.h:52
Generated on Thu Nov 7 2024 21:28:36 for ATLAS Offline Software by
1.8.18