127 return number_of_frames;
130 const size_t n = (size_t) (number_of_frames * factor);
132 return (n == 0 ? 1 : n);
231 static const int MAXIMUM_FILE_NUMBER = 100;
262 gErrorIgnoreLevel = kFatal;
264 std::ostringstream os;
269 std::remove(os.str().c_str());
272 this->
open(os.str().c_str());
290 if (this->is_open()) {
292 const string file_name = this->
getFile()->GetName();
298 for (
int i = 0;
i != MAXIMUM_FILE_NUMBER; ++
i) {
304 <<
"_" << cal.getYear() <<
'-' <<
FILL(2,
'0') << cal.getMonth() <<
'-' <<
FILL(2,
'0') << cal.getDay()
324 std::remove(file_name.c_str());
349 return (sizeL0 > 0 ||
365 if (
object.is_open())
366 out <<
object.getFile()->GetName();
372 out <<
object.sizeL0 <<
'/'
373 <<
object.sizeL1 <<
'/'
374 <<
object.sizeL2 <<
'/'
375 <<
object.sizeSN <<
'/';
437 current_slice_index = -1;
438 dataqueue_slice_index.clear();
451 if (c_buffer.is_open()) {
453 JStatusStream(logger) <<
"Close and remove circular buffer " << c_buffer;
455 c_buffer.close(
false);
462 virtual void actionInit(
int length,
const char* buffer)
override
470 if (serversocket.is_valid()) {
471 serversocket->shutdown();
476 catch(
const std::exception& error) {
477 JErrorStream(logger) <<
"Error \"" << error.what() <<
"\"; trigger ev_error.";
489 string _hostname_ =
"";
500 dumpLimit = numeric_limits<int>::max();
513 properties[
"dataWriter"] = _hostname_;
514 properties[
"numberOfFramesPerSlice"] = frames_per_slice = 1;
515 properties[
"factorOfFramesPerSlice"] = factor_per_slice = 1.0;
518 properties[
"queueSize"] = maxQueueSize = (totalCPURAM -
GIGABYTE);
519 properties[
"queueDepth"] = maxQueueDepth = 20;
520 properties[
"frameIndex"] = maximal_frame_index = 100000;
523 properties[
"JDataFilter"] = dataFilters;
524 properties[
"DataQueue"] = dataQueues;
525 properties[
"path"] = c_buffer.path;
526 properties[
"archive"] = c_buffer.archive;
527 properties[
"c_sizeL0"] = c_buffer.sizeL0;
528 properties[
"c_sizeL1"] = c_buffer.sizeL1;
529 properties[
"c_sizeL2"] = c_buffer.sizeL2;
530 properties[
"c_sizeSN"] = c_buffer.sizeSN;
531 properties[
"dumpLimit"] = dumpLimit;
532 properties[
"dumpMask"] = dumpMask;
535 properties.
read(
string(buffer, length));
537 catch(
const std::exception& error) {
544 setClockInterval(
update_s * 1000000LL);
546 _hostname_ =
trim(_hostname_);
548 if (_hostname_ !=
"" && _hostname_ != hostname) {
552 hostname = _hostname_;
555 bool status = datawriter.is_valid();
560 status = datawriter->Connected() == 0;
562 catch (
const exception&) {
578 if (dataFilters.empty()) {
579 JNoticeStream(logger) <<
"No DataFilters in process list, or no process list. "
580 <<
"Assuming that this process is the only process on this CPU and setting parameters accordingly.";
583 sort(dataFilters.begin(), dataFilters.end(), compare);
585 unsigned int numberOfDataFiltersOnThisMachine = 0;
593 notice <<
"My IP addresses:";
602 JDebugStream(logger) <<
"Test IP address \"" <<
i->hostname <<
"\" " << (find(IP.begin(), IP.end(),
i->hostname) != IP.end());
604 if (find(IP.begin(), IP.end(),
i->hostname) != IP.end()) {
606 numberOfDataFiltersOnThisMachine++;
608 if (
i->port ==
this->port) {
614 if (numberOfDataFiltersOnThisMachine == 0) {
615 JNoticeStream(logger) <<
"Zero data filters on this machine according to process list (if it exists). "
616 <<
"Assuming one datafilter on this machine.";
617 numberOfDataFiltersOnThisMachine = 1;
620 if (thisProcess == dataFilters.end()) {
621 JErrorStream(logger) <<
"This process cannot be found in the process list. Why do I exist?";
624 if (thisProcess != dataFilters.end() && thisProcess->index !=
getName()) {
625 JErrorStream(logger) <<
"Mismatch between given process names: "
627 <<
", but in the process list I am referred to as " << thisProcess->index;
630 if (dataFilters.begin() == thisProcess || dataFilters.empty()) {
634 if (maxQueueSize > (totalCPURAM-
GIGABYTE)/(numberOfDataFiltersOnThisMachine)) {
636 maxQueueSize = (totalCPURAM-
GIGABYTE)/(numberOfDataFiltersOnThisMachine);
638 JNoticeStream(logger) <<
"Maximum queue size is too large given the number of processes on this machine. "
639 <<
"Queue size reduced to "
640 << maxQueueSize <<
" bytes." ;
647 JNoticeStream(logger) <<
"Disabling high-rate veto of all PMTs.";
664 JNoticeStream(logger) <<
"This data filter process will report.";
668 JNoticeStream(logger) <<
"Update period [s]: " << getClockInterval();
680 if (buildL1.get() == NULL) {
JErrorStream(logger) <<
"Failed to allocate buildL1."; }
681 if (buildL2.get() == NULL) {
JErrorStream(logger) <<
"Failed to allocate buildL2."; }
682 if (buildSN.get() == NULL) {
JErrorStream(logger) <<
"Failed to allocate buildSN."; }
683 if (buildNB.get() == NULL) {
JErrorStream(logger) <<
"Failed to allocate buildSN."; }
691 if (c_buffer.is_enabled()) {
693 if (!c_buffer.is_open()) {
697 if (c_buffer.is_open()) {
701 JStatusStream(logger) <<
"Created circular buffer " << c_buffer;
705 JErrorStream (logger) <<
"Failed to create circular buffer in directory <" << c_buffer.path <<
">; disable functionality.";
710 JNoticeStream(logger) <<
"Continue using circular buffer " << c_buffer;
714 if (c_buffer.is_open()) {
735 current_slice_index = -1;
736 dataqueue_slice_index.clear();
741 numberOfTimeslicesProcessed = 0;
742 numberOfIncompleteTimeslicesProcessed = 0;
744 number_of_packets_received = 0;
745 number_of_packets_discarded = 0;
746 number_of_bytes_received = 0;
749 minFrameNumber = numeric_limits<int>::max();
750 maxFrameNumber = numeric_limits<int>::min();
756 logErrorRun .reset();
757 logErrorDetector .reset();
758 logErrorIndex .reset();
759 logErrorIncomplete .reset();
760 logErrorOvercomplete.reset();
782 if (!timeslices.empty()) {
784 JNoticeStream(logger) <<
"Flushing " << timeslices.size() <<
" slices.";
786 for (deque<JDAQTimesliceL0>::const_iterator
i = timeslices.begin();
i != timeslices.end(); ++
i) {
795 deque<JDAQTimesliceL0> buffer;
797 timeslices.swap(buffer);
804 current_slice_index = -1;
805 dataqueue_slice_index.clear();
818 virtual void actionStop(
int length,
const char* buffer)
override
826 if (serversocket.is_valid()) {
827 serversocket->shutdown();
830 serversocket.reset();
834 virtual void actionQuit(
int length,
const char* buffer)
override
842 if (serversocket.is_valid()) {
843 mask.
set(*serversocket);
846 for (JChannelList_t::const_iterator channel = channelList.begin(); channel != channelList.end(); ++channel) {
847 if (!channel->isReady()) {
848 mask.
set(channel->getFileDescriptor());
858 for (JChannelList_t::iterator channel = channelList.begin(); channel != channelList.end(); ) {
862 if (mask.
has(channel->getFileDescriptor())) {
866 if (channel->isReady()) {
868 number_of_packets_received += 1;
869 number_of_reads += channel->getCounter();
870 number_of_bytes_received += channel->size();
875 updateFrameQueue(*channel);
877 catch(
const std::exception& error) {
879 JErrorStream(logErrorRun) <<
"Update frame queue " << channel->getFileDescriptor() <<
' ' << channel->size() <<
' ' << error.what();
881 number_of_packets_discarded += 1;
886 JErrorStream(logErrorRun) <<
"Receiving data while not running.";
888 number_of_packets_discarded += 1;
896 catch(
const std::exception& error) {
899 JErrorStream(logger) <<
"Disconnect channel " << channel->getFileDescriptor() <<
' ' << error.what();
904 channel = channelList.erase(channel);
909 if (serversocket.is_valid()) {
911 if (mask.
has(*serversocket)) {
913 JTCPSocket socket(serversocket->getFileDescriptor());
917 socket.setKeepAlive (
true);
918 socket.setNonBlocking(
false);
920 JStatusStream(logger) <<
"New channel" <<
'[' << socket.getFileDescriptor() <<
']';
927 if (!timeslices.empty()) {
929 const size_t number_of_frames =
getNumberOfFrames(frames_per_slice, factor_per_slice);
930 const size_t maximum_in_queue =
getMaximum(
make_array(next(timeslices.begin()), timeslices.end(), &JDAQTimesliceL0::size));
932 if (((timeslices[0].size() >= number_of_frames &&
933 timeslices[0].
getFrameIndex() < dataqueue_slice_index.min()) ||
935 (maximum_in_queue >= number_of_frames &&
936 timeslices[0].
getFrameIndex() < dataqueue_slice_index.min()) ||
938 (timeslices.size() >= maxQueueDepth) ||
946 minFrameNumber = min(minFrameNumber, pending_slice.
getFrameIndex());
947 maxFrameNumber = max(maxFrameNumber, pending_slice.
getFrameIndex());
949 for (JDAQTimesliceL0::const_iterator
i = pending_slice.begin();
i != pending_slice.end(); ++
i) {
950 modules.insert(
i->getModuleID());
958 if (!pending_slice.empty()) {
959 processTimeSlice(pending_slice);
964 numberOfTimeslicesProcessed += 1;
970 JErrorStream(logErrorRun) <<
"Skip processing of data while not running.";
974 if (modules.size() > frames_per_slice) {
976 JErrorStream(logErrorOvercomplete) <<
"More active modules than expected "
977 << modules.size() <<
" > " << frames_per_slice
978 <<
" adjusting frames per slice to " << modules.size();
980 frames_per_slice = modules.size();
984 if (pending_slice.size() < number_of_frames) {
986 numberOfIncompleteTimeslicesProcessed += 1;
990 error <<
"Timeout -> processed incomplete timeslice: "
992 <<
"Size of timeslice = " << pending_slice.size() <<
';'
993 <<
"Queue depth = " << timeslices.size() <<
';'
995 <<
"DataQueue min = " << dataqueue_slice_index.min() <<
';'
996 <<
"DataQueue max = " << dataqueue_slice_index.max() <<
';';
998 if (maximum_in_queue >= number_of_frames) {
1000 error <<
" intermittent problem -> continues as-is";
1006 for (JDAQTimesliceL0::const_iterator
i = pending_slice.begin();
i != pending_slice.end(); ++
i) {
1007 modules.insert(
i->getModuleID());
1010 error <<
" adjusting frames per timeslice from " << frames_per_slice <<
" to " << modules.size();
1012 frames_per_slice = modules.size();
1019 timeslices.pop_front();
1042 using namespace std;
1052 if (preamble.getLength() != channel.
size()) {
1054 JErrorStream(logErrorRun) <<
"Size of received data does not match size reported by preamble: "
1055 <<
"preamble.getLength() = " << preamble.getLength() <<
';'
1056 <<
"channel.size(): " << channel.
size() <<
';';
1058 number_of_packets_discarded += 1;
1065 JErrorStream(logErrorRun) <<
"Run number " << header.getRunNumber()
1067 <<
" -> Dropping frame.";
1069 number_of_packets_discarded += 1;
1074 if (header.getFrameIndex() <= current_slice_index) {
1076 number_of_packets_discarded += 1;
1078 if (modules.insert(header.getModuleID()).second) {
1080 frames_per_slice = modules.size();
1082 JErrorStream(logErrorIndex) <<
"Frame index " << header.getFrameIndex() <<
" <= " << current_slice_index
1083 <<
" module " << header.getModuleID()
1084 <<
" -> dropping frame;"
1085 <<
" increase number of frames expected to: " << frames_per_slice;
1091 if (current_slice_index != -1 && header.getFrameIndex() > current_slice_index + maximal_frame_index) {
1093 number_of_packets_discarded += 1;
1095 JErrorStream(logErrorIndex) <<
"Frame index " << header.getFrameIndex() <<
" > " << current_slice_index + maximal_frame_index
1096 <<
" module " << header.getModuleID()
1097 <<
" -> Dropping frame.";
1102 deque<JDAQTimesliceL0>::iterator timesliceIterator = timeslices.begin();
1104 while (timesliceIterator != timeslices.end() && timesliceIterator->getFrameIndex() < header.getFrameIndex()) {
1105 ++timesliceIterator;
1108 if (timesliceIterator != timeslices.end() && timesliceIterator->getFrameIndex() == header.getFrameIndex()) {
1116 timesliceIterator = timeslices.insert(timesliceIterator,
JDAQTimesliceL0());
1118 timesliceIterator->setDAQChronometer(header.getDAQChronometer());
1125 in >>
static_cast<JDAQFrame&
>(*(timesliceIterator->rbegin()));
1140 using namespace std;
1144 timesliceRouter->configure(timeslice);
1158 c_buffer.is_enabled()) {
1167 for (JDAQTimesliceL0::const_iterator frame = timeslice.begin(); frame != timeslice.end(); ++frame) {
1169 if (moduleRouter->hasModule(frame->getModuleID())) {
1178 <<
"module = " << frame->getModuleID() <<
";"
1179 <<
"discard" << (dumpCount < dumpLimit ?
" and dump" :
"");
1181 if (dumpCount < dumpLimit && result.
has(dumpMask)) {
1182 timesliceTX.push_back(*frame);
1188 const JModule& module = moduleRouter->getModule(frame->getModuleID());
1189 JSuperFrame2D_t& buffer = JSuperFrame2D_t::demultiplex(*frame, module);
1205 if (buffer.begin() != __end) {
1208 frame->getModuleIdentifier(),
1213 (*buildL1)(buffer.begin(), __end , back_inserter(zbuf));
1215 (*buildNB)(buffer.begin() , __end, zbuf, back_inserter(*timesliceNB.rbegin()));
1222 frame->getModuleIdentifier(),
1225 (*buildL1)(*timesliceL0.rbegin(), back_inserter(*timesliceL1.rbegin()));
1230 frame->getModuleIdentifier(),
1233 (*buildL2)(buffer, *timesliceL1.rbegin(), back_inserter(*timesliceL2.rbegin()));
1238 frame->getModuleIdentifier(),
1241 (*buildSN)(buffer, *timesliceL1.rbegin(), back_inserter(*timesliceSN.rbegin()));
1245 JErrorStream(logErrorDetector) <<
"No detector information for module " << frame->getModuleID();
1249 if (!timesliceTX.empty()) {
1251 if (dumpCount < dumpLimit) {
1253 this->put(timesliceTX);
1265 for (JTriggerInput::const_iterator hit = trigger_input.begin(); hit != trigger_input.end(); ++hit) {
1286 (*trigger3DMuon) (trigger_input, back_inserter(trigger_output));
1287 (*trigger3DShower)(trigger_input, back_inserter(trigger_output));
1288 (*triggerMXShower)(trigger_input, timesliceL0, back_inserter(trigger_output));
1292 for (JTriggerOutput::const_iterator event = trigger_output.begin();
event != trigger_output.end(); ++event) {
1298 numberOfEvents += 1;
1301 if (
parameters.writeL1() || c_buffer.sizeL1 > 0) {
1305 if (
parameters.writeL1) { this->put(
object); }
1306 if (c_buffer.sizeL1 > 0) { c_buffer.put(
object); }
1309 if (
parameters.writeL2() || c_buffer.sizeL2 > 0) {
1313 if (
parameters.writeL2) { this->put(
object); }
1314 if (c_buffer.sizeL2 > 0) { c_buffer.put(
object); }
1317 if (
parameters.writeSN() || c_buffer.sizeSN > 0) {
1321 if (
parameters.writeSN) { this->put(
object); }
1322 if (c_buffer.sizeSN > 0) { c_buffer.put(
object); }
1325 if (
parameters.writeL0() || c_buffer.sizeL0 > 0) {
1327 if (
parameters.writeL0) { this->put(timeslice); }
1328 if (c_buffer.sizeL0 > 0) { c_buffer.put(timeslice); }
1332 }
catch(
const std::exception& error) {
1334 JErrorStream(logger) <<
"Error = " << error.what() <<
";"
1337 <<
"time slice not correctly processed;"
1338 <<
"discard" << (dumpCount < dumpLimit ?
" and dump" :
"");
1340 if (dumpCount < dumpLimit) {
1342 this->put(static_cast<const JDAQTimeslice&>(timeslice));
1348 timesliceRouter->reset();
1359 const double T_us = (double) timer.usec_wall;
1361 JStatusStream(logger) <<
"Elapsed real (wall) time [s] " << T_us / 1e6;
1362 JStatusStream(logger) <<
"Elapsed user CPU time [s] " << (double) timer.usec_ucpu/ 1e6;
1363 JStatusStream(logger) <<
"Elapsed system CPU time [s] " << (double) timer.usec_scpu/ 1e6;
1364 JStatusStream(logger) <<
"Elapsed real time per time slice [ms] " << Qt.getMean(0.0) * 1.0e-3 <<
" <= " << Qt.getXmax() * 1.0e-3;
1365 JStatusStream(logger) <<
"Number of packets received/discarded " << number_of_packets_received <<
"/" << number_of_packets_discarded;
1366 JStatusStream(logger) <<
"Number of events/MB/us " << numberOfEvents <<
"/" << numberOfBytes/1e6 <<
"/" << Qx.getMean(0.0);
1368 if (number_of_packets_received > 0) {
1369 JStatusStream(logger) <<
"Number of reads/packet " << (double) number_of_reads / (
double) number_of_packets_received;
1373 JStatusStream(logger) <<
"Current number of frames per slice expected: " << frames_per_slice <<
' ' <<
FIXED(5,3) << factor_per_slice;
1375 JStatusStream(logger) <<
"Number of timeslices processed total/incomplete " << numberOfTimeslicesProcessed <<
"/" << numberOfIncompleteTimeslicesProcessed;
1377 const double processedSlicesTime_us = numberOfTimeslicesProcessed *
getFrameTime() / 1000;
1378 const double processedDetectorTime_us = (maxFrameNumber - minFrameNumber) *
getFrameTime() / 1000;
1380 if (processedSlicesTime_us > 0) {
1381 JStatusStream(logger) <<
"Performance factor (inaccurate estimate): " << T_us / processedSlicesTime_us;
1383 if (processedDetectorTime_us > 0) {
1384 JStatusStream(logger) <<
"Performance factor whole detector (inaccurate estimate): " << T_us / processedDetectorTime_us;
1400 using namespace std;
1406 if (c_buffer.is_open()) {
1408 JStatusStream(logger) <<
"Archive circular buffer in <" << c_buffer.archive <<
">";
1410 c_buffer.close(
true);
1413 if (c_buffer.is_enabled()) {
1417 if (c_buffer.is_open()) {
1419 JStatusStream(logger) <<
"Created circular buffer " << c_buffer;
1425 JErrorStream (logger) <<
"Failed to create circular buffer in directory <" << c_buffer.path <<
">; disable functionality.";
1457 datawriter->put(
object);
1465 catch(
const std::exception& error) {
1466 JErrorStream(logger) <<
"Error \"" << error.what() <<
"\"; trigger ev_error.";
1498 if (this->empty()) {
1504 int min = std::numeric_limits<int>::max();
1506 for (const_iterator
i = this->begin();
i != this->end(); ++
i) {
1507 if (
i->second < min) {
1523 if (this->empty()) {
1529 int max = std::numeric_limits<int>::lowest();
1531 for (const_iterator
i = this->begin();
i != this->end(); ++
i) {
1532 if (
i->second > max) {
1541 } dataqueue_slice_index;
1617 using namespace std;
1618 using namespace JPP;
1619 using namespace KM3NETDAQ;
1635 JParser<> zap(
"Application for real-time filtering of data.");
1637 zap[
'H'] =
make_field(server,
"host name of server for command messages") =
"localhost";
1638 zap[
'M'] =
make_field(logger,
"host name of server for logger messages") =
"localhost";
1639 zap[
'D'] =
make_field(hostname,
"host name of server of data writer") =
"";
1640 zap[
'u'] =
make_field(client_name,
"client name") =
"%";
1641 zap[
'P'] =
make_field(port,
"port to listen for incoming data from data queue");
1642 zap[
'q'] =
make_field(backlog,
"back log") = 1024;
1643 zap[
'c'] =
make_field(use_cout,
"print to terminal");
1644 zap[
'p'] =
make_field(
path,
"directory for temporary storage of circular buffer") =
"/tmp/";
1645 zap[
'A'] =
make_field(
archive,
"directory for permanent archival of circular buffer") =
"/tmp/";
1650 catch(
const std::exception& error) {
1651 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 ...
Exception for opening of file.
Message logger with time scheduler.
static bool compare(const JDAQProcess &first, const JDAQProcess &second)
Sort DAQ process by index.
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.
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[])
void close(const bool option)
Close file.
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...
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
void updateFrameQueue(const JSocketInputChannel_t &channel)
Update queue with data frames.
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
static const int DFILTER_SEND_BUFFER_SIZE
socket JDataFilter.cc -> JDataWriter.cc
Router for direct addressing of module data in detector data structure.
#define THROW(JException_t, A)
Marco for throwing exception with std::ostream compatible message.
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);.
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
Auxiliary data structure for floating point format specification.
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.
int rename(const std::string &inputFile, const std::string &outputFile)
Rename file across file systems.
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
JCircularBuffer_t(const std::string &path, const std::string &archive, const JTag &tag)
Constructor.
std::string path
Directory for temporary storage.
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 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
then fatal Invalid path $argv[1] fi setopt extendedglob typeset Z8 ID function archive()
static const int DFILTER_RECEIVE_BUFFER_SIZE
socket JDataFilter.cc <- JLigier.cc
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.
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()
TFile * getFile(const std::string &file_name, const std::string &option="exist")
Get TFile pointer corresponding to give file name.
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.
bool has(const JStatus &mask) const
Check for errors with given error mask.
event< ev_daq > ev_configure
int getFrameIndex(const double t_ns)
Get frame index for a given time in ns.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
void close(std::istream *pf)
Close file.
static const int DFILTER_DQUEUE_BUFFER_SIZE
socket JDataFilter.cc <- DataQueue.cc
double getFrameTime()
Get frame time duration.
const array_type< JValue_t > & make_array(const JValue_t(&array)[N])
Method to create array of values.
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
Auxiliary class for handling status.
Auxiliary class for method select.
void put(const T &object)
Auxiliary method to send object to data server.
JSinglePointer< JBuildL2_t > buildSN
const JDAQChronometer & getDAQChronometer() const
Get DAQ chronometer.
long long int numberOfIncompleteTimeslicesProcessed
Auxiliary class to build JDAQEvent for a triggered event.
JTreeWriter object output.
size_t getMaximum(const array_type< size_t > &buffer)
Get maximum of values.
JSinglePointer< JBuildL2_t > buildNB
virtual void actionEnter() override
Interface methods for actions corresponding to state transitions.
JTag tag
Unique tag of this process.
Level specific message streamers.
long long int number_of_packets_received
$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_DQSIM<$WORKDIR/ev_configure_dqsimulator.txt > RC_DWRT path
bool putObject(TDirectory &dir, const TObject &object)
Write object to ROOT directory.
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
Long64_t sizeSN
Number of SN time slices.
Auxiliary methods to convert data members or return values of member methods of a set of objects to a...
size_t getNumberOfFrames(const size_t number_of_frames, const double factor)
Get expected number of frames according a given allowed fraction of active modules.
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
JControlHostObjectOutput< JDAQTypes_t > JControlHost_t
static JStat getFileStatus
Function object for file status.
std::vector< JDAQProcess > dataQueues
long long int maxQueueSize
virtual void actionStart(int length, const char *buffer) override
const char * data() const
Get data.
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
Auxiliary data structure for average.
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.
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
Auxiliary class for 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)
JMessageScheduler logErrorOvercomplete
double getMaximalDistance(const JDetector &detector, const bool option=false)
Get maximal distance between modules in detector.
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
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
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.
std::string getFullName(const std::string &hostname, const std::string &name)
Get full name of run control client.
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 std::string &path, const std::string &archive)
Constructor.
virtual void actionInit(int length, const char *buffer) override
Auxiliary data structure for result of checksum.
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
Auxiliary data structure for return type of make methods.
long long int numberOfEvents
Timeslice data structure for L0 data.
Basic data structure for L1 hit.
std::string archive
Directory for permanent archival.
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.
int size() const
Get size.