1#ifndef __JTIMESLICE__JRANDOMTIMESLICE__
2#define __JTIMESLICE__JRANDOMTIMESLICE__
66 for (
size_t i = 0; i != simbad->size(); ++i) {
68 const JModule& module = (*simbad)[i];
72 buffer[i].resize(module.size());
81 for (
size_t m1 = 0; m1 != simbad->size(); ++m1) {
83 for (
size_t m2 = 0; m2 != m1; ++m2) {
85 const JModule& M1 = (*simbad)[m1];
86 const JModule& M2 = (*simbad)[m2];
88 if (!M1.empty() && !M2.empty()) {
92 buffer[m1].resize(M1.size());
93 buffer[m2].resize(M2.size());
95 simbad.
generateHits({M1,M2}, period, {buffer[m1],buffer[m2]});
104 for (
size_t i = 0; i != simbad->size(); ++i) {
106 if (!(*simbad)[i].empty()) {
110 simbad((*simbad)[i], buffer[i], this->back());
139 if (N < 100) { N = 100; }
140 if (N > 50000) { N = 50000; }
147 for (
iterator frame = this->begin(); frame != this->end(); ++frame) {
149 if (!frame->empty()) {
151 for (
size_t i = 0; i != N; ++i) {
158 numeric_limits<JTDC_t>::max());
162 T_max[hit->getPMT()] = hit->getT();
164 const int i = hit->getT() / Ts;
166 buffer[i].push_back(*hit);
172 if (frame->testHighRateVeto(pmt)) {
173 keep.insert(T_max[pmt] / Ts);
183 for (
size_t in = 0; in != N; ++in) {
185 const size_t out = index [in];
188 const JTDC_t T_in = in * Ts;
189 const JTDC_t T_out = out * Ts;
191 for (buffer_type::iterator i = zbuf.begin(); i != zbuf.end(); ++i, ++hit) {
192 *hit =
JDAQHit(i->getPMT(), (i->getT() - T_out) + T_in, i->getToT());
222 for (
size_t i = 0; i != this->size(); ++i) {
228 for (
const size_t i2 : keep) {
247 for (
int i = i2 - 1; i > i1; --i) {
249 const int l = i1 + gRandom->Integer(i - i1);
251 std::swap((*
this)[i], (*
this)[l]);
KM3NeT DAQ constants, bit handling, etc.
Auxiliaries for creation of time slice data.
virtual bool hasCLB(const JModuleIdentifier &id) const
Check if CLB exist.
const JCLBSimulator & getCLBSimulator() const
Get CLB simulator.
virtual void generateHits(const JModule &module, const JTimeRange &period, JModuleData &output) const override
Generate hits.
bool hasPMTSimulator() const
Check availability of PMT simulator.
bool hasK40Simulator() const
Check availability of K40 simulator.
bool hasCLBSimulator() const
Check availability of CLB simulator.
Data structure for a composite optical module.
int getID() const
Get identifier.
void setDAQChronometer(const JDAQChronometer &chronometer)
Set DAQ chronometer.
int getFrameIndex() const
Get frame index.
unsigned int JTDC_t
leading edge [ns]
Data frame of one optical module.
bool neighbours(const JLocation &first, const JLocation &second)
Check if two locations are neighbours.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
std::vector< JHitW0 > buffer_type
hits
KM3NeT DAQ data structures and auxiliaries.
double getFrameTime()
Get frame time duration.
double getTimeSinceRTS(const int frame_index)
Get time in ns since last RTS for a given frame index.
static const int NUMBER_OF_PMTS
Total number of PMTs in module.
Auxiliary class for TDC constraints.
Auxiliary data structure for randomisation of indices.
random_indices_t(const size_t N)
Constructor.
void random_shuffle(const int i1, const int i2)
Randomly shuffle values between given indices.
void random_shuffle(const std::set< size_t > &keep)
Randomly shuffle values between fixed indices.
Timeslice with random data.
JRandomTimeslice(const JDAQChronometer &chronometer, const JDetectorSimulator &simbad)
Constructor.
JRandomTimeslice()
Default constructor.
void recycle(const double T_ns)
Recycle time slice by randomly shuffling time intervals of data.
Base class class for generation of time slice data.