ATLAS Offline Software
Loading...
Searching...
No Matches
TrigOperationalInfo.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3*/
4
6#include "GaudiKernel/MsgStream.h"
7
8#include <sstream>
9#include <cmath>
10#include <algorithm>
11
12
16
17TrigOperationalInfo::TrigOperationalInfo(const std::vector<std::string>& keys,
18 const std::vector<float>& values)
19 : m_infoName (keys),
20 m_infoValue (values)
21{
22}
23
24unsigned int TrigOperationalInfo::defined(const std::string& name) const {
25 return std::count( m_infoName.begin(), m_infoName.end(), name );
26}
27
28float TrigOperationalInfo::get(const std::string& name) const {
29 std::vector<std::string>::const_iterator it;
30 it = std::find ( m_infoName.begin(), m_infoName.end(), name );
31 return m_infoValue[it - m_infoName.begin()];
32}
33
34void TrigOperationalInfo::set(const std::string& name, float value) {
35 // Tim Martin - April 2016. Removed code which enforces unique names. Rquired by use in Cost Monitoring.
36 m_infoName.push_back(name);
37 m_infoValue.push_back(value);
38}
39
40std::pair<std::vector<std::string>, std::vector<float> > TrigOperationalInfo::infos() const {
41 return std::make_pair(m_infoName, m_infoValue);
42}
43
44const std::vector<std::string>& TrigOperationalInfo::getKeys() const {
45 return m_infoName;
46}
47
48const std::vector<float>& TrigOperationalInfo::getValues() const {
49 return m_infoValue;
50}
51
52void TrigOperationalInfo::updateAtLocation(unsigned int location, float value) {
53 m_infoValue.at(location) = value;
54}
55
57// helper operators
58
59
60std::string str ( const TrigOperationalInfo& d ) {
61 std::stringstream ss;
62 std::pair<std::vector<std::string>, std::vector<float> > quantities = d.infos();
63 std::vector<std::string>::const_iterator keyIt = quantities.first.begin();
64 std::vector<float>::const_iterator valueIt = quantities.second.begin();
65 for (unsigned int i = 0; i < quantities.first.size(); i++ ) {
66 ss << " " << *keyIt << ": " << *valueIt;
67 ++keyIt;
68 ++valueIt;
69 }
70 return ss.str();
71}
72
73MsgStream& operator<< ( MsgStream& m, const TrigOperationalInfo& d ) {
74 m << str(d);
75 return m;
76}
77
78
80
81 std::pair<std::vector<std::string>, std::vector<float> > a_infos = a.infos();
82 std::pair<std::vector<std::string>, std::vector<float> > b_infos = b.infos();
83 if ( a_infos.first.size() != b_infos.first.size())
84 return false;
85 if ( ! (a_infos.first == b_infos.first))
86 return false;
87
88 if ( ! (a_infos.second == b_infos.second))
89 return false;
90
91 return true;
92}
93void diff( const TrigOperationalInfo& a, const TrigOperationalInfo& b, std::map<std::string, double>& variableChange ) {
94 std::pair<std::vector<std::string>, std::vector<float> > a_infos = a.infos();
95 std::pair<std::vector<std::string>, std::vector<float> > b_infos = b.infos();
96
97 if ( a_infos.first.size() != b_infos.first.size())
98 variableChange["size"] = a_infos.first.size() - b_infos.first.size();
99
100 std::vector<std::string>::const_iterator a_keyIt = a_infos.first.begin();
101 std::vector<float>::const_iterator a_valueIt = a_infos.second.begin();
102 for ( unsigned i = 0; i < a_infos.first.size(); i++ ) {
103 if ( b.defined(*a_keyIt) ) {
104 float b_val = b.get(*a_keyIt);
105 variableChange[*a_keyIt] = *a_valueIt - b_val;
106 } else {
107 variableChange[*a_keyIt+"_abs"] = *a_valueIt;
108 }
109
110 ++a_keyIt;
111 ++a_valueIt;
112 }
113}
static Double_t a
static Double_t ss
bool operator==(const TrigOperationalInfo &a, const TrigOperationalInfo &b)
MsgStream & operator<<(MsgStream &m, const TrigOperationalInfo &d)
void diff(const TrigOperationalInfo &a, const TrigOperationalInfo &b, std::map< std::string, double > &variableChange)
This class defined generic object to store operational info available during triggering online i....
const std::vector< std::string > & getKeys() const
std::pair< std::vector< std::string >, std::vector< float > > infos() const
void updateAtLocation(unsigned int location, float value)
const std::vector< float > & getValues() const
float get(const std::string &name) const
std::vector< std::string > m_infoName
void set(const std::string &name, float value)
unsigned int defined(const std::string &name) const
std::vector< float > m_infoValue