190 for (
int i = 0; !this->is_open() && i != MAXIMUM_FILE_NUMBER; ++i) {
196 <<
"_" << cal.getYear() <<
'-' <<
FILL(2,
'0') << cal.getMonth() <<
'-' <<
FILL(2,
'0') << cal.getDay()
206 this->
open(os.str().c_str());
208 catch(
const exception& error) {}
230 return (sizeL0 > 0 ||
245 if (
object.is_open())
246 out <<
object.getFile()->GetName();
252 return out <<
object.sizeL0 <<
'/'
253 <<
object.sizeL1 <<
'/'
254 <<
object.sizeL2 <<
'/'
255 <<
object.sizeSN <<
'/';
292 const std::string& server,
293 const std::string& hostname,
299 const std::string&
path) :
304 buffer_size(buffer_size),
312 current_slice_index = -1;
323 if (c_buffer.is_open()) {
325 JNoticeStream(logger) <<
"Close circular buffer " << c_buffer;
334 virtual void actionInit(
int length,
const char* buffer)
override
336 JDebugStream(logger) <<
"actionInit() " << std::string(buffer,length);
342 if (serversocket.is_valid()) {
343 serversocket->shutdown();
348 catch(
const std::exception& error) {
349 JErrorStream(logger) <<
"Error \"" << error.what() <<
"\"; trigger ev_error.";
359 JDebugStream(logger) <<
"actionConfigure() " << endl << std::string(buffer,length);
370 dumpLimit = numeric_limits<int>::max();
376 properties[
"dataWriter"] = hostname;
377 properties[
"numberOfFramesPerSlice"] = frames_per_slice = 1;
380 properties[
"queueSize"] = maxQueueSize = (totalCPURAM -
GIGABYTE);
381 properties[
"queueDepth"] = maxQueueDepth = 20;
382 properties[
"frameIndex"] = maximal_frame_index = 100000;
385 properties[
"JDataFilter"] = dataFilters;
386 properties[
"DataQueue"] = dataQueues;
387 properties[
"path"] =
path;
388 properties[
"c_sizeL0"] = c_buffer.sizeL0;
389 properties[
"c_sizeL1"] = c_buffer.sizeL1;
390 properties[
"c_sizeL2"] = c_buffer.sizeL2;
391 properties[
"c_sizeSN"] = c_buffer.sizeSN;
392 properties[
"dumpLimit"] = dumpLimit;
395 properties.
read(
string(buffer, length));
397 catch(
const exception& error) {
404 setClockInterval(
update_s * 1000000LL);
406 hostname =
trim(hostname);
411 throw JException(
"Undefined data writer host name.");
413 maximum_frames_per_slice = frames_per_slice;
417 if (dataFilters.empty()) {
418 JNoticeStream(logger) <<
"No DataFilters in process list, or no process list. "
419 <<
"Assuming that this process is the only process on this CPU and setting parameters accordingly.";
422 sort(dataFilters.begin(), dataFilters.end(), processIndexSorter);
424 unsigned int numberOfDataFiltersOnThisMachine = 0;
432 notice <<
"My IP addresses:";
441 JDebugStream(logger) <<
"Test IP address \"" << i->hostname <<
"\" " << (find(IP.begin(), IP.end(), i->hostname) != IP.end());
443 if (find(IP.begin(), IP.end(), i->hostname) != IP.end()) {
445 numberOfDataFiltersOnThisMachine++;
447 if (i->port ==
this->port) {
453 if (numberOfDataFiltersOnThisMachine == 0) {
454 JNoticeStream(logger) <<
"Zero data filters on this machine according to process list (if it exists). "
455 <<
"Assuming one datafilter on this machine.";
456 numberOfDataFiltersOnThisMachine = 1;
459 if (thisProcess == dataFilters.end()) {
460 JErrorStream(logger) <<
"This process cannot be found in the process list. Why do I exist?";
463 if (thisProcess != dataFilters.end() && thisProcess->index !=
getName()) {
464 JErrorStream(logger) <<
"Mismatch between given process names: "
466 <<
", but in the process list I am referred to as " << thisProcess->index;
469 if (dataFilters.begin() == thisProcess || dataFilters.empty()) {
473 if (maxQueueSize > (totalCPURAM-
GIGABYTE)/(numberOfDataFiltersOnThisMachine)) {
475 maxQueueSize = (totalCPURAM-
GIGABYTE)/(numberOfDataFiltersOnThisMachine);
477 JNoticeStream(logger) <<
"Maximum queue size is too large given the number of processes on this machine. "
478 <<
"Queue size reduced to "
479 << maxQueueSize <<
" bytes." ;
486 JNoticeStream(logger) <<
"Disabling high-rate veto of all PMTs.";
503 JNoticeStream(logger) <<
"This data filter process will report.";
504 JNoticeStream(logger) <<
"Number of modules: " << (*moduleRouter)->size();
507 JNoticeStream(logger) <<
"Update period [s]: " << getClockInterval();
519 if (buildL1.get() == NULL) {
JErrorStream(logger) <<
"Failed to allocate buildL1."; }
520 if (buildL2.get() == NULL) {
JErrorStream(logger) <<
"Failed to allocate buildL2."; }
521 if (buildSN.get() == NULL) {
JErrorStream(logger) <<
"Failed to allocate buildSN."; }
522 if (buildNB.get() == NULL) {
JErrorStream(logger) <<
"Failed to allocate buildSN."; }
529 if (c_buffer.is_enabled()) {
531 if (!c_buffer.is_open()) {
535 if (c_buffer.is_open()) {
537 JNoticeStream(logger) <<
"Created circular buffer " << c_buffer;
543 JErrorStream (logger) <<
"Failed to create circular buffer in directory <" <<
path <<
">; disable functionality.";
550 JNoticeStream(logger) <<
"Continue using circular buffer " << c_buffer;
560 if (c_buffer.is_open()) {
577 current_slice_index = -1;
582 numberOfTimeslicesProcessed = 0;
583 numberOfIncompleteTimeslicesProcessed = 0;
585 number_of_packets_received = 0;
586 number_of_packets_discarded = 0;
587 number_of_bytes_received = 0;
590 minFrameNumber = numeric_limits<int>::max();
591 maxFrameNumber = numeric_limits<int>::min();
597 logErrorRun .reset();
598 logErrorDetector .reset();
599 logErrorIndex .reset();
600 logErrorIncomplete.reset();
621 if (!timeslices.empty()) {
623 JNoticeStream(logger) <<
"Flushing " << timeslices.size() <<
" slices.";
625 for (deque<JDAQTimesliceL0>::const_iterator i = timeslices.begin(); i != timeslices.end(); ++i) {
634 deque<JDAQTimesliceL0> buffer;
636 timeslices.swap(buffer);
643 current_slice_index = -1;
656 virtual void actionStop(
int length,
const char* buffer)
override
666 if (serversocket.is_valid()) {
667 serversocket->shutdown();
670 serversocket.reset();
674 virtual void actionQuit(
int length,
const char* buffer)
override
682 if (serversocket.is_valid()) {
683 mask.
set(*serversocket);
686 for (JChannelList_t::const_iterator channel = channelList.begin(); channel != channelList.end(); ++channel) {
687 if (!channel->isReady()) {
688 mask.
set(channel->getFileDescriptor());
698 for (JChannelList_t::iterator channel = channelList.begin(); channel != channelList.end(); ) {
702 if (mask.
has(channel->getFileDescriptor())) {
706 if (channel->isReady()) {
708 number_of_packets_received += 1;
709 number_of_reads += channel->getCounter();
710 number_of_bytes_received += channel->size();
714 updateFrameQueue(channel);
718 JErrorStream(logErrorRun) <<
"Receiving data while not running.";
720 number_of_packets_discarded += 1;
728 catch(
const exception& error) {
730 JNoticeStream(logger) <<
"Disconnecting channel " << channel->getFileDescriptor() <<
' ' << error.what();
734 channel = channelList.erase(channel);
739 if (serversocket.is_valid()) {
741 if (mask.
has(*serversocket)) {
745 socket.
accept(serversocket->getFileDescriptor());
760 if (!timeslices.empty() && ((timeslices[0].size() >= frames_per_slice) ||
761 (timeslices.size() >= 2
u &&
762 timeslices[1].size() >= frames_per_slice) ||
763 (timeslices.size() >= maxQueueDepth) ||
770 minFrameNumber = min(minFrameNumber, pending_slice.
getFrameIndex());
771 maxFrameNumber = max(maxFrameNumber, pending_slice.
getFrameIndex());
773 if (pending_slice.size() > frames_per_slice) {
775 JErrorStream(logger) <<
"More frames in timeslice than expected "
776 << pending_slice.size() <<
" > " << frames_per_slice;
778 if (pending_slice.size() <= maximum_frames_per_slice) {
780 JErrorStream(logger) <<
"Adjusting expected frames per timeslice to " << pending_slice.size();
782 frames_per_slice = pending_slice.size();
786 if (!pending_slice.empty()) {
790 processTimeSlice(pending_slice);
794 numberOfTimeslicesProcessed += 1;
798 if (pending_slice.size() < frames_per_slice) {
800 numberOfIncompleteTimeslicesProcessed += 1;
804 error <<
"Timeout -> processed incomplete timeslice: "
806 <<
"Size of timeslice = " << pending_slice.size() <<
';'
807 <<
"Queue depth = " << timeslices.size() <<
';'
810 if ((timeslices.size() >= 2
u &&
811 timeslices[1].size() >= frames_per_slice)) {
813 error <<
" intermittent problem -> continues as-is";
817 error <<
" adjusting expected frames per timeslice from " << frames_per_slice <<
" to " << pending_slice.size();
819 frames_per_slice = pending_slice.size();
826 timeslices.pop_front();
858 if (preamble.getLength() != channel->size()) {
860 JErrorStream(logErrorRun) <<
"Size of received data does not match size reported by preamble: "
861 <<
"preamble.getLength() = " << preamble.getLength() <<
';'
862 <<
"channel->size(): " << channel->size() <<
';';
864 number_of_packets_discarded += 1;
871 JErrorStream(logErrorRun) <<
"Run number " << header.getRunNumber()
873 <<
" -> Dropping frame.";
875 number_of_packets_discarded += 1;
880 if (header.getFrameIndex() <= current_slice_index) {
882 JErrorStream(logErrorIndex) <<
"Frame index " << header.getFrameIndex() <<
" <= " << current_slice_index
883 <<
" -> Dropping frame.";
885 number_of_packets_discarded += 1;
887 if (frames_per_slice < maximum_frames_per_slice) {
891 JErrorStream(logErrorIndex) <<
"Increase number of frames expected to: " << frames_per_slice;
897 if (current_slice_index != -1 && header.getFrameIndex() > current_slice_index + maximal_frame_index) {
899 JErrorStream(logErrorIndex) <<
"Frame index " << header.getFrameIndex() <<
" > " << current_slice_index + maximal_frame_index
900 <<
" -> Dropping frame.";
902 number_of_packets_discarded += 1;
907 deque<JDAQTimesliceL0>::iterator timesliceIterator = timeslices.begin();
909 while (timesliceIterator != timeslices.end() && timesliceIterator->getFrameIndex() < header.getFrameIndex()) {
913 if (timesliceIterator != timeslices.end() && timesliceIterator->getFrameIndex() == header.getFrameIndex()) {
921 timesliceIterator = timeslices.insert(timesliceIterator,
JDAQTimesliceL0());
923 timesliceIterator->setDAQChronometer(header.getDAQChronometer());
930 in >>
static_cast<JDAQFrame&
>(*(timesliceIterator->rbegin()));
947 timesliceRouter->configure(timeslice);
961 c_buffer.is_enabled()) {
970 for (JDAQTimesliceL0::const_iterator frame = timeslice.begin(); frame != timeslice.end(); ++frame) {
972 if (moduleRouter->hasModule(frame->getModuleID())) {
979 <<
"module = " << frame->getModuleID() <<
";"
980 <<
"discard" << (dumpCount < dumpLimit ?
" and dump" :
"");
982 timesliceTX.push_back(*frame);
987 const JModule& module = moduleRouter->getModule(frame->getModuleID());
988 JSuperFrame2D_t& buffer = JSuperFrame2D_t::demultiplex(*frame, module);
1004 if (buffer.begin() != __end) {
1007 frame->getModuleIdentifier(),
1012 (*buildL1)(buffer.begin(), __end , back_inserter(zbuf));
1014 (*buildNB)(buffer.begin() , __end, zbuf, back_inserter(*timesliceNB.rbegin()));
1021 frame->getModuleIdentifier(),
1024 (*buildL1)(*timesliceL0.rbegin(), back_inserter(*timesliceL1.rbegin()));
1029 frame->getModuleIdentifier(),
1032 (*buildL2)(buffer, *timesliceL1.rbegin(), back_inserter(*timesliceL2.rbegin()));
1037 frame->getModuleIdentifier(),
1040 (*buildSN)(buffer, *timesliceL1.rbegin(), back_inserter(*timesliceSN.rbegin()));
1044 JErrorStream(logErrorDetector) <<
"No detector information for module " << frame->getModuleID();
1048 if (!timesliceTX.empty()) {
1050 if (dumpCount < dumpLimit) {
1052 this->put(timesliceTX);
1064 for (JTriggerInput::const_iterator hit = trigger_input.begin(); hit != trigger_input.end(); ++hit) {
1085 (*trigger3DMuon) (trigger_input, back_inserter(trigger_output));
1086 (*trigger3DShower)(trigger_input, back_inserter(trigger_output));
1087 (*triggerMXShower)(trigger_input, timesliceL0, back_inserter(trigger_output));
1091 for (JTriggerOutput::const_iterator event = trigger_output.begin();
event != trigger_output.end(); ++event) {
1095 if (this->put(
object)) {
1096 numberOfEvents += 1;
1100 if (
parameters.writeL1() || c_buffer.sizeL1 > 0) {
1104 if (
parameters.writeL1) { this->put(
object); }
1105 if (c_buffer.sizeL1 > 0) { c_buffer.put(
object); }
1108 if (
parameters.writeL2() || c_buffer.sizeL2 > 0) {
1112 if (
parameters.writeL2) { this->put(
object); }
1113 if (c_buffer.sizeL2 > 0) { c_buffer.put(
object); }
1116 if (
parameters.writeSN() || c_buffer.sizeSN > 0) {
1120 if (
parameters.writeSN) { this->put(
object); }
1121 if (c_buffer.sizeSN > 0) { c_buffer.put(
object); }
1124 if (
parameters.writeL0() || c_buffer.sizeL0 > 0) {
1126 if (
parameters.writeL0) { this->put(timeslice); }
1127 if (c_buffer.sizeL0 > 0) { c_buffer.put(timeslice); }
1131 }
catch(
const exception& error) {
1133 JErrorStream(logger) <<
"Error = " << error.what() <<
";"
1136 <<
"time slice not correctly processed;"
1137 <<
"discard" << (dumpCount < dumpLimit ?
" and dump" :
"");
1139 if (dumpCount < dumpLimit) {
1141 this->put(static_cast<const JDAQTimeslice&>(timeslice));
1147 timesliceRouter->reset();
1158 const double T_us = (double) timer.usec_wall;
1160 JStatusStream(logger) <<
"Elapsed real (wall) time [s] " << T_us / 1e6;
1161 JStatusStream(logger) <<
"Elapsed user CPU time [s] " << (double) timer.usec_ucpu/ 1e6;
1162 JStatusStream(logger) <<
"Elapsed system CPU time [s] " << (double) timer.usec_scpu/ 1e6;
1164 JStatusStream(logger) <<
"Elapsed real time per time slice [ms] " << Qt.getMean() * 1.0e-3 <<
" +/- " << Qt.getDeviation() * 1.0e-3;
1166 catch(
const std::exception&) {}
1167 JStatusStream(logger) <<
"Number of packets received/discarded " << number_of_packets_received <<
"/" << number_of_packets_discarded;
1168 JStatusStream(logger) <<
"Number of events/MB sent " << numberOfEvents <<
"/" << numberOfBytes/1e6;
1170 if (number_of_packets_received > 0) {
1171 JStatusStream(logger) <<
"Number of reads/packet " << (double) number_of_reads / (
double) number_of_packets_received;
1175 JStatusStream(logger) <<
"Current number of frames per slice expected: " << frames_per_slice;
1177 JStatusStream(logger) <<
"Number of timeslices processed total/incomplete " << numberOfTimeslicesProcessed <<
"/" << numberOfIncompleteTimeslicesProcessed;
1179 if (numberOfTimeslicesProcessed > 0) {
1180 JStatusStream(logger) <<
"Real time per timeslice [ms] " << timer.usec_wall / 1000 / numberOfTimeslicesProcessed;
1181 JStatusStream(logger) <<
"User CPU time per timeslice [ms] " << timer.usec_ucpu / 1000 / numberOfTimeslicesProcessed;
1182 JStatusStream(logger) <<
"System CPU time per timeslice [ms] " << timer.usec_scpu / 1000 / numberOfTimeslicesProcessed;
1185 const double processedSlicesTime_us = numberOfTimeslicesProcessed *
getFrameTime() / 1000;
1186 const double processedDetectorTime_us = (maxFrameNumber - minFrameNumber) *
getFrameTime() / 1000;
1188 if (processedSlicesTime_us > 0) {
1189 JStatusStream(logger) <<
"Performance factor (inaccurate estimate): " << T_us / processedSlicesTime_us;
1191 if (processedDetectorTime_us > 0) {
1192 JStatusStream(logger) <<
"Performance factor whole detector (inaccurate estimate): " << T_us / processedDetectorTime_us;
1208 using namespace std;
1210 JDebugStream(logger) <<
"Received message <" << tag.
toString() <<
"> \"" << string(buffer, length) <<
"\"";
1214 if (c_buffer.is_open()) {
1216 JNoticeStream(logger) <<
"Close circular buffer " << c_buffer;
1221 if (c_buffer.is_enabled()) {
1225 if (c_buffer.is_open()) {
1227 JNoticeStream(logger) <<
"Created circular buffer " << c_buffer;
1233 JErrorStream (logger) <<
"Failed to create circular buffer in directory <" <<
path <<
">; disable functionality.";
1247 static const int MAXIMUM_FILE_NUMBER = 100;
1266 datawriter->put(
object);
1272 catch(
const std::exception& error) {
1369 using namespace std;
1370 using namespace JPP;
1371 using namespace KM3NETDAQ;
1387 JParser<> zap(
"Application for real-time filtering of data.");
1392 zap[
'u'] =
make_field(client_name) =
"JDataFilter";
1402 catch(
const exception& error) {
1403 FATAL(error.what() << endl);
virtual void actionRunning() override
This method is repeatedly called when this client machine is in state Running and the clock interval ...
Message logger with time scheduler.
Utility class to parse command line options.
void processTimeSlice(const JDAQTimesliceL0 ×lice)
Process time slice.
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.
int main(int argc, char *argv[])
ROOT TTree parameter settings of various packages.
Data structure for a composite optical module.
JSinglePointer< JTriggerNB > triggerNB
Router for fast addressing of hits in KM3NETDAQ::JDAQTimeslice data structure as a function of the op...
static bool processIndexSorter(const JDAQProcess &first, const JDAQProcess &second)
Sort DAQ process by index.
long long int numberOfTimeslicesProcessed
JBuildL2< hit_type > JBuildL2_t
Message logging based on std::ostream.
std::deque< JDAQTimesliceL0 > timeslices
buffer with pending time slice data
bool has(const int file_descriptor) const
Has file descriptor.
void set(const int file_descriptor)
Set file descriptor.
JMessageScheduler logErrorIndex
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.
Interface for logging messages.
Message logging based on ControlHost.
then echo Enter input within $TIMEOUT_S seconds echo n User name
Utility class to parse parameter values.
JSinglePointer< JServerSocket > serversocket
server for data queue connections
static const int HIGH_RATE_VETO_DISABLE
Enable (disable) use of high-rate veto test if this status bit is 0 (1);.
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).
then usage $script< detector file >< detectorfile > nIf the range of floors is the first detector file is aligned to the second before the comparison nIn this
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.
Data structure for detector geometry and calibration.
T * open(const std::string &file_name)
Open file.
Utility class to parse parameter values.
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.
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
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.
then echo Variable JPP_DIR undefined exit fi source $JPP_DIR setenv sh $JPP_DIR set_variable DIR $JPP_DIR examples JPhysics set_variable DEBUG set_variable darkcount_Hz set_variable rateL0_Hz set_array rateL1_Hz if do_usage *then usage $script[working directory] fi function typeout()
double getMaximalDistance(const JDetector &detector)
Get maximal distance between modules in detector.
I/O formatting auxiliaries.
virtual void actionContinue(int length, const char *buffer) override
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.
event< ev_daq > ev_configure
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
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.
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.
JSinglePointer< JBuildL2_t > buildNB
virtual void actionEnter() override
Interface methods for actions corresponding to state transitions.
Level specific message streamers.
long long int number_of_packets_received
bool putObject(TDirectory &dir, const TObject &object)
Write object to ROOT directory.
static const long long int MEGABYTE
Number of bytes in a kilo-byte.
const JPosition3D & getPosition() const
Get position.
Simple data structure for the DAQ preamble required for a correct calculation of the object size for ...
virtual void actionQuit(int length, const char *buffer) override
$WORKDIR driver txt done cat $WORKDIR driver txt<< EOFprocess ${DATAFILTER}$FILTER_HOST csh-c '(setenv ROOTSYS $ROOTSYS &&source $JPP_DIR/setenv.csh $JPP_DIR &&(JDataFilter-H\$SERVER\$-M\$LOGGER\$-d $DEBUG-u ${DATAFILTER}-P $PORT</dev/null > &/dev/null &))';process ${DATAWRITER}$WRITER_HOST csh-c '(setenv ROOTSYS $ROOTSYS &&source $JPP_DIR/setenv.csh $JPP_DIR &&(JDataWriter-H\$SERVER\$-M\$LOGGER\$-d $DEBUG-u ${DATAWRITER}</dev/null > &/dev/null &))';print enterevent ev_init{RC_CMD}event ev_reset{RC_CMD}event ev_init{RC_CMD}event ev_configure{RC_DFLTR%<$WORKDIR/ev_configure_datafilter.txt > RC_DOM<$WORKDIR/ev_configure_domsimulator.txt > RC_DWRT path
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
virtual void actionStart(int length, const char *buffer) override
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 actionReset(int length, const char *buffer) override
virtual void actionExit() override
JSinglePointer< JTimesliceRouter > timesliceRouter
static const long long int GIGABYTE
Number of bytes in a mega-byte.
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.
virtual void actionSelect(const JFileDescriptorMask &mask) override
Action method following last select call.
void applyHighRateVeto(const double rate_Hz)
Apply high-rate veto.
std::vector< std::string > getListOfIPaddresses()
Get list of IP address (decimal-dot notation).
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.
virtual void actionTagged(const JTag &tag, int length, const char *buffer) override
Tagged action to handle alerts.
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 actionStop(int length, const char *buffer) override
do set_variable DETECTOR_TXT $WORKDIR detector
KM3NeT DAQ constants, bit handling, etc.
virtual void actionInit(int length, const char *buffer) override
then fatal Wrong number of arguments fi set_variable DETECTOR $argv[1] set_variable INPUT_FILE $argv[2] eval JPrintDetector a $DETECTOR O IDENTIFIER eval JPrintDetector a $DETECTOR O SUMMARY JAcoustics sh $DETECTOR_ID source JAcousticsToolkit sh CHECK_EXIT_CODE typeset A EMITTERS get_tripods $WORKDIR tripod txt EMITTERS get_transmitters $WORKDIR transmitter txt EMITTERS for EMITTER in
Match of two events considering overlap in time.
size_t getSizeof(const JDAQEvent &object)
Get size of object.
virtual void actionPause(int length, const char *buffer) override
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
long long int numberOfEvents
unsigned int frames_per_slice
Timeslice data structure for L0 data.
Basic data structure for L1 hit.
virtual void setSelect(JFileDescriptorMask &mask) const override
Set the file descriptor mask for the select call.
virtual void actionConfigure(int length, const char *buffer) override
Time slice with calibrated data.