ATLAS Offline Software
IdDictGroup.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #ifndef IDDICT_IdDictGroup_H
6 #define IDDICT_IdDictGroup_H
7 
8 #include <string>
9 #include <vector>
10 #include <variant>
11 #include <utility>
12 #include <memory>
13 
14 class IdDictDictEntry;
15 class IdDictRegion;
16 class IdDictMgr;
17 class IdDictDictionary;
19 class Identifier;
20 class ExpandedIdentifier;
21 class MultiRange;
22 
23 
24 
25 class IdDictGroup{
26 public:
27  // ==================================
28  //** @name Constructor/destructor
29  // @{
30 
31  IdDictGroup ();
32  IdDictGroup (const std::string& name);
33  ~IdDictGroup ();
34 
35  IdDictGroup (const IdDictGroup&) = delete;
36  IdDictGroup& operator= (const IdDictGroup&) = delete;
37 
38 
40  // ==================================
41  //** @name Simple accessors.
42  // @{
43 
44  const std::string& name() const;
45  size_t n_regions() const;
46  const IdDictRegion& region(size_t index) const;
47 
48 
50  // ==================================
51  //** @name Methods used to initialize the object.
52  // @{
53 
55  const std::vector<IdDictRegion*>& regions();
56 
58  MultiRange build_multirange () const;
59 
60  void add_dictentry (std::unique_ptr<IdDictDictEntry> entry);
61 
62  void resolve_references (IdDictMgr& idd,
64  size_t& index);
65  void generate_implementation (const IdDictMgr& idd,
67  const std::string& tag = "");
68  void reset_implementation ();
69  bool verify () const;
70  void sort ();
71  void clear ();
72 
73 
83  int unpack (const Identifier& id,
85  size_t index2,
86  ExpandedIdentifier& unpackedId,
87  std::vector<const IdDictFieldImplementation*>* impls = nullptr) const;
88 
92  void build_region_tree();
93 
94 
98  void dump() const;
99 
100 
104  void dump_regions() const;
105 
106 
110  void dump_tree() const;
111 
112 
113 private:
120  void add_tree_field (const IdDictRegion& re, unsigned ifield, unsigned inode);
121 
122  std::string m_name;
123  std::vector<std::unique_ptr<IdDictDictEntry> > m_entries; // just the RegionEntries
124  std::vector<IdDictRegion*> m_regions; // regions derived from entries
126 
127 
193  void optimize();
194 
197 
202  std::unique_ptr<std::vector<const IdDictFieldImplementation*> > m_other_impls;
203 
212  using ChildPair = std::pair<size_t, unsigned>;
213  std::variant<std::vector<unsigned>, ChildPair> m_children;
214 
216  // of an identifier.
217  static constexpr unsigned END = static_cast<unsigned> (-1);
218  };
220  std::vector<IdDictRegionTreeNode> m_region_tree;
221 };
222 
223 
224 inline
225 const std::string& IdDictGroup::name() const {
226  return m_name;
227 }
228 
229 
230 inline
232 {
233  return m_regions.size();
234 }
235 
236 
237 inline
239 {
240  return *m_regions.at(index);
241 }
242 
243 
244 #endif
IdDictGroup::n_regions
size_t n_regions() const
Definition: IdDictGroup.h:231
IdDictGroup::m_name
std::string m_name
Definition: IdDictGroup.h:122
IdDictGroup
Definition: IdDictGroup.h:25
index
Definition: index.py:1
IdDictGroup::sort
void sort()
Sort:
Definition: IdDictGroup.cxx:139
IdDictGroup::m_regions
std::vector< IdDictRegion * > m_regions
Definition: IdDictGroup.h:124
IdDictGroup::operator=
IdDictGroup & operator=(const IdDictGroup &)=delete
IdDictGroup::m_entries
std::vector< std::unique_ptr< IdDictDictEntry > > m_entries
Definition: IdDictGroup.h:123
IdDictGroup::verify
bool verify() const
Definition: IdDictGroup.cxx:125
ExpandedIdentifier
Definition: DetectorDescription/Identifier/Identifier/ExpandedIdentifier.h:102
IdDictGroup::name
const std::string & name() const
Definition: IdDictGroup.h:225
IdDictDictEntry
Definition: IdDictDictEntry.h:13
IdDictGroup::dump_tree
void dump_tree() const
Dump the tree structure built from the regions for fast unpacking.
Definition: IdDictGroup.cxx:528
IdDictRegion
Definition: IdDictRegion.h:21
IdDictGroup::generate_implementation
void generate_implementation(const IdDictMgr &idd, IdDictDictionary &dictionary, const std::string &tag="")
Definition: IdDictGroup.cxx:79
IdDictGroup::region
const IdDictRegion & region(size_t index) const
Definition: IdDictGroup.h:238
IdDictMgr
Definition: IdDictMgr.h:16
IdDictGroup::build_region_tree
void build_region_tree()
Take the list of regions and build a tree structure for fast unpacking.
Definition: IdDictGroup.cxx:465
IdDictGroup::IdDictGroup
IdDictGroup()
Definition: IdDictGroup.cxx:22
IdDictGroup::IdDictRegionTreeNode::m_impl
const IdDictFieldImplementation & m_impl
Reference to the the implementation field.
Definition: IdDictGroup.h:196
IdDictGroup::add_dictentry
void add_dictentry(std::unique_ptr< IdDictDictEntry > entry)
Definition: IdDictGroup.cxx:62
IdDictGroup::build_multirange
MultiRange build_multirange() const
Get MultiRange for this group.
Definition: IdDictGroup.cxx:42
IdDictGroup::unpack
int unpack(const Identifier &id, const ExpandedIdentifier &prefix, size_t index2, ExpandedIdentifier &unpackedId, std::vector< const IdDictFieldImplementation * > *impls=nullptr) const
Unpack the value_type id to an expanded Identifier, considering the provided prefix (result will incl...
Definition: IdDictGroup.cxx:217
checkCorrelInHIST.prefix
dictionary prefix
Definition: checkCorrelInHIST.py:391
IdDictGroup::clear
void clear()
Definition: IdDictGroup.cxx:168
IdDictGroup::IdDictRegionTreeNode::IdDictRegionTreeNode
IdDictRegionTreeNode(const IdDictFieldImplementation &impl)
Constructor, taking a reference to the implementation.
Definition: IdDictGroup.cxx:177
IdDictGroup::regions
const std::vector< IdDictRegion * > & regions()
Non-const access to regions.
Definition: IdDictGroup.cxx:37
IdDictGroup::IdDictGroup
IdDictGroup(const IdDictGroup &)=delete
GetAllXsec.entry
list entry
Definition: GetAllXsec.py:132
IdDictGroup::m_region_tree
std::vector< IdDictRegionTreeNode > m_region_tree
The list of region nodes.
Definition: IdDictGroup.h:220
IdDictGroup::IdDictRegionTreeNode::END
static constexpr unsigned END
Special value used to indicate that we've reached the end.
Definition: IdDictGroup.h:217
MultiRange
A MultiRange combines several Ranges.
Definition: MultiRange.h:17
master.dictionary
dictionary
Definition: master.py:47
Trk::index2
@ index2
Definition: BoundarySurfaceFace.h:49
IdDictGroup::IdDictRegionTreeNode
Tree structure for fast unpacking.
Definition: IdDictGroup.h:189
IdDictGroup::IdDictRegionTreeNode::optimize
void optimize()
Compress the vector of node indices, if they are all the same.
Definition: IdDictGroup.cxx:186
IdDictDictionary
Definition: IdDictDictionary.h:31
impl
Definition: CaloGPUClusterAndCellDataMonitorOptions.h:46
IdDictGroup::resolve_references
void resolve_references(IdDictMgr &idd, IdDictDictionary &dictionary, size_t &index)
Definition: IdDictGroup.cxx:67
IdDictGroup::IdDictRegionTreeNode::m_children
std::variant< std::vector< unsigned >, ChildPair > m_children
Definition: IdDictGroup.h:213
IdDictGroup::reset_implementation
void reset_implementation()
Definition: IdDictGroup.cxx:114
IdDictGroup::m_generated_implementation
bool m_generated_implementation
Definition: IdDictGroup.h:125
IdDictGroup::add_tree_field
void add_tree_field(const IdDictRegion &re, unsigned ifield, unsigned inode)
Recursively add new nodes to the tree structure.
Definition: IdDictGroup.cxx:326
re
const boost::regex re(r_e)
CaloCondBlobAlgs_fillNoiseFromASCII.tag
string tag
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:23
IdDictFieldImplementation
IdDictFieldImplementation is used to capture the specification of a single field of an Identifier.
Definition: IdDictFieldImplementation.h:58
IdDictGroup::~IdDictGroup
~IdDictGroup()
Definition: IdDictGroup.cxx:33
IdDictGroup::IdDictRegionTreeNode::m_other_impls
std::unique_ptr< std::vector< const IdDictFieldImplementation * > > m_other_impls
Implementations for other field descriptions that this ored field of the identifier may contain.
Definition: IdDictGroup.h:202
IdDictGroup::dump_regions
void dump_regions() const
Dump the list of regions for this group.
Definition: IdDictGroup.cxx:508
IdDictGroup::IdDictRegionTreeNode::ChildPair
std::pair< size_t, unsigned > ChildPair
References to child nodes.
Definition: IdDictGroup.h:212
inode
Definition: listroot.cxx:155
IdDictGroup::dump
void dump() const
Dump regions and tree for this group.
Definition: IdDictGroup.cxx:497
Identifier
Definition: IdentifierFieldParser.cxx:14