Jpp test-rotations-old
the software that should make you happy
Loading...
Searching...
No Matches
JPMTMask.hh
Go to the documentation of this file.
1#ifndef __JTRIGGER__JPMTMASK__
2#define __JTRIGGER__JPMTMASK__
3
4#include <istream>
5#include <ostream>
6#include <string>
7
9
11
12/**
13 * \author rbruijn
14 */
15
16namespace JTRIGGER {}
17namespace JPP { using namespace JTRIGGER; }
18
19namespace JTRIGGER {
20
21 using JIO::JReader;
22 using JIO::JWriter;
24
25
26 /**
27 * Type definition of PMT mask.
28 */
29 typedef unsigned int JPMTMask_t;
30
31
32 /**
33 * Number of PMT bits.
34 */
35 static const unsigned int NUMBER_OF_PMT_BITS = 31;
36
37
38 /**
39 * Convert PMT bit to PMT mask.
40 *
41 * \param bit PMT bit
42 * \return PMT mask
43 */
44 inline JPMTMask_t getPMTMask(const unsigned int bit)
45 {
46 if (bit < NUMBER_OF_PMT_BITS)
47 return JPMTMask_t(1) << bit;
48 else
49 return 0;
50 }
51
52
53 /**
54 * Auxiliary class for PMT mask.
55 */
56 class JPMTMask {
57 public:
58 /**
59 * Default constructor.
60 */
62 pmt_mask(0)
63 {}
64
65
66 /**
67 * Constructor.
68 *
69 * \param mask PMT mask
70 */
71 JPMTMask(const JPMTMask_t mask) :
72 pmt_mask(mask)
73 {}
74
75
76 /**
77 * Constructor.
78 *
79 * \param buffer PMT bit pattern (i.e.\ sequence of '0' and '1').
80 */
81 JPMTMask(const std::string& buffer) :
82 pmt_mask(valueOf(buffer).getPMTMask())
83 {}
84
85
86 /**
87 * Get PMT bit pattern.
88 *
89 * \return PMT mask
90 */
92 {
93 return pmt_mask;
94 }
95
96
97 /**
98 * Add PMT mask.
99 *
100 * \param mask PMT mask
101 * \return PMT mask
102 */
104 {
105 pmt_mask |= mask;
106
107 return *this;
108 }
109
110
111 /**
112 * Add PMT mask.
113 *
114 * \param mask PMTed mask
115 * \return PMTed mask
116 */
118 {
119 return addPMTMask(mask.getPMTMask());
120 }
121
122 /**
123 * Add PMT bit.
124 *
125 * \param bit PMT bit
126 * \return PMT mask
127 */
128 inline JPMTMask& addPMTBit(const unsigned int bit)
129 {
131
132 return *this;
133 }
134
135
136 /**
137 * Add PMT channel
138 *
139 * \param channel PMT readout channel
140 * \return PMT mask
141 */
142 inline JPMTMask& addPMT(const JPMTReadoutAddress& channel)
143 {
144 return addPMTBit(channel.getTDC());
145 }
146
147
148 /**
149 * Check PMT bit.
150 *
151 * \param bit PMT bit
152 * \return true if bit is set; else false
153 */
154 inline bool hasPMTBit(const unsigned int bit) const
155 {
156 return pmt_mask & JTRIGGER::getPMTMask(bit);
157 }
158
159 /**
160 * Check PMT.
161 *
162 * \param channel PMT channel
163 * \return true if PMT is selected; else false
164 */
165 inline bool hasPMT(const JPMTReadoutAddress& channel) const
166 {
167 return hasPMTBit(channel.getTDC());
168 }
169
170
171 /**
172 * Extract PMT mask.
173 *
174 * \param buffer PMT bit pattern (i.e.\ sequence of '0' and '1').
175 * \return PMT mask
176 */
177 static JPMTMask valueOf(const std::string& buffer)
178 {
180
181 unsigned int bit = 0;
182
183 for (std::string::const_reverse_iterator i = buffer.rbegin(); i != buffer.rend() && bit != NUMBER_OF_PMT_BITS; ++i, ++bit) {
184 if (*i == '1') {
185 pmt_mask.addPMTBit(bit);
186 }
187 }
188
189 return pmt_mask;
190 }
191
192
193 /**
194 * Convert PMT mask.
195 *
196 * \return PMT bit pattern (i.e.\ sequence of '0' and '1').
197 */
198 std::string toString() const
199 {
200 std::string buffer(NUMBER_OF_PMT_BITS, '0');
201
202 unsigned int bit = 0;
203
204 for (std::string::reverse_iterator i = buffer.rbegin(); i != buffer.rend() && bit != NUMBER_OF_PMT_BITS; ++i, ++bit) {
205 if (hasPMTBit(bit)) {
206 *i = '1';
207 }
208 }
209
210 return buffer;
211 }
212
213
214 /**
215 * Read PMT mask from input.
216 *
217 * \param in input stream
218 * \param mask PMT mask
219 * \return input stream
220 */
221 friend inline std::istream& operator>>(std::istream& in, JPMTMask& mask)
222 {
223 return in >> mask.pmt_mask;
224 }
225
226
227 /**
228 * Write PMT mask to output.
229 *
230 * \param out output stream
231 * \param mask PMT mask
232 * \return output stream
233 */
234 friend inline std::ostream& operator<<(std::ostream& out, const JPMTMask& mask)
235 {
236 return out << mask.pmt_mask;
237 }
238
239
240 /**
241 * Read PMT mask from input.
242 *
243 * \param in reader
244 * \param mask PMT mask
245 * \return reader
246 */
247 friend inline JReader& operator>>(JReader& in, JPMTMask& mask)
248 {
249 in >> mask.pmt_mask;
250
251 return in;
252 }
253
254
255 /**
256 * Write PMT mask to output.
257 *
258 * \param out writer
259 * \param mask PMT mask
260 * \return writer
261 */
262 friend inline JWriter& operator<<(JWriter& out, const JPMTMask& mask)
263 {
264 out << mask.pmt_mask;
265
266 return out;
267 }
268
269
270 /**
271 * Get size of object.
272 *
273 * \return number of bytes
274 */
275 static int sizeOf()
276 {
277 return sizeof(JPMTMask_t);
278 }
279
280 protected:
282 };
283}
284
285#endif
Data structure for PMT readout address.
Interface for binary input.
Interface for binary output.
Auxiliary class for PMT mask.
Definition JPMTMask.hh:56
JPMTMask()
Default constructor.
Definition JPMTMask.hh:61
bool hasPMTBit(const unsigned int bit) const
Check PMT bit.
Definition JPMTMask.hh:154
JPMTMask & addPMTMask(const JPMTMask &mask)
Add PMT mask.
Definition JPMTMask.hh:117
std::string toString() const
Convert PMT mask.
Definition JPMTMask.hh:198
JPMTMask(const std::string &buffer)
Constructor.
Definition JPMTMask.hh:81
JPMTMask & addPMT(const JPMTReadoutAddress &channel)
Add PMT channel.
Definition JPMTMask.hh:142
bool hasPMT(const JPMTReadoutAddress &channel) const
Check PMT.
Definition JPMTMask.hh:165
JPMTMask_t pmt_mask
Definition JPMTMask.hh:281
friend JWriter & operator<<(JWriter &out, const JPMTMask &mask)
Write PMT mask to output.
Definition JPMTMask.hh:262
JPMTMask & addPMTBit(const unsigned int bit)
Add PMT bit.
Definition JPMTMask.hh:128
friend JReader & operator>>(JReader &in, JPMTMask &mask)
Read PMT mask from input.
Definition JPMTMask.hh:247
JPMTMask_t getPMTMask() const
Get PMT bit pattern.
Definition JPMTMask.hh:91
static JPMTMask valueOf(const std::string &buffer)
Extract PMT mask.
Definition JPMTMask.hh:177
JPMTMask(const JPMTMask_t mask)
Constructor.
Definition JPMTMask.hh:71
friend std::ostream & operator<<(std::ostream &out, const JPMTMask &mask)
Write PMT mask to output.
Definition JPMTMask.hh:234
static int sizeOf()
Get size of object.
Definition JPMTMask.hh:275
friend std::istream & operator>>(std::istream &in, JPMTMask &mask)
Read PMT mask from input.
Definition JPMTMask.hh:221
JPMTMask & addPMTMask(const JPMTMask_t mask)
Add PMT mask.
Definition JPMTMask.hh:103
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
Auxiliary classes and methods for triggering.
static const unsigned int NUMBER_OF_PMT_BITS
Number of PMT bits.
Definition JPMTMask.hh:35
JPMTMask_t getPMTMask(const unsigned int bit)
Convert PMT bit to PMT mask.
Definition JPMTMask.hh:44
unsigned int JPMTMask_t
Type definition of PMT mask.
Definition JPMTMask.hh:29