Jpp  15.0.1
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 
7 #include <string>
8 
9 #include "JIO/JSerialisable.hh"
12 
13 /**
14  * \author rbruijn
15  */
16 
17 namespace JTRIGGER {}
18 namespace JPP { using namespace JTRIGGER; }
19 
20 namespace JTRIGGER {
21 
22  using JIO::JReader;
23  using JIO::JWriter;
25 
26 
27  /**
28  * Type definition of pmt mask.
29  */
30  typedef unsigned int JPMTMask_t;
31 
32 
33  /**
34  * Number of pmt bits.
35  */
36  static const unsigned int NUMBER_OF_PMT_BITS = 31;
37 
38 
39  /**
40  * Convert pmt bit to pmt mask.
41  *
42  * \param bit pmt bit
43  * \return pmt mask
44  */
45  inline JPMTMask_t getPMTMask(const unsigned int bit)
46  {
47  if (bit < NUMBER_OF_PMT_BITS)
48  return JPMTMask_t(1) << bit;
49  else
50  return 0;
51  }
52 
53 
54  /**
55  * Auxiliary class for pmt mask.
56  */
57  class JPMTMask {
58  public:
59  /**
60  * Default constructor.
61  */
63  pmt_mask(0)
64  {}
65 
66 
67  /**
68  * Constructor.
69  *
70  * \param mask pmt mask
71  */
72  JPMTMask(const JPMTMask_t mask) :
73  pmt_mask(mask)
74  {}
75 
76 
77  /**
78  * Constructor.
79  *
80  * \param buffer pmt bit pattern (i.e.\ sequence of '0' and '1').
81  */
82  JPMTMask(const std::string& buffer) :
83  pmt_mask(valueOf(buffer).getPMTMask())
84  {}
85 
86 
87  /**
88  * Virtual destructor.
89  */
90  virtual ~JPMTMask()
91  {}
92 
93 
94  /**
95  * Get pmt bit pattern.
96  *
97  * \return pmt mask
98  */
100  {
101  return pmt_mask;
102  }
103 
104 
105  /**
106  * Add pmt pmt mask.
107  *
108  * \param mask pmt mask
109  * \return pmt mask
110  */
112  {
113  pmt_mask |= mask;
114 
115  return *this;
116  }
117 
118 
119  /**
120  * Add pmt pmt mask.
121  *
122  * \param mask pmted mask
123  * \return pmted mask
124  */
126  {
127  return addPMTMask(mask.getPMTMask());
128  }
129 
130  /**
131  * Add pmt bit.
132  *
133  * \param bit pmt bit
134  * \return pmt mask
135  */
136  inline JPMTMask& addPMTBit(const unsigned int bit)
137  {
139 
140  return *this;
141  }
142 
143  /**
144  * Add pmt channel
145  *
146  * \param channel pmt readout channel
147  * \return pmt mask
148  */
149  inline JPMTMask& addPMT(const JPMTReadoutAddress& channel)
150  {
151  return addPMTBit(channel.getTDC());
152  }
153 
154 
155  /**
156  * Check pmt bit.
157  *
158  * \param bit pmt bit
159  * \return true if bit is set; else false
160  */
161  inline bool hasPMTBit(const unsigned int bit) const
162  {
163  return pmt_mask & JTRIGGER::getPMTMask(bit);
164  }
165 
166  /**
167  * check pmt
168  *
169  * \param channel PMT channel
170  * \return true if PMT is selected; else false
171  */
172  inline bool hasPMT(const JPMTReadoutAddress& channel) const
173  {
174  return hasPMTBit(channel.getTDC());
175  }
176 
177  /**
178  * Extract pmt mask.
179  *
180  * \param buffer pmt bit pattern (i.e.\ sequence of '0' and '1').
181  * \return pmt mask
182  */
183  static JPMTMask valueOf(const std::string& buffer)
184  {
186 
187  unsigned int bit = 0;
188 
189  for (std::string::const_reverse_iterator i = buffer.rbegin(); i != buffer.rend() && bit != NUMBER_OF_PMT_BITS; ++i, ++bit) {
190  if (*i == '1') {
191  pmt_mask.addPMTBit(bit);
192  }
193  }
194 
195  return pmt_mask;
196  }
197 
198 
199  /**
200  * Convert pmt mask.
201  *
202  * \return pmt bit pattern (i.e.\ sequence of '0' and '1').
203  */
204  std::string toString() const
205  {
206  std::string buffer(NUMBER_OF_PMT_BITS, '0');
207 
208  unsigned int bit = 0;
209 
210  for (std::string::reverse_iterator i = buffer.rbegin(); i != buffer.rend() && bit != NUMBER_OF_PMT_BITS; ++i, ++bit) {
211  if (hasPMTBit(bit)) {
212  *i = '1';
213  }
214  }
215 
216  return buffer;
217  }
218 
219 
220  /**
221  * Read pmt mask from input.
222  *
223  * \param in input stream
224  * \param mask pmt mask
225  * \return input stream
226  */
227  friend inline std::istream& operator>>(std::istream& in, JPMTMask& mask)
228  {
229  return in >> mask.pmt_mask;
230  }
231 
232 
233  /**
234  * Write pmt mask to output.
235  *
236  * \param out output stream
237  * \param mask pmt mask
238  * \return output stream
239  */
240  friend inline std::ostream& operator<<(std::ostream& out, const JPMTMask& mask)
241  {
242  return out << mask.pmt_mask;
243  }
244 
245 
246  /**
247  * Read JPMTMask from input.
248  *
249  * \param in JReader
250  * \param mask JPMTMask
251  * \return JReader
252  */
253  friend inline JReader& operator>>(JReader& in, JPMTMask& mask)
254  {
255  in >> mask.pmt_mask;
256 
257  return in;
258  }
259 
260 
261  /**
262  * Write JPMTMask to output.
263  *
264  * \param out JWriter
265  * \param mask JPMTMask
266  * \return JWriter
267  */
268  friend inline JWriter& operator<<(JWriter& out, const JPMTMask& mask)
269  {
270  out << mask.pmt_mask;
271 
272  return out;
273  }
274 
275 
276  virtual JReader& read(JReader & in)
277  {
278  in>>this->pmt_mask;
279 
280  return in;
281 
282  }
283 
284 
285  virtual JWriter& write(JWriter& out) const
286  {
287  out << this->pmt_mask;
288 
289  return out;
290  }
291 
292 
293  /**
294  * Get size of object.
295  *
296  * \return number of bytes
297  */
298  static int sizeOf()
299  {
300  return sizeof(JPMTMask_t);
301  }
302 
303  //ClassDef(JPMTMask,1);
304 
305  protected:
307  };
308 }
309 
310 #endif
bool hasPMT(const JPMTReadoutAddress &channel) const
check pmt
Definition: JPMTMask.hh:172
Interface for binary output.
JPMTMask_t getPMTMask() const
Get pmt bit pattern.
Definition: JPMTMask.hh:99
std::string toString() const
Convert pmt mask.
Definition: JPMTMask.hh:204
friend JReader & operator>>(JReader &in, JPMTMask &mask)
Read JPMTMask from input.
Definition: JPMTMask.hh:253
friend JWriter & operator<<(JWriter &out, const JPMTMask &mask)
Write JPMTMask to output.
Definition: JPMTMask.hh:268
friend std::ostream & operator<<(std::ostream &out, const JPMTMask &mask)
Write pmt mask to output.
Definition: JPMTMask.hh:240
JPMTMask()
Default constructor.
Definition: JPMTMask.hh:62
Auxiliary class for pmt mask.
Definition: JPMTMask.hh:57
JPMTMask_t getPMTMask(const unsigned int bit)
Convert pmt bit to pmt mask.
Definition: JPMTMask.hh:45
static int sizeOf()
Get size of object.
Definition: JPMTMask.hh:298
JPMTMask(const std::string &buffer)
Constructor.
Definition: JPMTMask.hh:82
JPMTMask & addPMTBit(const unsigned int bit)
Add pmt bit.
Definition: JPMTMask.hh:136
virtual JReader & read(JReader &in)
Definition: JPMTMask.hh:276
unsigned int JPMTMask_t
Type definition of pmt mask.
Definition: JPMTMask.hh:30
JPMTMask(const JPMTMask_t mask)
Constructor.
Definition: JPMTMask.hh:72
bool hasPMTBit(const unsigned int bit) const
Check pmt bit.
Definition: JPMTMask.hh:161
Interface for binary input.
JPMTMask & addPMTMask(const JPMTMask_t mask)
Add pmt pmt mask.
Definition: JPMTMask.hh:111
virtual ~JPMTMask()
Virtual destructor.
Definition: JPMTMask.hh:90
friend std::istream & operator>>(std::istream &in, JPMTMask &mask)
Read pmt mask from input.
Definition: JPMTMask.hh:227
JPMTMask_t pmt_mask
Definition: JPMTMask.hh:306
Data structure for PMT readout address.
static JPMTMask valueOf(const std::string &buffer)
Extract pmt mask.
Definition: JPMTMask.hh:183
virtual JWriter & write(JWriter &out) const
Definition: JPMTMask.hh:285
JPMTMask & addPMTMask(const JPMTMask &mask)
Add pmt pmt mask.
Definition: JPMTMask.hh:125
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 source JAcoustics sh $DETECTOR_ID CHECK_EXIT_CODE typeset A TRIPODS get_tripods $WORKDIR tripod txt TRIPODS for EMITTER in
Definition: JCanberra.sh:41
JPMTMask & addPMT(const JPMTReadoutAddress &channel)
Add pmt channel.
Definition: JPMTMask.hh:149
static const unsigned int NUMBER_OF_PMT_BITS
Number of pmt bits.
Definition: JPMTMask.hh:36