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];
93 buffer[m1].resize(M1.size());
94 buffer[m2].resize(M2.size());
96 simbad.
generateHits({M1,M2}, period, {buffer[m1],buffer[m2]});
105 for (
size_t i = 0; i != simbad->size(); ++i) {
107 if (!(*simbad)[i].empty()) {
111 simbad((*simbad)[i], buffer[i], this->back());
140 if (N < 100) { N = 100; }
141 if (N > 50000) { N = 50000; }
148 for (
iterator frame = this->begin(); frame != this->end(); ++frame) {
150 if (!frame->empty()) {
152 for (
size_t i = 0; i != buffer.size(); ++i) {
159 numeric_limits<JTDC_t>::max());
163 T_max[hit->getPMT()] = hit->getT();
165 size_t i = hit->getT() / Ts;
167 if (i >= N) { i = N-1; }
169 buffer[i].push_back(*hit);
176 if (frame->testHighRateVeto(pmt)) {
178 size_t i = T_max[pmt] / Ts;
180 if (i >= N) { i = N-1; }
192 for (
size_t in = 0; in != N; ++in) {
194 const size_t out = index [in];
197 const JTDC_t T_in = in * Ts;
198 const JTDC_t T_out = out * Ts;
200 for (buffer_type::iterator i = zbuf.begin(); i != zbuf.end(); ++i, ++hit) {
201 *hit =
JDAQHit(i->getPMT(), (i->getT() - T_out) + T_in, i->getToT());
231 for (
size_t i = 0; i != this->size(); ++i) {
237 for (
const size_t i2 : keep) {
256 for (
int i = i2 - 1; i > i1; --i) {
258 const int l = i1 + gRandom->Integer(i - i1);
260 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.