ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
Trigger
TrigT1
L1Topo
L1TopoAlgorithms
Root
MinDeltaPhiIncl2.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3
*/
4
/*********************************
5
* MinDeltaPhiIncl2.cpp
6
* Created by Veronica Sorin on 14/8/14.
7
*
8
* @brief algorithm calculates the min phi-distance between two lists and applies delta-phi criteria
9
*
10
* @param NumberLeading
11
**********************************/
12
13
14
15
#include "
L1TopoAlgorithms/MinDeltaPhiIncl2.h
"
16
#include "
L1TopoCommon/Exception.h
"
17
#include "
L1TopoInterfaces/Decision.h
"
18
#include <cmath>
19
#include <string>
20
#include <algorithm>
21
22
#include <algorithm>
23
24
REGISTER_ALG_TCS
(MinDeltaPhiIncl2)
25
26
27
TCS
::
MinDeltaPhiIncl2
::
MinDeltaPhiIncl2
(
const
std
::
string
&
name
) :
DecisionAlg
(
name
)
28
{
29
defineParameter
(
"InputWidth1"
, 9);
30
defineParameter
(
"InputWidth2"
, 9);
31
defineParameter
(
"MaxTob1"
, 0);
32
defineParameter
(
"MaxTob2"
, 0);
33
defineParameter
(
"NumResultBits"
, 3);
34
defineParameter
(
"DeltaPhiMin"
, 0, 0);
35
defineParameter
(
"DeltaPhiMin"
, 0, 1);
36
defineParameter
(
"DeltaPhiMin"
, 0, 2);
37
defineParameter
(
"MinET1"
,1);
38
defineParameter
(
"MinET2"
,1);
39
setNumberOutputBits
(3);
40
}
41
42
TCS::MinDeltaPhiIncl2::~MinDeltaPhiIncl2
(){}
43
44
45
TCS::StatusCode
46
TCS::MinDeltaPhiIncl2::initialize
() {
47
p_NumberLeading1
=
parameter
(
"InputWidth1"
).value();
48
p_NumberLeading2
=
parameter
(
"InputWidth2"
).value();
49
if
(
parameter
(
"MaxTob1"
).value() > 0)
p_NumberLeading1
=
parameter
(
"MaxTob1"
).value();
50
if
(
parameter
(
"MaxTob2"
).value() > 0)
p_NumberLeading2
=
parameter
(
"MaxTob2"
).value();
51
52
for
(
unsigned
int
i=0; i<
numberOutputBits
(); ++i) {
53
p_DeltaPhiMin
[i] =
parameter
(
"DeltaPhiMin"
, i).value();
54
}
55
p_MinET1
=
parameter
(
"MinET1"
).value();
56
p_MinET2
=
parameter
(
"MinET2"
).value();
57
TRG_MSG_INFO
(
"NumberLeading1 : "
<<
p_NumberLeading1
);
58
TRG_MSG_INFO
(
"NumberLeading2 : "
<<
p_NumberLeading2
);
59
for
(
unsigned
int
i=0; i<
numberOutputBits
(); ++i) {
60
TRG_MSG_INFO
(
"DeltaPhiMin"
<<i<<
" : "
<<
p_DeltaPhiMin
[i]);
61
}
62
TRG_MSG_INFO
(
"MinET1 : "
<<
p_MinET1
);
63
TRG_MSG_INFO
(
"MinET2 : "
<<
p_MinET2
);
64
TRG_MSG_INFO
(
"nummber output : "
<<
numberOutputBits
());
65
66
// book histograms
67
for
(
unsigned
int
i=0; i<
numberOutputBits
(); ++i) {
68
std::string hname_accept =
"hMinDeltaPhiIncl2_accept_bit"
+std::to_string((
int
)i);
69
std::string hname_reject =
"hMinDeltaPhiIncl2_reject_bit"
+std::to_string((
int
)i);
70
// mass
71
bookHist
(
m_histAccept
, hname_accept,
"DPHI"
, 100,
p_DeltaPhiMin
[i], 70);
72
bookHist
(
m_histReject
, hname_reject,
"DPHI"
, 100,
p_DeltaPhiMin
[i], 70);
73
}
74
75
return
StatusCode::SUCCESS
;
76
}
77
78
79
80
TCS::StatusCode
81
TCS::MinDeltaPhiIncl2::processBitCorrect
(
const
std::vector<TCS::TOBArray const *> & input,
82
const
std::vector<TCS::TOBArray *> & output,
83
Decision
& decision )
84
{
85
86
// mindphi
87
unsigned
int
mindphi = *std::min_element(std::begin(
p_DeltaPhiMin
),std::end(
p_DeltaPhiMin
));
88
bool
firstphi =
true
;
89
90
// declare iterator for the tob with min dphi
91
TCS::TOBArray::const_iterator
tobmin1,tobmin2;
92
const
TCS::TOBArray::const_iterator
invalidIterator;
93
94
if
(input.size() == 2) {
95
96
for
(
TOBArray::const_iterator
tob1 = input[0]->begin();
97
tob1 != input[0]->end() && distance(input[0]->begin(), tob1) <
p_NumberLeading1
;
98
++tob1)
99
{
100
101
if
(
parType_t
((*tob1)->Et()) <=
p_MinET1
)
continue
;
// ET cut
102
103
for
(
TCS::TOBArray::const_iterator
tob2 = input[1]->begin();
104
tob2 != input[1]->end() && distance(input[1]->begin(), tob2) <
p_NumberLeading2
;
105
++tob2) {
106
107
if
(
parType_t
((*tob2)->Et()) <=
p_MinET2
)
continue
;
// ET cut
108
109
// test DeltaPhiMin, DeltaPhiMax
110
unsigned
int
deltaPhi
=
calcDeltaPhiBW
( *tob1, *tob2 );
111
112
if
(firstphi) {
113
mindphi =
deltaPhi
;
114
tobmin1=tob1;
115
tobmin2=tob2;
116
firstphi =
false
;
117
}
118
119
if
(
deltaPhi
< mindphi ) {
120
121
mindphi =
deltaPhi
;
122
tobmin1=tob1;
123
tobmin2=tob2;
124
125
}
126
127
}
128
}
129
130
for
(
unsigned
int
i=0; i<
numberOutputBits
(); ++i) {
131
bool
accept = mindphi >
p_DeltaPhiMin
[i] ;
132
const
bool
fillAccept =
fillHistos
() and (
fillHistosBasedOnHardware
() ?
getDecisionHardwareBit
(i) : accept);
133
const
bool
fillReject =
fillHistos
() and not fillAccept;
134
const
bool
alreadyFilled = decision.
bit
(i);
135
if
( accept and (tobmin1!=invalidIterator and tobmin2!=invalidIterator)) {
136
decision.
setBit
(i,
true
);
137
output[i]->push_back(
TCS::CompositeTOB
(*tobmin1, *tobmin2));
138
}
139
if
(fillAccept and not alreadyFilled){
140
fillHist1D
(
m_histAccept
[i],(
float
)mindphi);
141
}
else
if
(fillReject){
142
fillHist1D
(
m_histReject
[i],(
float
)mindphi);
143
}
144
TRG_MSG_DEBUG
(
"Decision "
<< i <<
": "
<< (accept?
"pass"
:
"fail"
));
145
}
// for(i)
146
}
else
{
147
TCS_EXCEPTION
(
"MinDeltaPhiIncl2 alg must have 2 inputs, but got "
<< input.size());
148
}
149
150
return
TCS::StatusCode::SUCCESS
;
151
}
152
153
TCS::StatusCode
154
TCS::MinDeltaPhiIncl2::process
(
const
std::vector<TCS::TOBArray const *> & input,
155
const
std::vector<TCS::TOBArray *> & output,
156
Decision
& decision )
157
{
158
159
// mindphi
160
unsigned
int
mindphi = *std::min_element(std::begin(
p_DeltaPhiMin
),std::end(
p_DeltaPhiMin
));
161
bool
firstphi =
true
;
162
163
164
if
(input.size() == 2) {
165
TCS::TOBArray::const_iterator
tobmin1 = input[0]->begin();
//initialised for outer loop
166
TCS::TOBArray::const_iterator
tobmin2 = input[1]->end();
//might never change, set to end
167
for
(
TOBArray::const_iterator
tob1 = input[0]->begin();
168
tob1 != input[0]->end() && distance(input[0]->begin(), tob1) <
p_NumberLeading1
;
169
++tob1){
170
171
if
(
parType_t
((*tob1)->Et()) <=
p_MinET1
)
continue
;
// ET cut
172
173
for
(
TCS::TOBArray::const_iterator
tob2 = input[1]->begin();
174
tob2 != input[1]->end() && distance(input[1]->begin(), tob2) <
p_NumberLeading2
;
175
++tob2) {
176
177
if
(
parType_t
((*tob2)->Et()) <=
p_MinET2
)
continue
;
// ET cut
178
179
// test DeltaPhiMin, DeltaPhiMax
180
unsigned
int
deltaPhi
=
calcDeltaPhi
( *tob1, *tob2 );
181
182
if
(firstphi) {
183
mindphi =
deltaPhi
;
184
tobmin1=tob1;
185
tobmin2=tob2;
186
firstphi =
false
;
187
}
188
189
if
(
deltaPhi
< mindphi ) {
190
191
mindphi =
deltaPhi
;
192
tobmin1=tob1;
193
tobmin2=tob2;
194
195
}
196
197
}
198
}
199
if
((tobmin1 == input[0]->end()) || (tobmin2 == input[1]->end())){
200
TRG_MSG_DEBUG
(
"Iterator tobmin1 or tobmin2 is invalid"
);
201
return
TCS::StatusCode::FAILURE
;
202
}
203
for
(
unsigned
int
i=0; i<
numberOutputBits
(); ++i) {
204
bool
accept = mindphi >
p_DeltaPhiMin
[i] ;
205
const
bool
fillAccept =
fillHistos
() and (
fillHistosBasedOnHardware
() ?
getDecisionHardwareBit
(i) : accept);
206
const
bool
fillReject =
fillHistos
() and not fillAccept;
207
const
bool
alreadyFilled = decision.
bit
(i);
208
if
( accept) {
209
decision.
setBit
(i,
true
);
210
output[i]->push_back(
TCS::CompositeTOB
(*tobmin1, *tobmin2));
211
}
212
if
(fillAccept and not alreadyFilled){
213
fillHist1D
(
m_histAccept
[i],(
float
)mindphi);
214
}
else
if
(fillReject) {
215
fillHist1D
(
m_histReject
[i],(
float
)mindphi);
216
}
217
TRG_MSG_DEBUG
(
"Decision "
<< i <<
": "
<< (accept?
"pass"
:
"fail"
));
218
}
219
}
else
{
220
TCS_EXCEPTION
(
"MinDeltaPhiIncl2 alg must have 2 inputs, but got "
<< input.size());
221
}
222
223
return
TCS::StatusCode::SUCCESS
;
224
}
REGISTER_ALG_TCS
#define REGISTER_ALG_TCS(CLASS)
Definition
AlgFactory.h:62
deltaPhi
Scalar deltaPhi(const MatrixBase< Derived > &vec) const
Definition
AmgMatrixBasePlugin.h:112
Decision.h
MinDeltaPhiIncl2.h
TRG_MSG_INFO
#define TRG_MSG_INFO(x)
Definition
Trigger/TrigConfiguration/TrigConfBase/TrigConfBase/MsgStreamMacros.h:27
TRG_MSG_DEBUG
#define TRG_MSG_DEBUG(x)
Definition
Trigger/TrigConfiguration/TrigConfBase/TrigConfBase/MsgStreamMacros.h:25
Exception.h
TCS_EXCEPTION
#define TCS_EXCEPTION(MSG)
Definition
Trigger/TrigT1/L1Topo/L1TopoCommon/L1TopoCommon/Exception.h:15
TCS::CompositeTOB
Definition
CompositeTOB.h:16
TCS::ConfigurableAlg::name
const std::string & name() const
Definition
ConfigurableAlg.h:49
TCS::ConfigurableAlg::bookHist
void bookHist(std::vector< std::string > ®Name, std::string_view name, std::string_view title, const int binx, const int xmin, const int xmax)
Definition
ConfigurableAlg.cxx:272
TCS::ConfigurableAlg::parameter
const Parameter & parameter(std::string_view parameterName) const
Definition
ConfigurableAlg.cxx:245
TCS::ConfigurableAlg::fillHist1D
void fillHist1D(const std::string &histName, double x)
Definition
ConfigurableAlg.cxx:470
TCS::ConfigurableAlg::calcDeltaPhiBW
unsigned int calcDeltaPhiBW(const TCS::GenericTOB *tob1, const TCS::GenericTOB *tob2)
Definition
ConfigurableAlg.cxx:122
TCS::ConfigurableAlg::defineParameter
void defineParameter(std::string_view name, TCS::parType_t value)
Definition
ConfigurableAlg.cxx:203
TCS::ConfigurableAlg::calcDeltaPhi
unsigned int calcDeltaPhi(const TCS::GenericTOB *tob1, const TCS::GenericTOB *tob2)
Definition
ConfigurableAlg.cxx:167
TCS::DataArrayImpl< GenericTOB >::const_iterator
data_t::const_iterator const_iterator
Definition
DataArrayImpl.h:18
TCS::DecisionAlg::setNumberOutputBits
void setNumberOutputBits(unsigned int numberOutputBits)
Definition
DecisionAlg.h:39
TCS::DecisionAlg::DecisionAlg
DecisionAlg(const std::string &name)
Definition
DecisionAlg.h:24
TCS::DecisionAlg::fillHistosBasedOnHardware
bool fillHistosBasedOnHardware() const
! getter
Definition
DecisionAlg.cxx:84
TCS::DecisionAlg::fillHistos
bool fillHistos() const
whether the monitoring histograms should be filled
Definition
DecisionAlg.cxx:100
TCS::DecisionAlg::m_histAccept
std::vector< std::string > m_histAccept
Definition
DecisionAlg.h:72
TCS::DecisionAlg::m_histReject
std::vector< std::string > m_histReject
Definition
DecisionAlg.h:73
TCS::DecisionAlg::numberOutputBits
unsigned int numberOutputBits() const
Definition
DecisionAlg.h:38
TCS::DecisionAlg::getDecisionHardwareBit
bool getDecisionHardwareBit(const unsigned int &bitNumber) const
! get one hardware decision bit from this algo
Definition
DecisionAlg.cxx:52
TCS::Decision
Definition
Decision.h:19
TCS::Decision::bit
bool bit(unsigned int index) const
Definition
Decision.h:40
TCS::Decision::setBit
void setBit(unsigned int index, bool value)
Definition
Decision.cxx:12
TCS::MinDeltaPhiIncl2::process
virtual StatusCode process(const std::vector< TCS::TOBArray const * > &input, const std::vector< TCS::TOBArray * > &output, Decision &decison)
Definition
MinDeltaPhiIncl2.cxx:154
TCS::MinDeltaPhiIncl2::p_NumberLeading1
parType_t p_NumberLeading1
Definition
MinDeltaPhiIncl2.h:36
TCS::MinDeltaPhiIncl2::MinDeltaPhiIncl2
MinDeltaPhiIncl2(const std::string &name)
Definition
MinDeltaPhiIncl2.cxx:27
TCS::MinDeltaPhiIncl2::p_DeltaPhiMin
parType_t p_DeltaPhiMin[3]
Definition
MinDeltaPhiIncl2.h:38
TCS::MinDeltaPhiIncl2::~MinDeltaPhiIncl2
virtual ~MinDeltaPhiIncl2()
Definition
MinDeltaPhiIncl2.cxx:42
TCS::MinDeltaPhiIncl2::initialize
virtual StatusCode initialize()
Definition
MinDeltaPhiIncl2.cxx:46
TCS::MinDeltaPhiIncl2::p_MinET2
parType_t p_MinET2
Definition
MinDeltaPhiIncl2.h:40
TCS::MinDeltaPhiIncl2::p_NumberLeading2
parType_t p_NumberLeading2
Definition
MinDeltaPhiIncl2.h:37
TCS::MinDeltaPhiIncl2::p_MinET1
parType_t p_MinET1
Definition
MinDeltaPhiIncl2.h:39
TCS::MinDeltaPhiIncl2::processBitCorrect
virtual StatusCode processBitCorrect(const std::vector< TCS::TOBArray const * > &input, const std::vector< TCS::TOBArray * > &output, Decision &decison)
Definition
MinDeltaPhiIncl2.cxx:81
TCS::StatusCode
Definition
Trigger/TrigT1/L1Topo/L1TopoCommon/L1TopoCommon/StatusCode.h:15
TCS::StatusCode::SUCCESS
@ SUCCESS
Definition
Trigger/TrigT1/L1Topo/L1TopoCommon/L1TopoCommon/StatusCode.h:17
TCS::StatusCode::FAILURE
@ FAILURE
Definition
Trigger/TrigT1/L1Topo/L1TopoCommon/L1TopoCommon/StatusCode.h:17
const
TCS
Definition
AnomalyDetectionBDT.h:18
TCS::parType_t
uint32_t parType_t
Definition
Parameter.h:23
std
STL namespace.
Generated on
for ATLAS Offline Software by
1.17.0