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