188 for (
int i = 0; !this->is_open() && i != MAXIMUM_FILE_NUMBER; ++i) {
194 <<
"_" << cal.getYear() <<
'-' <<
FILL(2,
'0') << cal.getMonth() <<
'-' <<
FILL(2,
'0') << cal.getDay()
204 this->
open(os.str().c_str());
206 catch(
const exception& error) {}
228 return (sizeL0 > 0 ||
243 if (
object.is_open())
244 out <<
object.getFile()->GetName();
250 return out <<
object.sizeL0 <<
'/'
251 <<
object.sizeL1 <<
'/'
252 <<
object.sizeL2 <<
'/'
253 <<
object.sizeSN <<
'/';
290 const std::string& server,
291 const std::string& hostname,
297 const std::string&
path) :
302 buffer_size(buffer_size),
310 current_slice_index = -1;
321 if (c_buffer.is_open()) {
323 JNoticeStream(logger) <<
"Close circular buffer " << c_buffer;
334 JDebugStream(logger) <<
"actionInit() " << std::string(buffer,length);
342 catch(
const std::exception& error) {
343 JErrorStream(logger) <<
"Error \"" << error.what() <<
"\"; trigger ev_error.";
353 JDebugStream(logger) <<
"actionConfigure() " << endl << std::string(buffer,length);
366 properties[
"dataWriter"] = hostname;
367 properties[
"numberOfFramesPerSlice"] = frames_per_slice = 1;
370 properties[
"queueSize"] = maxQueueSize = (totalCPURAM -
GIGABYTE);
371 properties[
"queueDepth"] = maxQueueDepth = 20;
372 properties[
"frameIndex"] = maximal_frame_index = 100000;
375 properties[
"JDataFilter"] = dataFilters;
376 properties[
"DataQueue"] = dataQueues;
377 properties[
"path"] =
path;
378 properties[
"c_sizeL0"] = c_buffer.sizeL0;
379 properties[
"c_sizeL1"] = c_buffer.sizeL1;
380 properties[
"c_sizeL2"] = c_buffer.sizeL2;
381 properties[
"c_sizeSN"] = c_buffer.sizeSN;
384 properties.
read(
string(buffer, length));
386 catch(
const exception& error) {
393 setClockInterval(
update_s * 1000000LL);
395 hostname =
trim(hostname);
400 throw JException(
"Undefined data writer host name.");
402 maximum_frames_per_slice = frames_per_slice;
406 if (dataFilters.empty()) {
407 JNoticeStream(logger) <<
"No DataFilters in process list, or no process list. "
408 <<
"Assuming that this process is the only process on this CPU and setting parameters accordingly.";
411 sort(dataFilters.begin(), dataFilters.end(), processIndexSorter);
413 unsigned int numberOfDataFiltersOnThisMachine = 0;
421 notice <<
"My IP addresses:";
430 JDebugStream(logger) <<
"Test IP address \"" << i->hostname <<
"\" " << (find(IP.begin(), IP.end(), i->hostname) != IP.end());
432 if (find(IP.begin(), IP.end(), i->hostname) != IP.end()) {
434 numberOfDataFiltersOnThisMachine++;
436 if (i->port == this->port) {
442 if (numberOfDataFiltersOnThisMachine == 0) {
443 JNoticeStream(logger) <<
"Zero data filters on this machine according to process list (if it exists). "
444 <<
"Assuming one datafilter on this machine.";
445 numberOfDataFiltersOnThisMachine = 1;
448 if (thisProcess == dataFilters.end()) {
449 JErrorStream(logger) <<
"This process cannot be found in the process list. Why do I exist?";
452 if (thisProcess != dataFilters.end() && thisProcess->index !=
getName()) {
453 JErrorStream(logger) <<
"Mismatch between given process names: "
455 <<
", but in the process list I am referred to as " << thisProcess->index;
458 if (dataFilters.begin() == thisProcess || dataFilters.empty()) {
462 if (maxQueueSize > (totalCPURAM-
GIGABYTE)/(numberOfDataFiltersOnThisMachine)) {
464 maxQueueSize = (totalCPURAM-
GIGABYTE)/(numberOfDataFiltersOnThisMachine);
466 JNoticeStream(logger) <<
"Maximum queue size is too large given the number of processes on this machine. "
467 <<
"Queue size reduced to "
468 << maxQueueSize <<
" bytes." ;
483 JNoticeStream(logger) <<
"This data filter process will report.";
484 JNoticeStream(logger) <<
"Number of modules: " << (*moduleRouter)->size();
487 JNoticeStream(logger) <<
"Update period [s]: " << getClockInterval();
498 if (buildL1.get() == NULL) {
JErrorStream(logger) <<
"Failed to allocate buildL1."; }
499 if (buildL2.get() == NULL) {
JErrorStream(logger) <<
"Failed to allocate buildL2."; }
500 if (buildSN.get() == NULL) {
JErrorStream(logger) <<
"Failed to allocate buildSN."; }
507 if (c_buffer.is_enabled()) {
509 if (!c_buffer.is_open()) {
513 if (c_buffer.is_open()) {
515 JNoticeStream(logger) <<
"Created circular buffer " << c_buffer;
521 JErrorStream (logger) <<
"Failed to create circular buffer in directory <" <<
path <<
">; disable functionality.";
528 JNoticeStream(logger) <<
"Continue using circular buffer " << c_buffer;
538 if (c_buffer.is_open()) {
555 current_slice_index = -1;
560 numberOfTimeslicesProcessed = 0;
561 numberOfIncompleteTimeslicesProcessed = 0;
563 number_of_packets_received = 0;
564 number_of_packets_discarded = 0;
565 number_of_bytes_received = 0;
568 minFrameNumber = numeric_limits<int>::max();
569 maxFrameNumber = numeric_limits<int>::min();
575 logErrorRun .reset();
576 logErrorDetector .reset();
577 logErrorIndex .reset();
578 logErrorIncomplete.reset();
599 if (!timeslices.empty()) {
601 JNoticeStream(logger) <<
"Flushing " << timeslices.size() <<
" slices.";
614 timeslices.swap(buffer);
621 current_slice_index = -1;
644 if (serversocket.is_valid()) {
645 serversocket->shutdown();
648 serversocket.reset();
660 if (serversocket.is_valid()) {
661 mask.
set(*serversocket);
664 for (JChannelList_t::const_iterator channel = channelList.begin(); channel != channelList.end(); ++channel) {
665 if (!channel->isReady()) {
666 mask.
set(channel->getFileDescriptor());
676 for (JChannelList_t::iterator channel = channelList.begin(); channel != channelList.end(); ) {
680 if (mask.
has(channel->getFileDescriptor())) {
684 if (channel->isReady()) {
686 number_of_packets_received += 1;
687 number_of_reads += channel->getCounter();
688 number_of_bytes_received += channel->size();
692 updateFrameQueue(channel);
696 JErrorStream(logErrorRun) <<
"Receiving data while not running.";
698 number_of_packets_discarded += 1;
706 catch(
const exception& error) {
708 JNoticeStream(logger) <<
"Disconnecting channel " << channel->getFileDescriptor() <<
' ' << error.what();
712 channel = channelList.erase(channel);
717 if (serversocket.is_valid()) {
719 if (mask.
has(*serversocket)) {
723 socket.
accept(serversocket->getFileDescriptor());
738 if (!timeslices.empty() && (timeslices.front().size() >= frames_per_slice ||
739 timeslices.size() >= maxQueueDepth ||
746 minFrameNumber = min(minFrameNumber, pending_slice.
getFrameIndex());
747 maxFrameNumber = max(maxFrameNumber, pending_slice.
getFrameIndex());
749 if (pending_slice.size() > frames_per_slice) {
751 JErrorStream(logger) <<
"More frames in timeslice than expected "
752 << pending_slice.size() <<
" > " << frames_per_slice;
754 if (pending_slice.size() <= maximum_frames_per_slice) {
756 JErrorStream(logger) <<
"Adjusting expected frames per timeslice to " << pending_slice.size();
758 frames_per_slice = pending_slice.size();
762 if (!pending_slice.empty()) {
766 processTimeSlice(pending_slice);
770 numberOfTimeslicesProcessed += 1;
774 if (pending_slice.size() < frames_per_slice) {
776 numberOfIncompleteTimeslicesProcessed += 1;
778 JErrorStream(logErrorIncomplete) <<
"Timeout -> processed incomplete timeslice: "
780 <<
"Size of timeslice = " << pending_slice.size() <<
';'
781 <<
"Queue depth = " << timeslices.size() <<
';'
784 if (!timeslices.empty()) {
786 JErrorStream(logger) <<
"Adjusting expected frames per timeslice from " << frames_per_slice <<
" to " << pending_slice.size();
788 frames_per_slice = pending_slice.size();
793 timeslices.pop_front();
825 if (preamble.getLength() != channel->size()) {
827 JErrorStream(logErrorRun) <<
"Size of received data does not match size reported by preamble: "
828 <<
"preamble.getLength() = " << preamble.getLength() <<
';'
829 <<
"channel->size(): " << channel->size() <<
';';
831 number_of_packets_discarded += 1;
838 JErrorStream(logErrorRun) <<
"Run number " << header.getRunNumber()
840 <<
" -> Dropping frame.";
842 number_of_packets_discarded += 1;
847 if (header.getFrameIndex() <= current_slice_index) {
849 JErrorStream(logErrorIndex) <<
"Frame index " << header.getFrameIndex() <<
" <= " << current_slice_index
850 <<
" -> Dropping frame.";
852 number_of_packets_discarded += 1;
854 if (frames_per_slice < maximum_frames_per_slice) {
858 JErrorStream(logErrorIndex) <<
"Increase number of frames expected to: " << frames_per_slice;
864 if (header.getFrameIndex() > current_slice_index + maximal_frame_index) {
866 JErrorStream(logErrorIndex) <<
"Frame index " << header.getFrameIndex() <<
" > " << current_slice_index + maximal_frame_index
867 <<
" -> Dropping frame.";
869 number_of_packets_discarded += 1;
876 while (timesliceIterator != timeslices.end() && timesliceIterator->getFrameIndex() < header.getFrameIndex()) {
880 if (timesliceIterator != timeslices.end() && timesliceIterator->getFrameIndex() == header.getFrameIndex()) {
888 timesliceIterator = timeslices.insert(timesliceIterator,
JDAQTimesliceL0());
890 timesliceIterator->setDAQChronometer(header.getDAQChronometer());
897 in >>
static_cast<JDAQFrame&
>(*(timesliceIterator->rbegin()));
926 c_buffer.is_enabled()) {
928 timesliceRouter->configure(timeslice);
937 for (JDAQTimesliceL0::const_iterator frame = timeslice.begin(); frame != timeslice.end(); ++frame) {
939 if (moduleRouter->hasModule(frame->getModuleID())) {
946 <<
"module = " << frame->getModuleID() <<
";"
947 <<
"discard and dump";
949 timesliceTX.push_back(*frame);
954 const JModule& module = moduleRouter->getModule(frame->getModuleID());
955 JSuperFrame2D_t& buffer = JSuperFrame2D_t::demultiplex(*frame, module);
971 if (buffer.begin() != __end) {
974 frame->getModuleIdentifier(),
977 (*buildL1)(buffer.begin(), __end , back_inserter(*timesliceNB.rbegin()));
984 frame->getModuleIdentifier(),
987 (*buildL1)(*timesliceL0.rbegin(), back_inserter(*timesliceL1.rbegin()));
992 frame->getModuleIdentifier(),
995 (*buildL2)(buffer, *timesliceL1.rbegin(), back_inserter(*timesliceL2.rbegin()));
1000 frame->getModuleIdentifier(),
1003 (*buildSN)(buffer, *timesliceL1.rbegin(), back_inserter(*timesliceSN.rbegin()));
1007 JErrorStream(logErrorDetector) <<
"No detector information for module " << frame->getModuleID();
1011 if (!timesliceTX.empty()) {
1012 this->put(timesliceTX);
1021 for (JTriggerInput::const_iterator hit = trigger_input.begin(); hit != trigger_input.
end(); ++hit) {
1042 (*trigger3DMuon) (trigger_input, back_inserter(trigger_output));
1043 (*trigger3DShower)(trigger_input, back_inserter(trigger_output));
1044 (*triggerMXShower)(trigger_input, timesliceL0, back_inserter(trigger_output));
1048 for (JTriggerOutput::const_iterator event = trigger_output.begin();
event != trigger_output.end(); ++event) {
1052 if (this->put(
object)) {
1053 numberOfEvents += 1;
1057 if (
parameters.writeL1() || c_buffer.sizeL1 > 0) {
1061 if (
parameters.writeL1) { this->put(
object); }
1062 if (c_buffer.sizeL1 > 0) { c_buffer.put(
object); }
1065 if (
parameters.writeL2() || c_buffer.sizeL2 > 0) {
1069 if (
parameters.writeL2) { this->put(
object); }
1070 if (c_buffer.sizeL2 > 0) { c_buffer.put(
object); }
1073 if (
parameters.writeSN() || c_buffer.sizeSN > 0) {
1077 if (
parameters.writeSN) { this->put(
object); }
1078 if (c_buffer.sizeSN > 0) { c_buffer.put(
object); }
1081 if (
parameters.writeL0() || c_buffer.sizeL0 > 0) {
1083 if (
parameters.writeL0) { this->put(timeslice); }
1084 if (c_buffer.sizeL0 > 0) { c_buffer.put(timeslice); }
1088 }
catch(
const exception& error) {
1089 JErrorStream(logger) <<
"Error = " << error.what() <<
";"
1092 <<
"time slice not correctly processed!";
1104 const double T_us = (double) timer.usec_wall;
1106 JNoticeStream(logger) <<
"Elapsed real (wall) time [s] " << T_us / 1e6;
1107 JNoticeStream(logger) <<
"Elapsed user CPU time [s] " << (double) timer.usec_ucpu/ 1e6;
1108 JNoticeStream(logger) <<
"Elapsed system CPU time [s] " << (double) timer.usec_scpu/ 1e6;
1110 JNoticeStream(logger) <<
"Elapsed real time per time slice [ms] " << Qt.getMean() * 1.0e-3 <<
" +/- " << Qt.getDeviation() * 1.0e-3;
1112 catch(
const std::exception&) {}
1113 JNoticeStream(logger) <<
"Number of packets received/discarded " << number_of_packets_received <<
"/" << number_of_packets_discarded;
1114 JNoticeStream(logger) <<
"Number of events/MB sent " << numberOfEvents <<
"/" << numberOfBytes/1e6;
1116 if (number_of_packets_received > 0) {
1117 JNoticeStream(logger) <<
"Number of reads/packet " << (double) number_of_reads / (
double) number_of_packets_received;
1121 JNoticeStream(logger) <<
"Current number of frames per slice expected: " << frames_per_slice;
1123 JNoticeStream(logger) <<
"Number of timeslices processed total/incomplete " << numberOfTimeslicesProcessed <<
"/" << numberOfIncompleteTimeslicesProcessed;
1125 if (numberOfTimeslicesProcessed > 0) {
1126 JNoticeStream(logger) <<
"Real time per timeslice [ms] " << timer.usec_wall / 1000 / numberOfTimeslicesProcessed;
1127 JNoticeStream(logger) <<
"User CPU time per timeslice [ms] " << timer.usec_ucpu / 1000 / numberOfTimeslicesProcessed;
1128 JNoticeStream(logger) <<
"System CPU time per timeslice [ms] " << timer.usec_scpu / 1000 / numberOfTimeslicesProcessed;
1131 const double processedSlicesTime_us = numberOfTimeslicesProcessed *
getFrameTime() / 1000;
1132 const double processedDetectorTime_us = (maxFrameNumber - minFrameNumber) *
getFrameTime() / 1000;
1134 if (processedSlicesTime_us > 0) {
1135 JNoticeStream(logger) <<
"Performance factor (inaccurate estimate): " << T_us / processedSlicesTime_us;
1137 if (processedDetectorTime_us > 0) {
1138 JNoticeStream(logger) <<
"Performance factor whole detector (inaccurate estimate): " << T_us / processedDetectorTime_us;
1154 using namespace std;
1156 JDebugStream(logger) <<
"Received message <" << tag.
toString() <<
"> \"" << string(buffer, length) <<
"\"";
1160 if (c_buffer.is_open()) {
1162 JNoticeStream(logger) <<
"Close circular buffer " << c_buffer;
1167 if (c_buffer.is_enabled()) {
1171 if (c_buffer.is_open()) {
1173 JNoticeStream(logger) <<
"Created circular buffer " << c_buffer;
1179 JErrorStream (logger) <<
"Failed to create circular buffer in directory <" <<
path <<
">; disable functionality.";
1193 static const int MAXIMUM_FILE_NUMBER = 100;
1212 datawriter->put(
object);
1218 catch(
const std::exception& error) {
1311 using namespace std;
1312 using namespace JPP;
1313 using namespace KM3NETDAQ;
1329 JParser<> zap(
"Application for real-time filtering of data.");
1334 zap[
'u'] =
make_field(client_name) =
"JDataFilter";
1344 catch(
const exception& error) {
1345 FATAL(error.what() << endl);
Message logger with time scheduler.
Utility class to parse command line options.
void processTimeSlice(const JDAQTimesliceL0 ×lice)
Process time slice.
virtual void actionStart(int length, const char *buffer)
int getSizeOfPacket(const KM3NETDAQ::JDAQAbstractPreamble &preamble)
Get size of packeet.
void open(const std::string &path, const JTag &tag)
Open file.
bool read(const JEquation &equation)
Read equation.
JTriggerMask_t getTriggerMask(const unsigned int bit)
Convert trigger bit to trigger mask.
ROOT TTree parameter settings.
then JLigiers sh continue fi cat driver txt<< EOFprocess dfilter $HOST1 ssh\$HOST\$"JDataFilter -H \$SERVER\$ -M \$LOGGER\$ -d $DEBUG &";enterevent ev_init{RC_CMD%< ev_init.txt > from me< ev_init.txt > event ev_configure
Data structure for a composite optical module.
JSinglePointer< JTriggerNB > triggerNB
static bool processIndexSorter(const JDAQProcess &first, const JDAQProcess &second)
Sort DAQ process by index.
std::list< JDAQTimesliceL0 > timeslices
buffer with pending time slice data
long long int numberOfTimeslicesProcessed
JBuildL2< hit_type > JBuildL2_t
Message logging based on std::ostream.
bool has(const int file_descriptor) const
Has file descriptor.
void set(const int file_descriptor)
Set file descriptor.
JMessageScheduler logErrorIndex
virtual void actionContinue(int length, const char *buffer)
JSuperFrame2D< hit_type > JSuperFrame2D_t
JSocketInputChannel< JDAQAbstractPreamble > JSocketInputChannel_t
Long64_t sizeL1
Number of L1 time slices.
JTag getUniqueTag(const std::string &hostname, const std::string &name)
Get unique tag of run control client.
static const JNET::JTag RC_DFILTER
Router for direct addressing of module data in detector data structure.
JDataFilter(const std::string &name, const std::string &server, const std::string &hostname, JLogger *logger, const int level, const int port, const int backlog, const int buffer_size, const std::string &path)
Constructor.
virtual void actionExit()
virtual void actionPause(int length, const char *buffer)
esac print_variable DETECTOR INPUT_FILE OUTPUT_FILE CDF for TYPE in
Interface for logging messages.
Message logging based on ControlHost.
Utility class to parse parameter values.
JSinglePointer< JServerSocket > serversocket
server for data queue connections
unsigned int maximum_frames_per_slice
ROOT TTree object output.
JMessageScheduler logErrorIncomplete
*fatal Wrong number of arguments esac JCookie sh typeset Z DETECTOR typeset Z SOURCE_RUN typeset Z TARGET_RUN set_variable PARAMETERS_FILE $WORKDIR parameters
Simple data structure to support I/O of equations (see class JLANG::JEquation).
static const JNET::JTag IO_TRIGGER_PARAMETERS
JTriggerParameters parameters
Main class for real-time filtering of data.
void run()
Run as run control client following command messages via JNET::JControlHost.
std::string getFullPath(const std::string &path)
Get full path, i.e. add JEEP::PATHNAME_SEPARATOR if necessary.
Basic data structure for time and time over threshold information of hit.
long long int number_of_packets_discarded
int getRunNumber() const
Get run number.
T * open(const std::string &file_name)
Open file.
Utility class to parse parameter values.
virtual void setSelect(JFileDescriptorMask &mask) const
Set the file descriptor mask for the select call.
static const JChecksum checksum
Function object to perform check-sum of raw data.
then echo The file $DIR KM3NeT_00000001_00000000 root already please rename or remove it first
void disable()
Disable writing.
int getFrameIndex() const
Get frame index.
virtual void actionEnter()
Interface methods for actions corresponding to state transitions.
JBuildL1< hit_type > JBuildL1_t
1-dimensional frame with time calibrated data from one optical module.
JCircularBuffer_t()
Default constructor.
JCircularBuffer_t c_buffer
JTimeRange getTimeRange(const Evt &event)
Get time range (i.e. time between earliest and latest hit) of Monte Carlo event.
void typeout()
Report status to message logger.
bool is_enabled() const
Check whether writing of data is enabled.
Basic data structure for L0 hit.
std::string index
index in process list
do cat driver txt<< EOFevent ev_configure{RC_EVT%< ev_configure.txt > RC_DWRT path
JSuperFrame1D< hit_type > JSuperFrame1D_t
std::string trim(const std::string &buffer)
Trim string.
JSinglePointer< JBuildL2_t > buildL2
int getLength() const
Get length.
JSinglePointer< JTriggerMXShower > triggerMXShower
JSinglePointer< JBuildL1_t > buildL1
int getFileDescriptor() const
Get file descriptor.
long long int totalCPURAM
JTimeslice< hit_type > JTimeslice_t
JSinglePointer< JTrigger3DShower > trigger3DShower
Scheduling of actions via fixed latency intervals.
void accept(const int server)
Accept connection from a server.
double getMaximalDistance(const JDetector &detector)
Get maximal distance between modules in detector.
I/O formatting auxiliaries.
long long int numberOfBytes
Auxiliary class for itemization of process list.
std::vector< JDAQProcess > dataFilters
void merge(const JMatch_t &match)
Merge events.
std::vector< JSocketInputChannel_t > JChannelList_t
friend std::ostream & operator<<(std::ostream &out, const JCircularBuffer_t &object)
Write circular buffer to output stream.
static const JLocalTime getLocalTime
Function object to get local time in micro seconds.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
virtual void actionStop(int length, const char *buffer)
Router for fast addressing of hits in KM3NETDAQ::JDAQTimeslice data structure as a function of the op...
double getFrameTime()
Get frame time duration.
do set_variable OUTPUT_DIRECTORY $WORKDIR T
int getRunNumber(const std::string &file_name)
Get run number for given file name of data taking run.
JMessageScheduler logErrorDetector
static const size_t buffer_size
Auxiliary class for method select.
Auxiliary class for CPU timing and usage.
JSinglePointer< JBuildL2_t > buildSN
const JDAQChronometer & getDAQChronometer() const
Get DAQ chronometer.
long long int numberOfIncompleteTimeslicesProcessed
Auxiliary class to build JDAQEvent for a triggered event.
void updateFrameQueue(const JChannelList_t::const_iterator channel)
Update queue with data frames.
JTreeWriter object output.
Level specific message streamers.
long long int number_of_packets_received
const JPosition3D & getPosition() const
Get position.
Simple data structure for the DAQ preamble required for a correct calculation of the object size for ...
Long64_t sizeSN
Number of SN time slices.
Auxiliary class for all subscription.
int port
server socket port
static void reset()
Reset counter of unique instance of this class object.
General purpose messaging.
Auxiliary data structure for sequence of same character.
long long int localtime_t
Type definition of local time.
void setReceiveBufferSize(const int size)
Set receive buffer size.
std::string hostname
host name of data server
unsigned int maxQueueDepth
JControlHostObjectOutput< JDAQTypes_t > JControlHost_t
std::vector< JDAQProcess > dataQueues
long long int maxQueueSize
bool put(const T &object)
Auxiliary method to send object to data server.
std::string toString() const
Convert tag to string.
std::vector< value_type >::iterator iterator
virtual void actionConfigure(int length, const char *buffer)
JSinglePointer< JTimesliceRouter > timesliceRouter
Auxiliary class to build JDAQTimeslice for L1 timeslice.
JChannelList_t channelList
connections to data queue
Control unit client base class.
Auxililary class to get date and time.
Utility class to parse command line options.
static const JNET::JTag RC_ALERT
Implemenation of object output through ControlHost.
void applyHighRateVeto(const double rate_Hz)
Apply high-rate veto.
std::vector< std::string > getListOfIPaddresses()
Get list of IP address (decimal-dot notation).
virtual void actionReset(int length, const char *buffer)
unsigned long long int getRAM()
Get RAM of this CPU.
Long64_t sizeL0
Number of L0 time slices.
JSinglePointer< JTrigger3DMuon > trigger3DMuon
JSinglePointer< JControlHost_t > datawriter
controlhost of data server (to which data writer should be connected)
void setNonBlocking(const bool on)
Set non-blocking of I/O.
JMessageScheduler logErrorRun
virtual bool enter(const JArgs &args)
Enter the state machine.
JSinglePointer< JModuleRouter > moduleRouter
std::string path
directory for writing circular buffer
2-dimensional frame with time calibrated data from one optical module.
JSocketInputChannel< JPrefix_t > JSocketInputChannel_t
const char * getName()
Get ROOT name of given data type.
static const JNET::JTag RC_CMD
void setKeepAlive(const bool on)
Set keep alive of socket.
long long int number_of_bytes_received
virtual void actionTagged(const JTag &tag, int length, const char *buffer)
Tagged action to handle alerts.
virtual void actionQuit(int length, const char *buffer)
KM3NeT DAQ constants, bit handling, etc.
Match of two events considering overlap in time.
size_t getSizeof(const JDAQEvent &object)
Get size of object.
virtual void actionRunning()
This method is repeatedly called when this client machine is in state Running and the clock interval ...
Hostname and IP address functions.
Long64_t sizeL2
Number of L2 time slices.
Data frame of one optical module.
long long int number_of_reads
virtual void actionSelect(const JFileDescriptorMask &mask)
Action method following last select call.
virtual void actionInit(int length, const char *buffer)
long long int numberOfEvents
unsigned int frames_per_slice
Timeslice data structure for L0 data.
Basic data structure for L1 hit.
Time slice with calibrated data.
bool putObject(TDirectory *dir, const T &object)
Write object to ROOT directory.
int main(int argc, char *argv[])