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.