Jpp
JPMT.hh
Go to the documentation of this file.
1 #ifndef __JDETECTOR__JPMT__
2 #define __JDETECTOR__JPMT__
3 
4 #include <istream>
5 #include <ostream>
6 #include <iomanip>
7 #include <string>
8 #include <vector>
9 #include <map>
10 
11 #include "JLang/JType.hh"
12 #include "JLang/JObjectID.hh"
13 #include "JLang/JMultiEquals.hh"
14 #include "JLang/JVectorize.hh"
15 #include "JLang/JSTDToolkit.hh"
16 #include "JGeometry3D/JAxis3D.hh"
19 #include "Jeep/JStatus.hh"
20 #include "Jeep/JVersion.hh"
21 #include "Jeep/JeepToolkit.hh"
22 #include "JIO/JSerialisable.hh"
23 
24 
25 /**
26  * \file
27  *
28  * Data structure for PMT geometry and calibration.
29  * \author mdejong
30  */
31 namespace JDETECTOR {}
32 namespace JPP { using namespace JDETECTOR; }
33 
34 namespace JDETECTOR {
35 
36  using JLANG::JType;
37  using JLANG::JObjectID;
38  using JLANG::JMultiEquals;
39  using JLANG::JTYPELIST;
41  using JEEP::JStatus;
42  using JEEP::JVersion;
43  using JIO::JReader;
44  using JIO::JWriter;
45 
46 
47  /**
48  * Data structure for PMT geometry and calibration.
49  *
50  * N.B.
51  * The axis of the PMT points in the direction of the field of view of the photo-cathode.
52  */
53  class JPMT :
54  public JObjectID,
55  public JAxis3D,
56  public JCalibration,
57  public JStatus,
58  public JMultiEquals<JPMT, JTYPELIST<JObjectID>::typelist>
59  {
60  public:
61  /**
62  * Enumeration of status bits.\n
63  * Additional status bits should be included in JGetPMTStatusBit::JGetPMTStatusBit.
64  */
66  PMT_STATUS = 0, //!< Enable (disable) use of PMT data if 0 (1);
67  DAQ_STATUS = 1 //!< Enable (disable) use of high-rate veto and FIFO (almost) full if 0 (1);
68  };
69 
70 
71  /**
72  * Default constructor.
73  */
74  JPMT() :
75  JObjectID(),
76  JAxis3D(),
77  JCalibration(),
78  JStatus()
79  {}
80 
81 
82  /**
83  * Constructor.
84  *
85  * \param id identifier
86  * \param axis axis
87  * \param status status
88  */
89  JPMT(const int& id,
90  const JAxis3D& axis,
91  const JStatus& status = JStatus()) :
92  JObjectID(id),
93  JAxis3D(axis),
94  JCalibration(),
95  JStatus(status)
96  {}
97 
98 
99  /**
100  * Constructor.
101  *
102  * \param id identifier
103  * \param axis axis
104  * \param cal calibration
105  * \param status status
106  */
107  JPMT(const int& id,
108  const JAxis3D& axis,
109  const JCalibration& cal,
110  const JStatus& status = JStatus()) :
111  JObjectID(id),
112  JAxis3D(axis),
113  JCalibration(cal),
114  JStatus(status)
115  {}
116 
117 
118  /**
119  * Get detector version.
120  */
122  {
123  static JDetectorVersion version;
124 
125  return version;
126  }
127 
128 
129  /**
130  * Set detector version.
131  *
132  * \param version version
133  */
134  static void setVersion(const JVersion& version)
135  {
136  getVersion() = JDetectorVersion(version);
137  }
138 
139 
140  /**
141  * Test PMT status.
142  *
143  * \param bit bit
144  */
145  bool has(const JPMTStatusBits_t bit) const
146  {
147  return (this->getStatus() & (1<<bit)) != 0;
148  }
149 
150 
151  /**
152  * Set PMT status.
153  *
154  * \param bit bit
155  */
156  void set(const JPMTStatusBits_t bit)
157  {
158  this->getStatus() |= (1<<bit);
159  }
160 
161 
162  /**
163  * Reset PMT status.
164  *
165  * \param bit bit
166  */
167  void reset(const JPMTStatusBits_t bit)
168  {
169  this->getStatus() &= ~(1<<bit);
170  }
171 
172 
173  /**
174  * Dot product.
175  *
176  * The dot product is evaluated for the PMT orientation.
177  *
178  * \param pmt PMT
179  * \return dot product
180  */
181  inline double getDot(const JPMT& pmt) const
182  {
183  return this->getDirection().getDot(pmt.getDirection());
184  }
185 
186 
187  /**
188  * Read PMT from input.
189  *
190  * \param in input stream
191  * \param pmt PMT
192  * \return input stream
193  */
194  friend inline std::istream& operator>>(std::istream& in, JPMT& pmt)
195  {
196  in >> static_cast<JObjectID&> (pmt);
197  in >> static_cast<JAxis3D&> (pmt);
198  in >> static_cast<JCalibration&>(pmt);
199 
201  in >> static_cast<JStatus&>(pmt);
202  }
203 
204  return in;
205  }
206 
207 
208  /**
209  * Write PMT to output.
210  *
211  * \param out output stream
212  * \param pmt PMT
213  * \return output stream
214  */
215  friend inline std::ostream& operator<<(std::ostream& out, const JPMT& pmt)
216  {
217  out << static_cast<const JObjectID&> (pmt);
218  out << ' ';
219  out << static_cast<const JAxis3D&> (pmt);
220  out << ' ';
221  out << static_cast<const JCalibration&>(pmt);
222 
224  out << ' ';
225  out << static_cast<const JStatus&>(pmt);
226  }
227 
228  return out;
229  }
230 
231 
232  /**
233  * Read PMT from input.
234  *
235  * \param in reader
236  * \param pmt PMT
237  * \return reader
238  */
239  friend inline JReader& operator>>(JReader& in, JPMT& pmt)
240  {
241  in >> static_cast<JObjectID&> (pmt);
242  in >> static_cast<JAxis3D&> (pmt);
243  in >> static_cast<JCalibration&>(pmt);
244 
246  in >> static_cast<JStatus&>(pmt);
247  }
248 
249  return in;
250  }
251 
252 
253  /**
254  * Write PMT to output.
255  *
256  * \param out writer
257  * \param pmt PMT
258  * \return writer
259  */
260  friend inline JWriter& operator<<(JWriter& out, const JPMT& pmt)
261  {
262  out << static_cast<const JObjectID&> (pmt);
263  out << static_cast<const JAxis3D&> (pmt);
264  out << static_cast<const JCalibration&>(pmt);
265 
267  out << static_cast<const JStatus&>(pmt);
268  }
269 
270  return out;
271  }
272  };
273 
274 
275  /**
276  * Auxiliary class to map key to PMT status bit.
277  */
279  public std::map<std::string, JPMT::JPMTStatusBits_t>
280  {
281  /**
282  * Default constructor.
283  */
285  {
286  using namespace JPP;
287 
288 #define MAKE_ENTRY(A) std::make_pair(getClassname(#A), A)
289 
290  this->insert(MAKE_ENTRY(JPMT::PMT_STATUS));
291  this->insert(MAKE_ENTRY(JPMT::DAQ_STATUS));
292 
293 #undef MAKE_ENTRY
294  }
295 
296 
297  /**
298  * Get PMT status bit.
299  *
300  * \param key key
301  * \return bit
302  */
303  JPMT::JPMTStatusBits_t operator()(const std::string& key) const
304  {
305  return JPP::get_key(*this, key);
306  }
307  };
308 
309 
310  /**
311  * Auxiliary class to map PMT status bit to key.
312  */
314  public std::map<JPMT::JPMTStatusBits_t, std::string>
315  {
316  /**
317  * Constructor.
318  *
319  * \param input PMT status bits
320  */
322  {
323  using namespace std;
324 
325  for (JGetPMTStatusBit::const_iterator i = input.begin(); i != input.end(); ++i) {
326  this->insert(make_pair(i->second, i->first));
327  }
328  }
329 
330 
331  /**
332  * Put PMT status bit.
333  *
334  * \param bit bit
335  * \return bit
336  */
337  const std::string& operator()(const JPMT::JPMTStatusBits_t bit) const
338  {
339  return JPP::get_key(*this, bit);
340  }
341  };
342 
343 
344  /**
345  * Function object to map key to PMT status bit.
346  */
348 
349 
350  /**
351  * Function object to map PMT status bit to key.
352  */
354 
355 
356  /**
357  * Get PMT status bits.
358  *
359  * \param type type
360  * \return status bits
361  */
363  {
364  return JPP::make_array(getPMTStatusBit.begin(), getPMTStatusBit.end(), &JGetPMTStatusBit::value_type::first);
365  }
366 
367 
368  /**
369  * Get PMT status bits.
370  *
371  * \param type type
372  * \return status bits
373  */
375  {
376  return JPP::make_array(getPMTStatusBit.begin(), getPMTStatusBit.end(), &JGetPMTStatusBit::value_type::second);
377  }
378 
379 
380  /**
381  * Get PMT status bits.
382  *
383  * \return status bits
384  */
385  template<class T>
387  {
388  return getPMTStatusBits(JType<T>());
389  }
390 }
391 
392 #endif
JDETECTOR::getPMTStatusBits
std::vector< T > getPMTStatusBits()
Get PMT status bits.
Definition: JPMT.hh:386
JIO::JReader
Interface for binary input.
Definition: JSerialisable.hh:62
JDETECTOR::JPMT::has
bool has(const JPMTStatusBits_t bit) const
Test PMT status.
Definition: JPMT.hh:145
JDETECTOR::JPMT::getVersion
static JDetectorVersion & getVersion()
Get detector version.
Definition: JPMT.hh:121
JEEP::JStatus::JStatus
JStatus()
Default constructor.
Definition: JStatus.hh:36
JDETECTOR::JPMT::JPMT
JPMT(const int &id, const JAxis3D &axis, const JCalibration &cal, const JStatus &status=JStatus())
Constructor.
Definition: JPMT.hh:107
JLANG::JType
Auxiliary class for a type holder.
Definition: JType.hh:19
JDETECTOR::JPMT::operator>>
friend JReader & operator>>(JReader &in, JPMT &pmt)
Read PMT from input.
Definition: JPMT.hh:239
JDETECTOR::JDetectorVersion::V3
Version with PMT status field and comments.
Definition: JDetectorVersion.hh:45
JDETECTOR::JPMT::JPMT
JPMT()
Default constructor.
Definition: JPMT.hh:74
JEEP::JStatus
Auxiliary class for status identifier.
Definition: JStatus.hh:29
JGEOMETRY3D::JDirection3D::getDirection
const JDirection3D & getDirection() const
Get direction.
Definition: JDirection3D.hh:106
JGEOMETRY3D::JAxis3D
Axis object.
Definition: JAxis3D.hh:38
JDETECTOR::getDetectorVersion
static const JGetDetectorVersion getDetectorVersion
Function object to map detector variant to detector version.
Definition: JDetectorVersion.hh:166
JDETECTOR::JCalibration
Data structure for PMT calibration.
Definition: JDetector/JCalibration.hh:35
JGEOMETRY3D::JDirection3D::getDot
double getDot(const JAngle3D &angle) const
Get dot product.
Definition: JDirection3D.hh:333
std::vector< std::string >
JVersion.hh
JDETECTOR::JPutPMTStatusBit::operator()
const std::string & operator()(const JPMT::JPMTStatusBits_t bit) const
Put PMT status bit.
Definition: JPMT.hh:337
JEEP::JStatus::getStatus
int getStatus() const
Get status.
Definition: JStatus.hh:56
JDETECTOR::putPMTStatusBit
static const JPutPMTStatusBit putPMTStatusBit(getPMTStatusBit)
Function object to map PMT status bit to key.
JObjectID.hh
JLANG::JTYPELIST
Auxiliary class for recursive type list generation.
Definition: JTypeList.hh:377
JDETECTOR::JPMT::operator<<
friend std::ostream & operator<<(std::ostream &out, const JPMT &pmt)
Write PMT to output.
Definition: JPMT.hh:215
JDETECTOR::JPMT::JPMT
JPMT(const int &id, const JAxis3D &axis, const JStatus &status=JStatus())
Constructor.
Definition: JPMT.hh:89
JDETECTOR::JPMT::operator>>
friend std::istream & operator>>(std::istream &in, JPMT &pmt)
Read PMT from input.
Definition: JPMT.hh:194
JDetectorVersion.hh
JAxis3D.hh
JPP
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
Definition: JAAnetToolkit.hh:37
JDETECTOR::getPMTStatusBit
static const JGetPMTStatusBit getPMTStatusBit
Function object to map key to PMT status bit.
Definition: JPMT.hh:347
MAKE_ENTRY
#define MAKE_ENTRY(A)
JSerialisable.hh
JDETECTOR::JPMT::PMT_STATUS
Enable (disable) use of PMT data if 0 (1);.
Definition: JPMT.hh:66
JDETECTOR::JPutPMTStatusBit::JPutPMTStatusBit
JPutPMTStatusBit(const JGetPMTStatusBit &input)
Constructor.
Definition: JPMT.hh:321
JIO::JWriter
Interface for binary output.
Definition: JSerialisable.hh:131
JMultiEquals.hh
JDETECTOR::JPMT::DAQ_STATUS
Enable (disable) use of high-rate veto and FIFO (almost) full if 0 (1);.
Definition: JPMT.hh:67
JDETECTOR::JPMT::setVersion
static void setVersion(const JVersion &version)
Set detector version.
Definition: JPMT.hh:134
std::map
Definition: JSTDTypes.hh:16
JDETECTOR::JPMT
Data structure for PMT geometry and calibration.
Definition: JPMT.hh:53
JDETECTOR::JPutPMTStatusBit
Auxiliary class to map PMT status bit to key.
Definition: JPMT.hh:313
JLANG::JObjectID
Auxiliary class for object identification.
Definition: JObjectID.hh:27
JCalibration.hh
JStatus.hh
JDETECTOR::JGetPMTStatusBit
Auxiliary class to map key to PMT status bit.
Definition: JPMT.hh:278
JDETECTOR::JPMT::operator<<
friend JWriter & operator<<(JWriter &out, const JPMT &pmt)
Write PMT to output.
Definition: JPMT.hh:260
JLANG::JMultiEquals
Template definition of auxiliary base class for composite data structures composed of base classes wi...
Definition: JMultiEquals.hh:31
JDETECTOR::JGetPMTStatusBit::JGetPMTStatusBit
JGetPMTStatusBit()
Default constructor.
Definition: JPMT.hh:284
JVectorize.hh
JEEP::JVersion
Auxiliary class for version identifier.
Definition: JVersion.hh:30
JDETECTOR::JPMT::reset
void reset(const JPMTStatusBits_t bit)
Reset PMT status.
Definition: JPMT.hh:167
std
Definition: jaanetDictionary.h:36
JLANG::get_key
const JValue_t & get_key(const std::map< JKey_t, JValue_t, JComparator_t, JAllocator_t > &map, const JKey_t key)
Get value in map.
Definition: JSTDToolkit.hh:31
JeepToolkit.hh
JDETECTOR::JDetectorVersion
Detector version.
Definition: JDetectorVersion.hh:35
JDETECTOR::JPMT::set
void set(const JPMTStatusBits_t bit)
Set PMT status.
Definition: JPMT.hh:156
JLANG::make_array
const std::vector< JValue_t > make_array(const JValue_t(&array)[N])
Method to create array of values.
Definition: JVectorize.hh:27
JType.hh
JDETECTOR::JPMT::JPMTStatusBits_t
JPMTStatusBits_t
Enumeration of status bits.
Definition: JPMT.hh:65
JDETECTOR::JPMT::getDot
double getDot(const JPMT &pmt) const
Dot product.
Definition: JPMT.hh:181
JDETECTOR::JGetPMTStatusBit::operator()
JPMT::JPMTStatusBits_t operator()(const std::string &key) const
Get PMT status bit.
Definition: JPMT.hh:303
JDETECTOR
Auxiliary classes and methods for detector calibration.
Definition: JAnchor.hh:12
JSTDToolkit.hh