Jpp
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
JSummarysliceSupportkit.hh
Go to the documentation of this file.
1 #ifndef __JSUPPORT__JSUMMARYSLICESUPPORTKIT__
2 #define __JSUPPORT__JSUMMARYSLICESUPPORTKIT__
3 
4 #include "JDAQ/JDAQ.hh"
7 
9 #include "JDetector/JDetector.hh"
13 
14 
15 /**
16  * \file
17  *
18  * Auxiliaries for creation of summary data.
19  * \author mdejong
20  */
21 namespace JSUPPORT {}
22 namespace JPP { using namespace JSUPPORT; }
23 
24 namespace JSUPPORT {
25 
34 
35 
36  /**
37  * Auxiliary class to create summary data.
38  */
39  struct JSummaryslice :
40  public JDAQSummaryslice
41  {
42  /**
43  * Default constructor.
44  */
46  {}
47 
48 
49  /**
50  * Constructor.
51  *
52  * This constructor blends multiple KM3NETDAQ::JDAQSummaryslice's from an incomplete detector to
53  * a single KM3NETDAQ::JDAQSummaryslice for a complete detector.
54  *
55  * \param chronometer DAQ chronometer
56  * \param input summary data
57  * \param detector detector
58  */
59  JSummaryslice(const JDAQChronometer& chronometer,
61  const JDetector& detector) :
62  JDAQSummaryslice(chronometer)
63  {
64  for (JDetector::const_iterator module = detector.begin(); module != detector.end() && input.hasNext(); ) {
65 
66  const JDAQSummaryslice* summary = input.next();
67 
68  for (const_iterator i = summary->begin(); i != summary->end() && module != detector.end(); ++i, ++module) {
69 
70  push_back(*i);
71 
72  rbegin()->setModuleIdentifier(module->getID());
73  }
74  }
75  }
76 
77 
78  /**
79  * Constructor.
80  *
81  * This constructor directly creates a KM3NETDAQ::JDAQSummaryslice for a given detector simulation
82  * (i.e. without the need to create first a KM3NETDAQ::JDAQTimeslice).
83  *
84  * \param chronometer chronometer
85  * \param simbad detector simulator
86  */
87  JSummaryslice(const JDAQChronometer& chronometer,
88  const JDetectorSimulator& simbad) :
90  {
91  using namespace JDETECTOR;
92  using namespace KM3NETDAQ;
93 
94  setDAQChronometer(chronometer);
95 
96  try {
97 
98  const JPMTDefaultSimulatorInterface& pmtSimulator = dynamic_cast<const JPMTDefaultSimulatorInterface&>(simbad.getPMTSimulator());
99  const JK40DefaultSimulatorInterface& k40Simulator = dynamic_cast<const JK40DefaultSimulatorInterface&>(simbad.getK40Simulator());
100 
101  for (JDetector::const_iterator module = simbad->begin(); module != simbad->end(); ++module) {
102 
103  push_back(JDAQSummaryFrame(module->getID()));
104 
105  for (int pmt = 0; pmt != NUMBER_OF_PMTS; ++pmt) {
106 
107  const JPMTIdentifier id(module->getID(), pmt);
108 
109  bool status = pmtSimulator.getPMTstatus(id);
110  double rate_Hz = k40Simulator.getSinglesRate(id);
111 
112  rate_Hz *= pmtSimulator.getPMTSignalProcessor(id).getSurvivalProbability(NPE);
113 
114  this->rbegin()->setHighRateVeto(pmt, !status);
115  this->rbegin()->setRate (pmt, rate_Hz);
116  }
117  }
118  }
119  catch(const std::exception& error) {};
120  }
121 
122 
123  /**
124  * Correct measured singles rates for the probability that a hit survives the simulation of the PMT.
125  *
126  * \param simulator PMT simulator
127  */
128  void correct(const JPMTDefaultSimulatorInterface& simulator)
129  {
130  using namespace JDETECTOR;
131  using namespace KM3NETDAQ;
132 
133  for (iterator i = this->begin(); i != this->end(); ++i) {
134 
135  for (int pmt = 0; pmt != NUMBER_OF_PMTS; ++pmt) {
136 
137  const JPMTIdentifier id(i->getModuleID(), pmt);
138 
139  const double P = simulator.getPMTSignalProcessor(id).getSurvivalProbability(NPE);
140 
141  if (P > 0.0)
142  (*i)[pmt].div(P);
143  else
144  (*i)[pmt].setValue(0.0);
145  }
146  }
147  }
148 
149  static const int NPE = 1; //!< number of photo-electrons corresponding to singles rate
150  };
151 }
152 
153 #endif
Detector data structure.
Definition: JDetector.hh:77
Auxiliary class to create summary data.
virtual bool getPMTstatus(const JPMTIdentifier &id) const
Get PMT status.
Interface of object iteration for a single data type.
const JPMTSimulator & getPMTSimulator() const
Get PMT simulator.
Data structure for detector geometry and calibration.
JSummaryslice()
Default constructor.
virtual double getSurvivalProbability(const int NPE) const
Probability that a hit survives the simulation of the PMT.
virtual const pointer_type & next()=0
Get next element.
JSummaryslice(const JDAQChronometer &chronometer, const JDetectorSimulator &simbad)
Constructor.
static const int NPE
number of photo-electrons corresponding to singles rate
virtual const JPMTSignalProcessorInterface & getPMTSignalProcessor(const JPMTIdentifier &pmt) const
Get PMT signal processor.
Data storage class for rate measurements of all PMTs in one module.
virtual double getSinglesRate(const JPMTIdentifier &pmt) const =0
Get singles rate as a function of PMT.
virtual bool hasNext()=0
Check availability of next element.
void setDAQChronometer(const JDAQChronometer &chronometer)
Set DAQ chronometer.
JSummaryslice(const JDAQChronometer &chronometer, JObjectIterator< JDAQSummaryslice > &input, const JDetector &detector)
Constructor.
void correct(const JPMTDefaultSimulatorInterface &simulator)
Correct measured singles rates for the probability that a hit survives the simulation of the PMT...
KM3NeT DAQ constants, bit handling, etc.
static const int NUMBER_OF_PMTS
Total number of PMTs in module.
Definition: JDAQ.hh:26
const JK40Simulator & getK40Simulator() const
Get K40 simulator.