ATLAS Offline Software
IdentifierField.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #ifndef IDENTIFIER_IDENTIFIERFIELD_H
6 #define IDENTIFIER_IDENTIFIERFIELD_H
8 #include <vector>
9 #include <string>
10 #include <stdexcept>
11 #include <iosfwd>
12 #include <limits>
13 
14 
19 {
20  public :
23  using element_vector = std::vector <element_type>;
24  using index_vector = std::vector <size_type>;
30  enum mode{
36  nModes
37  } ;
38 
40  none,
45  } ;
46 
48  IdentifierField () = default;
49 
52 
54  IdentifierField (element_type minimum, element_type maximum);
55 
57  inline bool
58  is_valued () const {return (m_mode != unbounded);}
59  //
60  inline bool
61  has_minimum () const { return ((m_mode == low_bounded) ||
62  (m_mode == both_bounded) ||
63  (m_mode == enumerated));
64  }
65  //
66  inline bool
67  has_maximum () const{ return ((m_mode == high_bounded) ||
68  (m_mode == both_bounded) ||
69  (m_mode == enumerated));
70  }
71  //
72  inline bool
75  inline mode
76  get_mode () const {return m_mode;}
77  //
78  inline element_type
79  get_minimum () const {return m_minimum;}
80  //
81  inline element_type
82  get_maximum () const {return m_maximum;}
83  //
84  inline const element_vector&
85  get_values () const {return m_values;}
89  size_type get_indices () const {return m_indices;}
90  const index_vector& get_indexes () const {return m_indexes;}
91  size_type get_bits () const;
94 
96  bool match_any () const {return (m_mode == unbounded);}
97 
99  bool match (element_type value) const;
100 
102  bool overlaps_with (const IdentifierField& other) const;
103 
105  void clear ();
106  void set (element_type minimum, element_type maximum);
109  void add_value (element_type value);
110  void set (const element_vector& values);
111  void set (bool wraparound);
112  void set_next (int next);
113  void set_previous (int previous);
115  void operator |= (const IdentifierField& other);
116 
117  operator std::string () const;
118  bool operator == (const IdentifierField& other) const;
119 
120  void show() const;
121 
123  bool check_for_both_bounded();
124 
127  void optimize();
128 
129 private :
130  static constexpr int m_maxNumberOfIndices = 100;
131 
132 
134  void create_index_table();
135 
137  void set_indices();
138 
148 };
149 
152  // Only both_bounded and enumerated are valid to calculate the
153  // value.
154  // both_bounded is the more frequent case and so comes first.
155  if (both_bounded == m_mode) {
156  if (index >= (size_type) (m_maximum - m_minimum + 1)) {
157  throw std::out_of_range("IdentifierField::get_value_at");
158  }
159  return (m_minimum + index);
160  } else if (enumerated == m_mode) {
161  return (m_values.at(index));
162  }
163  return (0);
164 }
165 
166 std::ostream &
167 operator << (std::ostream &out, const IdentifierField &c);
168 std::istream &
169 operator >> (std::istream &in, IdentifierField &c);
170 #endif
fillPileUpNoiseLumi.current
current
Definition: fillPileUpNoiseLumi.py:52
max
#define max(a, b)
Definition: cfImp.cxx:41
IdentifierField::get_bits
size_type get_bits() const
Definition: IdentifierField.cxx:18
IdentifierField::element_type
ExpandedIdentifier::element_type element_type
Definition: IdentifierField.h:21
IdentifierField::has_maximum
bool has_maximum() const
Definition: IdentifierField.h:67
IdentifierField::overlaps_with
bool overlaps_with(const IdentifierField &other) const
Check whether two IdentifierFields overlap.
Definition: IdentifierField.cxx:226
index
Definition: index.py:1
IdentifierField::get_minimum
element_type get_minimum() const
Definition: IdentifierField.h:79
IdentifierField::m_maxNumberOfIndices
static constexpr int m_maxNumberOfIndices
Definition: IdentifierField.h:130
IdentifierField::m_mode
mode m_mode
Definition: IdentifierField.h:146
python.AthDsoLogger.out
out
Definition: AthDsoLogger.py:71
IdentifierField::clear
void clear()
Set methods.
Definition: IdentifierField.cxx:310
IdentifierField::m_maximum
element_type m_maximum
Definition: IdentifierField.h:140
IdentifierField::unbounded
@ unbounded
Definition: IdentifierField.h:31
athena.value
value
Definition: athena.py:124
IdentifierField::get_values
const element_vector & get_values() const
Definition: IdentifierField.h:85
IdentifierField::high_bounded
@ high_bounded
Definition: IdentifierField.h:33
IdentifierField::get_maximum
element_type get_maximum() const
Definition: IdentifierField.h:82
IdentifierField::set
void set(element_type minimum, element_type maximum)
Definition: IdentifierField.cxx:322
ExpandedIdentifier.h
IdentifierField::has_both
@ has_both
Definition: IdentifierField.h:43
IdentifierField::m_continuation_mode
continuation_mode m_continuation_mode
Definition: IdentifierField.h:147
IdentifierField::set_next
void set_next(int next)
Definition: IdentifierField.cxx:414
IdentifierField::m_next
element_type m_next
Definition: IdentifierField.h:145
IdentifierField::create_index_table
void create_index_table()
Create index table from value table.
Definition: IdentifierField.cxx:705
python.Bindings.values
values
Definition: Control/AthenaPython/python/Bindings.py:805
IdentifierField::set_minimum
void set_minimum(element_type value)
Definition: IdentifierField.cxx:336
IdentifierField::is_valued
bool is_valued() const
Some combined query functions on the specification mode.
Definition: IdentifierField.h:58
IdentifierField::match
bool match(element_type value) const
The basic match operation.
Definition: IdentifierField.cxx:50
IdentifierField::get_indexes
const index_vector & get_indexes() const
Definition: IdentifierField.h:90
IdentifierField::get_value_index
size_type get_value_index(element_type value) const
Definition: IdentifierField.cxx:27
IdentifierField::operator==
bool operator==(const IdentifierField &other) const
Definition: IdentifierField.cxx:594
IdentifierField::wrap_around
bool wrap_around() const
Definition: IdentifierField.h:73
fillPileUpNoiseLumi.next
next
Definition: fillPileUpNoiseLumi.py:52
IdentifierField::m_previous
element_type m_previous
Definition: IdentifierField.h:144
IdentifierField::minimum_possible
static constexpr auto minimum_possible
Definition: IdentifierField.h:25
IdentifierField::set_maximum
void set_maximum(element_type value)
Definition: IdentifierField.cxx:352
IdentifierField::set_indices
void set_indices()
Set m_indices.
Definition: IdentifierField.cxx:674
IdentifierField::m_minimum
element_type m_minimum
Definition: IdentifierField.h:139
IdentifierField::get_mode
mode get_mode() const
Query the values.
Definition: IdentifierField.h:76
IdentifierField::get_next
bool get_next(element_type current, element_type &next) const
Definition: IdentifierField.cxx:158
IdentifierField::low_bounded
@ low_bounded
Definition: IdentifierField.h:32
ExpandedIdentifier::size_type
boost::container::small_vector< element_type, 12 >::size_type size_type
Definition: DetectorDescription/Identifier/Identifier/ExpandedIdentifier.h:112
IdentifierField::element_vector
std::vector< element_type > element_vector
Definition: IdentifierField.h:23
IdentifierField::none
@ none
Definition: IdentifierField.h:40
IdentifierField::mode
mode
Characterizes the four possible modes of any IdentifierField specification.
Definition: IdentifierField.h:30
IdentifierField::continuation_mode
continuation_mode
Definition: IdentifierField.h:39
min
#define min(a, b)
Definition: cfImp.cxx:40
IdentifierField::set_previous
void set_previous(int previous)
Definition: IdentifierField.cxx:426
IdentifierField::check_for_both_bounded
bool check_for_both_bounded()
Check mode - switch from enumerated to both_bounded if possible.
Definition: IdentifierField.cxx:686
IdentifierField::size_type
ExpandedIdentifier::size_type size_type
Definition: IdentifierField.h:22
private
#define private
Definition: DetDescrConditionsDict_dict_fixes.cxx:13
IdentifierField::maximum_possible
static constexpr auto maximum_possible
Definition: IdentifierField.h:26
IdentifierField::nModes
@ nModes
Definition: IdentifierField.h:36
IdentifierField::operator[]
const IdentifierField & operator[](IdentifierField::size_type index) const
IdentifierField::index_vector
std::vector< size_type > index_vector
Definition: IdentifierField.h:24
IdentifierField::m_values
element_vector m_values
Definition: IdentifierField.h:141
IdentifierField::enumerated
@ enumerated
Definition: IdentifierField.h:35
IdentifierField::m_indices
size_type m_indices
Definition: IdentifierField.h:143
IdentifierField::has_wrap_around
@ has_wrap_around
Definition: IdentifierField.h:44
InDetDD::other
@ other
Definition: InDetDD_Defs.h:16
IdentifierField::set
void set(const element_vector &values)
IdentifierField::operator|=
void operator|=(const IdentifierField &other)
Definition: IdentifierField.cxx:438
operator<<
std::ostream & operator<<(std::ostream &out, const IdentifierField &c)
Definition: IdentifierField.cxx:735
IdentifierField::m_indexes
index_vector m_indexes
Definition: IdentifierField.h:142
IdentifierField
This is the individual specification for the range of one ExpandedIdentifier IdentifierField.
Definition: IdentifierField.h:19
IdentifierField::has_next
@ has_next
Definition: IdentifierField.h:41
IdentifierField::get_value_at
element_type get_value_at(size_type index) const
Definition: IdentifierField.h:151
IdentifierField::get_previous
bool get_previous(element_type current, element_type &previous) const
Returns false if previous/next is at end of range, or not possible.
Definition: IdentifierField.cxx:91
IdentifierField::match_any
bool match_any() const
Check if this is a pure wild card IdentifierField.
Definition: IdentifierField.h:96
IdentifierField::both_bounded
@ both_bounded
Definition: IdentifierField.h:34
IdentifierField::has_previous
@ has_previous
Definition: IdentifierField.h:42
IdentifierField::show
void show() const
Definition: IdentifierField.cxx:605
IdentifierField::optimize
void optimize()
Optimize - try to switch mode to both_bounded, set up lookup table for finding index from value.
Definition: IdentifierField.cxx:667
ExpandedIdentifier::element_type
int element_type
Definition: DetectorDescription/Identifier/Identifier/ExpandedIdentifier.h:106
operator>>
std::istream & operator>>(std::istream &in, IdentifierField &c)
Definition: IdentifierField.cxx:742
python.compressB64.c
def c
Definition: compressB64.py:93
IdentifierField::add_value
void add_value(element_type value)
Definition: IdentifierField.cxx:369
IdentifierField::get_indices
size_type get_indices() const
Definition: IdentifierField.h:89
IdentifierField::has_minimum
bool has_minimum() const
Definition: IdentifierField.h:61
Trk::previous
@ previous
Definition: BinningData.h:32
IdentifierField::IdentifierField
IdentifierField()=default
Create a wild-card value.