1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
|
#ifndef DataFormats_SiStripCommon_SiStripKey_H
#define DataFormats_SiStripCommon_SiStripKey_H
#include "DataFormats/SiStripCommon/interface/ConstantsForGranularity.h"
#include <ostream>
#include <sstream>
#include <string>
#include <cstdint>
class SiStripKey;
/** Debug info for SiStripKey class. */
std::ostream& operator<<(std::ostream&, const SiStripKey&);
/**
@class SiStripKey
@author R.Bainbridge
@brief Base utility class that identifies a position within a
logical structure of the strip tracker.
*/
class SiStripKey {
public:
// ---------- Constructors ----------
/** Constructor using 32-bit "key". */
SiStripKey(const uint32_t& key);
/** Constructor using directory path. */
SiStripKey(const std::string& directory_path);
/** Copy constructor. */
SiStripKey(const SiStripKey&);
/** Assignment. */
const SiStripKey& operator=(const SiStripKey&);
/** Default constructor. */
SiStripKey();
/** Virtual destructor. */
virtual ~SiStripKey() { ; }
// ---------- Public interface to member data ----------
/** Returns 32-bit key. */
inline const uint32_t& key() const;
/** Returns directory path. */
inline const std::string& path() const;
/** Returns granularity to which key is unambiguous. */
inline const sistrip::Granularity& granularity() const;
/** Returns channel for key granularity. */
inline const uint16_t& channel() const;
// ---------- Virtual utility methods ----------
/** Identifies key objects with identical member data. */
virtual bool isEqual(const SiStripKey&) const;
/** "Consistent" means identical and/or null (ie, "all") data. */
virtual bool isConsistent(const SiStripKey&) const;
/** Identifies all member data as being "valid" or null ("all"). */
virtual bool isValid() const;
/** All member data to level of "Granularity" are valid. If
sistrip::Granularity is "undefined", returns false. */
virtual bool isValid(const sistrip::Granularity&) const;
/** Identifies all member data as being invalid. */
virtual bool isInvalid() const;
/** All member data to level of "Granularity" are invalid. If
sistrip::Granularity is "undefined", returns true. */
virtual bool isInvalid(const sistrip::Granularity&) const;
// ---------- Print methods ----------
/** Print member data of the key */
virtual void print(std::stringstream& ss) const;
/** A terse summary of the key */
virtual void terse(std::stringstream& ss) const { ; }
protected:
// ---------- Protected methods ----------
virtual void initFromValue() { ; }
virtual void initFromKey() { ; }
virtual void initFromPath() { ; }
virtual void initGranularity() { ; }
inline void key(const uint32_t&);
inline void path(const std::string&);
inline void granularity(const sistrip::Granularity&);
inline void channel(const uint16_t&);
private:
// ---------- Private member data ----------
/** 32-bit key. */
uint32_t key_;
/** Directory path. */
std::string path_;
/** Granularity to which FED key is unambiguous. */
sistrip::Granularity granularity_;
/** Channel of key granularity. */
uint16_t channel_;
};
// ---------- Inline methods ----------
const uint32_t& SiStripKey::key() const { return key_; }
const std::string& SiStripKey::path() const { return path_; }
const sistrip::Granularity& SiStripKey::granularity() const { return granularity_; }
const uint16_t& SiStripKey::channel() const { return channel_; }
void SiStripKey::key(const uint32_t& key) { key_ = key; }
void SiStripKey::path(const std::string& path) { path_ = path; }
void SiStripKey::granularity(const sistrip::Granularity& gran) { granularity_ = gran; }
void SiStripKey::channel(const uint16_t& chan) { channel_ = chan; }
#endif // DataFormats_SiStripCommon_SiStripKey_H
|