Jpp  17.0.0
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  struct JKM3NeTDB_t {}; //!< %KM3NeT with cable swaps according database (see JPMTSwapDB.cc)
39 
40 
41  /**
42  * Type list of %KM3NeT detector types (specific detectors first).
43  */
45 
46 
47  /**
48  * Check validity of detector identifier.
49  *
50  * \param type detector type
51  * \param id detector identifier
52  * \return true if valid match; else false
53  */
54  inline bool hasDetector(JType<JPPM_DU_t> type, const int id) { return id == 1; }
55  inline bool hasDetector(JType<JKM3NeTDB_t> type, const int id) { return id >= 116; }
56  inline bool hasDetector(JType<JKM3NeT_t> type, const int id) { return id >= 2 && id <= 2000000000; }
57  inline bool hasDetector(JType<JMonteCarlo_t> type, const int id) { return id >= -2000000000 && id <= -2; }
58 
59 
60  /**
61  * Template lookup table for PMT addresses in detector.\n
62  * The template argument refers to a specific detector.\n
63  * This class should be specialised for each detector.\n
64  * In the constructor of the specialised class, the various PMT swaps should be defined.
65  */
66  template<class JDetector_t>
68 
69 
70  /**
71  * Template specialisation of JTemplateDetectorAddressMap for obsolete detector.
72  */
73  template<>
75  public JDetectorAddressMap
76  {
77  public:
78  /**
79  * Default constructor.
80  */
83  {}
84 
85 
86  /**
87  * Get default module address map.
88  *
89  * \return module address map
90  */
91  virtual const JModuleAddressMap& getDefaultModuleAddressMap() const override
92  {
93  static JModuleAddressMap memo;
94 
95  if (memo.empty()) {
96 
97  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 0), JPMTPhysicalAddress('A', 1)));
98 
99  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 1), JPMTPhysicalAddress('B', 1)));
100  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 2), JPMTPhysicalAddress('B', 2)));
101  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 3), JPMTPhysicalAddress('B', 3)));
102  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 4), JPMTPhysicalAddress('B', 4)));
103  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 5), JPMTPhysicalAddress('B', 5)));
104  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 6), JPMTPhysicalAddress('B', 6)));
105 
106  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 7), JPMTPhysicalAddress('C', 1)));
107  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 8), JPMTPhysicalAddress('C', 2)));
108  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 9), JPMTPhysicalAddress('C', 3)));
109  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(10), JPMTPhysicalAddress('C', 4)));
110  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(11), JPMTPhysicalAddress('C', 5)));
111  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(12), JPMTPhysicalAddress('C', 6)));
112 
113  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(13), JPMTPhysicalAddress('D', 1)));
114  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(14), JPMTPhysicalAddress('D', 2)));
115  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(15), JPMTPhysicalAddress('D', 3)));
116  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(16), JPMTPhysicalAddress('D', 4)));
117  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(17), JPMTPhysicalAddress('D', 5)));
118  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(18), JPMTPhysicalAddress('D', 6)));
119 
120  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(19), JPMTPhysicalAddress('E', 1)));
121  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(20), JPMTPhysicalAddress('E', 2)));
122  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(21), JPMTPhysicalAddress('E', 3)));
123  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(22), JPMTPhysicalAddress('E', 4)));
124  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(23), JPMTPhysicalAddress('E', 5)));
125  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(24), JPMTPhysicalAddress('E', 6)));
126 
127  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(25), JPMTPhysicalAddress('F', 1)));
128  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(26), JPMTPhysicalAddress('F', 2)));
129  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(27), JPMTPhysicalAddress('F', 3)));
130  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(28), JPMTPhysicalAddress('F', 4)));
131  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(29), JPMTPhysicalAddress('F', 5)));
132  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(30), JPMTPhysicalAddress('F', 6)));
133 
134  memo.configure();
135  }
136 
137  return memo;
138  }
139  };
140 
141 
142  /**
143  * Template specialisation of JTemplateDetectorAddressMap for PPM_DU detector.
144  */
145  template<>
147  public JDetectorAddressMap
148  {
149  public:
150  /**
151  * Default constructor.
152  */
155  {
156  get(103).swap(24,30);
157  }
158 
159 
160  /**
161  * Get default module address map.
162  *
163  * \return module address map
164  */
165  virtual const JModuleAddressMap& getDefaultModuleAddressMap() const override
166  {
167  static JModuleAddressMap memo;
168 
169  if (memo.empty()) {
170 
171  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 0), JPMTPhysicalAddress('A', 1)));
172 
173  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 6), JPMTPhysicalAddress('B', 1)));
174  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 5), JPMTPhysicalAddress('B', 2)));
175  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 4), JPMTPhysicalAddress('B', 3)));
176  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 3), JPMTPhysicalAddress('B', 4)));
177  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 2), JPMTPhysicalAddress('B', 5)));
178  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 1), JPMTPhysicalAddress('B', 6)));
179 
180  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(12), JPMTPhysicalAddress('C', 1)));
181  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(11), JPMTPhysicalAddress('C', 2)));
182  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(10), JPMTPhysicalAddress('C', 3)));
183  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 9), JPMTPhysicalAddress('C', 4)));
184  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 8), JPMTPhysicalAddress('C', 5)));
185  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 7), JPMTPhysicalAddress('C', 6)));
186 
187  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(18), JPMTPhysicalAddress('D', 1)));
188  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(17), JPMTPhysicalAddress('D', 2)));
189  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(16), JPMTPhysicalAddress('D', 3)));
190  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(15), JPMTPhysicalAddress('D', 4)));
191  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(14), JPMTPhysicalAddress('D', 5)));
192  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(13), JPMTPhysicalAddress('D', 6)));
193 
194  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(19), JPMTPhysicalAddress('E', 1)));
195  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(24), JPMTPhysicalAddress('E', 2)));
196  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(23), JPMTPhysicalAddress('E', 3)));
197  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(22), JPMTPhysicalAddress('E', 4)));
198  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(21), JPMTPhysicalAddress('E', 5)));
199  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(20), JPMTPhysicalAddress('E', 6)));
200 
201  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(25), JPMTPhysicalAddress('F', 1)));
202  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(30), JPMTPhysicalAddress('F', 2)));
203  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(29), JPMTPhysicalAddress('F', 3)));
204  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(28), JPMTPhysicalAddress('F', 4)));
205  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(27), JPMTPhysicalAddress('F', 5)));
206  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(26), JPMTPhysicalAddress('F', 6)));
207 
208  memo.configure();
209  }
210 
211  return memo;
212  }
213  };
214 
215 
216  /**
217  * Template specialisation of JTemplateDetectorAddressMap for %KM3NeT detector.
218  */
219  template<>
221  public JDetectorAddressMap
222  {
223  public:
224  /**
225  * Default constructor.
226  */
229  {}
230 
231 
232  /**
233  * Get default module address map.
234  *
235  * \return module address map
236  */
237  virtual const JModuleAddressMap& getDefaultModuleAddressMap() const override
238  {
239  static JModuleAddressMap memo;
240 
241  if (memo.empty()) {
242 
243  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(22), JPMTPhysicalAddress('A', 1)));
244 
245  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(14), JPMTPhysicalAddress('B', 1)));
246  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(19), JPMTPhysicalAddress('B', 2)));
247  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(25), JPMTPhysicalAddress('B', 3)));
248  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(24), JPMTPhysicalAddress('B', 4)));
249  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(26), JPMTPhysicalAddress('B', 5)));
250  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(18), JPMTPhysicalAddress('B', 6)));
251 
252  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(13), JPMTPhysicalAddress('C', 1)));
253  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(21), JPMTPhysicalAddress('C', 2)));
254  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(29), JPMTPhysicalAddress('C', 3)));
255  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(28), JPMTPhysicalAddress('C', 4)));
256  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(20), JPMTPhysicalAddress('C', 5)));
257  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(17), JPMTPhysicalAddress('C', 6)));
258 
259  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(12), JPMTPhysicalAddress('D', 1)));
260  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(15), JPMTPhysicalAddress('D', 2)));
261  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(23), JPMTPhysicalAddress('D', 3)));
262  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(30), JPMTPhysicalAddress('D', 4)));
263  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(27), JPMTPhysicalAddress('D', 5)));
264  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(16), JPMTPhysicalAddress('D', 6)));
265 
266  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(10), JPMTPhysicalAddress('E', 1)));
267  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 6), JPMTPhysicalAddress('E', 2)));
268  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 3), JPMTPhysicalAddress('E', 3)));
269  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 2), JPMTPhysicalAddress('E', 4)));
270  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 1), JPMTPhysicalAddress('E', 5)));
271  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(11), JPMTPhysicalAddress('E', 6)));
272 
273  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 9), JPMTPhysicalAddress('F', 1)));
274  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 8), JPMTPhysicalAddress('F', 2)));
275  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 4), JPMTPhysicalAddress('F', 3)));
276  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 0), JPMTPhysicalAddress('F', 4)));
277  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 5), JPMTPhysicalAddress('F', 5)));
278  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 7), JPMTPhysicalAddress('F', 6)));
279 
280  memo.configure();
281  }
282 
283  return memo;
284  }
285  };
286 
287 
288  /**
289  * Template specialisation of JTemplateDetectorAddressMap for Monte Carlo detector.
290  */
291  template<>
293  public JDetectorAddressMap
294  {
295  public:
296  /**
297  * Default constructor.
298  */
301  {}
302 
303 
304  /**
305  * Get default module address map.
306  *
307  * \return module address map
308  */
309  virtual const JModuleAddressMap& getDefaultModuleAddressMap() const override
310  {
311  static JModuleAddressMap memo;
312 
313  if (memo.empty()) {
314 
315  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(22), JPMTPhysicalAddress('A', 1)));
316 
317  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(14), JPMTPhysicalAddress('B', 1)));
318  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(19), JPMTPhysicalAddress('B', 2)));
319  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(25), JPMTPhysicalAddress('B', 3)));
320  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(24), JPMTPhysicalAddress('B', 4)));
321  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(26), JPMTPhysicalAddress('B', 5)));
322  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(18), JPMTPhysicalAddress('B', 6)));
323 
324  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(13), JPMTPhysicalAddress('C', 1)));
325  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(21), JPMTPhysicalAddress('C', 2)));
326  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(29), JPMTPhysicalAddress('C', 3)));
327  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(28), JPMTPhysicalAddress('C', 4)));
328  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(20), JPMTPhysicalAddress('C', 5)));
329  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(17), JPMTPhysicalAddress('C', 6)));
330 
331  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(12), JPMTPhysicalAddress('D', 1)));
332  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(15), JPMTPhysicalAddress('D', 2)));
333  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(23), JPMTPhysicalAddress('D', 3)));
334  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(30), JPMTPhysicalAddress('D', 4)));
335  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(27), JPMTPhysicalAddress('D', 5)));
336  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(16), JPMTPhysicalAddress('D', 6)));
337 
338  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(10), JPMTPhysicalAddress('E', 1)));
339  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 6), JPMTPhysicalAddress('E', 2)));
340  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 3), JPMTPhysicalAddress('E', 3)));
341  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 2), JPMTPhysicalAddress('E', 4)));
342  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 1), JPMTPhysicalAddress('E', 5)));
343  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress(11), JPMTPhysicalAddress('E', 6)));
344 
345  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 9), JPMTPhysicalAddress('F', 1)));
346  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 8), JPMTPhysicalAddress('F', 2)));
347  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 4), JPMTPhysicalAddress('F', 3)));
348  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 0), JPMTPhysicalAddress('F', 4)));
349  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 5), JPMTPhysicalAddress('F', 5)));
350  memo.push_back(JPMTAddressTranslator(JPMTReadoutAddress( 7), JPMTPhysicalAddress('F', 6)));
351 
352  memo.configure();
353  }
354 
355  return memo;
356  }
357  };
358 
359 
360  /**
361  * Template specialisation of JTemplateDetectorAddressMap for %KM3NeT detector.
362  */
363  template<>
365  public JTemplateDetectorAddressMap<JKM3NeT_t>
366  {
367  public:
368  /**
369  * Default constructor.
370  */
372  {
373  get(817802210).swapTDC(14,18);
374  get(817802210).swapTDC(18,26);
375  get(817802210).swapTDC(19,26);
376  get(817802210).swapTDC(24,25);
377  get(817802210).swapTDC(25,26);
378  }
379  };
380 
381 
382  /**
383  * Get detector address map.
384  *
385  * \return detector address map
386  */
387  template<class JDetector_t>
389  {
391 
392  return demo;
393  }
394 
395 
396  /**
397  * Get module address map.
398  *
399  * \param id module identifier
400  * \return module address map
401  */
402  template<class JDetector_t>
404  {
405  return getDetectorAddressMap<JDetector_t>().get(id);
406  }
407 
408 
409  /**
410  * Get PMT address translator for given module identifier and TDC channel.
411  *
412  * \param id module identifier
413  * \param tdc TDC
414  * \return PMT address translator
415  */
416  template<class JDetector_t>
417  inline const JPMTAddressTranslator& getPMTAddressTranslator(int id, int tdc)
418  {
419  return getModuleAddressMap<JDetector_t>(id).getAddressTranslator(tdc);
420  }
421 
422 
423  /**
424  * Get PMT logical index for given module identifier and TDC channel.
425  *
426  * \param id module identifier
427  * \param tdc TDC
428  * \return PMT logical index
429  */
430  template<class JDetector_t>
431  inline int getPMTLogicalIndex(int id, int tdc)
432  {
433  return getModuleAddressMap<JDetector_t>(id).getIndex(tdc);
434  }
435 
436 
437  /**
438  * Auxiliary class to extract detector address map from detector identifier.
439  */
440  template<class T>
442 
443 
444  template<class JHead_t, class JTail_t>
445  struct JDetectorAddressMap_t< JTypeList<JHead_t, JTail_t> >
446  {
447  /**
448  * Get detector address map.
449  *
450  * \param id detector identifier
451  * \return detector address map
452  */
453  static JDetectorAddressMap& get(const int id)
454  {
455  if (hasDetector(JType<JHead_t>(), id))
456  return getDetectorAddressMap<JHead_t>();
457  else
459  }
460 
461 
462  /**
463  * Has detector address map.
464  *
465  * \param id detector identifier
466  * \return true if detector address map available; else false
467  */
468  static bool has(const int id)
469  {
471  }
472  };
473 
474 
475  template<class JHead_t>
477  {
478  /**
479  * Get detector address map.
480  *
481  * \param id detector identifier
482  * \return detector address map
483  */
484  static JDetectorAddressMap& get(const int id)
485  {
486  if (hasDetector(JType<JHead_t>(), id))
487  return getDetectorAddressMap<JHead_t>();
488  else
489  THROW(JIndexOutOfRange, "getDetectorAddressMap<..>(" << id << ")" );
490  }
491 
492 
493  /**
494  * Has detector address map.
495  *
496  * \param id detector identifier
497  * \return true if detector address map available; else false
498  */
499  static bool has(const int id)
500  {
501  return hasDetector(JType<JHead_t>(), id);
502  }
503  };
504 
505 
506  /**
507  * Get detector address map.
508  *
509  * \param id detector identifier
510  * \return detector address map
511  */
513  {
515  }
516 
517 
518  /**
519  * Check if detector address map is available.
520  *
521  * \param id detector identifier
522  * \return true if detector address map available; else false
523  */
524  inline bool hasDetectorAddressMap(const int id)
525  {
527  }
528 }
529 
530 #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:696
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
JTYPELIST< JPPM_DU_t, JKM3NeTDB_t, JKM3NeT_t, JMonteCarlo_t >::typelist JDetectorTypes_t
Type list of KM3NeT detector types (specific detectors first).
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
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.
KM3NeT with cable swaps according database (see JPMTSwapDB.cc)
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.