ATLAS Offline Software
GlobalDecision.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #include <iomanip>
6 
11 
12 using namespace std;
13 using namespace TCS;
14 
15 void
16 GlobalDecision::setTriggerLines(const vector<TrigConf::TriggerLine> & triggers) {
17 
18  m_triggers = triggers;
19  vector<string> connNames = {};
20  for (const TrigConf::TriggerLine & trigger : triggers){
21  auto it = find(connNames.begin(), connNames.end(), trigger.connName());
22  if (it == connNames.end()){
23  connNames.push_back(trigger.connName());
24  m_decision[trigger.connName()] = 0;
25  }
26  }
27 }
28 
30 GlobalDecision::decision_field(const string& connName, unsigned int clock) const {
31  try {
32  if(clock==0) {
33  // lower 32 bit
34  return (uint32_t) (m_decision.at(connName) & 0xffffffff);
35  } else {
36  // upper 32 bit
37  uint64_t clock1 = m_decision.at(connName) & 0xffffffff00000000;
38  return (uint32_t) (clock1 >> 32);
39  }
40  }
41  catch(std::exception &) {
42  TRG_MSG_ERROR("Connector name " << connName << " unknown");
43  throw;
44  }
45 }
46 
48 GlobalDecision::overflow_field(const std::string& connName, unsigned int clock) const {
49  if(clock==0) {
50  // lower 32 bit
51  return (uint32_t) (m_overflow.find(connName)->second & 0xffffffff);
52  } else {
53  // upper 32 bit
54  uint64_t clock1 = m_overflow.find(connName)->second & 0xffffffff00000000;
55  return (uint32_t) (clock1 >> 32);
56  }
57 }
58 
59 
60 GlobalDecision::GlobalDecision(const std::string &name) :
61  TrigConfMessaging(name)
62 {}
63 
64 /****************************************************************
65  *
66  * Fill the decision bits with the pass/fail of all decision algs.
67  * This is called by the TopoSteering after the connectors have
68  * been executed.
69  *
70  ****************************************************************/
71 
73 GlobalDecision::collectDecision(const set<DecisionConnector*> & outconn) {
74  resetDecision();
75 
76  for( const DecisionConnector * conn : outconn ) {
77 
78  const Decision& dec = conn->decision();
79 
80  unsigned int pos = 0; // for multi-output algorithms pos is the output index
81  for(const TrigConf::TriggerLine & trigger : conn->triggers() ) {
82  unsigned int position = trigger.flatindex();
83 
84  uint64_t & connectorDec = m_decision[trigger.connName()];
85  uint64_t & connectorOvf = m_overflow[trigger.connName()];
86  uint64_t mask(0x1);
87 
88  if( dec.bit(pos++) ) // bit set?
89  connectorDec |= (mask << position);
90  if( dec.overflow())
91  connectorOvf |= (mask << position);
92  }
93 
94  }
95  m_valid = true;
97 }
98 
99 
102  for(auto const& dec : m_decision)
103  m_decision[dec.first] = 0;
104  for(auto const& ovf : m_overflow)
105  m_overflow[ovf.first] = 0;
106  m_valid = false;
108 }
109 
110 
111 namespace TCS {
112 
113 
114 std::ostream&
115 operator<<(std::ostream& o, const TCS::GlobalDecision & dec) {
116 
117  if(!dec.isValid())
118  o << "Note that the overall decision has not been calculated" << endl;
119 
120  for(auto const& itdec : dec.m_decision)
121  o << "Overall decision for connector " << itdec.first << ": 0x" << right << hex << setfill('0') << setw(16) << dec.decision_field(itdec.first) << std::dec << setfill(' ') << endl;
122 
123  if(dec.isValid()) {
124  for(const TrigConf::TriggerLine & trigger : dec.m_triggers){
125  unsigned int position = trigger.flatindex();
126  o << " " << setw(30) << left << trigger.name() << " " << (dec.passed(trigger.connName(), position) ? "pass" : "fail") << endl;}
127  } else {
128  for(const TrigConf::TriggerLine & trigger : dec.m_triggers)
129  o << " " << setw(30) << left << trigger.name() << " unset" << endl;
130  }
131  return o;
132 }
133 //----------------------------------------------------------
134 void
136 
137  if(!isValid())
138  TRG_MSG_INFO("Note that the overall decision has not been calculated");
139 
140  for(auto const& dec : m_decision)
141  TRG_MSG_INFO("Overall decision from connector " << dec.first << ": 0x" << right << hex << setfill('0') << setw(16) << decision_field(dec.first) << std::dec << setfill(' '));
142 
143  if(isValid()) {
144  for(const TrigConf::TriggerLine & trigger : m_triggers){
145  unsigned int position = trigger.flatindex();
146  TRG_MSG_INFO(" " << setw(30) << left << trigger.name() << " " << (passed(trigger.connName(), position) ? "pass" : "fail") );}
147  } else {
148  for(const TrigConf::TriggerLine & trigger : m_triggers)
149  TRG_MSG_INFO(" " << setw(30) << left << trigger.name() << " unset" );
150  }
151 }
152 
153 }
TrigConf::TriggerLine::flatindex
unsigned int flatindex() const
Definition: L1Connector.h:28
TRG_MSG_ERROR
#define TRG_MSG_ERROR(x)
Definition: Trigger/TrigConfiguration/TrigConfBase/TrigConfBase/MsgStreamMacros.h:29
TCS::GlobalDecision::print
void print() const
Definition: GlobalDecision.cxx:135
plotBeamSpotCompare.x1
x1
Definition: plotBeamSpotCompare.py:216
checkCorrelInHIST.conn
conn
Definition: checkCorrelInHIST.py:25
TCS::StatusCode::SUCCESS
@ SUCCESS
Definition: Trigger/TrigT1/L1Topo/L1TopoCommon/L1TopoCommon/StatusCode.h:17
TCS::GlobalDecision::collectDecision
StatusCode collectDecision(const std::set< DecisionConnector * > &outconn)
Definition: GlobalDecision.cxx:73
TCS::GlobalDecision::decision_field
uint64_t decision_field(const std::string &connName) const
Definition: GlobalDecision.h:38
find
std::string find(const std::string &s)
return a remapped string
Definition: hcg.cxx:135
xAOD::uint32_t
setEventNumber uint32_t
Definition: EventInfo_v1.cxx:127
TCS::GlobalDecision::passed
bool passed(const std::string &connName, unsigned int bit) const
Definition: GlobalDecision.h:42
TCS::Decision::overflow
bool overflow() const
Definition: L1Topo/L1TopoInterfaces/L1TopoInterfaces/Decision.h:45
TCS::GlobalDecision::resetDecision
StatusCode resetDecision()
Definition: GlobalDecision.cxx:101
skel.it
it
Definition: skel.GENtoEVGEN.py:396
TCS::GlobalDecision::m_triggers
std::vector< TrigConf::TriggerLine > m_triggers
Definition: GlobalDecision.h:70
python.TrigTLAMonitorAlgorithm.triggers
triggers
Definition: TrigTLAMonitorAlgorithm.py:196
DecisionConnector.h
python.utils.AtlRunQueryLookup.mask
string mask
Definition: AtlRunQueryLookup.py:460
TrigConf::TriggerLine
a TriggerLine entry describes the location of a threshold multiplicity on a cable (connector)
Definition: L1Connector.h:21
TCS::GlobalDecision::isValid
bool isValid() const
Definition: GlobalDecision.h:49
TrigConf::TriggerLine::connName
const std::string & connName() const
Definition: L1Connector.h:33
calibdata.exception
exception
Definition: calibdata.py:496
xAOD::uint64_t
uint64_t
Definition: EventInfo_v1.cxx:123
TCS::Decision
Definition: L1Topo/L1TopoInterfaces/L1TopoInterfaces/Decision.h:19
TRG_MSG_INFO
#define TRG_MSG_INFO(x)
Definition: Trigger/TrigConfiguration/TrigConfBase/TrigConfBase/MsgStreamMacros.h:27
TrigConf::TriggerLine::name
const std::string & name() const
Definition: L1Connector.h:26
DecisionAlg.h
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:221
TCS::GlobalDecision::m_valid
bool m_valid
Definition: GlobalDecision.h:67
TCS::GlobalDecision::m_overflow
std::map< std::string, uint64_t > m_overflow
Definition: GlobalDecision.h:64
python.LumiBlobConversion.pos
pos
Definition: LumiBlobConversion.py:18
TCS
Definition: Global/GlobalSimulation/src/IO/Decision.h:18
TCS::Decision::bit
bool bit(unsigned int index) const
Definition: L1Topo/L1TopoInterfaces/L1TopoInterfaces/Decision.h:40
TCS::operator<<
std::ostream & operator<<(std::ostream &, const TCS::CountingConnector &)
Definition: CountingConnector.cxx:93
Exception.h
TCS::DecisionConnector
Definition: DecisionConnector.h:23
TCS::GlobalDecision
Definition: GlobalDecision.h:34
TCS::GlobalDecision::m_decision
std::map< std::string, uint64_t > m_decision
Definition: GlobalDecision.h:62
TCS::StatusCode
Definition: Trigger/TrigT1/L1Topo/L1TopoCommon/L1TopoCommon/StatusCode.h:15
GlobalDecision.h