Jpp  15.0.2
the software that should make you happy
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
JDetectorAddressMapToolkit.hh
Go to the documentation of this file.
1 #ifndef __JDETECTOR__JDETECTORADDRESSMAPTOOLKIT__
2 #define __JDETECTOR__JDETECTORADDRESSMAPTOOLKIT__
3 
4 #include "JLang/JTypeList.hh"
5 #include "JLang/JNullType.hh"
6 #include "JLang/JType.hh"
7 #include "JLang/JException.hh"
8 
11 
12 
13 /**
14  * \file
15  * Detector specific mapping between logical positions and readout channels of PMTs in optical modules.
16  * \author mdejong
17  */
18 namespace JDETECTOR {}
19 namespace JPP { using namespace JDETECTOR; }
20 
21 namespace JDETECTOR {
22 
23  using JLANG::JTypeList;
24  using JLANG::JTYPELIST;
25  using JLANG::JNullType;
26  using JLANG::JType;
28 
29 
30  /**
31  * Type definitions for different detectors.
32  */
33  struct JPPM_DU_t {}; //!< PPM_DU
34  struct JKM3NeT_t {}; //!< %KM3NeT
35  struct JMonteCarlo_t {}; //!< Monte Carlo
36  struct JAntares_t {}; //!< %Antares
37  struct JObsolete_t {}; //!< obsolete detector
38 
39 
40  /**
41  * Type list of %KM3NeT detector types.
42  */
44 
45 
46  /**
47  * Check validity of detector identifier.
48  *
49  * \param type detector type
50  * \param id detector identifier
51  * \return true if valid match; else false
52  */
53  inline bool hasDetector(JType<JPPM_DU_t> type, const int id) { return id == 1; }
54  inline bool hasDetector(JType<JKM3NeT_t> type, const int id) { return id >= 2 && id <= 2000000000; }
55  inline bool hasDetector(JType<JMonteCarlo_t> type, const int id) { return id >= -2000000000 && id <= -2; }
56 
57 
58  /**
59  * Template lookup table for PMT addresses in detector.\n
60  * The template argument refers to a specific detector.\n
61  * This class should be specialised for each detector.\n
62  * In the constructor of the specialised class, the various PMT swaps should be defined.
63  */
64  template<class JDetector_t>
66 
67 
68  /**
69  * Template specialisation of JTemplateDetectorAddressMap for obsolete detector.
70  */
71  template<>
73  public JDetectorAddressMap
74  {
75  public:
76  /**
77  * Default constructor.
78  */
81  {}
82 
83 
84  /**
85  * Get default module address map.
86  *
87  * \return module address map
88  */
89  virtual const JModuleAddressMap& getDefaultModuleAddressMap() const override
90  {
91  static JModuleAddressMap memo;
92 
93  if (memo.empty()) {
94 
95  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 0), JPMTPhysicalAddress('A', 1)));
96 
97  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 1), JPMTPhysicalAddress('B', 1)));
98  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 2), JPMTPhysicalAddress('B', 2)));
99  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 3), JPMTPhysicalAddress('B', 3)));
100  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 4), JPMTPhysicalAddress('B', 4)));
101  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 5), JPMTPhysicalAddress('B', 5)));
102  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 6), JPMTPhysicalAddress('B', 6)));
103 
104  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 7), JPMTPhysicalAddress('C', 1)));
105  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 8), JPMTPhysicalAddress('C', 2)));
106  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 9), JPMTPhysicalAddress('C', 3)));
107  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(10), JPMTPhysicalAddress('C', 4)));
108  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(11), JPMTPhysicalAddress('C', 5)));
109  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(12), JPMTPhysicalAddress('C', 6)));
110 
111  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(13), JPMTPhysicalAddress('D', 1)));
112  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(14), JPMTPhysicalAddress('D', 2)));
113  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(15), JPMTPhysicalAddress('D', 3)));
114  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(16), JPMTPhysicalAddress('D', 4)));
115  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(17), JPMTPhysicalAddress('D', 5)));
116  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(18), JPMTPhysicalAddress('D', 6)));
117 
118  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(19), JPMTPhysicalAddress('E', 1)));
119  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(20), JPMTPhysicalAddress('E', 2)));
120  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(21), JPMTPhysicalAddress('E', 3)));
121  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(22), JPMTPhysicalAddress('E', 4)));
122  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(23), JPMTPhysicalAddress('E', 5)));
123  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(24), JPMTPhysicalAddress('E', 6)));
124 
125  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(25), JPMTPhysicalAddress('F', 1)));
126  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(26), JPMTPhysicalAddress('F', 2)));
127  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(27), JPMTPhysicalAddress('F', 3)));
128  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(28), JPMTPhysicalAddress('F', 4)));
129  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(29), JPMTPhysicalAddress('F', 5)));
130  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(30), JPMTPhysicalAddress('F', 6)));
131 
132  memo.configure();
133  }
134 
135  return memo;
136  }
137  };
138 
139 
140  /**
141  * Template specialisation of JTemplateDetectorAddressMap for PPM_DU detector.
142  */
143  template<>
145  public JDetectorAddressMap
146  {
147  public:
148  /**
149  * Default constructor.
150  */
153  {
154  get(103).swap(24,30);
155  }
156 
157 
158  /**
159  * Get default module address map.
160  *
161  * \return module address map
162  */
163  virtual const JModuleAddressMap& getDefaultModuleAddressMap() const override
164  {
165  static JModuleAddressMap memo;
166 
167  if (memo.empty()) {
168 
169  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 0), JPMTPhysicalAddress('A', 1)));
170 
171  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 6), JPMTPhysicalAddress('B', 1)));
172  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 5), JPMTPhysicalAddress('B', 2)));
173  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 4), JPMTPhysicalAddress('B', 3)));
174  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 3), JPMTPhysicalAddress('B', 4)));
175  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 2), JPMTPhysicalAddress('B', 5)));
176  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 1), JPMTPhysicalAddress('B', 6)));
177 
178  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(12), JPMTPhysicalAddress('C', 1)));
179  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(11), JPMTPhysicalAddress('C', 2)));
180  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(10), JPMTPhysicalAddress('C', 3)));
181  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 9), JPMTPhysicalAddress('C', 4)));
182  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 8), JPMTPhysicalAddress('C', 5)));
183  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 7), JPMTPhysicalAddress('C', 6)));
184 
185  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(18), JPMTPhysicalAddress('D', 1)));
186  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(17), JPMTPhysicalAddress('D', 2)));
187  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(16), JPMTPhysicalAddress('D', 3)));
188  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(15), JPMTPhysicalAddress('D', 4)));
189  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(14), JPMTPhysicalAddress('D', 5)));
190  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(13), JPMTPhysicalAddress('D', 6)));
191 
192  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(19), JPMTPhysicalAddress('E', 1)));
193  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(24), JPMTPhysicalAddress('E', 2)));
194  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(23), JPMTPhysicalAddress('E', 3)));
195  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(22), JPMTPhysicalAddress('E', 4)));
196  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(21), JPMTPhysicalAddress('E', 5)));
197  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(20), JPMTPhysicalAddress('E', 6)));
198 
199  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(25), JPMTPhysicalAddress('F', 1)));
200  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(30), JPMTPhysicalAddress('F', 2)));
201  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(29), JPMTPhysicalAddress('F', 3)));
202  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(28), JPMTPhysicalAddress('F', 4)));
203  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(27), JPMTPhysicalAddress('F', 5)));
204  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(26), JPMTPhysicalAddress('F', 6)));
205 
206  memo.configure();
207  }
208 
209  return memo;
210  }
211  };
212 
213 
214  /**
215  * Template specialisation of JTemplateDetectorAddressMap for %KM3NeT detector.
216  */
217  template<>
219  public JDetectorAddressMap
220  {
221  public:
222  /**
223  * Default constructor.
224  */
227  {}
228 
229 
230  /**
231  * Get default module address map.
232  *
233  * \return module address map
234  */
235  virtual const JModuleAddressMap& getDefaultModuleAddressMap() const override
236  {
237  static JModuleAddressMap memo;
238 
239  if (memo.empty()) {
240 
241  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(22), JPMTPhysicalAddress('A', 1)));
242 
243  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(14), JPMTPhysicalAddress('B', 1)));
244  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(19), JPMTPhysicalAddress('B', 2)));
245  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(25), JPMTPhysicalAddress('B', 3)));
246  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(24), JPMTPhysicalAddress('B', 4)));
247  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(26), JPMTPhysicalAddress('B', 5)));
248  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(18), JPMTPhysicalAddress('B', 6)));
249 
250  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(13), JPMTPhysicalAddress('C', 1)));
251  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(21), JPMTPhysicalAddress('C', 2)));
252  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(29), JPMTPhysicalAddress('C', 3)));
253  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(28), JPMTPhysicalAddress('C', 4)));
254  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(20), JPMTPhysicalAddress('C', 5)));
255  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(17), JPMTPhysicalAddress('C', 6)));
256 
257  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(12), JPMTPhysicalAddress('D', 1)));
258  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(15), JPMTPhysicalAddress('D', 2)));
259  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(23), JPMTPhysicalAddress('D', 3)));
260  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(30), JPMTPhysicalAddress('D', 4)));
261  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(27), JPMTPhysicalAddress('D', 5)));
262  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(16), JPMTPhysicalAddress('D', 6)));
263 
264  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(10), JPMTPhysicalAddress('E', 1)));
265  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 6), JPMTPhysicalAddress('E', 2)));
266  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 3), JPMTPhysicalAddress('E', 3)));
267  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 2), JPMTPhysicalAddress('E', 4)));
268  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 1), JPMTPhysicalAddress('E', 5)));
269  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(11), JPMTPhysicalAddress('E', 6)));
270 
271  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 9), JPMTPhysicalAddress('F', 1)));
272  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 8), JPMTPhysicalAddress('F', 2)));
273  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 4), JPMTPhysicalAddress('F', 3)));
274  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 0), JPMTPhysicalAddress('F', 4)));
275  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 5), JPMTPhysicalAddress('F', 5)));
276  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 7), JPMTPhysicalAddress('F', 6)));
277 
278  memo.configure();
279  }
280 
281  return memo;
282  }
283  };
284 
285 
286  /**
287  * Template specialisation of JTemplateDetectorAddressMap for Monte Carlo detector.
288  */
289  template<>
291  public JDetectorAddressMap
292  {
293  public:
294  /**
295  * Default constructor.
296  */
299  {}
300 
301 
302  /**
303  * Get default module address map.
304  *
305  * \return module address map
306  */
307  virtual const JModuleAddressMap& getDefaultModuleAddressMap() const override
308  {
309  static JModuleAddressMap memo;
310 
311  if (memo.empty()) {
312 
313  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(22), JPMTPhysicalAddress('A', 1)));
314 
315  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(14), JPMTPhysicalAddress('B', 1)));
316  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(19), JPMTPhysicalAddress('B', 2)));
317  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(25), JPMTPhysicalAddress('B', 3)));
318  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(24), JPMTPhysicalAddress('B', 4)));
319  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(26), JPMTPhysicalAddress('B', 5)));
320  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(18), JPMTPhysicalAddress('B', 6)));
321 
322  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(13), JPMTPhysicalAddress('C', 1)));
323  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(21), JPMTPhysicalAddress('C', 2)));
324  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(29), JPMTPhysicalAddress('C', 3)));
325  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(28), JPMTPhysicalAddress('C', 4)));
326  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(20), JPMTPhysicalAddress('C', 5)));
327  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(17), JPMTPhysicalAddress('C', 6)));
328 
329  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(12), JPMTPhysicalAddress('D', 1)));
330  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(15), JPMTPhysicalAddress('D', 2)));
331  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(23), JPMTPhysicalAddress('D', 3)));
332  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(30), JPMTPhysicalAddress('D', 4)));
333  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(27), JPMTPhysicalAddress('D', 5)));
334  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(16), JPMTPhysicalAddress('D', 6)));
335 
336  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(10), JPMTPhysicalAddress('E', 1)));
337  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 6), JPMTPhysicalAddress('E', 2)));
338  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 3), JPMTPhysicalAddress('E', 3)));
339  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 2), JPMTPhysicalAddress('E', 4)));
340  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 1), JPMTPhysicalAddress('E', 5)));
341  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(11), JPMTPhysicalAddress('E', 6)));
342 
343  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 9), JPMTPhysicalAddress('F', 1)));
344  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 8), JPMTPhysicalAddress('F', 2)));
345  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 4), JPMTPhysicalAddress('F', 3)));
346  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 0), JPMTPhysicalAddress('F', 4)));
347  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 5), JPMTPhysicalAddress('F', 5)));
348  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 7), JPMTPhysicalAddress('F', 6)));
349 
350  memo.configure();
351  }
352 
353  return memo;
354  }
355  };
356 
357 
358  /**
359  * Get detector address map.
360  *
361  * \return detector address map
362  */
363  template<class JDetector_t>
365  {
367 
368  return demo;
369  }
370 
371 
372  /**
373  * Get module address map.
374  *
375  * \param id module identifier
376  * \return module address map
377  */
378  template<class JDetector_t>
380  {
381  return getDetectorAddressMap<JDetector_t>().get(id);
382  }
383 
384 
385  /**
386  * Get PMT address translator for given module identifier and TDC channel.
387  *
388  * \param id module identifier
389  * \param tdc TDC
390  * \return PMT address translator
391  */
392  template<class JDetector_t>
393  inline const JPMTAddressTranslator& getPMTAddressTranslator(int id, int tdc)
394  {
395  return getModuleAddressMap<JDetector_t>(id).getAddressTranslator(tdc);
396  }
397 
398 
399  /**
400  * Get PMT logical index for given module identifier and TDC channel.
401  *
402  * \param id module identifier
403  * \param tdc TDC
404  * \return PMT logical index
405  */
406  template<class JDetector_t>
407  inline int getPMTLogicalIndex(int id, int tdc)
408  {
409  return getModuleAddressMap<JDetector_t>(id).getIndex(tdc);
410  }
411 
412 
413  /**
414  * Auxiliary class to extract detector address map from detector identifier.
415  */
416  template<class T>
418 
419 
420  template<class JHead_t, class JTail_t>
421  struct JDetectorAddressMap_t< JTypeList<JHead_t, JTail_t> >
422  {
423  /**
424  * Get detector address map.
425  *
426  * \param id detector identifier
427  * \return detector address map
428  */
429  static JDetectorAddressMap& get(const int id)
430  {
431  if (hasDetector(JType<JHead_t>(), id))
432  return getDetectorAddressMap<JHead_t>();
433  else
435  }
436 
437 
438  /**
439  * Has detector address map.
440  *
441  * \param id detector identifier
442  * \return true if detector address map available; else false
443  */
444  static bool has(const int id)
445  {
447  }
448  };
449 
450 
451  template<class JHead_t>
453  {
454  /**
455  * Get detector address map.
456  *
457  * \param id detector identifier
458  * \return detector address map
459  */
460  static JDetectorAddressMap& get(const int id)
461  {
462  if (hasDetector(JType<JHead_t>(), id))
463  return getDetectorAddressMap<JHead_t>();
464  else
465  THROW(JIndexOutOfRange, "getDetectorAddressMap<..>(" << id << ")" );
466  }
467 
468 
469  /**
470  * Has detector address map.
471  *
472  * \param id detector identifier
473  * \return true if detector address map available; else false
474  */
475  static bool has(const int id)
476  {
477  return hasDetector(JType<JHead_t>(), id);
478  }
479  };
480 
481 
482  /**
483  * Get detector address map.
484  *
485  * \param id detector identifier
486  * \return detector address map
487  */
489  {
491  }
492 
493 
494  /**
495  * Check if detector address map is available.
496  *
497  * \param id detector identifier
498  * \return true if detector address map available; else false
499  */
500  inline bool hasDetectorAddressMap(const int id)
501  {
503  }
504 }
505 
506 #endif
virtual const JModuleAddressMap & getDefaultModuleAddressMap() const override
Get default module address map.
Exceptions.
virtual const JModuleAddressMap & getDefaultModuleAddressMap() const override
Get default module address map.
#define THROW(JException_t, A)
Marco for throwing exception with std::ostream compatible message.
Definition: JException.hh:670
virtual const JModuleAddressMap & getDefaultModuleAddressMap() const override
Get default module address map.
bool hasDetectorAddressMap(const int id)
Check if detector address map is available.
T get(const JHead &header)
Get object from header.
Lookup table for PMT addresses in detector.
Auxiliary class for a type holder.
Definition: JType.hh:19
Type list.
Definition: JTypeList.hh:22
Lookup table for PMT addresses in optical module.
bool hasDetector(JType< JPPM_DU_t > type, const int id)
Check validity of detector identifier.
Template lookup table for PMT addresses in detector.
Auxiliary class for recursive type list generation.
Definition: JTypeList.hh:351
JTYPELIST< JPPM_DU_t, JKM3NeT_t, JMonteCarlo_t >::typelist JDetectorTypes_t
Type list of KM3NeT detector types.
const JPMTAddressTranslator & getPMTAddressTranslator(int id, int tdc)
Get PMT address translator for given module identifier and TDC channel.
Type definitions for different detectors.PPM_DU.
Auxiliary class for no type definition.
Definition: JNullType.hh:19
JModuleAddressMap & getModuleAddressMap(int id)
Get module address map.
Data structure to translate PMT physical to readout address.
int getPMTLogicalIndex(int id, int tdc)
Get PMT logical index for given module identifier and TDC channel.
int getIndex()
Get index for user I/O manipulation.
Definition: JManip.hh:26
JDetectorAddressMap & getDetectorAddressMap()
Get detector address map.
Auxiliary class to extract detector address map from detector identifier.
Data structure for PMT readout address.
Data structure for PMT physical address.
Exception for accessing an index in a collection that is outside of its range.
Definition: JException.hh:90
void configure()
Configure internal router.
virtual const JModuleAddressMap & getDefaultModuleAddressMap() const override
Get default module address map.