ATLAS Offline Software
Loading...
Searching...
No Matches
TruncationAnalysisAlg.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
3*/
4
6#include <algorithm>
7#include <sstream>
8#include <iomanip>
9
11
12namespace {
13 struct CollectionDebugInfo {
14 std::string_view name;
15 uint32_t size;
16 bool isRecorded;
17 };
18 bool cmpCollections(const CollectionDebugInfo& a, const CollectionDebugInfo& b) {
19 return a.size > b.size;
20 }
21}
22
23TruncationAnalysisAlg::TruncationAnalysisAlg(const std::string& name, ISvcLocator* pSvcLocator) :
24 AthReentrantAlgorithm(name, pSvcLocator) {}
25
27 ATH_CHECK( m_truncationInfoKey.initialize() );
28 return StatusCode::SUCCESS;
29}
30
31StatusCode TruncationAnalysisAlg::execute(const EventContext& context) const {
32 ATH_MSG_DEBUG("Retrieving truncation info object " << m_truncationInfoKey.fullKey());
33 auto truncationInfo = SG::makeHandle(m_truncationInfoKey, context);
34 ATH_MSG_DEBUG("Retrieved container with size: " << truncationInfo->size());
35 const xAOD::TrigComposite::ConstAccessor<uint16_t> moduleId("moduleId");
39 const xAOD::TrigComposite::ConstAccessor<std::vector<char>> isRecordedVec("isRecorded");
40 size_t counter = 0;
41 const size_t nInfos = truncationInfo->size();
42 for (const xAOD::TrigComposite* info : *truncationInfo) {
43 ++counter;
44 std::ostringstream ss;
45 ss << std::endl << "================================================================================" << std::endl;
46
47 //Print general information
48 ss << "Info number " << counter << " / " << nInfos << std::endl;
49 ss << "Module ID: " << moduleId(*info) << std::endl;
50 ss << "Total size: " << totalSize(*info)/1024. << " kB" << std::endl << std::endl;
51
52 ss << "Passing Chains IDs (look these IDs up in a menu JSON): ";
54 ss << chainID << ", ";
55 }
56 ss << std::endl << std::endl;
57
58 // Collect name+size+isRecorded in one structure and sort by descending size
59 std::vector<CollectionDebugInfo> collections;
60 for (size_t i=0; i<typeNameVec(*info).size(); ++i) {
61 collections.push_back({typeNameVec(*info).at(i),
62 sizeVec(*info).at(i),
63 static_cast<bool>(isRecordedVec(*info).at(i))});
64 }
65 std::sort(collections.begin(), collections.end(), cmpCollections);
66
67 // Print information about all collections
68 ss << "Found " << collections.size() << " collections in this module" << std::endl;
69 ss << "--------------------------------------------------------------------------------" << std::endl;
70 ss << "| Size [kB] | Recorded? | Name |" << std::endl;
71 for (const CollectionDebugInfo& coll : collections) {
72 ss << "| " << std::setw(9) << std::setprecision(2) << std::fixed << coll.size/1024.;
73 ss << (coll.isRecorded ? " | Y | " : " | N | ");
74 ss << coll.name << " |" << std::endl;
75 }
76 ss << "--------------------------------------------------------------------------------" << std::endl;
77 ss << "================================================================================" << std::endl;
78 ATH_MSG_INFO(ss.str());
79 }
80 ATH_MSG_DEBUG("Execution finished");
81 return StatusCode::SUCCESS;
82}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_INFO(x)
#define ATH_MSG_DEBUG(x)
static Double_t a
static Double_t ss
static unsigned int totalSize(const MultiDimArray< T, N > &ht)
An algorithm that can be simultaneously executed in multiple threads.
SG::ConstAccessor< T, ALLOC > ConstAccessor
Helper class to provide type-safe access to aux data.
Definition AuxElement.h:131
virtual StatusCode execute(const EventContext &context) const override
TruncationAnalysisAlg(const std::string &name, ISvcLocator *pSvcLocator)
SG::ReadHandleKey< xAOD::TrigCompositeContainer > m_truncationInfoKey
virtual StatusCode initialize() override
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())
unsigned int DecisionID
void decisionIDs(const Decision *d, DecisionIDContainer &destination)
Extracts DecisionIDs stored in the Decision object.
void sort(typename DataModel_detail::iterator< DVL > beg, typename DataModel_detail::iterator< DVL > end)
Specialization of sort for DataVector/List.
TrigComposite_v1 TrigComposite
Declare the latest version of the class.
setEventNumber uint32_t