Jpp 19.3.0-rc.1
the software that should make you happy
Loading...
Searching...
No Matches
JTriggerToolkit.hh
Go to the documentation of this file.
1#ifndef __JTRIGGER__JTRIGGERTOOLKIT__
2#define __JTRIGGER__JTRIGGERTOOLKIT__
3
7
12#include "Jeep/JStatus.hh"
13
14
15/**
16 * \author mdejong
17 */
18
19namespace JTRIGGER {}
20namespace JPP { using namespace JTRIGGER; }
21
22/**
23 * Trigger algorithms, support classes and auxiliary methods.
24 */
25namespace JTRIGGER {
26
31 using JEEP::JStatus;
32
33
34 /**
35 * Get time range of snapshot.
36 *
37 * \param parameters trigger parameters
38 * \return time range [ns]
39 */
40 inline JTimeRange getTimeRange(const JTriggerParameters& parameters)
41 {
42 return JTimeRange(-parameters.TMaxEvent_ns,
43 +parameters.TMaxEvent_ns);
44 }
45
46 /**
47 * Get time range of snapshot.
48 *
49 * \param parameters trigger parameters
50 * \return time range [ns]
51 */
53 {
54 using namespace JPP;
55
56 return JTimeRange(0.0, parameters.DMax_m * getIndexOfRefraction() * getInverseSpeedOfLight());
57 }
58
59
60 /**
61 * Test status of DAQ.
62 *
63 * The DAQ test passes if the assembly of UDP packets is complete.\n
64 * The test can be bypassed using the PMT control status.
65 *
66 * \param frame data frame status
67 * \param status PMT control status
68 * \return true if test passes; else false
69 */
70 inline bool getDAQStatus(const JDAQFrameStatus& frame, const JStatus& status)
71 {
72 return ((status.has(UDP_COUNTER_DISABLE) || (frame.getUDPNumberOfReceivedPackets() == frame.getUDPMaximalSequenceNumber() + 1)) &&
73 (status.has(UDP_TRAILER_DISABLE) || (frame.hasUDPTrailer())));
74 }
75
76
77 /**
78 * Test status of DAQ.
79 *
80 * The DAQ test passes if the assembly of UDP packets is complete.\n
81 * The test can be bypassed using the PMT control status.
82 *
83 * \param frame data frame status
84 * \param module module
85 * \param pmt PMT number
86 * \return true if test passes; else false
87 */
88 inline bool getDAQStatus(const JDAQFrameStatus& frame, const JModule& module, const int pmt)
89 {
90 return getDAQStatus(frame, module.getPMT(pmt));
91 }
92
93
94 /**
95 * Test status of PMT.
96 *
97 * The PMT test passes if it is not disabled.
98 *
99 * \param status PMT control status
100 * \return true if test passes; else false
101 */
102 inline bool getPMTStatus(const JStatus& status)
103 {
104 return !status.has(PMT_DISABLE);
105 }
106
107
108 /**
109 * Test status of PMT.
110 *
111 * The PMT test passes if it is not disabled and no high-rate veto or FIFO (almost) full.\n
112 * The test can be bypassed using the PMT control status.
113 *
114 * \param frame data frame
115 * \param status PMT control status
116 * \param pmt PMT number
117 * \return true if test passes; else false
118 */
119 inline bool getPMTStatus(const JDAQFrameStatus& frame, const JStatus& status, const int pmt)
120 {
121 return ((status.has(HIGH_RATE_VETO_DISABLE) || !frame.testHighRateVeto(pmt)) &&
122 (status.has(FIFO_FULL_DISABLE) || !frame.testFIFOStatus (pmt)) &&
123 (getPMTStatus(status)));
124 }
125
126
127 /**
128 * Test status of PMT.
129 *
130 * The PMT test passes if it is not disabled and no high-rate veto or FIFO (almost) full.\n
131 * The test can be bypassed using the PMT control status.
132 *
133 * \param frame data frame
134 * \param module module
135 * \param pmt PMT number
136 * \return true if test passes; else false
137 */
138 inline bool getPMTStatus(const JDAQFrameStatus& frame, const JModule& module, const int pmt)
139 {
140 return getPMTStatus(frame, module.getPMT(pmt), pmt);
141 }
142
143
144 /**
145 * Get corrected rate of PMT.
146 *
147 * The measured rate is corrected for the possible loss of UDP packets.
148 *
149 * \param frame data frame
150 * \param pmt PMT number
151 * \param factor scaling factor
152 * \return rate x scaling factor [Hz]
153 */
154 inline double getRate(const JDAQSummaryFrame& frame, const int pmt, const double factor = 1.0)
155 {
156 double rate_Hz = frame.getRate(pmt, factor);
157
158 // correct measured rate for UDP packet loss
159
160 const int n1 = frame.getUDPNumberOfReceivedPackets();
161 const int n2 = frame.getUDPMaximalSequenceNumber ();
162
163 if (n1 < n2 + 1) {
164 rate_Hz *= (double) (n2 + 1) / (double) n1;
165 }
166
167 return rate_Hz;
168 }
169}
170
171#endif
Data structure for optical module.
Physics constants.
Data structure for a composite optical module.
Definition JModule.hh:75
const JPMT & getPMT(const int index) const
Get PMT.
Definition JModule.hh:172
double DMax_m
maximal distance between PMTs [m]
Data structure for all trigger parameters.
double TMaxEvent_ns
maximal time before and after event for snapshot
bool testFIFOStatus() const
Test FIFO status.
int getUDPNumberOfReceivedPackets() const
Get number of received UDP packets.
bool hasUDPTrailer() const
Get UDP trailer status.
bool testHighRateVeto() const
Test high-rate veto status.
int getUDPMaximalSequenceNumber() const
Get maximal sequence number of UDP packet.
Data storage class for rate measurements of all PMTs in one module.
double getRate(const int tdc, const double factor=1.0) const
Get count rate.
JTOOLS::JRange< double > JTimeRange
Type definition for time range (unit [ns]).
const double getInverseSpeedOfLight()
Get inverse speed of light.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
Auxiliary classes and methods for triggering.
bool getDAQStatus(const JDAQFrameStatus &frame, const JStatus &status)
Test status of DAQ.
double getRate(const JDAQSummaryFrame &frame, const int pmt, const double factor=1.0)
Get corrected rate of PMT.
JTimeRange getTimeRange(const JEvent &event)
Get time range (i.e. earlist and latest hit time) of triggered event.
bool getPMTStatus(const JStatus &status)
Test status of PMT.
static const int UDP_COUNTER_DISABLE
Enable (disable) use of UDP packet counter test if this status bit is 0 (1);.
Definition pmt_status.hh:15
static const int UDP_TRAILER_DISABLE
Enable (disable) use of UDP packet trailer test if this status bit is 0 (1);.
Definition pmt_status.hh:16
static const int FIFO_FULL_DISABLE
Enable (disable) use of FIFO (almost) full test if this status bit is 0 (1);.
Definition pmt_status.hh:14
static const int HIGH_RATE_VETO_DISABLE
Enable (disable) use of high-rate veto test if this status bit is 0 (1);.
Definition pmt_status.hh:13
static const int PMT_DISABLE
KM3NeT Data Definitions v3.5.1-1-gd514d72 https://git.km3net.de/common/km3net-dataformat.
Definition pmt_status.hh:12
Auxiliary class for handling status.
Definition JStatus.hh:39
bool has(const int bit) const
Test PMT status.
Definition JStatus.hh:120