ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
InnerDetector
InDetCalibAlgs
SCT_CalibAlgs
src
SCT_CalibHvTool.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3
*/
4
10
11
#include "
SCT_CalibHvTool.h
"
12
#include "
SCT_CalibUtilities.h
"
13
#include "
SCT_CalibNumbers.h
"
14
15
using namespace
SCT_CalibAlgs
;
16
17
namespace
{
18
void
19
initQueue(std::queue<int>& q,
const
int
numvals,
const
int
setval) {
20
for
(
int
i{0};
i
<numvals; ++
i
)
q
.push(setval);
21
}
22
}
23
24
SCT_CalibHvTool::SCT_CalibHvTool
(
const
std::string&
type
,
const
std::string& name,
const
IInterface* parent) :
25
base_class(
type
, name, parent)
26
{
27
}
28
29
StatusCode
30
SCT_CalibHvTool::initialize
() {
31
ATH_CHECK
(
m_DCSConditionsTool
.retrieve());
32
return
StatusCode::SUCCESS;
33
}
34
35
StatusCode
36
SCT_CalibHvTool::finalize
() {
37
return
StatusCode::SUCCESS;
38
}
39
40
bool
41
SCT_CalibHvTool::book
() {
42
bool
result{
true
};
43
ATH_MSG_DEBUG
(
"Book HVTrips"
);
44
//now initialize the queues (fill 100 spots with 0):
45
std::queue<int> qtemp;
46
initQueue(qtemp,
m_maxq
,0);
47
// need to keep previous bins lbn 4 deep.
48
initQueue(
m_prevLBN
, 4, 0);
49
std::vector<std::pair <int,int>> dummy;
50
//first set num events processed to 0
51
m_phvtripProcessedEventsInt
.insert(
m_phvtripProcessedEventsInt
.end(),
n_elements
, 1);
52
m_phvtripRunningTotalInt
.insert(
m_phvtripRunningTotalInt
.end(),
n_elements
, 0);
53
m_phvtripHasItTripped
.insert(
m_phvtripHasItTripped
.end(),
n_elements
, 0);
54
m_phvtripQueue
.insert(
m_phvtripQueue
.end(),
n_elements
, qtemp);
55
m_summarytrips
.insert(
m_summarytrips
.end(),
n_elements
, dummy);
56
m_summarytripslb
.insert(
m_summarytripslb
.end(),
n_elements
, dummy);
57
m_phvtripHasItTripped_prev
=
m_phvtripHasItTripped
;
58
return
result;
59
}
60
61
bool
62
SCT_CalibHvTool::fill
(
const
bool
fromData) {
63
const
EventContext& ctx = Gaudi::Hive::currentContext();
64
65
if
(fromData) {
66
return
fillFromData
();
67
}
68
bool
result{
true
};
69
int
lumi_block{0};
//fix me!
70
const
int
wafersize{
static_cast<
int
>
(
m_sct_waferHash
->size())};
71
int
time_stamp{
static_cast<
int
>
(ctx.eventID().time_stamp())};
72
int
curr_time{time_stamp};
73
int
dtime{curr_time -
m_phvtripPrevTime
};
74
int
totalHits{0};
75
if
(curr_time<
m_phvtripPrevTime
) {
76
ATH_MSG_ERROR
(
"Events not sorted properly (time is going backwards!) "
);
77
return
false
;
78
}
79
// for first event
80
if
(
m_phvtripFirstTime
> curr_time) {
81
m_phvtripFirstTime
= curr_time;
82
}
83
bool
newbin{
false
};
84
// check if we have a new time bin, if we do pop off the back (oldest) part
85
// of the queue and enqueue 0 for every wafer
86
int
maxtbins{5};
87
if
(dtime > maxtbins) {
88
newbin =
true
;
89
ATH_MSG_DEBUG
(
" new t bin "
<< dtime <<
" since start "
<< (curr_time-(
m_phvtripFirstTime
-1.01)));
90
m_phvtripHasItTripped_prev
=
m_phvtripHasItTripped
;
91
for
(
int
iwaf{0}; iwaf!=
n_elements
; ++iwaf) {
92
m_phvtripQueue
[iwaf].pop();
93
m_phvtripQueue
[iwaf].push(0);
94
m_phvtripHasItTripped
[iwaf]=0;
95
}
96
}
97
// Loop over all hits in the event
98
bool
isgoodnow;
99
for
(
int
itrk{0}; itrk!=wafersize; ++itrk) {
100
int
waferhash{(*m_sct_waferHash)[itrk]};
101
Identifier
waferId{
m_pSCTHelper
->wafer_id(waferhash)};
102
Identifier
moduleId{
m_pSCTHelper
->module_id(waferId)};
103
//step one is to make sure this one isn't already know to be messed up:
104
isgoodnow =
m_DCSConditionsTool
->isGood(moduleId,ctx,
InDetConditions::SCT_MODULE
);
105
ATH_MSG_DEBUG
(
"checked is good "
<< isgoodnow);
106
if
(isgoodnow) {
107
int
numhits{(*m_sct_numHitsInWafer)[itrk]};
108
totalHits += numhits;
113
double
limit{
m_relativetriplimit
*
static_cast<
double
>
(
m_phvtripRunningTotalInt
[waferhash]) / (
static_cast<
double
>
(curr_time)-(
static_cast<
double
>
(
m_phvtripFirstTime
-0.01)))};
114
115
ATH_MSG_DEBUG
(
"waferhash "
<<waferhash<<
" itrk "
<<itrk <<
" run tot "
<<
m_phvtripRunningTotalInt
[waferhash]
116
<<
" num hits "
<<numhits<<
" evnts processed "
<<
m_phvtripProcessedEventsInt
[waferhash] <<
" limit "
<<limit
117
<<
" abs limit, rel limit "
<<
m_absolutetriplimit
<<
","
<<
m_relativetriplimit
<<
" max bins "
<<maxtbins);
118
119
if
( ((numhits +
m_phvtripQueue
[waferhash].back() )/
static_cast<
double
>
(maxtbins) ) >
m_absolutetriplimit
120
and ((numhits +
m_phvtripQueue
[waferhash].back() )/
static_cast<
double
>
(maxtbins) ) > limit) {
121
//read back queue and see if the high hit rate is persistant for 3 previous bins (a bin is 5 seconds by default)
122
for
(
int
iq{0}; iq<
m_maxq
; ++iq) {
123
m_tq
[iq]=
m_phvtripQueue
[waferhash].front();
124
m_phvtripQueue
[waferhash].pop();
125
}
126
if
(
m_tq
[
m_maxq
-2]/
static_cast<
double
>
(maxtbins) > limit &&
m_tq
[
m_maxq
-3]/
static_cast<
double
>
(maxtbins) > limit &&
m_tq
[
m_maxq
-4]/
static_cast<
double
>
(maxtbins) > limit) {
127
// found a persistent trip/thing
128
ATH_MSG_DEBUG
(
"Found a potential trip in SCT wafer "
<< waferhash);
129
ATH_MSG_DEBUG
(
"TRIP more info: limit = "
<< limit <<
" abslimit = "
<<
m_absolutetriplimit
130
<<
" hits/secs now = "
<< ((numhits +
m_tq
[
m_maxq
-1])/ maxtbins )
131
<<
" running total = "
<<
m_phvtripRunningTotalInt
[waferhash]
132
<<
" running average = "
<<
m_phvtripRunningTotalInt
[waferhash] / (curr_time-(
m_phvtripFirstTime
-1.01)));
133
m_phvtripHasItTripped
[waferhash] = (numhits +
m_tq
[
m_maxq
-1] );
134
}
// end trip found
135
136
//put queue back the way we found it:
137
for
(
int
iq{0}; iq <
m_maxq
; ++iq) {
138
m_phvtripQueue
[waferhash].push(
m_tq
[iq]);
139
}
140
}
// end potential trip id
141
//incriment event counter
142
m_phvtripProcessedEventsInt
[waferhash] += 1;
143
//recalcuate running total:
144
m_phvtripRunningTotalInt
[waferhash] += numhits;
145
m_phvtripQueue
[waferhash].back() += numhits;
146
}
//end is good check
147
else
{
148
ATH_MSG_DEBUG
(
"Was a bad module already: "
<< waferhash);
149
}
150
}
//end loop over tracks
151
152
// text output, summarizing the event
153
//if new bin summarzie the previous event.
154
if
(newbin) {
155
SCT_ID::const_id_iterator
waferItr{
m_waferItrBegin
};
156
SCT_ID::const_id_iterator
waferItrE{
m_waferItrEnd
};
157
for
(; waferItr not_eq waferItrE; ++waferItr) {
158
Identifier
waferId{*waferItr};
159
IdentifierHash
waferHash{
m_pSCTHelper
->wafer_hash(waferId)};
160
if
(
m_phvtripHasItTripped_prev
[waferHash]>0) {
161
std::pair<int, int> wp;
162
wp.first = (
m_phvtripPrevTime
- 3*maxtbins);
163
wp.second = (
m_phvtripPrevTime
+ maxtbins);
164
m_summarytrips
[waferHash].push_back(wp);
165
std::pair<int,int> lbn;
166
lbn.first =
m_prevLBN
.front();
167
lbn.second =
m_prevLBN
.back();
168
m_summarytripslb
[waferHash].push_back(lbn);
169
}
170
}
171
m_phvtripPrevTime
= curr_time;
//reset prev and current time
172
m_prevLBN
.pop();
173
m_prevLBN
.push(lumi_block);
174
}
175
176
for
(
int
iwaf{0}; iwaf!=
n_elements
; ++iwaf) {
177
ATH_MSG_DEBUG
(
"mod "
<< iwaf <<
" events with that waf "
<<
m_phvtripProcessedEventsInt
[iwaf] <<
" numhits "
<<
m_phvtripRunningTotalInt
[iwaf]);
178
ATH_MSG_DEBUG
(
"did it trip "
<<
m_phvtripHasItTripped
[iwaf]);
179
if
(
m_phvtripHasItTripped
[iwaf]) {
180
ATH_MSG_DEBUG
(
"TRIP more info: abslimit = "
<<
m_absolutetriplimit
181
<<
" hits/secs now = "
<< (
m_phvtripQueue
[iwaf].back() / maxtbins )
182
<<
" running total = "
<<
m_phvtripRunningTotalInt
[iwaf]
183
<<
" running average = "
<<
m_phvtripRunningTotalInt
[iwaf] / (curr_time-(
m_phvtripFirstTime
-1.01)));
184
}
185
}
186
if
(
m_outputLowHits
&& (totalHits <
m_lowHitCut
) ) {
187
}
188
return
result;
189
}
190
191
bool
192
SCT_CalibHvTool::fillFromData
() {
193
bool
result{
true
};
194
return
result;
195
}
ATH_CHECK
#define ATH_CHECK
Evaluate an expression and check for errors.
Definition
AthCheckMacros.h:40
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition
AthMsgStreamMacros.h:33
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition
AthMsgStreamMacros.h:29
SCT_CalibHvTool.h
Header file for the SCT_CalibHvTool class.
SCT_CalibNumbers.h
SCT_CalibUtilities.h
header file for the SCTCalibUtilities
IdentifierHash
This is a "hash" representation of an Identifier.
Definition
IdentifierHash.h:25
SCT_CalibHvTool::m_lowHitCut
int m_lowHitCut
Definition
SCT_CalibHvTool.h:91
SCT_CalibHvTool::m_outputLowHits
bool m_outputLowHits
Definition
SCT_CalibHvTool.h:90
SCT_CalibHvTool::m_phvtripPrevTime
int m_phvtripPrevTime
Definition
SCT_CalibHvTool.h:82
SCT_CalibHvTool::m_DCSConditionsTool
ToolHandle< ISCT_DCSConditionsTool > m_DCSConditionsTool
Definition
SCT_CalibHvTool.h:63
SCT_CalibHvTool::m_phvtripProcessedEventsInt
VecInt m_phvtripProcessedEventsInt
Definition
SCT_CalibHvTool.h:78
SCT_CalibHvTool::SCT_CalibHvTool
SCT_CalibHvTool(const std::string &, const std::string &, const IInterface *)
Definition
SCT_CalibHvTool.cxx:24
SCT_CalibHvTool::m_summarytripslb
std::vector< std::vector< std::pair< int, int > > > m_summarytripslb
Definition
SCT_CalibHvTool.h:89
SCT_CalibHvTool::m_phvtripRunningTotalInt
VecInt m_phvtripRunningTotalInt
Definition
SCT_CalibHvTool.h:77
SCT_CalibHvTool::m_tq
int m_tq[100]
Definition
SCT_CalibHvTool.h:86
SCT_CalibHvTool::m_absolutetriplimit
double m_absolutetriplimit
Definition
SCT_CalibHvTool.h:84
SCT_CalibHvTool::m_waferItrBegin
SCT_ID::const_id_iterator m_waferItrBegin
Definition
SCT_CalibHvTool.h:66
SCT_CalibHvTool::finalize
virtual StatusCode finalize()
Definition
SCT_CalibHvTool.cxx:36
SCT_CalibHvTool::m_phvtripHasItTripped_prev
VecInt m_phvtripHasItTripped_prev
Definition
SCT_CalibHvTool.h:80
SCT_CalibHvTool::m_prevLBN
std::queue< int > m_prevLBN
Definition
SCT_CalibHvTool.h:76
SCT_CalibHvTool::n_elements
@ n_elements
Definition
SCT_CalibHvTool.h:59
SCT_CalibHvTool::book
virtual bool book()
Definition
SCT_CalibHvTool.cxx:41
SCT_CalibHvTool::m_phvtripFirstTime
int m_phvtripFirstTime
Definition
SCT_CalibHvTool.h:83
SCT_CalibHvTool::fillFromData
virtual bool fillFromData()
Definition
SCT_CalibHvTool.cxx:192
SCT_CalibHvTool::m_relativetriplimit
double m_relativetriplimit
Definition
SCT_CalibHvTool.h:85
SCT_CalibHvTool::m_maxq
int m_maxq
Definition
SCT_CalibHvTool.h:73
SCT_CalibHvTool::m_phvtripHasItTripped
VecInt m_phvtripHasItTripped
Definition
SCT_CalibHvTool.h:79
SCT_CalibHvTool::m_waferItrEnd
SCT_ID::const_id_iterator m_waferItrEnd
Definition
SCT_CalibHvTool.h:67
SCT_CalibHvTool::fill
virtual bool fill(const bool fromData=false)
Definition
SCT_CalibHvTool.cxx:62
SCT_CalibHvTool::m_sct_waferHash
VecInt * m_sct_waferHash
Definition
SCT_CalibHvTool.h:69
SCT_CalibHvTool::initialize
virtual StatusCode initialize()
Definition
SCT_CalibHvTool.cxx:30
SCT_CalibHvTool::m_pSCTHelper
const SCT_ID * m_pSCTHelper
Definition
SCT_CalibHvTool.h:65
SCT_CalibHvTool::m_phvtripQueue
std::vector< std::queue< int > > m_phvtripQueue
Definition
SCT_CalibHvTool.h:75
SCT_CalibHvTool::m_summarytrips
std::vector< std::vector< std::pair< int, int > > > m_summarytrips
Definition
SCT_CalibHvTool.h:88
SCT_ID::const_id_iterator
std::vector< Identifier >::const_iterator const_id_iterator
Definition
SCT_ID.h:73
Identifier
Definition
IdentifierFieldParser.cxx:14
InDetConditions::SCT_MODULE
@ SCT_MODULE
Definition
InDetHierarchy.h:14
SCT_CalibAlgs
Definition
IElementStreamer.cxx:13
extractSporadic.q
list q
Definition
extractSporadic.py:97
lumiFormat.i
int i
Definition
lumiFormat.py:85
type
Generated on
for ATLAS Offline Software by
1.17.0