Jpp  master_rocky-43-ge265d140c
the software that should make you happy
Classes | Public Types | Public Member Functions | Static Public Member Functions | Public Attributes | Static Public Attributes | Protected Types | Protected Attributes | Private Types | Private Member Functions | Private Attributes | Static Private Attributes | List of all members
KM3NETDAQ::JDataFilter Class Reference

Main class for real-time filtering of data. More...

Inheritance diagram for KM3NETDAQ::JDataFilter:
KM3NETDAQ::JDAQClient JDAQStateMachine KM3NETDAQ::JDAQClient_t JDAQCHSM

Classes

struct  JCircularBuffer_t
 Circular buffer. More...
 

Public Types

typedef JSocketInputChannel< JDAQAbstractPreambleJSocketInputChannel_t
 
typedef std::vector< JSocketInputChannel_tJChannelList_t
 
typedef double hit_type
 
typedef JSuperFrame1D< hit_typeJSuperFrame1D_t
 
typedef JSuperFrame2D< hit_typeJSuperFrame2D_t
 
typedef JTimeslice< hit_typeJTimeslice_t
 
typedef JBuildL1< hit_typeJBuildL1_t
 
typedef JBuildL2< hit_typeJBuildL2_t
 

Public Member Functions

 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. More...
 
virtual void actionEnter () override
 Interface methods for actions corresponding to state transitions. More...
 
virtual void actionExit () override
 
virtual void actionInit (int length, const char *buffer) override
 
virtual void actionConfigure (int length, const char *buffer) override
 
virtual void actionStart (int length, const char *buffer) override
 
virtual void actionPause (int length, const char *buffer) override
 
virtual void actionContinue (int length, const char *buffer) override
 
virtual void actionStop (int length, const char *buffer) override
 
virtual void actionReset (int length, const char *buffer) override
 
virtual void actionQuit (int length, const char *buffer) override
 
virtual void setSelect (JFileDescriptorMask &mask) const override
 Set the file descriptor mask for the select call. More...
 
virtual void actionSelect (const JFileDescriptorMask &mask) override
 Action method following last select call. More...
 
virtual void actionRunning () override
 This method is repeatedly called when this client machine is in state Running and the clock interval time is non-zero. More...
 
void updateFrameQueue (const JSocketInputChannel_t &channel)
 Update queue with data frames. More...
 
void processTimeSlice (const JDAQTimesliceL0 &timeslice)
 Process time slice. More...
 
void typeout ()
 Report status to message logger. More...
 
virtual void actionTagged (const JTag &tag, int length, const char *buffer) override
 Tagged action to handle alerts. More...
 
virtual bool enter (const JArgs &args)
 Enter the state machine. More...
 
virtual bool enter () override
 Enter the state machine. More...
 
virtual bool exit () override
 Exit the state machine. More...
 
bool isRunning () const
 Check if this client is in runnig state. More...
 
void replaceEvent (const JTag &oldTag, const JTag &newTag, JDAQEvent_t &event)
 Replace tag of given event in event table. More...
 
JDAQEvent_tfindEvent (const JTag &tag, const std::string &event_name)
 Find event in event table. More...
 
void addSubscription (const JSubscription &subscription)
 Add custom subscription. More...
 
template<class T >
void addParameter (const char option, T &parameter)
 Add parameter to parser used in method enter(). More...
 
template<class T >
void addParameter (const char option, T &parameter, const T &value)
 Add parameter to parser used in method enter(). More...
 
void setSelect ()
 Set the file descriptor mask for the select call. More...
 
virtual void actionInput (int length, const char *buffer) override
 This method is called at ev_input. More...
 
virtual bool filter (const JTag &tag, int length, const char *buffer)
 Filter message. More...
 
void run ()
 Run as run control client following command messages via JNET::JControlHost. More...
 
void run (const int port)
 Run for ever. More...
 
void run (std::istream &in)
 Run client with commands from input stream (e.g. for debugging). More...
 
void A1 (CHSM_ns_alias::event const &)
 
void A2 (CHSM_ns_alias::event const &)
 
void A3 (CHSM_ns_alias::event const &)
 
void A4 (CHSM_ns_alias::event const &)
 
void A5 (CHSM_ns_alias::event const &)
 
void A6 (CHSM_ns_alias::event const &)
 
void A7 (CHSM_ns_alias::event const &)
 
void A8 (CHSM_ns_alias::event const &)
 
void A9 (CHSM_ns_alias::event const &)
 
void A10 (CHSM_ns_alias::event const &)
 
void A11 (CHSM_ns_alias::event const &)
 
void A12 (CHSM_ns_alias::event const &)
 
void A13 (CHSM_ns_alias::event const &)
 
void A14 (CHSM_ns_alias::event const &)
 
void EAM4root (CHSM_ns_alias::state const &, CHSM_ns_alias::event const &)
 
void XAM4root (CHSM_ns_alias::state const &, CHSM_ns_alias::event const &)
 
const std::string & getName () const
 Get name of state machine. More...
 
int getDetectorID () const
 Get detector identifier. More...
 
int getRunNumber () const
 Get run number. More...
 
virtual void actionError ()
 
virtual void actionRecover (int, const char *)
 
const std::string & getHostname () const
 Get hostname. More...
 
const std::string & getFullName () const
 Get full name of this run control client. More...
 
const JTaggetUniqueTag () const
 Get unique tag of this run control client. More...
 
long long int getClockDelay () const
 Get total delay time. More...
 
long long int getClockInterval () const
 Get interval time. More...
 
void setClockInterval (const long long int interval_us)
 Set interval time. More...
 
void resetClock ()
 Reset clock. More...
 
const std::string & getEventInfo () const
 Get last event information. More...
 
void setEventInfo (const std::string &info)
 Set last event information. More...
 

Static Public Member Functions

static bool compare (const JDAQProcess &first, const JDAQProcess &second)
 Sort DAQ process by index. More...
 

Public Attributes

JMeta meta
 meta data More...
 
JDAQStateMachine::state_root root
 
JDAQStateMachine::state_Main Main
 
JDAQStateMachine::ev_daq_event ev_daq
 
char ev_daq_param_block [sizeof(ev_daq_event::param_block)]
 
JDAQStateMachine::ev_init_event ev_init
 
char ev_init_param_block [sizeof(ev_init_event::param_block)]
 
JDAQStateMachine::ev_configure_event ev_configure
 
char ev_configure_param_block [sizeof(ev_configure_event::param_block)]
 
JDAQStateMachine::ev_start_event ev_start
 
char ev_start_param_block [sizeof(ev_start_event::param_block)]
 
JDAQStateMachine::ev_pause_event ev_pause
 
char ev_pause_param_block [sizeof(ev_pause_event::param_block)]
 
JDAQStateMachine::ev_continue_event ev_continue
 
char ev_continue_param_block [sizeof(ev_continue_event::param_block)]
 
JDAQStateMachine::ev_stop_event ev_stop
 
char ev_stop_param_block [sizeof(ev_stop_event::param_block)]
 
JDAQStateMachine::ev_reset_event ev_reset
 
char ev_reset_param_block [sizeof(ev_reset_event::param_block)]
 
JDAQStateMachine::ev_quit_event ev_quit
 
char ev_quit_param_block [sizeof(ev_quit_event::param_block)]
 
JDAQStateMachine::ev_off_event ev_off
 
char ev_off_param_block [sizeof(ev_off_event::param_block)]
 
JDAQStateMachine::ev_check_event ev_check
 
char ev_check_param_block [sizeof(ev_check_event::param_block)]
 
JDAQStateMachine::ev_input_event ev_input
 
char ev_input_param_block [sizeof(ev_input_event::param_block)]
 
JDAQStateMachine::ev_recover_event ev_recover
 
char ev_recover_param_block [sizeof(ev_recover_event::param_block)]
 
JDAQStateMachine::ev_error_event ev_error
 
char ev_error_param_block [sizeof(ev_error_event::param_block)]
 

Static Public Attributes

static const int TIMEOUT_S = 1
 time out of update [s] More...
 

Protected Types

typedef void(JDAQCHSM::* action) (int, const char *)
 Type definition of action method. More...
 

Protected Attributes

JSharedPointer< JControlHostserver
 message server More...
 
JMessageLogger logger
 message logger More...
 
std::string name
 
int detector_id
 
int run_number
 
JEventTable eventTable
 event table More...
 
std::string fullname
 
JTag unique_tag
 
JTimekeeper clock
 central clock More...
 
std::string event_info
 event information More...
 

Private Types

typedef JControlHostObjectOutput< JDAQTypes_tJControlHost_t
 

Private Member Functions

template<class T >
void put (const T &object)
 Auxiliary method to send object to data server. More...
 
void update ()
 Update state machine. More...
 
void update (const JTag &tag, int length, const char *buffer)
 Update state machine. More...
 
void configure ()
 Configure client. More...
 
std::string getMessage (const CHSM::state &state, const CHSM::event &event) const
 Get event message. More...
 
virtual void enterState (const CHSM::state &state, const CHSM::event &event) override
 Action when entering state. More...
 
virtual void actionCheck (int length, const char *buffer) override
 This method is called at ev_check and reports a system check by mimicing an enter state action. More...
 
void execute (action __action, const CHSM::event &__event) override
 The method to execute the action. More...
 
const CHSM::state * getState () const
 Get current state. More...
 

Private Attributes

JSinglePointer< JControlHost_tdatawriter
 controlhost of data server (to which data writer should be connected) More...
 
std::string hostname
 host name of data server More...
 
int port
 server socket port More...
 
int backlog
 
JSinglePointer< JServerSocketserversocket
 server for data queue connections More...
 
JChannelList_t channelList
 connections to data queue More...
 
JTimer timer
 
JQuantile Qt
 
JQuantile Qx
 
std::deque< JDAQTimesliceL0timeslices
 buffer with pending time slice data More...
 
int current_slice_index
 
size_t frames_per_slice
 
double factor_per_slice
 
int maximal_frame_index
 
std::set< int > modules
 
 dataqueue_slice_index
 
JTriggerParameters parameters
 
JSinglePointer< JTimesliceRoutertimesliceRouter
 
JDetector detector
 
JSinglePointer< JModuleRoutermoduleRouter
 
JSinglePointer< JBuildL1_tbuildL1
 
JSinglePointer< JBuildL2_tbuildL2
 
JSinglePointer< JBuildL2_tbuildSN
 
JSinglePointer< JBuildL2_tbuildNB
 
JSinglePointer< JTriggerNBtriggerNB
 
JSinglePointer< JTrigger3DMuontrigger3DMuon
 
JSinglePointer< JTrigger3DShowertrigger3DShower
 
JSinglePointer< JTriggerMXShowertriggerMXShower
 
JMessageScheduler logErrorRun
 
JMessageScheduler logErrorDetector
 
JMessageScheduler logErrorIndex
 
JMessageScheduler logErrorIncomplete
 
JMessageScheduler logErrorOvercomplete
 
int dumpCount
 
int dumpLimit
 
JStatus dumpMask
 
std::vector< JDAQProcessdataFilters
 
std::vector< JDAQProcessdataQueues
 
long long int totalCPURAM
 
size_t maxQueueDepth
 
long long int maxQueueSize
 
long long int queueSize
 
bool reporting
 
long long int numberOfEvents
 
long long int numberOfBytes
 
long long int numberOfTimeslicesProcessed
 
long long int numberOfIncompleteTimeslicesProcessed
 
int minFrameNumber
 
int maxFrameNumber
 
long long int number_of_packets_received
 
long long int number_of_packets_discarded
 
long long int number_of_reads
 
long long int number_of_bytes_received
 
JCircularBuffer_t c_buffer
 
JSelectReader select
 select call More...
 
JParser parser
 parser method enter() More...
 
JSubscriptionList subscription
 custom subscription More...
 
CHSM_ns_alias::state * state_ [11]
 
CHSM_ns_alias::event const * taken_ [14]
 
CHSM_ns_alias::state * target_ [14]
 

Static Private Attributes

static int const ev_daq_transitions []
 
static int const ev_init_transitions []
 
static int const ev_configure_transitions []
 
static int const ev_start_transitions []
 
static int const ev_pause_transitions []
 
static int const ev_continue_transitions []
 
static int const ev_stop_transitions []
 
static int const ev_reset_transitions []
 
static int const ev_quit_transitions []
 
static int const ev_off_transitions []
 
static int const ev_check_transitions []
 
static int const ev_input_transitions []
 
static int const ev_recover_transitions []
 
static int const ev_error_transitions []
 
static CHSM_ns_alias::transition const transition_ []
 

Detailed Description

Main class for real-time filtering of data.

This class implements the action methods for each transition of the state machine.
When the state machine is entered, data are continually collected using custom implementation of virtual methods setSelect and actionSelect.

In state Running, all incoming data from the DataQueue.cc are buffered, referred to as "queue".
These data are formatted as a JDAQSuperFrame and aggregated into a JDAQTimeslice.
When a JDAQTimeslice is complete, it processed in the same way as applications JTriggerProcessor.cc and JTriggerEfficiency.cc.

The completeness of a time slice is defined by two parameters, namely
frames_per_slice and factor_per_slice.
These are parsed in method actionConfigure as follows.

  numberOfFramesPerSlice = <frames per slice> = 1;
  factorOfFramesPerSlice = <factor per slice> = 1.0;

The expected number of frames in a time slices is defined by their product.
Note that the first parameter can change during operation (see below).

A timeout may occur when the total amount of data or the number of incomplete time slices in the queue exceeds one of the limits queueSize or queueDepth.
These are parsed in method actionConfigure as follows.

  queueSize  = <maximal queue size [B]>;
  queueDepth = <maximal queue depth>;

Note that these values apply per JDataFilter.
The parameter frames_per_slice is subject to a servo mechanism.
When a timeout occurs, it is set to the number of frames in the oldest time slice.
When data are received with a frame index below the current frame index, it is incremented by one.

In addition, a circular buffer based on a ROOT TTree for each JDAQTimeslice type can be maintained.
The following parameters can be used to configure the circular buffer.

  path     = <write directory for temporary circular buffer>;
  archive  = <write directory for archival of circular buffer>;
  c_sizeL0 = <L0 buffer size>;
  c_sizeL1 = <L1 buffer size>;
  c_sizeL2 = <L2 buffer size>;
  c_sizeSN = <SN buffer size>;

Note that when one (or more) of the buffer sizes is non-zero and the path corresponds to a valid directory:

In this, YYYY, MM and DD correspond to the year, month and day at the time of the alert, respectively.
The <tag> corresponds to the unique JNET::JTag of the JDataFilter process.
The <index> is optional and will only be used to prevent overwriting of an existing file (e.g. when there is more than one alert on a given day).

Note that the application JConvert.cc can be used to readily convert multiple input files to a single output file.

The script $JPP_DIR/tests/JDataFilter/JDataFilter.sh can be used to test this application.

Definition at line 184 of file JDataFilter.cc.

Member Typedef Documentation

◆ JSocketInputChannel_t

Definition at line 189 of file JDataFilter.cc.

◆ JChannelList_t

Definition at line 190 of file JDataFilter.cc.

◆ hit_type

Definition at line 192 of file JDataFilter.cc.

◆ JSuperFrame1D_t

Definition at line 193 of file JDataFilter.cc.

◆ JSuperFrame2D_t

Definition at line 194 of file JDataFilter.cc.

◆ JTimeslice_t

Definition at line 195 of file JDataFilter.cc.

◆ JBuildL1_t

Definition at line 196 of file JDataFilter.cc.

◆ JBuildL2_t

Definition at line 197 of file JDataFilter.cc.

◆ JControlHost_t

Definition at line 1424 of file JDataFilter.cc.

◆ action

typedef void(JDAQCHSM::* JDAQCHSM::action) (int, const char *)
protectedinherited

Type definition of action method.

Definition at line 152 of file JDAQCHSM.hh.

Constructor & Destructor Documentation

◆ JDataFilter()

KM3NETDAQ::JDataFilter::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 
)
inline

Constructor.

Parameters
namename of client
servername of command message server
hostnamename of data server
loggerpointer to logger
leveldebug level
portserver port
backlogserver backlog
pathdirectory for temporary storage
archivedirectory for parmanent archival

replace tag to receive dfilter specific messages in configure

Definition at line 397 of file JDataFilter.cc.

405  :
406  JDAQClient (name,server,logger,level),
407  hostname (hostname),
408  port (port),
409  backlog (backlog),
410  c_buffer (path, archive, getUniqueTag())
411  {
412  replaceEvent(RC_CMD, RC_DFILTER, ev_configure); /// replace tag to receive dfilter specific messages in configure
413 
415 
416  totalCPURAM = getRAM();
417  current_slice_index = -1;
418  dataqueue_slice_index.clear();
419  reporting = false;
420 
421  this->server->setReceiveBufferSize(DFILTER_RECEIVE_BUFFER_SIZE);
422  }
std::string name
Definition: JDAQCHSM.hh:165
JDAQStateMachine::ev_configure_event ev_configure
JSharedPointer< JControlHost > server
message server
Definition: JDAQClient.hh:834
void replaceEvent(const JTag &oldTag, const JTag &newTag, JDAQEvent_t &event)
Replace tag of given event in event table.
Definition: JDAQClient.hh:521
JMessageLogger logger
message logger
Definition: JDAQClient.hh:835
JDAQClient(const std::string &name, const std::string &server, JLogger *logger, const int level)
Constructor.
Definition: JDAQClient.hh:319
void addSubscription(const JSubscription &subscription)
Add custom subscription.
Definition: JDAQClient.hh:552
JCircularBuffer_t c_buffer
int port
server socket port
long long int totalCPURAM
std::string hostname
host name of data server
unsigned long long int getRAM()
Get RAM of this CPU.
static const JNET::JTag RC_DFILTER
Definition: JDAQTags.hh:73
static const JNET::JTag RC_ALERT
Definition: JDAQTags.hh:79
static const int DFILTER_RECEIVE_BUFFER_SIZE
socket JDataFilter.cc <- JLigier.cc
Definition: JDAQTags.hh:37
static const JNET::JTag RC_CMD
Definition: JDAQTags.hh:66
Auxiliary class for all subscription.
Definition: JControlHost.hh:99
const JTag & getUniqueTag() const
Get unique tag of this run control client.
Definition: JDAQClient.hh:131

Member Function Documentation

◆ compare()

static bool KM3NETDAQ::JDataFilter::compare ( const JDAQProcess first,
const JDAQProcess second 
)
inlinestatic

Sort DAQ process by index.

Parameters
firstfirst DAQ process
secondsecond DAQ process
Returns
true if index of first DAQ process less than that of second; else false

Definition at line 378 of file JDataFilter.cc.

379  {
380  return first.index < second.index;
381  }
std::string index
index in process list

◆ actionEnter()

virtual void KM3NETDAQ::JDataFilter::actionEnter ( )
inlineoverridevirtual

Interface methods for actions corresponding to state transitions.

Reimplemented from JDAQCHSM.

Definition at line 425 of file JDataFilter.cc.

426  {}

◆ actionExit()

virtual void KM3NETDAQ::JDataFilter::actionExit ( )
inlineoverridevirtual

Reimplemented from JDAQCHSM.

Definition at line 429 of file JDataFilter.cc.

430  {
431  if (c_buffer.is_open()) {
432 
433  JStatusStream(logger) << "Close and remove circular buffer " << c_buffer;
434 
435  c_buffer.close(false);
436  }
437 
438  datawriter.reset();
439  }
virtual bool is_open() const =0
Check is device is open.
JSinglePointer< JControlHost_t > datawriter
controlhost of data server (to which data writer should be connected)
void close(const bool option)
Close file.
Definition: JDataFilter.cc:263

◆ actionInit()

virtual void KM3NETDAQ::JDataFilter::actionInit ( int  length,
const char *  buffer 
)
inlineoverridevirtual

Reimplemented from JDAQCHSM.

Definition at line 442 of file JDataFilter.cc.

443  {
444  JDebugStream(logger) << "actionInit() " << std::string(buffer,length);
445 
446  try {
447 
448  JDebugStream(logger) << "Start server.";
449 
450  if (serversocket.is_valid()) {
451  serversocket->shutdown();
452  }
453 
455  }
456  catch(const std::exception& error) {
457  JErrorStream(logger) << "Error \"" << error.what() << "\"; trigger ev_error.";
458  ev_error();
459  }
460  }
JDAQStateMachine::ev_error_event ev_error
TCP server socket.
JSinglePointer< JServerSocket > serversocket
server for data queue connections
Level specific message streamers.

◆ actionConfigure()

virtual void KM3NETDAQ::JDataFilter::actionConfigure ( int  length,
const char *  buffer 
)
inlineoverridevirtual

Reimplemented from JDAQCHSM.

Definition at line 463 of file JDataFilter.cc.

464  {
465  using namespace std;
466 
467  JDebugStream(logger) << "actionConfigure() " << endl << std::string(buffer,length);
468 
469  string _hostname_ = "";
470 
471  long long int update_s = 20;
472  long long int logger_s = 10;
473 
474  parameters .reset();
475  dataFilters.clear();
476  dataQueues .clear();
477 
478  reporting = false;
479  dumpCount = 0;
480  dumpLimit = numeric_limits<int>::max();
481  dumpMask = 0;
485  //dumpMask.set(JChecksum::EUDP_t);
487 
488  detector.comment.clear();
489  detector.clear();
490 
491  JProperties properties(JEquationParameters("=", ";", "", ""), 0);
492 
493  properties["dataWriter"] = _hostname_;
494  properties["numberOfFramesPerSlice"] = frames_per_slice = 1;
495  properties["factorOfFramesPerSlice"] = factor_per_slice = 1.0;
496  properties["detector"] = detector;
497  properties["triggerParameters"] = parameters;
498  properties["queueSize"] = maxQueueSize = (totalCPURAM - GIGABYTE); // leave 1 GB left ...
499  properties["queueDepth"] = maxQueueDepth = 20; // to be optimized
500  properties["frameIndex"] = maximal_frame_index = 100000;
501  properties["logger_s"] = logger_s;
502  properties["update_s"] = update_s;
503  properties["JDataFilter"] = dataFilters;
504  properties["DataQueue"] = dataQueues;
505  properties["path"] = c_buffer.path;
506  properties["archive"] = c_buffer.archive;
507  properties["c_sizeL0"] = c_buffer.sizeL0;
508  properties["c_sizeL1"] = c_buffer.sizeL1;
509  properties["c_sizeL2"] = c_buffer.sizeL2;
510  properties["c_sizeSN"] = c_buffer.sizeSN;
511  properties["dumpLimit"] = dumpLimit;
512  properties["dumpMask"] = dumpMask;
513 
514  try {
515  properties.read(string(buffer, length));
516  }
517  catch(const std::exception& error) {
518  JErrorStream(logger) << error.what();
519  }
520 
521  if (update_s <= 0) { update_s = 20; }
522  if (logger_s <= 0) { logger_s = 10; }
523 
524  setClockInterval(update_s * 1000000LL);
525 
526  _hostname_ = trim(_hostname_);
527 
528  if (_hostname_ != "" && _hostname_ != hostname) {
529 
530  datawriter.reset();
531 
532  hostname = _hostname_;
533  }
534 
535  bool status = datawriter.is_valid();
536 
537  if (status) {
538 
539  try {
540  status = datawriter->Connected() == 0;
541  }
542  catch (const exception&) {
543  status = false;
544  }
545  }
546 
547  if (!status) {
548 
549  datawriter.reset(new JControlHost_t(hostname));
550 
551  datawriter->MyId(getFullName());
552  }
553 
554  datawriter->setSendBufferSize(DFILTER_SEND_BUFFER_SIZE);
555 
556  // process processlist
557 
558  if (dataFilters.empty()) {
559  JNoticeStream(logger) << "No DataFilters in process list, or no process list. "
560  << "Assuming that this process is the only process on this CPU and setting parameters accordingly.";
561  }
562 
563  sort(dataFilters.begin(), dataFilters.end(), compare);
564 
565  unsigned int numberOfDataFiltersOnThisMachine = 0;
566  vector<JDAQProcess>::iterator thisProcess = dataFilters.end();
567 
569 
570  for (vector<JDAQProcess>::iterator i = dataFilters.begin(); i != dataFilters.end(); ++i) {
571 
572  if (find(IP.begin(), IP.end(), i->hostname) != IP.end()) {
573 
574  numberOfDataFiltersOnThisMachine++;
575 
576  if (i->port == this->port) {
577  thisProcess = i;
578  }
579  }
580  }
581 
582  if (numberOfDataFiltersOnThisMachine == 0) {
583  JNoticeStream(logger) << "Zero data filters on this machine according to process list (if it exists). "
584  << "Assuming one datafilter on this machine.";
585  numberOfDataFiltersOnThisMachine = 1;
586  }
587 
588  if (thisProcess == dataFilters.end()) {
589 
590  JErrorStream error(logger);
591 
592  error << "This process cannot be found in the process list. Why do I exist?";
593  error << " my IP addresses:";
594 
595  for (vector<string>::const_iterator i = IP.begin(); i != IP.end(); ++i) {
596  error << ' ' << *i;
597  }
598 
599  error << " my port: " << this->port;
600  error << " process list";
601 
602  for (vector<JDAQProcess>::iterator i = dataFilters.begin(); i != dataFilters.end(); ++i) {
603  error << ' ' << i->hostname << ':' << i->port;
604  }
605  }
606 
607  if (thisProcess != dataFilters.end() && thisProcess->index != getName()) {
608  JErrorStream(logger) << "Mismatch between given process names: "
609  << "I am called " << getName()
610  << ", but in the process list I am referred to as " << thisProcess->index;
611  }
612 
613  if (dataFilters.begin() == thisProcess || dataFilters.empty()) { // set reporting
614  reporting = true;
615  }
616 
617  if (maxQueueSize > (totalCPURAM-GIGABYTE)/(numberOfDataFiltersOnThisMachine)) { // check maximum size of queue
618 
619  maxQueueSize = (totalCPURAM-GIGABYTE)/(numberOfDataFiltersOnThisMachine);
620 
621  JNoticeStream(logger) << "Maximum queue size is too large given the number of processes on this machine. "
622  << "Queue size reduced to "
623  << maxQueueSize << " bytes." ;
624  }
625 
626  // detector
627 
628  if (parameters.disableHighRateVeto) {
629 
630  JNoticeStream(logger) << "Disabling high-rate veto of all PMTs.";
631 
632  detector.setPMTStatus(HIGH_RATE_VETO_DISABLE);
633  }
634 
635  // trigger parameters
636 
638 
639  triggerNB .reset(new JTriggerNB (parameters));
643 
644  moduleRouter.reset(new JModuleRouter(detector));
645 
646  if (reporting) {
647  JNoticeStream(logger) << "This data filter process will report.";
648  JNoticeStream(logger) << "Detector version/size " << detector.getVersion() << '/' << detector.size();
649  JDebugStream (logger) << "Trigger parameters: " << parameters;
650  JDebugStream (logger) << "Detector description: " << endl << detector;
651  JNoticeStream(logger) << "Update period [s]: " << getClockInterval();
652  }
653 
654  timesliceRouter.reset(new JTimesliceRouter(parameters.numberOfBins));
655 
656  // set L1, L2 and SN builders
657 
658  buildL1.reset(new JBuildL1_t(parameters));
659  buildL2.reset(new JBuildL2_t(parameters.L2));
660  buildSN.reset(new JBuildL2_t(parameters.SN));
661  buildNB.reset(new JBuildL2_t(parameters.NB));
662 
663  if (buildL1.get() == NULL) { JErrorStream(logger) << "Failed to allocate buildL1."; }
664  if (buildL2.get() == NULL) { JErrorStream(logger) << "Failed to allocate buildL2."; }
665  if (buildSN.get() == NULL) { JErrorStream(logger) << "Failed to allocate buildSN."; }
666  if (buildNB.get() == NULL) { JErrorStream(logger) << "Failed to allocate buildSN."; }
667 
668  logErrorRun = JMessageScheduler(logger, JTimekeeper(logger_s * 1000000LL));
669  logErrorDetector = JMessageScheduler(logger, JTimekeeper(logger_s * 1000000LL));
670  logErrorIndex = JMessageScheduler(logger, JTimekeeper(logger_s * 1000000LL));
671  logErrorIncomplete = JMessageScheduler(logger, JTimekeeper(logger_s * 1000000LL));
672  logErrorOvercomplete = JMessageScheduler(logger, JTimekeeper(logger_s * 1000000LL));
673 
674  if (c_buffer.is_enabled()) {
675 
676  if (!c_buffer.is_open()) {
677 
678  c_buffer.open();
679 
680  if (c_buffer.is_open()) {
681 
683 
684  JStatusStream(logger) << "Created circular buffer " << c_buffer;
685 
686  } else {
687 
688  JErrorStream (logger) << "Failed to create circular buffer in directory <" << c_buffer.path << ">; disable functionality.";
689  }
690 
691  } else {
692 
693  JNoticeStream(logger) << "Continue using circular buffer " << c_buffer;
694  }
695  }
696 
697  if (c_buffer.is_open()) {
698  if (c_buffer.sizeL0 > 0) { static_cast<JTreeWriterObjectOutput<JDAQTimesliceL0>&>(c_buffer).SetCircular(c_buffer.sizeL0); }
699  if (c_buffer.sizeL1 > 0) { static_cast<JTreeWriterObjectOutput<JDAQTimesliceL1>&>(c_buffer).SetCircular(c_buffer.sizeL1); }
700  if (c_buffer.sizeL2 > 0) { static_cast<JTreeWriterObjectOutput<JDAQTimesliceL2>&>(c_buffer).SetCircular(c_buffer.sizeL2); }
701  if (c_buffer.sizeSN > 0) { static_cast<JTreeWriterObjectOutput<JDAQTimesliceSN>&>(c_buffer).SetCircular(c_buffer.sizeSN); }
702  } else {
703  c_buffer.disable();
704  }
705  }
const std::string & getName() const
Get name of state machine.
Definition: JDAQCHSM.hh:89
Router for direct addressing of module data in detector data structure.
Utility class to parse parameter values.
Definition: JProperties.hh:501
Time keeper.
Definition: JTimekeeper.hh:34
Simple data structure to support I/O of equations (see class JLANG::JEquation).
Message logger with time scheduler.
TFile * getFile() const
Get file.
Definition: JRootFile.hh:66
Nano-beacon trigger.
Definition: JTriggerNB.hh:21
JMessageScheduler logErrorRun
JMessageScheduler logErrorDetector
JMessageScheduler logErrorIndex
static bool compare(const JDAQProcess &first, const JDAQProcess &second)
Sort DAQ process by index.
Definition: JDataFilter.cc:378
long long int maxQueueSize
std::vector< JDAQProcess > dataQueues
JMessageScheduler logErrorOvercomplete
JSinglePointer< JBuildL2_t > buildNB
JSinglePointer< JBuildL2_t > buildL2
JSinglePointer< JBuildL1_t > buildL1
JBuildL1< hit_type > JBuildL1_t
Definition: JDataFilter.cc:196
JSinglePointer< JTrigger3DMuon > trigger3DMuon
JMessageScheduler logErrorIncomplete
JSinglePointer< JModuleRouter > moduleRouter
JSinglePointer< JTimesliceRouter > timesliceRouter
JControlHostObjectOutput< JDAQTypes_t > JControlHost_t
JSinglePointer< JTriggerNB > triggerNB
std::vector< JDAQProcess > dataFilters
JBuildL2< hit_type > JBuildL2_t
Definition: JDataFilter.cc:197
JSinglePointer< JTrigger3DShower > trigger3DShower
JSinglePointer< JTriggerMXShower > triggerMXShower
JSinglePointer< JBuildL2_t > buildSN
JTriggerParameters parameters
double getMaximalDistance(const JDetector &detector, const bool option=false)
Get maximal distance between modules in detector.
std::string trim(const std::string &buffer)
Trim string.
Definition: JLangToolkit.hh:79
static const long long int GIGABYTE
Number of bytes in a mega-byte.
bool putObject(TDirectory &dir, const TObject &object)
Write object to ROOT directory.
std::vector< std::string > getListOfIPaddresses()
Get list of IP address (decimal-dot notation).
Definition: JNetwork.hh:216
static const int DFILTER_SEND_BUFFER_SIZE
socket JDataFilter.cc -> JDataWriter.cc
Definition: JDAQTags.hh:38
Definition: JSTDTypes.hh:14
static const int HIGH_RATE_VETO_DISABLE
Enable (disable) use of high-rate veto test if this status bit is 0 (1);.
Definition: pmt_status.hh:13
Detector file.
Definition: JHead.hh:227
void set(const int bit)
Set PMT status.
Definition: JStatus.hh:131
@ ETDC_t
TDC value error.
Definition: JChecksum.hh:47
@ SIZE_t
size error
Definition: JChecksum.hh:50
@ EPMT_t
PMT number error.
Definition: JChecksum.hh:46
@ TIME_t
Time order error.
Definition: JChecksum.hh:48
Router for fast addressing of hits in KM3NETDAQ::JDAQTimeslice data structure as a function of the op...
void setClockInterval(const long long int interval_us)
Set interval time.
Definition: JDAQClient.hh:165
const std::string & getFullName() const
Get full name of this run control client.
Definition: JDAQClient.hh:120
long long int getClockInterval() const
Get interval time.
Definition: JDAQClient.hh:154
std::string archive
Directory for permanent archival.
Definition: JDataFilter.cc:366
std::string path
Directory for temporary storage.
Definition: JDataFilter.cc:365
Long64_t sizeL1
Number of L1 time slices.
Definition: JDataFilter.cc:361
Long64_t sizeSN
Number of SN time slices.
Definition: JDataFilter.cc:363
Long64_t sizeL0
Number of L0 time slices.
Definition: JDataFilter.cc:360
Long64_t sizeL2
Number of L2 time slices.
Definition: JDataFilter.cc:362
bool is_enabled() const
Check whether writing of data is enabled.
Definition: JDataFilter.cc:327

◆ actionStart()

virtual void KM3NETDAQ::JDataFilter::actionStart ( int  length,
const char *  buffer 
)
inlineoverridevirtual

Reimplemented from JDAQCHSM.

Definition at line 708 of file JDataFilter.cc.

709  {
710  using namespace std;
711 
712  if (reporting) {
713  JNoticeStream(logger) << "Start run " << getRunNumber();
714  }
715 
716  timeslices.clear();
717 
718  current_slice_index = -1;
719  dataqueue_slice_index.clear();
720  queueSize = 0;
721 
722  numberOfEvents = 0;
723  numberOfBytes = 0;
726 
730  number_of_reads = 0;
731 
732  minFrameNumber = numeric_limits<int>::max();
733  maxFrameNumber = numeric_limits<int>::min();
734 
735  // Reset global trigger counter.
736 
738 
739  logErrorRun .reset();
741  logErrorIndex .reset();
744 
745  timer.reset();
746  timer.start();
747 
748  Qt.reset();
749  Qx.reset();
750 
751  // send trigger parameters to the datawriter
752 
753  ostringstream os;
754 
755  os << getRunNumber() << ' ' << parameters;
756 
757  datawriter->PutFullString(IO_TRIGGER_PARAMETERS, os.str());
758  }
int getRunNumber() const
Get run number.
Definition: JDAQCHSM.hh:111
void reset()
Reset timer.
Definition: JTimer.hh:93
void start()
Start timer.
Definition: JTimer.hh:106
static void reset()
Reset counter of unique instance of this class object.
long long int number_of_packets_received
long long int numberOfBytes
long long int number_of_packets_discarded
long long int number_of_bytes_received
std::deque< JDAQTimesliceL0 > timeslices
buffer with pending time slice data
long long int queueSize
long long int number_of_reads
long long int numberOfTimeslicesProcessed
long long int numberOfIncompleteTimeslicesProcessed
long long int numberOfEvents
static const JNET::JTag IO_TRIGGER_PARAMETERS
Definition: JDAQTags.hh:90
void reset()
Reset.
Definition: JQuantile.hh:87

◆ actionPause()

virtual void KM3NETDAQ::JDataFilter::actionPause ( int  length,
const char *  buffer 
)
inlineoverridevirtual

Reimplemented from JDAQCHSM.

Definition at line 761 of file JDataFilter.cc.

762  {
763  using namespace std;
764 
765  if (!timeslices.empty()) {
766 
767  JNoticeStream(logger) << "Flushing " << timeslices.size() << " slices.";
768 
769  for (deque<JDAQTimesliceL0>::const_iterator i = timeslices.begin(); i != timeslices.end(); ++i) {
770  queueSize -= getSizeof(*i);
771  }
772 
773  timeslices.clear();
774  }
775 
776  { // force clearance of memory
777 
778  deque<JDAQTimesliceL0> buffer;
779 
780  timeslices.swap(buffer);
781  }
782 
783  if (queueSize != 0) {
784  JWarningStream(logger) << "Pending data in queue " << queueSize << " [B]";
785  }
786 
787  current_slice_index = -1;
788  dataqueue_slice_index.clear();
789  queueSize = 0;
790 
791  timer.stop();
792  }
void stop()
Stop timer.
Definition: JTimer.hh:127
size_t getSizeof(const JDAQEvent &object)
Get size of object.
Definition: JDAQEventIO.hh:26

◆ actionContinue()

virtual void KM3NETDAQ::JDataFilter::actionContinue ( int  length,
const char *  buffer 
)
inlineoverridevirtual

Reimplemented from JDAQCHSM.

Definition at line 795 of file JDataFilter.cc.

796  {
797  timer.start();
798  }

◆ actionStop()

virtual void KM3NETDAQ::JDataFilter::actionStop ( int  length,
const char *  buffer 
)
inlineoverridevirtual

Reimplemented from JDAQCHSM.

Definition at line 801 of file JDataFilter.cc.

802  {
803  typeout();
804  }
void typeout()
Report status to message logger.

◆ actionReset()

virtual void KM3NETDAQ::JDataFilter::actionReset ( int  length,
const char *  buffer 
)
inlineoverridevirtual

Reimplemented from JDAQCHSM.

Definition at line 807 of file JDataFilter.cc.

808  {
809  if (serversocket.is_valid()) {
810  serversocket->shutdown();
811  }
812 
813  serversocket.reset();
814  }

◆ actionQuit()

virtual void KM3NETDAQ::JDataFilter::actionQuit ( int  length,
const char *  buffer 
)
inlineoverridevirtual

Reimplemented from JDAQCHSM.

Definition at line 817 of file JDataFilter.cc.

818  {
819  datawriter.reset();
820  }

◆ setSelect() [1/2]

virtual void KM3NETDAQ::JDataFilter::setSelect ( JFileDescriptorMask mask) const
inlineoverridevirtual

Set the file descriptor mask for the select call.

This implementation does nothing but may be redefined by the derived class.

Parameters
maskfile descriptor mask

Reimplemented from KM3NETDAQ::JDAQClient.

Definition at line 823 of file JDataFilter.cc.

824  {
825  if (serversocket.is_valid()) {
826  mask.set(*serversocket);
827  }
828 
829  for (JChannelList_t::const_iterator channel = channelList.begin(); channel != channelList.end(); ++channel) {
830  if (!channel->isReady()) {
831  mask.set(channel->getFileDescriptor());
832  }
833  }
834  }
void set(const int file_descriptor)
Set file descriptor.
JChannelList_t channelList
connections to data queue

◆ actionSelect()

virtual void KM3NETDAQ::JDataFilter::actionSelect ( const JFileDescriptorMask mask)
inlineoverridevirtual

Action method following last select call.

This implementation does nothing but may be redefined by the derived class.

Parameters
maskfile descriptor mask

Reimplemented from KM3NETDAQ::JDAQClient.

Definition at line 837 of file JDataFilter.cc.

838  {
839  using namespace std;
840 
841  for (JChannelList_t::iterator channel = channelList.begin(); channel != channelList.end(); ) {
842 
843  try {
844 
845  if (mask.has(channel->getFileDescriptor())) {
846  channel->read();
847  }
848 
849  if (channel->isReady()) {
850 
852  number_of_reads += channel->getCounter();
853  number_of_bytes_received += channel->size();
854 
855  if (isRunning()) {
856 
857  try {
858  updateFrameQueue(*channel);
859  }
860  catch(const std::exception& error) {
861 
862  JErrorStream(logErrorRun) << "Update frame queue " << channel->getFileDescriptor() << ' ' << channel->size() << ' ' << error.what();
863 
865  }
866 
867  } else {
868 
869  JErrorStream(logErrorRun) << "Receiving data while not running.";
870 
872  }
873 
874  channel->reset();
875  }
876 
877  ++channel;
878  }
879  catch(const std::exception& error) {
880 
881  if (isRunning()) {
882  JErrorStream(logger) << "Disconnect channel " << channel->getFileDescriptor() << ' ' << error.what();
883  }
884 
885  channel->shutdown();
886 
887  channel = channelList.erase(channel);
888  }
889  }
890 
891 
892  if (serversocket.is_valid()) {
893 
894  if (mask.has(*serversocket)) {
895 
896  JTCPSocket socket(serversocket->getFileDescriptor());
897 
898  socket.setReceiveBufferSize(DFILTER_DQUEUE_BUFFER_SIZE);
899 
900  socket.setKeepAlive (true);
901  socket.setNonBlocking(false);
902 
903  JStatusStream(logger) << "New channel" << '[' << socket.getFileDescriptor() << ']' << ' ' << socket.getReceiveBufferSize();
904 
905  channelList.push_back(JSocketInputChannel_t(socket));
906  }
907  }
908 
909 
910  if (!timeslices.empty()) {
911 
912  const size_t number_of_frames = getNumberOfFrames(frames_per_slice, factor_per_slice);
913  const size_t maximum_in_queue = getMaximum(make_array(next(timeslices.begin()), timeslices.end(), &JDAQTimesliceL0::size), (size_t) 0);
914 
915  if (((timeslices[0].size() >= number_of_frames && // normal
917 
918  (maximum_in_queue >= number_of_frames && // intermittent problem
919  timeslices[0].getFrameIndex() < dataqueue_slice_index.min()) ||
920 
921  (timeslices.size() >= maxQueueDepth) || // timeout
922  (queueSize >= maxQueueSize))) {
923 
924 
925  const JDAQTimesliceL0& pending_slice = timeslices.front();
926  queueSize -= getSizeof(pending_slice);
927 
928  current_slice_index = pending_slice.getFrameIndex();
929  minFrameNumber = min(minFrameNumber, pending_slice.getFrameIndex());
930  maxFrameNumber = max(maxFrameNumber, pending_slice.getFrameIndex());
931 
932  for (JDAQTimesliceL0::const_iterator i = pending_slice.begin(); i != pending_slice.end(); ++i) {
933  modules.insert(i->getModuleID());
934  }
935 
936 
937  if (isRunning()) {
938 
939  const localtime_t t0 = getLocalTime();
940 
941  if (!pending_slice.empty()) {
942  processTimeSlice(pending_slice);
943  }
944 
945  const localtime_t t1 = getLocalTime();
946 
948 
949  Qt.put(t1 - t0);
950 
951  } else {
952 
953  JErrorStream(logErrorRun) << "Skip processing of data while not running.";
954  }
955 
956 
957  if (modules.size() > frames_per_slice) {
958 
959  JErrorStream(logErrorOvercomplete) << "More active modules than expected "
960  << modules.size() << " > " << frames_per_slice
961  << " adjusting frames per slice to " << modules.size();
962 
963  frames_per_slice = modules.size();
964  }
965 
966 
967  if (pending_slice.size() < number_of_frames) {
968 
970 
971  ostringstream error;
972 
973  error << "Timeout -> processed incomplete timeslice: "
974  << "Frame index = " << pending_slice.getFrameIndex() << ';'
975  << "Size of timeslice = " << pending_slice.size() << ';'
976  << "Queue depth = " << timeslices.size() << ';'
977  << "Queue size = " << queueSize << ';'
978  << "DataQueue min = " << dataqueue_slice_index.min() << ';'
979  << "DataQueue max = " << dataqueue_slice_index.max() << ';';
980 
981  if (maximum_in_queue >= number_of_frames) {
982 
983  error << " intermittent problem -> continues as-is";
984 
985  } else {
986 
987  modules.clear(); // remove history
988 
989  for (JDAQTimesliceL0::const_iterator i = pending_slice.begin(); i != pending_slice.end(); ++i) {
990  modules.insert(i->getModuleID());
991  }
992 
993  error << " adjusting frames per timeslice from " << frames_per_slice << " to " << modules.size();
994 
995  frames_per_slice = modules.size();
996  }
997 
998  JErrorStream(logErrorIncomplete) << error.str();
999  }
1000 
1001 
1002  timeslices.pop_front();
1003  }
1004  }
1005  }
bool has(const int file_descriptor) const
Has file descriptor.
TCP socket.
Definition: JTCPSocket.hh:30
int getFrameIndex() const
Get frame index.
bool isRunning() const
Check if this client is in runnig state.
Definition: JDAQClient.hh:508
void processTimeSlice(const JDAQTimesliceL0 &timeslice)
Process time slice.
void updateFrameQueue(const JSocketInputChannel_t &channel)
Update queue with data frames.
JSocketInputChannel< JDAQAbstractPreamble > JSocketInputChannel_t
Definition: JDataFilter.cc:189
std::set< int > modules
const array_type< JValue_t > & make_array(const JValue_t(&array)[N])
Method to create array of values.
Definition: JVectorize.hh:54
T getMaximum(const array_type< T > &buffer, const T value)
Get maximum of values.
Definition: JVectorize.hh:218
static const JLocalTime getLocalTime
Function object to get local time in micro seconds.
long long int localtime_t
Type definition of local time.
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.
Definition: JDataFilter.cc:100
int getFrameIndex(const double t_ns)
Get frame index for a given time in ns.
Definition: JDAQClock.hh:251
static const int DFILTER_DQUEUE_BUFFER_SIZE
socket JDataFilter.cc <- DataQueue.cc
Definition: JDAQTags.hh:36
void put(const double x, const double w=1.0)
Put value.
Definition: JQuantile.hh:133
Timeslice data structure for L0 data.

◆ actionRunning()

virtual void KM3NETDAQ::JDataFilter::actionRunning ( )
inlineoverridevirtual

This method is repeatedly called when this client machine is in state Running and the clock interval time is non-zero.

This implementation does nothing but may be redefined by the derived class. Care has to be taken so that the time needed to execute this method should be less than the specified clock interval time (see method setClockInterval()).

Reimplemented from KM3NETDAQ::JDAQClient.

Definition at line 1008 of file JDataFilter.cc.

1009  {
1010  if (reporting) {
1011  typeout();
1012  }
1013  }

◆ updateFrameQueue()

void KM3NETDAQ::JDataFilter::updateFrameQueue ( const JSocketInputChannel_t channel)
inline

Update queue with data frames.

Note that any discarded data will be reported.

Parameters
channelincoming data channel

Definition at line 1023 of file JDataFilter.cc.

1024  {
1025  using namespace std;
1026 
1027  JByteArrayReader in(channel.data(), channel.size());
1028 
1029  JDAQPreamble preamble;
1030  JDAQSuperFrameHeader header;
1031 
1032  in >> preamble;
1033  in >> header;
1034 
1035  if (preamble.getLength() != channel.size()) {
1036 
1037  JErrorStream(logErrorRun) << "Size of received data does not match size reported by preamble: "
1038  << "preamble.getLength() = " << preamble.getLength() << ';'
1039  << "channel.size(): " << channel.size() << ';';
1040 
1042 
1043  return;
1044  }
1045 
1046  if (header.getRunNumber() != getRunNumber()) {
1047 
1048  JErrorStream(logErrorRun) << "Run number " << header.getRunNumber()
1049  << " != " << getRunNumber()
1050  << " -> Dropping frame.";
1051 
1053 
1054  return;
1055  }
1056 
1057  if (header.getFrameIndex() <= current_slice_index) {
1058 
1060 
1061  if (modules.insert(header.getModuleID()).second) {
1062 
1063  frames_per_slice = modules.size();
1064 
1065  JErrorStream(logErrorIndex) << "Frame index " << header.getFrameIndex() << " <= " << current_slice_index
1066  << " module " << header.getModuleID()
1067  << " -> dropping frame;"
1068  << " increase number of frames expected to: " << frames_per_slice;
1069  }
1070 
1071  return;
1072  }
1073 
1075 
1077 
1078  JErrorStream(logErrorIndex) << "Frame index " << header.getFrameIndex() << " > " << current_slice_index + maximal_frame_index
1079  << " module " << header.getModuleID()
1080  << " -> Dropping frame.";
1081 
1082  return;
1083  }
1084 
1085  deque<JDAQTimesliceL0>::iterator timesliceIterator = timeslices.begin();
1086 
1087  while (timesliceIterator != timeslices.end() && timesliceIterator->getFrameIndex() < header.getFrameIndex()) {
1088  ++timesliceIterator;
1089  }
1090 
1091  if (timesliceIterator != timeslices.end() && timesliceIterator->getFrameIndex() == header.getFrameIndex()) {
1092 
1093  // The corresponding time slice already exists
1094 
1095  } else {
1096 
1097  // This is the first frame of this time slice; insert a new time slice in the buffer at the right position in the list
1098 
1099  timesliceIterator = timeslices.insert(timesliceIterator, JDAQTimesliceL0());
1100 
1101  timesliceIterator->setDAQChronometer(header.getDAQChronometer());
1102 
1103  queueSize += getSizeof(*timesliceIterator);
1104  }
1105 
1106  timesliceIterator->push_back(JDAQSuperFrame(header));
1107 
1108  in >> static_cast<JDAQFrame&>(*(timesliceIterator->rbegin()));
1109 
1110  queueSize += getSizeof(*timesliceIterator->rbegin());
1111 
1113  }
Byte array binary input.
Definition: JByteArrayIO.hh:27
const char * data() const
Get data.
Definition: JByteArrayIO.hh:68
int size() const
Get size.
Definition: JByteArrayIO.hh:57
int getFileDescriptor() const
Get file descriptor.
int getRunNumber() const
Get run number.
const JDAQChronometer & getDAQChronometer() const
Get DAQ chronometer.
int getModuleID() const
Get module identifier.
Data frame of one optical module.

◆ processTimeSlice()

void KM3NETDAQ::JDataFilter::processTimeSlice ( const JDAQTimesliceL0 timeslice)
inline

Process time slice.

Parameters
timeslicetime slice

Definition at line 1121 of file JDataFilter.cc.

1122  {
1123  using namespace std;
1124 
1125  try {
1126 
1127  timesliceRouter->configure(timeslice);
1128 
1129  if (parameters.writeSummary()) {
1130  this->put(JDAQSummaryslice(timeslice));
1131  }
1132 
1133  if (parameters.trigger3DMuon.enabled ||
1134  parameters.trigger3DShower.enabled ||
1135  parameters.triggerMXShower.enabled ||
1136  parameters.triggerNB.enabled ||
1137  parameters.writeL0.prescale ||
1138  parameters.writeL1.prescale ||
1139  parameters.writeL2.prescale ||
1140  parameters.writeSN.prescale ||
1141  c_buffer.is_enabled()) {
1142 
1143  JTimeslice_t timesliceL0(timeslice.getDAQChronometer());
1144  JTimeslice_t timesliceL1(timeslice.getDAQChronometer());
1145  JTimeslice_t timesliceL2(timeslice.getDAQChronometer());
1146  JTimeslice_t timesliceSN(timeslice.getDAQChronometer());
1147  JTimeslice_t timesliceNB(timeslice.getDAQChronometer());
1148  JDAQTimeslice timesliceTX(timeslice.getDAQChronometer());
1149 
1150  for (JDAQTimesliceL0::const_iterator frame = timeslice.begin(); frame != timeslice.end(); ++frame) {
1151 
1152  if (moduleRouter->hasModule(frame->getModuleID())) {
1153 
1154  const JChecksum::result_type& result = checksum(*frame);
1155 
1156  if (!result) {
1157 
1158  JWarningStream(logger) << "Invalid data at "
1159  << "run = " << timeslice.getRunNumber() << ";"
1160  << "frame index = " << timeslice.getFrameIndex() << ";"
1161  << "module = " << frame->getModuleID() << ";"
1162  << "discard" << (dumpCount < dumpLimit ? " and dump" : "");
1163 
1164  if (dumpCount < dumpLimit && result.has(dumpMask)) {
1165  timesliceTX.push_back(*frame);
1166  }
1167 
1168  continue;
1169  }
1170 
1171  const JModule& module = moduleRouter->getModule(frame->getModuleID());
1172  JSuperFrame2D_t& buffer = JSuperFrame2D_t::demultiplex(*frame, module);
1173 
1174  // Apply high-rate veto
1175 
1176  buffer.applyHighRateVeto(parameters.highRateVeto_Hz);
1177 
1178  // L0
1179 
1180  timesliceL0.push_back(JSuperFrame1D_t(buffer));
1181 
1182  // Nano-beacon trigger
1183 
1184  if (parameters.triggerNB.enabled) {
1185 
1186  JSuperFrame2D_t::iterator __end = partition(buffer.begin(), buffer.end(), parameters.triggerNB.pmts);
1187 
1188  if (buffer.begin() != __end) {
1189 
1190  timesliceNB.push_back(JSuperFrame1D_t(frame->getDAQChronometer(),
1191  frame->getModuleIdentifier(),
1192  module.getPosition()));
1193 
1194  JSuperFrame1D_t zbuf;
1195 
1196  (*buildL1)(buffer.begin(), __end , back_inserter(zbuf));
1197 
1198  (*buildNB)(buffer.begin() , __end, zbuf, back_inserter(*timesliceNB.rbegin()));
1199  }
1200  }
1201 
1202  // L1
1203 
1204  timesliceL1.push_back(JSuperFrame1D_t(frame->getDAQChronometer(),
1205  frame->getModuleIdentifier(),
1206  module.getPosition()));
1207 
1208  (*buildL1)(*timesliceL0.rbegin(), back_inserter(*timesliceL1.rbegin()));
1209 
1210  // L2
1211 
1212  timesliceL2.push_back(JSuperFrame1D_t(frame->getDAQChronometer(),
1213  frame->getModuleIdentifier(),
1214  module.getPosition()));
1215 
1216  (*buildL2)(buffer, *timesliceL1.rbegin(), back_inserter(*timesliceL2.rbegin()));
1217 
1218  // SN
1219 
1220  timesliceSN.push_back(JSuperFrame1D_t(frame->getDAQChronometer(),
1221  frame->getModuleIdentifier(),
1222  module.getPosition()));
1223 
1224  (*buildSN)(buffer, *timesliceL1.rbegin(), back_inserter(*timesliceSN.rbegin()));
1225 
1226  } else {
1227 
1228  JErrorStream(logErrorDetector) << "No detector information for module " << frame->getModuleID();
1229  }
1230  }
1231 
1232  if (!timesliceTX.empty()) {
1233 
1234  if (dumpCount < dumpLimit) {
1235 
1236  this->put(timesliceTX);
1237 
1238  dumpCount += 1;
1239  }
1240  }
1241 
1242  // Trigger
1243 
1244  if (parameters.triggerNB.enabled) {
1245 
1246  const JTriggerInput trigger_input(timesliceNB);
1247 
1248  for (JTriggerInput::const_iterator hit = trigger_input.begin(); hit != trigger_input.end(); ++hit) {
1249 
1250  if (parameters.triggerNB.write()) {
1251 
1252  JTriggeredEvent tev(timesliceNB.getDAQChronometer(),
1253  getTriggerMask(triggerNB->getTriggerBit()),
1254  *hit,
1255  *timesliceRouter,
1256  *moduleRouter,
1257  parameters.TMaxLocal_ns,
1258  parameters.triggerNB.DMax_m,
1259  getTimeRange(parameters.triggerNB));
1260 
1261  this->put(tev);
1262  }
1263  }
1264  }
1265 
1266  JTriggerInput trigger_input(timesliceL2);
1267  JTriggerOutput trigger_output;
1268 
1269  (*trigger3DMuon) (trigger_input, back_inserter(trigger_output));
1270  (*trigger3DShower)(trigger_input, back_inserter(trigger_output));
1271  (*triggerMXShower)(trigger_input, timesliceL0, back_inserter(trigger_output));
1272 
1273  trigger_output.merge(JEventOverlap(parameters.TMaxEvent_ns));
1274 
1275  for (JTriggerOutput::const_iterator event = trigger_output.begin(); event != trigger_output.end(); ++event) {
1276 
1277  const JTriggeredEvent object(*event, *timesliceRouter, *moduleRouter, parameters.TMaxLocal_ns, getTimeRange(parameters));
1278 
1279  this->put(object);
1280 
1281  numberOfEvents += 1;
1282  }
1283 
1284  if (parameters.writeL1() || c_buffer.sizeL1 > 0) {
1285 
1286  const JTimesliceL1<JDAQTimesliceL1> object(timesliceL1, *timesliceRouter, *moduleRouter, parameters.TMaxLocal_ns);
1287 
1288  if (parameters.writeL1) { this->put(object); }
1289  if (c_buffer.sizeL1 > 0) { c_buffer.put(object); }
1290  }
1291 
1292  if (parameters.writeL2() || c_buffer.sizeL2 > 0) {
1293 
1294  const JTimesliceL1<JDAQTimesliceL2> object(timesliceL2, *timesliceRouter, *moduleRouter, parameters.L2.TMaxLocal_ns);
1295 
1296  if (parameters.writeL2) { this->put(object); }
1297  if (c_buffer.sizeL2 > 0) { c_buffer.put(object); }
1298  }
1299 
1300  if (parameters.writeSN() || c_buffer.sizeSN > 0) {
1301 
1302  const JTimesliceL1<JDAQTimesliceSN> object(timesliceSN, *timesliceRouter, *moduleRouter, parameters.SN.TMaxLocal_ns);
1303 
1304  if (parameters.writeSN) { this->put(object); }
1305  if (c_buffer.sizeSN > 0) { c_buffer.put(object); }
1306  }
1307 
1308  if (parameters.writeL0() || c_buffer.sizeL0 > 0) {
1309 
1310  if (parameters.writeL0) { this->put(timeslice); }
1311  if (c_buffer.sizeL0 > 0) { c_buffer.put(timeslice); }
1312  }
1313  }
1314 
1315  } catch(const std::exception& error) {
1316 
1317  JErrorStream(logger) << "Error = " << error.what() << ";"
1318  << "run = " << timeslice.getRunNumber() << ";"
1319  << "frame index = " << timeslice.getFrameIndex() << ";"
1320  << "time slice not correctly processed;"
1321  << "discard" << (dumpCount < dumpLimit ? " and dump" : "");
1322 
1323  if (dumpCount < dumpLimit) {
1324 
1325  this->put(static_cast<const JDAQTimeslice&>(timeslice));
1326 
1327  dumpCount += 1;
1328  }
1329  }
1330 
1331  timesliceRouter->reset();
1332  }
void merge(const JMatch_t &match)
Merge events.
Data structure for a composite optical module.
Definition: JModule.hh:75
const JPosition3D & getPosition() const
Get position.
Definition: JPosition3D.hh:130
virtual bool put(const T &object) override
Object output.
static JSuperFrame2D< JElement_t, JAllocator_t > demultiplex
Demultiplexer.
std::vector< value_type >::iterator iterator
Auxiliary class to build JDAQTimeslice for L1 timeslice.
Definition: JTimesliceL1.hh:38
Data structure for input to trigger algorithm.
Auxiliary class to build JDAQEvent for a triggered event.
void put(const T &object)
Auxiliary method to send object to data server.
JTimeslice< hit_type > JTimeslice_t
Definition: JDataFilter.cc:195
JSuperFrame2D< hit_type > JSuperFrame2D_t
Definition: JDataFilter.cc:194
JSuperFrame1D< hit_type > JSuperFrame1D_t
Definition: JDataFilter.cc:193
JTimeRange getTimeRange(const Evt &event)
Get time range (i.e. time between earliest and latest hit) of Monte Carlo event.
static const JChecksum checksum
Function object to perform check-sum of raw data.
Definition: JChecksum.hh:200
JTriggerMask_t getTriggerMask(const unsigned int bit)
Convert trigger bit to trigger mask.
Match of two events considering overlap in time.
Auxiliary data structure for result of checksum.
Definition: JChecksum.hh:90

◆ typeout()

void KM3NETDAQ::JDataFilter::typeout ( )
inline

Report status to message logger.

Definition at line 1338 of file JDataFilter.cc.

1339  {
1340  timer.stop();
1341 
1342  const double T_us = (double) timer.usec_wall;
1343 
1344  JStatusStream(logger) << "Elapsed real (wall) time [s] " << T_us / 1e6;
1345  JStatusStream(logger) << "Elapsed user CPU time [s] " << (double) timer.usec_ucpu/ 1e6;
1346  JStatusStream(logger) << "Elapsed system CPU time [s] " << (double) timer.usec_scpu/ 1e6;
1347  JStatusStream(logger) << "Elapsed real time per time slice [ms] " << Qt.getMean(0.0) * 1.0e-3 << " <= " << Qt.getXmax() * 1.0e-3;
1348  JStatusStream(logger) << "Number of packets received/discarded " << number_of_packets_received << "/" << number_of_packets_discarded;
1349  JStatusStream(logger) << "Number of events/MB/us " << numberOfEvents << "/" << numberOfBytes/1e6 << "/" << Qx.getMean(0.0);
1350 
1351  if (number_of_packets_received > 0) {
1352  JStatusStream(logger) << "Number of reads/packet " << (double) number_of_reads / (double) number_of_packets_received;
1353  }
1354 
1355  JStatusStream(logger) << "Current queue depth/size " << timeslices.size() << "/" << queueSize;
1356  JStatusStream(logger) << "Current number of frames per slice expected: " << frames_per_slice << ' ' << FIXED(5,3) << factor_per_slice;
1357 
1358  JStatusStream(logger) << "Number of timeslices processed total/incomplete " << numberOfTimeslicesProcessed << "/" << numberOfIncompleteTimeslicesProcessed;
1359 
1360  const double processedSlicesTime_us = numberOfTimeslicesProcessed * getFrameTime() / 1000;
1361  const double processedDetectorTime_us = (maxFrameNumber - minFrameNumber) * getFrameTime() / 1000;
1362 
1363  if (processedSlicesTime_us > 0) {
1364  JStatusStream(logger) << "Performance factor (inaccurate estimate): " << T_us / processedSlicesTime_us;
1365  }
1366  if (processedDetectorTime_us > 0) {
1367  JStatusStream(logger) << "Performance factor whole detector (inaccurate estimate): " << T_us / processedDetectorTime_us;
1368  }
1369 
1370  timer.start();
1371  }
unsigned long long usec_ucpu
Definition: JTimer.hh:239
unsigned long long usec_wall
Definition: JTimer.hh:238
unsigned long long usec_scpu
Definition: JTimer.hh:240
double getFrameTime()
Get frame time duration.
Definition: JDAQClock.hh:162
Auxiliary data structure for floating point format specification.
Definition: JManip.hh:448
double getMean() const
Get mean value.
Definition: JQuantile.hh:252
double getXmax() const
Get maximum value.
Definition: JQuantile.hh:219

◆ actionTagged()

virtual void KM3NETDAQ::JDataFilter::actionTagged ( const JTag tag,
int  length,
const char *  buffer 
)
inlineoverridevirtual

Tagged action to handle alerts.

Parameters
tagtag
lengthnumber of characters
buffermessage

Reimplemented from KM3NETDAQ::JDAQClient.

Definition at line 1381 of file JDataFilter.cc.

1382  {
1383  using namespace std;
1384 
1385  JDebugStream(logger) << "Received message <" << tag.toString() << "> \"" << string(buffer, length) << "\"";
1386 
1387  if (tag == RC_ALERT) {
1388 
1389  if (c_buffer.is_open()) {
1390 
1391  JStatusStream(logger) << "Archive circular buffer in <" << c_buffer.archive << ">";
1392 
1393  c_buffer.close(true);
1394  }
1395 
1396  if (c_buffer.is_enabled()) {
1397 
1398  c_buffer.open();
1399 
1400  if (c_buffer.is_open()) {
1401 
1402  JStatusStream(logger) << "Created circular buffer " << c_buffer;
1403 
1405 
1406  } else {
1407 
1408  JErrorStream (logger) << "Failed to create circular buffer in directory <" << c_buffer.path << ">; disable functionality.";
1409 
1410  c_buffer.disable();
1411  }
1412  }
1413 
1414  } else {
1415 
1416  JWarningStream(logger) << "Tag <" << tag.toString() << "> not implemented";
1417  }
1418  }
std::string toString() const
Convert tag to string.
Definition: JTag.hh:171

◆ put()

template<class T >
void KM3NETDAQ::JDataFilter::put ( const T &  object)
inlineprivate

Auxiliary method to send object to data server.

Parameters
objectobject to be sent

Definition at line 1434 of file JDataFilter.cc.

1435  {
1436  try {
1437 
1438  const localtime_t t0 = getLocalTime();
1439 
1440  datawriter->put(object);
1441 
1442  const localtime_t t1 = getLocalTime();
1443 
1444  numberOfBytes += getSizeof(object);
1445 
1446  Qx.put(t1 - t0);
1447  }
1448  catch(const std::exception& error) {
1449  JErrorStream(logger) << "Error \"" << error.what() << "\"; trigger ev_error.";
1450  ev_error();
1451  }
1452  }

◆ enter() [1/2]

virtual bool KM3NETDAQ::JDAQClient::enter ( const JArgs args)
inlinevirtualinherited

Enter the state machine.

This overloaded method enter reproduces the constructor. All necessary input is parsed from the list of arguments. In case of an error, the state machine is not entered.

Parameters
argsarray of command line arguments
Returns
true if okay; else false

Definition at line 392 of file JDAQClient.hh.

393  {
394  using namespace std;
395 
396  string server;
397  string logger;
398  int level;
399  bool use_cout;
400 
401  try {
402 
403  parser['H'] = make_field(server) = "localhost";
404  parser['M'] = make_field(logger) = "localhost";
405  parser['d'] = make_field(level) = 0;
406  parser['c'] = make_field(use_cout);
407 
408  if (parser.read(args) != 0) {
409  return false;
410  }
411  }
412  catch(const std::exception &error) {
413  cerr << error.what() << endl;
414  return false;
415  }
416 
417  try {
418 
419  JLogger* out = NULL;
420 
421  if (use_cout)
422  out = new JStreamLogger(cout);
423  else
424  out = new JControlHostLogger(logger);
425 
426  this->logger = JMessageLogger(out, getName(), level);
427 
428  this->server.reset(new JControlHost(server));
429 
430  return enter();
431  }
432  catch(const std::exception& error) {
433  cerr << error.what() << endl;
434  return false;
435  }
436  }
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition: JParser.hh:2142
Message logging based on ControlHost.
Interface for logging messages.
Definition: JLogger.hh:22
Message logging based on std::ostream.
ControlHost class.
int read(const int argc, const char *const argv[])
Parse the program's command line options.
Definition: JParser.hh:1992
JParser parser
parser method enter()
Definition: JDAQClient.hh:1065
virtual bool enter() override
Enter the state machine.
Definition: JDAQClient.hh:447

◆ enter() [2/2]

virtual bool KM3NETDAQ::JDAQClient::enter ( )
inlineoverridevirtualinherited

Enter the state machine.

This method activates the subscription to JNET::JControlHost messages. In case of an error, the state machine is not entered.

Returns
true if okay; else false

Reimplemented in KM3NETDAQ::JDAQDriver.

Definition at line 447 of file JDAQClient.hh.

448  {
449  using namespace std;
450  using namespace JPP;
451 
452  if (server.is_valid() && logger.is_valid()) {
453 
455 
456  try {
457 
458  server->Subscribe(buffer);
459  server->SendMeAlways();
460  server->MyId(getFullName());
461 
462  JStatusStream(logger) << "Process with nick name \"" << getFullName() << "\" version \"" << getGITVersion() << "\" subscription: " << buffer.toString();
463 
464  return CHSM::machine::enter();
465  }
466  catch(const std::exception& error) {
467  JErrorStream(logger) << error.what();
468  }
469 
470  } else {
471  cerr << "Message server or logger not properly initialised." << endl;
472  }
473 
474  return false;
475  }
bool is_valid() const
Check validity of logger object.
Subscription list.
std::string toString() const
Convert subscription list to string.
JSubscriptionList subscription
custom subscription
Definition: JDAQClient.hh:1066
std::string getGITVersion(const std::string &tag)
Get GIT version for given GIT tag.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
JSubscriptionList getSubscription(const JEventTable &event_table)
Convert event table to ControlHost subscription.
Definition: JEventTable.hh:129
JEventTable eventTable
event table
Definition: JDAQClient.hh:203

◆ exit()

virtual bool KM3NETDAQ::JDAQClient::exit ( )
inlineoverridevirtualinherited

Exit the state machine.

This method releases the various resources.

Returns
true if okay; else false

Definition at line 485 of file JDAQClient.hh.

486  {
487  try {
488  if (server.is_valid()) { server.reset(NULL); }
489  }
490  catch(const std::exception& error) {
491  }
492 
493  try {
494  if (logger.is_valid()) { logger.reset(NULL); }
495  }
496  catch(const std::exception& error) {
497  }
498 
499  return CHSM::machine::exit();
500  }
void reset(JLogger *__logger=NULL)
Reset logger.

◆ isRunning()

bool KM3NETDAQ::JDAQClient::isRunning ( ) const
inlineinherited

Check if this client is in runnig state.

Returns
true if running; else false

Definition at line 508 of file JDAQClient.hh.

509  {
510  return Main.RunControl.Operational.Running.active();
511  }
JDAQStateMachine::state_Main::state_RunControl::state_Operational Operational
JDAQStateMachine::state_Main::state_RunControl RunControl
JDAQStateMachine::state_Main Main

◆ replaceEvent()

void KM3NETDAQ::JDAQClient::replaceEvent ( const JTag oldTag,
const JTag newTag,
JDAQEvent_t event 
)
inlineinherited

Replace tag of given event in event table.

Parameters
oldTagold tag
newTagnew tag
eventevent

Definition at line 521 of file JDAQClient.hh.

524  {
525  eventTable.replace(oldTag, newTag, event);
526  }
void replace(const JTag &oldTag, const JTag &newTag, JDAQEvent_t &event)
Replace entry in table.
Definition: JEventTable.hh:96

◆ findEvent()

JDAQEvent_t* KM3NETDAQ::JDAQClient::findEvent ( const JTag tag,
const std::string &  event_name 
)
inlineinherited

Find event in event table.

Parameters
tagtag
event_nameevent name
Returns
pointer to event or NULL

Definition at line 536 of file JDAQClient.hh.

537  {
538  JEventTable::const_iterator i = eventTable.find(tag, event_name);
539 
540  if (i != eventTable.end())
541  return i->second;
542  else
543  return NULL;
544  }
const_iterator find(const JTag &tag, const std::string &event_name) const
Find entry.
Definition: JEventTable.hh:116

◆ addSubscription()

void KM3NETDAQ::JDAQClient::addSubscription ( const JSubscription subscription)
inlineinherited

Add custom subscription.

Parameters
subscriptionsubscription

Definition at line 552 of file JDAQClient.hh.

553  {
554  this->subscription.add(subscription);
555  }

◆ addParameter() [1/2]

template<class T >
void KM3NETDAQ::JDAQClient::addParameter ( const char  option,
T &  parameter 
)
inlineinherited

Add parameter to parser used in method enter().

Parameters
optionoption
parameterparameter

Definition at line 565 of file JDAQClient.hh.

566  {
567  parser[option] = make_field(parameter);
568  }

◆ addParameter() [2/2]

template<class T >
void KM3NETDAQ::JDAQClient::addParameter ( const char  option,
T &  parameter,
const T &  value 
)
inlineinherited

Add parameter to parser used in method enter().

Parameters
optionoption
parameterparameter
valuedefault value

Definition at line 579 of file JDAQClient.hh.

580  {
581  parser[option] = make_field(parameter) = value;
582  }

◆ setSelect() [2/2]

void KM3NETDAQ::JDAQClient::setSelect ( )
inlineinherited

Set the file descriptor mask for the select call.

Definition at line 588 of file JDAQClient.hh.

589  {
590  select.reset();
591 
593 
595  }
void setReaderMask(const JAbstractFile &file)
Set reader mask.
void reset()
Reset.
JFileDescriptorMask & getReaderMask()
Get reader mask.
JSelectReader select
select call
Definition: JDAQClient.hh:1064
void setSelect()
Set the file descriptor mask for the select call.
Definition: JDAQClient.hh:588

◆ actionInput()

virtual void KM3NETDAQ::JDAQClient::actionInput ( int  length,
const char *  buffer 
)
inlineoverridevirtualinherited

This method is called at ev_input.

Parameters
lengthlength of data
bufferpointer to data

Reimplemented from JDAQCHSM.

Reimplemented in KM3NETDAQ::DataQueue.

Definition at line 635 of file JDAQClient.hh.

636  {
637  using namespace std;
638 
639  JProperties properties(JEquationParameters("=", ";", "", ""), 1);
640 
641  int level = this->logger.getLevel();
642 
643  properties["debug"] = level;
644 
645  properties.read(string(buffer, length));
646 
647  this->logger.setLevel(level);
648  }
JLevel_t getLevel()
Get debug level.
void setLevel(const int __level)
Set debug level.

◆ filter()

virtual bool KM3NETDAQ::JDAQClient::filter ( const JTag tag,
int  length,
const char *  buffer 
)
inlinevirtualinherited

Filter message.

The filter method can be overwritten so that a specific action is made before the corresponding message is processed by the state machine. The message is ignored if true is returned, else it is normally processed.

Parameters
tagtag
lengthnumber of characters
buffermessage
Returns
skip message or not

Definition at line 662 of file JDAQClient.hh.

663  {
664  return false;
665  }

◆ run() [1/3]

void KM3NETDAQ::JDAQClient::run ( )
inlineinherited

Run as run control client following command messages via JNET::JControlHost.

This method can be called once the state machine is entered. It returns when the state machine is exited. If the clock interval is non-zero, the method actionRunning() is repeatedly called when this client machine is in state Running. The file descriptor mask can be set to interrupt the timeout of the select call and clock method wait() in this calling sequence (see methods setSelect() and actionSelect()).

Definition at line 690 of file JDAQClient.hh.

691  {
692  using namespace std;
693  using namespace JPP;
694 
695  while (active()) {
696 
697  try {
698 
699  setSelect();
700 
701  if (select(JTimeval(TIMEOUT_S,0)) > 0) {
702 
703  if (select.hasReaderMask(*server)) {
704  update();
705  }
706 
708 
709  } else {
710 
711  continue;
712  }
713 
714 
715  if (isRunning() && clock.getInterval() != 0LL) {
716 
717  long long int numberOfCalls = 0;
718 
719  clock.reset();
720 
721  do {
722 
723  ++numberOfCalls;
724 
725  setSelect();
726 
727  if (clock.wait(select.getReaderMask())) {
728 
729  if (select.hasReaderMask(*server)) {
730  update();
731  }
732 
734 
735  } else {
736 
737  try {
738  actionRunning();
739  }
740  catch(const std::exception& error) {
741  logger.error(error.what());
742  }
743  }
744 
745  } while (isRunning());
746 
747  if (numberOfCalls != 0) {
748  JNoticeStream(logger) << "Delay per call " << clock.getDelay() / numberOfCalls / 1000 << " ms";
749  }
750  }
751  }
752  catch(const JPP::JSocketException& error) {
753  JErrorStream(logger) << "method run(): \"" << error.what() << "\" -> trigger ev_error.";
754  ev_error();
755  }
756  catch(const std::exception& error) {
757  JErrorStream(logger) << "method run(): \"" << error.what() << "\"";
758  }
759  }
760  }
long long int getDelay() const
Get total delay time.
Definition: JTimekeeper.hh:78
void wait() const
Wait until the number of time intervals has elapsed since the last call to the reset method.
Definition: JTimekeeper.hh:145
void reset(const long long int t0)
Reset time.
Definition: JTimekeeper.hh:100
long long int getInterval() const
Get interval time.
Definition: JTimekeeper.hh:67
virtual const char * what() const override
Get error message.
Definition: JException.hh:64
Exception for socket.
Definition: JException.hh:468
Auxiliary class for time values.
Definition: JTimeval.hh:29
void error(const JMessage_t &message)
bool hasReaderMask(const JAbstractFile &file) const
Has reader file.
void update()
Update state machine.
Definition: JDAQClient.hh:842
virtual void actionSelect(const JFileDescriptorMask &mask)
Action method following last select call.
Definition: JDAQClient.hh:614
virtual void actionRunning()
This method is repeatedly called when this client machine is in state Running and the clock interval ...
Definition: JDAQClient.hh:625
JTimekeeper clock
central clock
Definition: JDAQClient.hh:207
static const int TIMEOUT_S
time out of update [s]
Definition: JDAQClient.hh:63

◆ run() [2/3]

void KM3NETDAQ::JDAQClient::run ( const int  port)
inlineinherited

Run for ever.

This method can be used when the run control client is started before the run control (e.g. at boot time of the host processor). This method should be called before the state machine is entered. It launches a server which accepts a JNET::JControlHost connection from a designated application e.g. the JDAQClientStarter.cc program. The state machine is entered using the available data in the JNET::JControlHost message. After the state machine is exited, it accepts a new a JNET::JControlHost connection.

Parameters
portport number

Definition at line 775 of file JDAQClient.hh.

776  {
777  JControlHostServer local_server(port);
778 
779  for ( ; ; ) {
780 
781  JControlHost* ps = local_server.AcceptClient();
782 
783  ps->Connected();
784 
785  JNET::JPrefix prefix;
786 
787  ps->WaitHead(prefix);
788 
789  const int length = prefix.getSize();
790 
791  char* buffer = new char[length];
792 
793  ps->GetFullData(buffer, length);
794  ps->PutFullData(prefix.toString(), buffer, length);
795 
796  delete ps;
797 
798  enter(JArgs(std::string(buffer, length)));
799 
800  delete [] buffer;
801 
802  run();
803 
804  exit();
805  }
806  }
Data structure to store command line arguments.
Definition: JArgs.hh:26
Light-weight wrapper class around server socket.
int WaitHead(JPrefix &prefix)
Wait for header.
int GetFullData(void *buffer, long long int length)
Receive data.
int PutFullData(const JTag &tag, const void *buffer, const long long int length)
Send data.
int Connected()
Send version.
ControlHost prefix.
Definition: JPrefix.hh:33
int getSize() const
Get size.
Definition: JPrefix.hh:62
virtual bool exit() override
Exit the state machine.
Definition: JDAQClient.hh:485
void run()
Run as run control client following command messages via JNET::JControlHost.
Definition: JDAQClient.hh:690

◆ run() [3/3]

void KM3NETDAQ::JDAQClient::run ( std::istream &  in)
inlineinherited

Run client with commands from input stream (e.g. for debugging).

Example input format:

<tag> <event name>[#data];
<tag> <event name>[#data];
Parameters
ininput stream

Definition at line 820 of file JDAQClient.hh.

821  {
822  using namespace std;
823 
824  string tag;
825  string buffer;
826 
827  while (in >> tag && in >> skipws && getline(in, buffer, ';')) {
828  update(tag, buffer.length(), buffer.data());
829  }
830  }
std::istream & getline(std::istream &in, JString &object)
Read string from input stream until end of line.
Definition: JString.hh:478

◆ update() [1/2]

void KM3NETDAQ::JDAQClient::update ( )
inlineprivateinherited

Update state machine.

This method waits for a message from JNET::JControlHost server.

Definition at line 842 of file JDAQClient.hh.

843  {
844  JNET::JPrefix prefix;
845 
846  server->WaitHead(prefix);
847 
848  const int length = prefix.getSize();
849 
850  char* buffer = new char[length];
851 
852  server->GetFullData(buffer, length);
853 
854  update(prefix.getTag(), length, buffer);
855 
856  delete [] buffer;
857  }
const JTag & getTag() const
Get tag.
Definition: JTag.hh:86

◆ update() [2/2]

void KM3NETDAQ::JDAQClient::update ( const JTag tag,
int  length,
const char *  buffer 
)
inlineprivateinherited

Update state machine.

Parameters
tagtag
lengthnumber of characters
buffermessage

Definition at line 867 of file JDAQClient.hh.

868  {
869  using namespace std;
870  using namespace JPP;
871 
872  if (filter(tag, length, buffer)) {
873  return;
874  }
875 
876  if (getSubscription(eventTable)->count(JSubscriptionAny(tag)) == 0 &&
877  getSubscription(eventTable)->count(JSubscriptionAll(tag)) == 0) {
878 
879  actionTagged(tag, length, buffer);
880 
881  return;
882  }
883 
884 
885  string::size_type pos = 0;
886 
887  while (pos != (string::size_type) length && TOKEN_DELIMETER.find(*(buffer + pos)) == string::npos) {
888  ++pos;
889  }
890 
891  const JEvent_t event = JEvent_t::toValue(string(buffer, pos));
892 
893  if (event.hasInfo()) {
894  setEventInfo(event.getInfo());
895  }
896 
897  while (pos != (string::size_type) length && TOKEN_DELIMETER.find(*(buffer + pos)) != string::npos) {
898  ++pos;
899  }
900 
901 
902  JEventTable::const_iterator i = eventTable.find(tag, event.getName());
903 
904  if (i != eventTable.end()) {
905 
906  const CHSM::state* const s0 = getState();
907 
908  if (!i->second->active()) {
909 
910  JWarningStream(logger) << "Event " << i->second->name() << " not active (" << (s0 != NULL ? s0->name() : "") << ")";
911 
912  if (server.is_valid() && s0 != NULL) {
913  server->PutFullString(RC_FAIL, getMessage(*s0, *i->second));
914  }
915  }
916 
917  // redirect all I/O
918 
919  {
921  JErrorStream error(logger);
922 
923  JRedirectStream rs_cin (cin, JLANG::null);
924  JRedirectStream rs_cout(cout, debug);
925  JRedirectStream rs_cerr(cerr, error);
926 
927  if (rs_cin &&
928  rs_cout &&
929  rs_cerr) {
930 
931  (*(i->second))(length - pos, buffer + pos);
932  }
933  }
934 
935  const CHSM::state* const s1 = getState();
936 
937  JStatusStream(logger) << "Transition "
938  << (s0 != NULL ? s0->name() : "")
939  << "->(" << i->second->name() << ")->"
940  << (s1 != NULL ? s1->name() : "");
941  } else {
942 
943  JErrorStream(logger) << "Unknown key <" << tag << "," << event.getName() << ">";
944  }
945  }
int debug
debug level
Definition: JSirene.cc:69
This class can be used to temporarily redirect one output (input) stream to another output (input) st...
virtual bool filter(const JTag &tag, int length, const char *buffer)
Filter message.
Definition: JDAQClient.hh:662
virtual void actionTagged(const JTag &tag, int length, const char *buffer)
This method is called when a custom tag is encountered.
Definition: JDAQClient.hh:675
std::string getMessage(const CHSM::state &state, const CHSM::event &event) const
Get event message.
Definition: JDAQClient.hh:964
const CHSM::state * getState() const
Get current state.
Definition: JDAQClient.hh:1048
static JNullStream null
Null I/O stream.
Definition: JNullStream.hh:51
static const std::string TOKEN_DELIMETER
Definition: JDAQTags.hh:58
static const JNET::JTag RC_FAIL
Definition: JDAQTags.hh:68
Auxiliary class for any subscription.
void setEventInfo(const std::string &info)
Set last event information.
Definition: JDAQClient.hh:196
static JEvent_t toValue(const std::string &buffer)
Convert string to event.
Definition: JEvent_t.hh:99

◆ configure()

void KM3NETDAQ::JDAQClient::configure ( )
inlineprivateinherited

Configure client.

This method is used to setup the event table.

Definition at line 952 of file JDAQClient.hh.

953  {
954  }

◆ getMessage()

std::string KM3NETDAQ::JDAQClient::getMessage ( const CHSM::state &  state,
const CHSM::event &  event 
) const
inlineprivateinherited

Get event message.

Parameters
statestate
eventevent
Returns
message

Definition at line 964 of file JDAQClient.hh.

965  {
966  std::ostringstream os;
967 
968  os << getFullName()
969  << getTokenDelimeter()
970  << (getEventInfo() != "" ?
971  JEvent_t(event.name(), getEventInfo()) :
972  JEvent_t(event.name()))
973  << getTokenDelimeter()
974  << getStateName(state.name());
975 
976  return os.str();
977  }
std::string getStateName(const std::string &name)
Get name of state.
char getTokenDelimeter()
Get the token delimeter for command messages.
const std::string & getEventInfo() const
Get last event information.
Definition: JDAQClient.hh:185

◆ enterState()

virtual void KM3NETDAQ::JDAQClient::enterState ( const CHSM::state &  state,
const CHSM::event &  event 
)
inlineoverrideprivatevirtualinherited

Action when entering state.

This method provides for the hand shaking with the run control program.

Parameters
stateentered state
eventevent that triggered transition

Implements JDAQCHSM.

Reimplemented in KM3NETDAQ::JDAQDriver.

Definition at line 987 of file JDAQClient.hh.

988  {
989  if (server.is_valid()) {
990  server->PutFullString(RC_REPLY, getMessage(state, event));
991  }
992  }
static const JNET::JTag RC_REPLY
Definition: JDAQTags.hh:67

◆ actionCheck()

virtual void KM3NETDAQ::JDAQClient::actionCheck ( int  length,
const char *  buffer 
)
inlineoverrideprivatevirtualinherited

This method is called at ev_check and reports a system check by mimicing an enter state action.

Parameters
lengthnumber of characters
buffermessage

Reimplemented from JDAQCHSM.

Definition at line 1001 of file JDAQClient.hh.

1002  {
1003  if (Main.RunControl.Error.active()) {
1004 
1006 
1007  } else {
1008 
1009  for (CHSM::parent::iterator state = Main.RunControl.Operational.begin(); state != Main.RunControl.Operational.end(); ++state) {
1010 
1011  if (state->active()) {
1012 
1013  // mimic enter state
1014 
1015  enterState(*state, ev_check);
1016  }
1017  }
1018  }
1019  }
JDAQStateMachine::ev_check_event ev_check
virtual void enterState(const CHSM::state &state, const CHSM::event &event) override
Action when entering state.
Definition: JDAQClient.hh:987

◆ execute()

void KM3NETDAQ::JDAQClient::execute ( action  __action,
const CHSM::event &  __event 
)
inlineoverrideprivatevirtualinherited

The method to execute the action.

Parameters
__actionpointer to action method
__eventevent that triggered the action

Implements JDAQCHSM.

Definition at line 1028 of file JDAQClient.hh.

1029  {
1030  try {
1031 
1032  const JDAQStateMachine::ev_daq_event& event = dynamic_cast<const JDAQStateMachine::ev_daq_event&>(__event);
1033 
1034  (this->*__action)(event->length, event->buffer);
1035  }
1036  catch(const std::exception& error) {
1037  JErrorStream(logger) << "Error at event " << __event.name() << " \"" << error.what() << "\"; trigger ev_error.";
1038  ev_error();
1039  }
1040  }

◆ getState()

const CHSM::state* KM3NETDAQ::JDAQClient::getState ( ) const
inlineprivateinherited

Get current state.

Returns
state

Definition at line 1048 of file JDAQClient.hh.

1049  {
1050  for (CHSM::parent::const_iterator state = Main.RunControl.Operational.begin(); state != Main.RunControl.Operational.end(); ++state) {
1051  if (state->active()) {
1052  return &(*state);
1053  }
1054  }
1055 
1056  if (Main.RunControl.Error.active()) {
1057  return &Main.RunControl.Error;
1058  }
1059 
1060  return NULL;
1061  }

◆ A1()

void JDAQStateMachine::A1 ( CHSM_ns_alias::event const &  event)
inherited

Definition at line 344 of file JDAQCHSM.cc.

344 { actionError(); }
virtual void actionError()
Definition: JDAQCHSM.hh:135

◆ A2()

void JDAQStateMachine::A2 ( CHSM_ns_alias::event const &  event)
inherited

Definition at line 346 of file JDAQCHSM.cc.

346 { execute(&JDAQCHSM::actionInit, event); }
virtual void actionInit(int, const char *)
Definition: JDAQCHSM.hh:123
virtual void execute(action __action, const CHSM::event &__event)=0
The method to execute the action.

◆ A3()

void JDAQStateMachine::A3 ( CHSM_ns_alias::event const &  event)
inherited

Definition at line 348 of file JDAQCHSM.cc.

348 { JDAQCHSM::exit(); }

◆ A4()

void JDAQStateMachine::A4 ( CHSM_ns_alias::event const &  event)
inherited

Definition at line 350 of file JDAQCHSM.cc.

virtual void actionConfigure(int, const char *)
Definition: JDAQCHSM.hh:124

◆ A5()

void JDAQStateMachine::A5 ( CHSM_ns_alias::event const &  event)
inherited

Definition at line 352 of file JDAQCHSM.cc.

352 { execute(&JDAQCHSM::actionReset, event); }
virtual void actionReset(int, const char *)
Definition: JDAQCHSM.hh:129

◆ A6()

void JDAQStateMachine::A6 ( CHSM_ns_alias::event const &  event)
inherited

Definition at line 354 of file JDAQCHSM.cc.

354  {
355 
356  std::istringstream is(std::string(ev_start->buffer, ev_start->length));
357 
358  is >> run_number >> detector_id;
359 
361 
362  }
int run_number
Definition: JDAQCHSM.hh:167
virtual void actionStart(int, const char *)
Definition: JDAQCHSM.hh:125
int detector_id
Definition: JDAQCHSM.hh:166
JDAQStateMachine::ev_start_event ev_start

◆ A7()

void JDAQStateMachine::A7 ( CHSM_ns_alias::event const &  event)
inherited

Definition at line 364 of file JDAQCHSM.cc.

364 { execute(&JDAQCHSM::actionQuit, event); }
virtual void actionQuit(int, const char *)
Definition: JDAQCHSM.hh:130

◆ A8()

void JDAQStateMachine::A8 ( CHSM_ns_alias::event const &  event)
inherited

Definition at line 366 of file JDAQCHSM.cc.

366 { execute(&JDAQCHSM::actionContinue, event); }
virtual void actionContinue(int, const char *)
Definition: JDAQCHSM.hh:127

◆ A9()

void JDAQStateMachine::A9 ( CHSM_ns_alias::event const &  event)
inherited

Definition at line 368 of file JDAQCHSM.cc.

368 { execute(&JDAQCHSM::actionStop, event); }
virtual void actionStop(int, const char *)
Definition: JDAQCHSM.hh:128

◆ A10()

void JDAQStateMachine::A10 ( CHSM_ns_alias::event const &  event)
inherited

Definition at line 370 of file JDAQCHSM.cc.

370 { execute(&JDAQCHSM::actionPause, event); }
virtual void actionPause(int, const char *)
Definition: JDAQCHSM.hh:126

◆ A11()

void JDAQStateMachine::A11 ( CHSM_ns_alias::event const &  event)
inherited

Definition at line 372 of file JDAQCHSM.cc.

372 { execute(&JDAQCHSM::actionRecover, event); }
virtual void actionRecover(int, const char *)
Definition: JDAQCHSM.hh:136

◆ A12()

void JDAQStateMachine::A12 ( CHSM_ns_alias::event const &  event)
inherited

Definition at line 374 of file JDAQCHSM.cc.

374 { JDAQCHSM::exit(); }

◆ A13()

void JDAQStateMachine::A13 ( CHSM_ns_alias::event const &  event)
inherited

Definition at line 376 of file JDAQCHSM.cc.

376 { execute(&JDAQCHSM::actionCheck, event); }
virtual void actionCheck(int, const char *)
Definition: JDAQCHSM.hh:132

◆ A14()

void JDAQStateMachine::A14 ( CHSM_ns_alias::event const &  event)
inherited

Definition at line 378 of file JDAQCHSM.cc.

378 { execute(&JDAQCHSM::actionInput, event); }
virtual void actionInput(int, const char *)
Definition: JDAQCHSM.hh:133

◆ EAM4root()

void JDAQStateMachine::EAM4root ( CHSM_ns_alias::state const &  chsm_state_,
CHSM_ns_alias::event const &  event 
)
inherited

Definition at line 337 of file JDAQCHSM.cc.

337  {
338 #line 164 "JDAQCHSM.chsm"
339  CHSM_ns_alias::cluster const &state = (CHSM_ns_alias::cluster const&)chsm_state_; actionEnter(); }
virtual void actionEnter()
Interface methods for actions corresponding to state transitions.
Definition: JDAQCHSM.hh:120

◆ XAM4root()

void JDAQStateMachine::XAM4root ( CHSM_ns_alias::state const &  chsm_state_,
CHSM_ns_alias::event const &  event 
)
inherited

Definition at line 340 of file JDAQCHSM.cc.

340  {
341 #line 165 "JDAQCHSM.chsm"
342  CHSM_ns_alias::cluster const &state = (CHSM_ns_alias::cluster const&)chsm_state_; actionExit(); }
virtual void actionExit()
Definition: JDAQCHSM.hh:121

◆ getName()

const std::string& JDAQCHSM::getName ( ) const
inlineinherited

Get name of state machine.

Returns
name

Definition at line 89 of file JDAQCHSM.hh.

90  {
91  return name;
92  }

◆ getDetectorID()

int JDAQCHSM::getDetectorID ( ) const
inlineinherited

Get detector identifier.

Returns
detector identifier.

Definition at line 100 of file JDAQCHSM.hh.

101  {
102  return detector_id;
103  }

◆ getRunNumber()

int JDAQCHSM::getRunNumber ( ) const
inlineinherited

Get run number.

Returns
run number

Definition at line 111 of file JDAQCHSM.hh.

112  {
113  return run_number;
114  }

◆ actionError()

virtual void JDAQCHSM::actionError ( )
inlinevirtualinherited

Definition at line 135 of file JDAQCHSM.hh.

135 {}

◆ actionRecover()

virtual void JDAQCHSM::actionRecover ( int  ,
const char *   
)
inlinevirtualinherited

Definition at line 136 of file JDAQCHSM.hh.

136 {}

◆ getHostname()

const std::string& KM3NETDAQ::JDAQClient_t::getHostname ( ) const
inlineinherited

Get hostname.

Returns
host name

Definition at line 109 of file JDAQClient.hh.

110  {
111  return hostname;
112  }

◆ getFullName()

const std::string& KM3NETDAQ::JDAQClient_t::getFullName ( ) const
inlineinherited

Get full name of this run control client.

Returns
full name

Definition at line 120 of file JDAQClient.hh.

121  {
122  return fullname;
123  }

◆ getUniqueTag()

const JTag& KM3NETDAQ::JDAQClient_t::getUniqueTag ( ) const
inlineinherited

Get unique tag of this run control client.

Returns
unique tag

Definition at line 131 of file JDAQClient.hh.

132  {
133  return unique_tag;
134  }

◆ getClockDelay()

long long int KM3NETDAQ::JDAQClient_t::getClockDelay ( ) const
inlineinherited

Get total delay time.

Returns
delay time [us]

Definition at line 142 of file JDAQClient.hh.

143  {
144  return clock.getDelay();
145  }

◆ getClockInterval()

long long int KM3NETDAQ::JDAQClient_t::getClockInterval ( ) const
inlineinherited

Get interval time.

Returns
interval time [us]

Definition at line 154 of file JDAQClient.hh.

155  {
156  return clock.getInterval();
157  }

◆ setClockInterval()

void KM3NETDAQ::JDAQClient_t::setClockInterval ( const long long int  interval_us)
inlineinherited

Set interval time.

Parameters
interval_usinterval time [us]

Definition at line 165 of file JDAQClient.hh.

166  {
167  clock.setInterval(interval_us);
168  }
void setInterval(const long long int interval_us)
Set interval time.
Definition: JTimekeeper.hh:89

◆ resetClock()

void KM3NETDAQ::JDAQClient_t::resetClock ( )
inlineinherited

Reset clock.

Definition at line 174 of file JDAQClient.hh.

175  {
176  clock.reset();
177  }

◆ getEventInfo()

const std::string& KM3NETDAQ::JDAQClient_t::getEventInfo ( ) const
inlineinherited

Get last event information.

Returns
event information

Definition at line 185 of file JDAQClient.hh.

186  {
187  return event_info;
188  }
std::string event_info
event information
Definition: JDAQClient.hh:208

◆ setEventInfo()

void KM3NETDAQ::JDAQClient_t::setEventInfo ( const std::string &  info)
inlineinherited

Set last event information.

Parameters
infoevent information

Definition at line 196 of file JDAQClient.hh.

197  {
198  this->event_info = info;
199  }

Member Data Documentation

◆ meta

JMeta KM3NETDAQ::JDataFilter::meta

meta data

Definition at line 1420 of file JDataFilter.cc.

◆ datawriter

JSinglePointer<JControlHost_t> KM3NETDAQ::JDataFilter::datawriter
private

controlhost of data server (to which data writer should be connected)

Definition at line 1425 of file JDataFilter.cc.

◆ hostname

std::string KM3NETDAQ::JDataFilter::hostname
private

host name of data server

Definition at line 1426 of file JDataFilter.cc.

◆ port

int KM3NETDAQ::JDataFilter::port
private

server socket port

Definition at line 1455 of file JDataFilter.cc.

◆ backlog

int KM3NETDAQ::JDataFilter::backlog
private

Definition at line 1456 of file JDataFilter.cc.

◆ serversocket

JSinglePointer<JServerSocket> KM3NETDAQ::JDataFilter::serversocket
private

server for data queue connections

Definition at line 1458 of file JDataFilter.cc.

◆ channelList

JChannelList_t KM3NETDAQ::JDataFilter::channelList
private

connections to data queue

Definition at line 1459 of file JDataFilter.cc.

◆ timer

JTimer KM3NETDAQ::JDataFilter::timer
private

Definition at line 1461 of file JDataFilter.cc.

◆ Qt

JQuantile KM3NETDAQ::JDataFilter::Qt
private

Definition at line 1462 of file JDataFilter.cc.

◆ Qx

JQuantile KM3NETDAQ::JDataFilter::Qx
private

Definition at line 1462 of file JDataFilter.cc.

◆ timeslices

std::deque<JDAQTimesliceL0> KM3NETDAQ::JDataFilter::timeslices
private

buffer with pending time slice data

Definition at line 1464 of file JDataFilter.cc.

◆ current_slice_index

int KM3NETDAQ::JDataFilter::current_slice_index
private

Definition at line 1465 of file JDataFilter.cc.

◆ frames_per_slice

size_t KM3NETDAQ::JDataFilter::frames_per_slice
private

Definition at line 1466 of file JDataFilter.cc.

◆ factor_per_slice

double KM3NETDAQ::JDataFilter::factor_per_slice
private

Definition at line 1467 of file JDataFilter.cc.

◆ maximal_frame_index

int KM3NETDAQ::JDataFilter::maximal_frame_index
private

Definition at line 1468 of file JDataFilter.cc.

◆ modules

std::set<int> KM3NETDAQ::JDataFilter::modules
private

Definition at line 1469 of file JDataFilter.cc.

◆ dataqueue_slice_index

KM3NETDAQ::JDataFilter::dataqueue_slice_index
private

◆ parameters

JTriggerParameters KM3NETDAQ::JDataFilter::parameters
private

Definition at line 1528 of file JDataFilter.cc.

◆ timesliceRouter

JSinglePointer<JTimesliceRouter> KM3NETDAQ::JDataFilter::timesliceRouter
private

Definition at line 1529 of file JDataFilter.cc.

◆ detector

JDetector KM3NETDAQ::JDataFilter::detector
private

Definition at line 1531 of file JDataFilter.cc.

◆ moduleRouter

JSinglePointer<JModuleRouter> KM3NETDAQ::JDataFilter::moduleRouter
private

Definition at line 1532 of file JDataFilter.cc.

◆ buildL1

JSinglePointer<JBuildL1_t> KM3NETDAQ::JDataFilter::buildL1
private

Definition at line 1533 of file JDataFilter.cc.

◆ buildL2

JSinglePointer<JBuildL2_t> KM3NETDAQ::JDataFilter::buildL2
private

Definition at line 1534 of file JDataFilter.cc.

◆ buildSN

JSinglePointer<JBuildL2_t> KM3NETDAQ::JDataFilter::buildSN
private

Definition at line 1535 of file JDataFilter.cc.

◆ buildNB

JSinglePointer<JBuildL2_t> KM3NETDAQ::JDataFilter::buildNB
private

Definition at line 1536 of file JDataFilter.cc.

◆ triggerNB

JSinglePointer<JTriggerNB> KM3NETDAQ::JDataFilter::triggerNB
private

Definition at line 1538 of file JDataFilter.cc.

◆ trigger3DMuon

JSinglePointer<JTrigger3DMuon> KM3NETDAQ::JDataFilter::trigger3DMuon
private

Definition at line 1539 of file JDataFilter.cc.

◆ trigger3DShower

JSinglePointer<JTrigger3DShower> KM3NETDAQ::JDataFilter::trigger3DShower
private

Definition at line 1540 of file JDataFilter.cc.

◆ triggerMXShower

JSinglePointer<JTriggerMXShower> KM3NETDAQ::JDataFilter::triggerMXShower
private

Definition at line 1541 of file JDataFilter.cc.

◆ logErrorRun

JMessageScheduler KM3NETDAQ::JDataFilter::logErrorRun
private

Definition at line 1543 of file JDataFilter.cc.

◆ logErrorDetector

JMessageScheduler KM3NETDAQ::JDataFilter::logErrorDetector
private

Definition at line 1544 of file JDataFilter.cc.

◆ logErrorIndex

JMessageScheduler KM3NETDAQ::JDataFilter::logErrorIndex
private

Definition at line 1545 of file JDataFilter.cc.

◆ logErrorIncomplete

JMessageScheduler KM3NETDAQ::JDataFilter::logErrorIncomplete
private

Definition at line 1546 of file JDataFilter.cc.

◆ logErrorOvercomplete

JMessageScheduler KM3NETDAQ::JDataFilter::logErrorOvercomplete
private

Definition at line 1547 of file JDataFilter.cc.

◆ dumpCount

int KM3NETDAQ::JDataFilter::dumpCount
private

Definition at line 1549 of file JDataFilter.cc.

◆ dumpLimit

int KM3NETDAQ::JDataFilter::dumpLimit
private

Definition at line 1550 of file JDataFilter.cc.

◆ dumpMask

JStatus KM3NETDAQ::JDataFilter::dumpMask
private

Definition at line 1551 of file JDataFilter.cc.

◆ dataFilters

std::vector<JDAQProcess> KM3NETDAQ::JDataFilter::dataFilters
private

Definition at line 1555 of file JDataFilter.cc.

◆ dataQueues

std::vector<JDAQProcess> KM3NETDAQ::JDataFilter::dataQueues
private

Definition at line 1556 of file JDataFilter.cc.

◆ totalCPURAM

long long int KM3NETDAQ::JDataFilter::totalCPURAM
private

Definition at line 1560 of file JDataFilter.cc.

◆ maxQueueDepth

size_t KM3NETDAQ::JDataFilter::maxQueueDepth
private

Definition at line 1561 of file JDataFilter.cc.

◆ maxQueueSize

long long int KM3NETDAQ::JDataFilter::maxQueueSize
private

Definition at line 1562 of file JDataFilter.cc.

◆ queueSize

long long int KM3NETDAQ::JDataFilter::queueSize
private

Definition at line 1563 of file JDataFilter.cc.

◆ reporting

bool KM3NETDAQ::JDataFilter::reporting
private

Definition at line 1567 of file JDataFilter.cc.

◆ numberOfEvents

long long int KM3NETDAQ::JDataFilter::numberOfEvents
private

Definition at line 1569 of file JDataFilter.cc.

◆ numberOfBytes

long long int KM3NETDAQ::JDataFilter::numberOfBytes
private

Definition at line 1570 of file JDataFilter.cc.

◆ numberOfTimeslicesProcessed

long long int KM3NETDAQ::JDataFilter::numberOfTimeslicesProcessed
private

Definition at line 1571 of file JDataFilter.cc.

◆ numberOfIncompleteTimeslicesProcessed

long long int KM3NETDAQ::JDataFilter::numberOfIncompleteTimeslicesProcessed
private

Definition at line 1572 of file JDataFilter.cc.

◆ minFrameNumber

int KM3NETDAQ::JDataFilter::minFrameNumber
private

Definition at line 1574 of file JDataFilter.cc.

◆ maxFrameNumber

int KM3NETDAQ::JDataFilter::maxFrameNumber
private

Definition at line 1575 of file JDataFilter.cc.

◆ number_of_packets_received

long long int KM3NETDAQ::JDataFilter::number_of_packets_received
private

Definition at line 1579 of file JDataFilter.cc.

◆ number_of_packets_discarded

long long int KM3NETDAQ::JDataFilter::number_of_packets_discarded
private

Definition at line 1580 of file JDataFilter.cc.

◆ number_of_reads

long long int KM3NETDAQ::JDataFilter::number_of_reads
private

Definition at line 1581 of file JDataFilter.cc.

◆ number_of_bytes_received

long long int KM3NETDAQ::JDataFilter::number_of_bytes_received
private

Definition at line 1582 of file JDataFilter.cc.

◆ c_buffer

JCircularBuffer_t KM3NETDAQ::JDataFilter::c_buffer
private

Definition at line 1586 of file JDataFilter.cc.

◆ server

JSharedPointer<JControlHost> KM3NETDAQ::JDAQClient::server
protectedinherited

message server

Definition at line 834 of file JDAQClient.hh.

◆ logger

JMessageLogger KM3NETDAQ::JDAQClient::logger
protectedinherited

message logger

Definition at line 835 of file JDAQClient.hh.

◆ select

JSelectReader KM3NETDAQ::JDAQClient::select
privateinherited

select call

Definition at line 1064 of file JDAQClient.hh.

◆ parser

JParser KM3NETDAQ::JDAQClient::parser
privateinherited

parser method enter()

Definition at line 1065 of file JDAQClient.hh.

◆ subscription

JSubscriptionList KM3NETDAQ::JDAQClient::subscription
privateinherited

custom subscription

Definition at line 1066 of file JDAQClient.hh.

◆ root

JDAQStateMachine::state_root JDAQStateMachine::root
inherited

◆ Main

JDAQStateMachine::state_Main JDAQStateMachine::Main
inherited

◆ ev_daq_transitions

int const JDAQStateMachine::ev_daq_transitions
staticprivateinherited
Initial value:
= {
-1
}

Definition at line 216 of file JDAQCHSM.hh.

◆ ev_daq

JDAQStateMachine::ev_daq_event JDAQStateMachine::ev_daq
inherited

◆ ev_daq_param_block

char JDAQStateMachine::ev_daq_param_block[sizeof(ev_daq_event::param_block)]
inherited

Definition at line 238 of file JDAQCHSM.hh.

◆ ev_init_transitions

int const JDAQStateMachine::ev_init_transitions
staticprivateinherited
Initial value:
= {
1, -1
}

Definition at line 240 of file JDAQCHSM.hh.

◆ ev_init

JDAQStateMachine::ev_init_event JDAQStateMachine::ev_init
inherited

◆ ev_init_param_block

char JDAQStateMachine::ev_init_param_block[sizeof(ev_init_event::param_block)]
inherited

Definition at line 258 of file JDAQCHSM.hh.

◆ ev_configure_transitions

int const JDAQStateMachine::ev_configure_transitions
staticprivateinherited
Initial value:
= {
3, -1
}

Definition at line 260 of file JDAQCHSM.hh.

◆ ev_configure

JDAQStateMachine::ev_configure_event JDAQStateMachine::ev_configure
inherited

◆ ev_configure_param_block

char JDAQStateMachine::ev_configure_param_block[sizeof(ev_configure_event::param_block)]
inherited

Definition at line 278 of file JDAQCHSM.hh.

◆ ev_start_transitions

int const JDAQStateMachine::ev_start_transitions
staticprivateinherited
Initial value:
= {
5, -1
}

Definition at line 280 of file JDAQCHSM.hh.

◆ ev_start

JDAQStateMachine::ev_start_event JDAQStateMachine::ev_start
inherited

◆ ev_start_param_block

char JDAQStateMachine::ev_start_param_block[sizeof(ev_start_event::param_block)]
inherited

Definition at line 298 of file JDAQCHSM.hh.

◆ ev_pause_transitions

int const JDAQStateMachine::ev_pause_transitions
staticprivateinherited
Initial value:
= {
9, -1
}

Definition at line 300 of file JDAQCHSM.hh.

◆ ev_pause

JDAQStateMachine::ev_pause_event JDAQStateMachine::ev_pause
inherited

◆ ev_pause_param_block

char JDAQStateMachine::ev_pause_param_block[sizeof(ev_pause_event::param_block)]
inherited

Definition at line 318 of file JDAQCHSM.hh.

◆ ev_continue_transitions

int const JDAQStateMachine::ev_continue_transitions
staticprivateinherited
Initial value:
= {
7, -1
}

Definition at line 320 of file JDAQCHSM.hh.

◆ ev_continue

JDAQStateMachine::ev_continue_event JDAQStateMachine::ev_continue
inherited

◆ ev_continue_param_block

char JDAQStateMachine::ev_continue_param_block[sizeof(ev_continue_event::param_block)]
inherited

Definition at line 338 of file JDAQCHSM.hh.

◆ ev_stop_transitions

int const JDAQStateMachine::ev_stop_transitions
staticprivateinherited
Initial value:
= {
8, -1
}

Definition at line 340 of file JDAQCHSM.hh.

◆ ev_stop

JDAQStateMachine::ev_stop_event JDAQStateMachine::ev_stop
inherited

◆ ev_stop_param_block

char JDAQStateMachine::ev_stop_param_block[sizeof(ev_stop_event::param_block)]
inherited

Definition at line 358 of file JDAQCHSM.hh.

◆ ev_reset_transitions

int const JDAQStateMachine::ev_reset_transitions
staticprivateinherited
Initial value:
= {
4, -1
}

Definition at line 360 of file JDAQCHSM.hh.

◆ ev_reset

JDAQStateMachine::ev_reset_event JDAQStateMachine::ev_reset
inherited

◆ ev_reset_param_block

char JDAQStateMachine::ev_reset_param_block[sizeof(ev_reset_event::param_block)]
inherited

Definition at line 378 of file JDAQCHSM.hh.

◆ ev_quit_transitions

int const JDAQStateMachine::ev_quit_transitions
staticprivateinherited
Initial value:
= {
6, -1
}

Definition at line 380 of file JDAQCHSM.hh.

◆ ev_quit

JDAQStateMachine::ev_quit_event JDAQStateMachine::ev_quit
inherited

◆ ev_quit_param_block

char JDAQStateMachine::ev_quit_param_block[sizeof(ev_quit_event::param_block)]
inherited

Definition at line 398 of file JDAQCHSM.hh.

◆ ev_off_transitions

int const JDAQStateMachine::ev_off_transitions
staticprivateinherited
Initial value:
= {
2, 11, -1
}

Definition at line 400 of file JDAQCHSM.hh.

◆ ev_off

JDAQStateMachine::ev_off_event JDAQStateMachine::ev_off
inherited

◆ ev_off_param_block

char JDAQStateMachine::ev_off_param_block[sizeof(ev_off_event::param_block)]
inherited

Definition at line 418 of file JDAQCHSM.hh.

◆ ev_check_transitions

int const JDAQStateMachine::ev_check_transitions
staticprivateinherited
Initial value:
= {
12, -1
}

Definition at line 420 of file JDAQCHSM.hh.

◆ ev_check

JDAQStateMachine::ev_check_event JDAQStateMachine::ev_check
inherited

◆ ev_check_param_block

char JDAQStateMachine::ev_check_param_block[sizeof(ev_check_event::param_block)]
inherited

Definition at line 438 of file JDAQCHSM.hh.

◆ ev_input_transitions

int const JDAQStateMachine::ev_input_transitions
staticprivateinherited
Initial value:
= {
13, -1
}

Definition at line 440 of file JDAQCHSM.hh.

◆ ev_input

JDAQStateMachine::ev_input_event JDAQStateMachine::ev_input
inherited

◆ ev_input_param_block

char JDAQStateMachine::ev_input_param_block[sizeof(ev_input_event::param_block)]
inherited

Definition at line 458 of file JDAQCHSM.hh.

◆ ev_recover_transitions

int const JDAQStateMachine::ev_recover_transitions
staticprivateinherited
Initial value:
= {
10, -1
}

Definition at line 460 of file JDAQCHSM.hh.

◆ ev_recover

JDAQStateMachine::ev_recover_event JDAQStateMachine::ev_recover
inherited

◆ ev_recover_param_block

char JDAQStateMachine::ev_recover_param_block[sizeof(ev_recover_event::param_block)]
inherited

Definition at line 478 of file JDAQCHSM.hh.

◆ ev_error_transitions

int const JDAQStateMachine::ev_error_transitions
staticprivateinherited
Initial value:
= {
0, -1
}

Definition at line 480 of file JDAQCHSM.hh.

◆ ev_error

JDAQStateMachine::ev_error_event JDAQStateMachine::ev_error
inherited

◆ ev_error_param_block

char JDAQStateMachine::ev_error_param_block[sizeof(ev_error_event::param_block)]
inherited

Definition at line 495 of file JDAQCHSM.hh.

◆ state_

CHSM_ns_alias::state* JDAQStateMachine::state_[11]
privateinherited

Definition at line 522 of file JDAQCHSM.hh.

◆ transition_

CHSM_ns_alias::transition const JDAQStateMachine::transition_
staticprivateinherited
Initial value:
= {
{ 0, 2, 8, 0, (CHSM_ns_alias::transition::action)&JDAQStateMachine::A1 },
{ 0, 3, 4, 0, (CHSM_ns_alias::transition::action)&JDAQStateMachine::A2 },
{ 0, 3, -1, 0, (CHSM_ns_alias::transition::action)&JDAQStateMachine::A3 },
{ 0, 4, 5, 0, (CHSM_ns_alias::transition::action)&JDAQStateMachine::A4 },
{ 0, 4, 3, 0, (CHSM_ns_alias::transition::action)&JDAQStateMachine::A5 },
{ 0, 5, 7, 0, (CHSM_ns_alias::transition::action)&JDAQStateMachine::A6 },
{ 0, 5, 4, 0, (CHSM_ns_alias::transition::action)&JDAQStateMachine::A7 },
{ 0, 6, 7, 0, (CHSM_ns_alias::transition::action)&JDAQStateMachine::A8 },
{ 0, 6, 4, 0, (CHSM_ns_alias::transition::action)&JDAQStateMachine::A9 },
{ 0, 7, 6, 0, (CHSM_ns_alias::transition::action)&JDAQStateMachine::A10 },
{ 0, 8, 2, 0, (CHSM_ns_alias::transition::action)&JDAQStateMachine::A11 },
{ 0, 8, -1, 0, (CHSM_ns_alias::transition::action)&JDAQStateMachine::A12 },
{ 0, 9, -1, 0, (CHSM_ns_alias::transition::action)&JDAQStateMachine::A13 },
{ 0, 9, -1, 0, (CHSM_ns_alias::transition::action)&JDAQStateMachine::A14 },
0
}
void A1(CHSM_ns_alias::event const &)
Definition: JDAQCHSM.cc:344
void A4(CHSM_ns_alias::event const &)
Definition: JDAQCHSM.cc:350
void A13(CHSM_ns_alias::event const &)
Definition: JDAQCHSM.cc:376
void A11(CHSM_ns_alias::event const &)
Definition: JDAQCHSM.cc:372
void A2(CHSM_ns_alias::event const &)
Definition: JDAQCHSM.cc:346
void A14(CHSM_ns_alias::event const &)
Definition: JDAQCHSM.cc:378
void A7(CHSM_ns_alias::event const &)
Definition: JDAQCHSM.cc:364
void A9(CHSM_ns_alias::event const &)
Definition: JDAQCHSM.cc:368
void A12(CHSM_ns_alias::event const &)
Definition: JDAQCHSM.cc:374
void A3(CHSM_ns_alias::event const &)
Definition: JDAQCHSM.cc:348
void A8(CHSM_ns_alias::event const &)
Definition: JDAQCHSM.cc:366
void A5(CHSM_ns_alias::event const &)
Definition: JDAQCHSM.cc:352
void A10(CHSM_ns_alias::event const &)
Definition: JDAQCHSM.cc:370
void A6(CHSM_ns_alias::event const &)
Definition: JDAQCHSM.cc:354

Definition at line 523 of file JDAQCHSM.hh.

◆ taken_

CHSM_ns_alias::event const* JDAQStateMachine::taken_[14]
privateinherited

Definition at line 524 of file JDAQCHSM.hh.

◆ target_

CHSM_ns_alias::state* JDAQStateMachine::target_[14]
privateinherited

Definition at line 525 of file JDAQCHSM.hh.

◆ name

std::string JDAQCHSM::name
protectedinherited

Definition at line 165 of file JDAQCHSM.hh.

◆ detector_id

int JDAQCHSM::detector_id
protectedinherited

Definition at line 166 of file JDAQCHSM.hh.

◆ run_number

int JDAQCHSM::run_number
protectedinherited

Definition at line 167 of file JDAQCHSM.hh.

◆ TIMEOUT_S

const int KM3NETDAQ::JDAQClient_t::TIMEOUT_S = 1
staticinherited

time out of update [s]

Definition at line 63 of file JDAQClient.hh.

◆ eventTable

JEventTable KM3NETDAQ::JDAQClient_t::eventTable
protectedinherited

event table

Definition at line 203 of file JDAQClient.hh.

◆ fullname

std::string KM3NETDAQ::JDAQClient_t::fullname
protectedinherited

Definition at line 205 of file JDAQClient.hh.

◆ unique_tag

JTag KM3NETDAQ::JDAQClient_t::unique_tag
protectedinherited

Definition at line 206 of file JDAQClient.hh.

◆ clock

JTimekeeper KM3NETDAQ::JDAQClient_t::clock
protectedinherited

central clock

Definition at line 207 of file JDAQClient.hh.

◆ event_info

std::string KM3NETDAQ::JDAQClient_t::event_info
protectedinherited

event information

Definition at line 208 of file JDAQClient.hh.


The documentation for this class was generated from the following file: