Jpp  17.1.0
the software that should make you happy
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
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 
8 #include "JIO/JSerialisable.hh"
9 
11 
12 /**
13  * \author rbruijn
14  */
15 
16 namespace JTRIGGER {}
17 namespace JPP { using namespace JTRIGGER; }
18 
19 namespace 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
bool hasPMT(const JPMTReadoutAddress &channel) const
Check PMT.
Definition: JPMTMask.hh:165
Interface for binary output.
JPMTMask_t getPMTMask() const
Get PMT bit pattern.
Definition: JPMTMask.hh:91
std::string toString() const
Convert PMT mask.
Definition: JPMTMask.hh:198
friend JReader & operator>>(JReader &in, JPMTMask &mask)
Read PMT mask from input.
Definition: JPMTMask.hh:247
friend JWriter & operator<<(JWriter &out, const JPMTMask &mask)
Write PMT mask to output.
Definition: JPMTMask.hh:262
friend std::ostream & operator<<(std::ostream &out, const JPMTMask &mask)
Write PMT mask to output.
Definition: JPMTMask.hh:234
JPMTMask()
Default constructor.
Definition: JPMTMask.hh:61
Auxiliary class for PMT mask.
Definition: JPMTMask.hh:56
JPMTMask_t getPMTMask(const unsigned int bit)
Convert PMT bit to PMT mask.
Definition: JPMTMask.hh:44
static int sizeOf()
Get size of object.
Definition: JPMTMask.hh:275
JPMTMask(const std::string &buffer)
Constructor.
Definition: JPMTMask.hh:81
JPMTMask & addPMTBit(const unsigned int bit)
Add PMT bit.
Definition: JPMTMask.hh:128
unsigned int JPMTMask_t
Type definition of PMT mask.
Definition: JPMTMask.hh:29
JPMTMask(const JPMTMask_t mask)
Constructor.
Definition: JPMTMask.hh:71
bool hasPMTBit(const unsigned int bit) const
Check PMT bit.
Definition: JPMTMask.hh:154
Interface for binary input.
JPMTMask & addPMTMask(const JPMTMask_t mask)
Add PMT mask.
Definition: JPMTMask.hh:103
friend std::istream & operator>>(std::istream &in, JPMTMask &mask)
Read PMT mask from input.
Definition: JPMTMask.hh:221
JPMTMask_t pmt_mask
Definition: JPMTMask.hh:281
Data structure for PMT readout address.
static JPMTMask valueOf(const std::string &buffer)
Extract PMT mask.
Definition: JPMTMask.hh:177
JPMTMask & addPMTMask(const JPMTMask &mask)
Add PMT mask.
Definition: JPMTMask.hh:117
then fatal Wrong number of arguments fi set_variable DETECTOR $argv[1] set_variable INPUT_FILE $argv[2] eval JPrintDetector a $DETECTOR O IDENTIFIER eval JPrintDetector a $DETECTOR O SUMMARY JAcoustics sh $DETECTOR_ID source JAcousticsToolkit sh CHECK_EXIT_CODE typeset A EMITTERS get_tripods $WORKDIR tripod txt EMITTERS get_transmitters $WORKDIR transmitter txt EMITTERS for EMITTER in
Definition: JCanberra.sh:46
JPMTMask & addPMT(const JPMTReadoutAddress &channel)
Add PMT channel.
Definition: JPMTMask.hh:142
static const unsigned int NUMBER_OF_PMT_BITS
Number of PMT bits.
Definition: JPMTMask.hh:35