ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
Trigger
TrigAnalysis
TrigDecisionTool
src
DecisionUnpackerEventInfo.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3
*/
4
5
6
#ifndef XAOD_ANALYSIS
// Full Athena only
7
8
#include "
TrigSteeringEvent/Lvl1Result.h
"
9
10
#include "
StoreGate/StoreGateSvc.h
"
11
#include "
TrigNavStructure/TrigNavStructure.h
"
12
#include "
TrigDecisionTool/DecisionUnpackerEventInfo.h
"
13
14
#include "
EventInfo/TriggerInfo.h
"
15
16
17
#include "
TrigNavigation/NavigationCore.h
"
18
19
20
bool
get32BitDecision
(
unsigned
int
index
,
21
const
std::vector< uint32_t >&
vec
) {
22
23
if
(
index
>=
vec
.size() * 32 ) {
24
return
0;
25
}
26
uint32_t word =
vec
[
index
/ 32 ];
27
return
( ( ( word >> (
index
% 32 ) ) & 0x1 ) != 0 );
28
}
29
30
31
namespace
Trig
{
32
DecisionUnpackerEventInfo::DecisionUnpackerEventInfo
(
const
SG::ReadHandleKey<EventInfo>
* oldEventInfoKey) :
33
m_eventInfoKey
(oldEventInfoKey){
34
}
35
36
DecisionUnpackerEventInfo::~DecisionUnpackerEventInfo
(){
37
}
38
39
40
StatusCode
DecisionUnpackerEventInfo::unpackItems
(
const
std::vector<uint32_t>& level1TriggerInfo,
41
std::map<unsigned, LVL1CTP::Lvl1Item>& itemsCache,
42
std::unordered_map<std::string, const LVL1CTP::Lvl1Item*>& itemsByName)
const
{
43
44
uint32_t L1SIZE = level1TriggerInfo.size()/3;
45
std::vector<uint32_t>::const_iterator begin, end;
46
47
begin = level1TriggerInfo.begin();
48
end = begin;
49
std::advance(end,L1SIZE);
50
std::vector<uint32_t> tbp(begin,end);
51
52
begin = end;
53
std::advance(end,L1SIZE);
54
std::vector<uint32_t> tap(begin,end);
55
56
begin = end;
57
std::advance(end,L1SIZE);
58
std::vector<uint32_t> tav(begin,end);
59
60
itemsByName.reserve( itemsByName.size() + itemsCache.size() );
61
for
(
auto
[ctpid, item] : itemsCache ) {
62
ATH_MSG_VERBOSE
(
"Unpacking bits for item: "
<< ctpid <<
" "
<< item.name());
63
const
bool
passBP =
get32BitDecision
(ctpid,tbp);
64
const
bool
passAP =
get32BitDecision
(ctpid,tap);
65
const
bool
passAV =
get32BitDecision
(ctpid,tav);
66
LVL1CTP::Lvl1Item
itemNew (item.name(), item.hashId(),
67
passBP, passAP, passAV,
68
item.prescaleFactor());
69
item = std::move (itemNew);
70
itemsByName[item.name()] = &item;
71
}
72
return
StatusCode::SUCCESS;
73
}
74
75
76
StatusCode
DecisionUnpackerEventInfo::unpackChains
(
const
std::vector<uint32_t>& chainTriggerInfo,
77
std::map<unsigned, HLT::Chain>& cache,
78
std::unordered_map<std::string, const HLT::Chain*>& output)
const
{
79
output.reserve( output.size() + cache.size() );
80
for
(
auto
& [cntr, chain] : cache){
81
chain.reset();
82
83
//we have to make a guess here
84
//the bit form the event header is set according to
85
//HLT::Chain::chainPassed() i.e. either non-prescaled, non-ressurected && passed
86
//or it was passed through.
87
//if the bit is set, we will chose the first version for all chains
88
//even though some may be passed through
89
//if the bit is not set we will set all flags to false
90
91
bool
decision =
get32BitDecision
( cntr, chainTriggerInfo );
92
if
(decision){
93
chain.setDecisions(
true
,
//raw
94
false
,
//passedthrough
95
false
,
//prescaled
96
false
//resurrected
97
);
98
}
99
else
{
100
chain.setDecisions(
false
,
//raw
101
false
,
//passedthrough
102
false
,
//prescaled
103
false
//resurrected
104
);
105
}
106
output[chain.getChainName()] = &chain;
107
}
108
return
StatusCode::SUCCESS;
109
}
110
111
StatusCode
DecisionUnpackerEventInfo::unpackDecision
(
112
const
EventContext& ctx,
113
std::unordered_map<std::string, const LVL1CTP::Lvl1Item*>& itemsByName,
114
std::map<CTPID, LVL1CTP::Lvl1Item>& itemsCache,
115
std::unordered_map<std::string, const HLT::Chain*>& l2chainsByName,
116
std::map<CHAIN_COUNTER, HLT::Chain>& l2chainsCache,
117
std::unordered_map<std::string, const HLT::Chain*>& efchainsByName,
118
std::map<CHAIN_COUNTER, HLT::Chain>& efchainsCache,
119
char
&
/*bgCode*/
,
120
bool
unpackHLT
121
)
const
{
122
123
ATH_MSG_DEBUG
(
"unpacking decision from EventInfo"
);
124
125
SG::ReadHandle<EventInfo>
eventInfo(*
m_eventInfoKey
, ctx);
126
const
TriggerInfo
* dec = eventInfo->trigger_info();
127
128
// bgCode = dec->BGCode();
129
130
// L1 items
131
itemsByName.clear();
132
ATH_MSG_DEBUG
(
"Unpacking of L1 items"
);
133
if
(
unpackItems
(dec->
level1TriggerInfo
(),itemsCache,itemsByName).isFailure() ) {
134
ATH_MSG_WARNING
(
"Unpacking of L1 items failed"
);
135
}
136
137
138
// protect from unpacking in case HLT was not run (i.e. configuration chains are 0)
139
if
(!unpackHLT)
return
StatusCode::SUCCESS;
140
141
142
// L2 chains
143
l2chainsByName.clear();
144
const
auto
& level2TriggerInfo = dec->
level2TriggerInfo
();
145
146
if
(
unpackChains
(level2TriggerInfo, l2chainsCache, l2chainsByName).isFailure() ) {
147
ATH_MSG_WARNING
(
"Unpacking of L2 chains failed"
);
148
}
149
150
// EF chains
151
efchainsByName.clear();
152
const
auto
& eventFilterInfo = dec->
eventFilterInfo
();
153
154
if
(
unpackChains
(eventFilterInfo, efchainsCache, efchainsByName).isFailure() ) {
155
ATH_MSG_WARNING
(
"Unpacking of EF/HLT chains failed"
);
156
}
157
158
return
StatusCode::SUCCESS;
159
}
160
161
StatusCode
DecisionUnpackerEventInfo::unpackNavigation
(
const
EventContext&,
162
HLT::TrigNavStructure
*)
const
{
163
ATH_MSG_WARNING
(
"This is the EventInfo Unpacker, there is no Navigation available -- but someone seems to try to access features triggering a navi unpacking"
);
164
return
StatusCode::SUCCESS;
165
}
166
167
}
168
169
#endif
// full Athena env
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition
AthMsgStreamMacros.h:28
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition
AthMsgStreamMacros.h:32
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition
AthMsgStreamMacros.h:29
vec
std::vector< size_t > vec
Definition
CombinationsGeneratorTest.cxx:9
get32BitDecision
bool get32BitDecision(unsigned int index, const std::vector< uint32_t > &vec)
Definition
DecisionUnpackerEventInfo.cxx:20
DecisionUnpackerEventInfo.h
Lvl1Result.h
NavigationCore.h
StoreGateSvc.h
TrigNavStructure.h
TriggerInfo.h
This class contains trigger related information.
HLT::TrigNavStructure
Definition
TrigNavStructure.h:40
LVL1CTP::Lvl1Item
Definition
Lvl1Item.h:32
SG::ReadHandleKey
Property holding a SG store/key/clid from which a ReadHandle is made.
Definition
StoreGate/StoreGate/ReadHandleKey.h:40
SG::ReadHandle
Definition
StoreGate/StoreGate/ReadHandle.h:67
Trig::DecisionUnpackerEventInfo::unpackNavigation
virtual StatusCode unpackNavigation(const EventContext &, HLT::TrigNavStructure *) const override
Definition
DecisionUnpackerEventInfo.cxx:161
Trig::DecisionUnpackerEventInfo::m_eventInfoKey
const SG::ReadHandleKey< EventInfo > * m_eventInfoKey
Definition
DecisionUnpackerEventInfo.h:51
Trig::DecisionUnpackerEventInfo::DecisionUnpackerEventInfo
DecisionUnpackerEventInfo(const SG::ReadHandleKey< EventInfo > *oldEventInfoKey)
Definition
DecisionUnpackerEventInfo.cxx:32
Trig::DecisionUnpackerEventInfo::unpackItems
StatusCode unpackItems(const std::vector< uint32_t > &level1TriggerInfo, std::map< CTPID, LVL1CTP::Lvl1Item > &itemsCache, std::unordered_map< std::string, const LVL1CTP::Lvl1Item * > &itemsByName) const
Definition
DecisionUnpackerEventInfo.cxx:40
Trig::DecisionUnpackerEventInfo::unpackChains
StatusCode unpackChains(const std::vector< uint32_t > &chainTriggerInfo, std::map< unsigned, HLT::Chain > &cache, std::unordered_map< std::string, const HLT::Chain * > &output) const
Definition
DecisionUnpackerEventInfo.cxx:76
Trig::DecisionUnpackerEventInfo::~DecisionUnpackerEventInfo
virtual ~DecisionUnpackerEventInfo()
Definition
DecisionUnpackerEventInfo.cxx:36
Trig::DecisionUnpackerEventInfo::unpackDecision
virtual StatusCode unpackDecision(const EventContext &, std::unordered_map< std::string, const LVL1CTP::Lvl1Item * > &, std::map< CTPID, LVL1CTP::Lvl1Item > &, std::unordered_map< std::string, const HLT::Chain * > &, std::map< CHAIN_COUNTER, HLT::Chain > &, std::unordered_map< std::string, const HLT::Chain * > &, std::map< CHAIN_COUNTER, HLT::Chain > &, char &, bool) const override
Definition
DecisionUnpackerEventInfo.cxx:111
TriggerInfo
This class contains trigger related information.
Definition
TriggerInfo.h:77
TriggerInfo::eventFilterInfo
const std::vector< number_type > & eventFilterInfo() const
get event filter trigger info
Definition
TriggerInfo.cxx:153
TriggerInfo::level1TriggerInfo
const std::vector< number_type > & level1TriggerInfo() const
get level1 trigger info
Definition
TriggerInfo.cxx:143
TriggerInfo::level2TriggerInfo
const std::vector< number_type > & level2TriggerInfo() const
get level2 trigger info
Definition
TriggerInfo.cxx:148
Trig
The common trigger namespace for trigger analysis tools.
Definition
LArCellMonAlg.h:33
index
Definition
index.py:1
Generated on
for ATLAS Offline Software by
1.17.0