Jpp  pmt_effective_area_update_2
the software that should make you happy
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
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 
8 #include "JLang/JObjectID.hh"
9 #include "JLang/JMultiEquals.hh"
10 #include "JGeometry3D/JAxis3D.hh"
12 #include "JDetector/JStatus.hh"
14 #include "JIO/JSerialisable.hh"
15 
16 
17 /**
18  * \file
19  *
20  * Data structure for PMT geometry and calibration.
21  * \author mdejong
22  */
23 namespace JDETECTOR {}
24 namespace JPP { using namespace JDETECTOR; }
25 
26 namespace JDETECTOR {
27 
28  using JLANG::JObjectID;
29  using JLANG::JMultiEquals;
31  using JIO::JReader;
32  using JIO::JWriter;
33 
34 
35  /**
36  * Data structure for PMT geometry, calibration and status.
37  *
38  * The I/O of the status of the PMT depends on the detector version.\n
39  * Note that the axis of the PMT points in the direction of the field of view of the photo-cathode.\n
40  * Note also that the comparison between PMTs is based on the identifier only.
41  */
42  class JPMT :
43  public JObjectID,
44  public JAxis3D,
45  public JCalibration,
46  public JStatus,
47  public JMultiEquals<JPMT, JObjectID>
48  {
49  public:
50  /**
51  * Default constructor.
52  */
53  JPMT() :
54  JObjectID(),
55  JAxis3D(),
56  JCalibration(),
57  JStatus()
58  {}
59 
60 
61  /**
62  * Constructor.
63  *
64  * \param id identifier
65  * \param axis axis
66  * \param status status
67  */
68  JPMT(const int id,
69  const JAxis3D& axis,
70  const JStatus& status = JStatus()) :
71  JObjectID(id),
72  JAxis3D(axis),
73  JCalibration(),
75  {}
76 
77 
78  /**
79  * Constructor.
80  *
81  * \param id identifier
82  * \param axis axis
83  * \param cal calibration
84  * \param status status
85  */
86  JPMT(const int id,
87  const JAxis3D& axis,
88  const JCalibration& cal,
89  const JStatus& status = JStatus()) :
90  JObjectID(id),
91  JAxis3D(axis),
92  JCalibration(cal),
94  {}
95 
96 
97  /**
98  * Get detector version.
99  */
101  {
102  static JDetectorVersion version;
103 
104  return version;
105  }
106 
107 
108  /**
109  * Set detector version.
110  *
111  * \param version version
112  */
113  static void setVersion(const JVersion& version)
114  {
115  getVersion() = JDetectorVersion(version);
116  }
117 
118 
119  /**
120  * Dot product.
121  *
122  * The dot product is evaluated for the PMT orientation.
123  *
124  * \param pmt PMT
125  * \return dot product
126  */
127  inline double getDot(const JPMT& pmt) const
128  {
129  return this->getDirection().getDot(pmt.getDirection());
130  }
131 
132 
133  /**
134  * Read PMT from input.
135  *
136  * \param in input stream
137  * \param pmt PMT
138  * \return input stream
139  */
140  friend inline std::istream& operator>>(std::istream& in, JPMT& pmt)
141  {
142  in >> static_cast<JObjectID&> (pmt);
143  in >> static_cast<JAxis3D&> (pmt);
144  in >> static_cast<JCalibration&>(pmt);
145 
147  in >> static_cast<JStatus&>(pmt);
148  }
149 
150  return in;
151  }
152 
153 
154  /**
155  * Write PMT to output.
156  *
157  * \param out output stream
158  * \param pmt PMT
159  * \return output stream
160  */
161  friend inline std::ostream& operator<<(std::ostream& out, const JPMT& pmt)
162  {
163  using namespace std;
164 
165  out << setw(8);
166  out << static_cast<const JObjectID&> (pmt);
167  out << ' ';
168  out << static_cast<const JAxis3D&> (pmt);
169  out << ' ';
170  out << static_cast<const JCalibration&>(pmt);
171 
173  out << ' ';
174  out << static_cast<const JStatus&>(pmt);
175  }
176 
177  return out;
178  }
179 
180 
181  /**
182  * Read PMT from input.
183  *
184  * \param in reader
185  * \param pmt PMT
186  * \return reader
187  */
188  friend inline JReader& operator>>(JReader& in, JPMT& pmt)
189  {
190  in >> static_cast<JObjectID&> (pmt);
191  in >> static_cast<JAxis3D&> (pmt);
192  in >> static_cast<JCalibration&>(pmt);
193 
195  in >> static_cast<JStatus&>(pmt);
196  }
197 
198  return in;
199  }
200 
201 
202  /**
203  * Write PMT to output.
204  *
205  * \param out writer
206  * \param pmt PMT
207  * \return writer
208  */
209  friend inline JWriter& operator<<(JWriter& out, const JPMT& pmt)
210  {
211  out << static_cast<const JObjectID&> (pmt);
212  out << static_cast<const JAxis3D&> (pmt);
213  out << static_cast<const JCalibration&>(pmt);
214 
216  out << static_cast<const JStatus&>(pmt);
217  }
218 
219  return out;
220  }
221  };
222 }
223 
224 #endif
Interface for binary output.
JStatus()
Default constructor.
Definition: JStatus.hh:47
Time calibration (including definition of sign of time offset).
const JDirection3D & getDirection() const
Get direction.
friend JReader & operator>>(JReader &in, JPMT &pmt)
Read PMT from input.
Definition: JPMT.hh:188
JPMT(const int id, const JAxis3D &axis, const JStatus &status=JStatus())
Constructor.
Definition: JPMT.hh:68
friend std::ostream & operator<<(std::ostream &out, const JPMT &pmt)
Write PMT to output.
Definition: JPMT.hh:161
Auxiliary class for controlling PMT status.
Definition: JStatus.hh:41
Data structure for time calibration.
JPMT()
Default constructor.
Definition: JPMT.hh:53
friend std::istream & operator>>(std::istream &in, JPMT &pmt)
Read PMT from input.
Definition: JPMT.hh:140
double getDot(const JAngle3D &angle) const
Get dot product.
Template definition of auxiliary base class for data structures composed of multiple base classes wit...
Definition: JMultiEquals.hh:32
JPMT(const int id, const JAxis3D &axis, const JCalibration &cal, const JStatus &status=JStatus())
Constructor.
Definition: JPMT.hh:86
Axis object.
Definition: JAxis3D.hh:38
Version with PMT status field and comments.
Data structure for PMT geometry, calibration and status.
Definition: JPMT.hh:42
Data structure for detector version.
Interface for binary input.
static const JGetDetectorVersion getDetectorVersion
Function object to map detector version to numerical value.
static void setVersion(const JVersion &version)
Set detector version.
Definition: JPMT.hh:113
friend JWriter & operator<<(JWriter &out, const JPMT &pmt)
Write PMT to output.
Definition: JPMT.hh:209
Auxiliary class for object identification.
Definition: JObjectID.hh:22
Auxiliary class for version identifier.
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:40
static JDetectorVersion & getVersion()
Get detector version.
Definition: JPMT.hh:100
version
Definition: JCalibratePMT.sh:7
double getDot(const JPMT &pmt) const
Dot product.
Definition: JPMT.hh:127