Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
AuxCompression.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 
6 // EDM include(s):
8 
9 // Local include(s):
11 
12 // System include(s).
13 #include <iostream>
14 
15 namespace xAOD {
16 
18  : m_compression_map{}
19  {
20  }
21 
36  void AuxCompression::setCompressedAuxIDs( const std::map< unsigned int, std::set< std::string > >& attributes ) {
37 
39  return;
40  }
41 
50  std::map< unsigned int, SG::auxid_set_t >
52 
53  // Create an empty result map
54  std::map< unsigned int, SG::auxid_set_t > result;
55 
56  // Loop over the internal map set by setCompressedAuxIDs
57  for(const auto& val : m_compression_map) {
58 
59  // Set helper variables
60  const unsigned int nmantissa = val.first;
61  const std::set< std::string > &names = val.second;
62 
63  // Start from an empty list
64  SG::auxid_set_t auxids;
65 
66  // Check the simplest case, nothing to be compressed
67  if( names.empty() || ( names.find("-") != names.end() ) ) {
68  continue;
69  }
70 
71  // Check that the user only put positive or negative selections on the
72  // list. They can't be mixed.
73  bool sub = false, add = false;
74  std::set< std::string >::const_iterator name_itr = names.begin();
75  std::set< std::string >::const_iterator name_end = names.end();
76  for( ; name_itr != name_end; ++name_itr ) {
77  if( ( *name_itr )[ 0 ] == '-' ) {
78  sub = true;
79  } else {
80  add = true;
81  }
82  }
83  if( sub && add ) {
84  // At this level we don't have a handle to the MsgStream,
85  // otherwise it'd be preferred!
86  std::cerr << "xAOD::AuxCompression ERROR Mixing + and - options for "
87  << "compression attributes" << std::endl;
88  continue; // Ill-defined input, not compressing anything just in case
89  }
90 
91  // Loop over the full set, find all float and std::vector<float> variables, add to the list
92  // This is our starting point as we currently compress only floats.
93  // This way we don't mistakenly float compress a random type based on wrong user input.
94  SG::auxid_set_t fauxids;
95 
96  // not using reference, because our iterator doesn't return a reference
97  for ( const SG::auxid_t auxid : fullset ) {
98  const std::string cType = SG::AuxTypeRegistry::instance().getTypeName( auxid );
99  if( cType == "float" || cType == "std::vector<float>" ) {
100  fauxids.insert( auxid );
101  }
102  }
103 
104  // Check if all floats are to be compressed
105  if( names.find("*") != names.end() ) {
106  auxids = std::move(fauxids);
107  }
108  // Here comes the parsing either + or - as in AuxSelection that we follow closely
109  else if( add ) {
110  // Build the list of variables to be compressed starting from the empty list
111  name_itr = names.begin();
112  name_end = names.end();
113  for( ; name_itr != name_end; ++name_itr ) {
114  // Get the ID of this name
115  const SG::auxid_t auxid = SG::AuxTypeRegistry::instance().findAuxID( *name_itr );
116  if( auxid != SG::null_auxid ) {
117  // Add this variable if it exists
118  if( fauxids.test( auxid ) ) {
119  auxids.insert( auxid );
120  }
121  }
122  }
123  } else {
124  // Build the list of variables to be compressed starting from the full float list
125  auxids = fauxids;
126  // Loop over all float variables and remove if matching
127  for ( SG::auxid_t auxid : fauxids ) {
128  // Construct the name of this ID
129  const std::string attrname = "-" + SG::AuxTypeRegistry::instance().getName( auxid );
130  // Check if it is in the list to be removed
131  if( names.find( attrname ) != names.end() ) {
132  auxids.erase( auxid );
133  }
134  }
135  }
136 
137  // Finally fill the result map
138  result[ nmantissa ] = std::move(auxids);
139 
140  } // End of loop over internal map
141 
142  return result; // Return the result map
143  }
144 
145 } // namespace xAOD
get_generator_info.result
result
Definition: get_generator_info.py:21
SG::AuxTypeRegistry::instance
static AuxTypeRegistry & instance()
Return the singleton registry instance.
Definition: AuxTypeRegistry.cxx:639
SG::AuxTypeRegistry::findAuxID
SG::auxid_t findAuxID(const std::string &name, const std::string &clsname="") const
Look up a name -> auxid_t mapping.
Definition: AuxTypeRegistry.cxx:756
xAOD::AuxCompression::setCompressedAuxIDs
virtual void setCompressedAuxIDs(const std::map< unsigned int, std::set< std::string > > &attributes)
Set which variables should be compressed per compression setting.
Definition: AuxCompression.cxx:36
SG::AuxTypeRegistry::getName
std::string getName(SG::auxid_t auxid) const
Return the name of an aux data item.
Definition: AuxTypeRegistry.cxx:881
xAOD
ICaloAffectedTool is abstract interface for tools checking if 4 mom is in calo affected region.
Definition: ICaloAffectedTool.h:24
SG::auxid_t
size_t auxid_t
Identifier for a particular aux data item.
Definition: AuxTypes.h:27
xAOD::AuxCompression::getCompressedAuxIDs
virtual std::map< unsigned int, SG::auxid_set_t > getCompressedAuxIDs(const SG::auxid_set_t &fullset) const
Return those variables that are selected to be compressed per compression setting.
Definition: AuxCompression.cxx:51
SG::AuxTypeRegistry::getTypeName
std::string getTypeName(SG::auxid_t auxid) const
Return the type name of an aux data item.
Definition: AuxTypeRegistry.cxx:923
CxxUtils::ConcurrentBitset::insert
ConcurrentBitset & insert(bit_t bit, bit_t new_nbits=0)
Set a bit to 1.
add
bool add(const std::string &hname, TKey *tobj)
Definition: fastadd.cxx:55
xAOD::AuxCompression::m_compression_map
std::map< unsigned int, std::set< std::string > > m_compression_map
Properties following the variable selection convention.
Definition: AuxCompression.h:36
AuxCompression.h
Pythia8_RapidityOrderMPI.val
val
Definition: Pythia8_RapidityOrderMPI.py:14
AuxTypeRegistry.h
Handle mappings between names and auxid_t.
collListGuids.attributes
attributes
Definition: collListGuids.py:46
SG::auxid_set_t
A set of aux data identifiers.
Definition: AuxTypes.h:47
xAOD::AuxCompression::AuxCompression
AuxCompression()
Default constructor.
Definition: AuxCompression.cxx:17
CxxUtils::ConcurrentBitset::erase
ConcurrentBitset & erase(bit_t bit)
Turn off one bit.
CxxUtils::ConcurrentBitset::test
bool test(bit_t bit) const
Test to see if a bit is set.