4#ifdef DEBUG_ACOUSTICDATAFILTER 
    7#include <boost/date_time/posix_time/posix_time.hpp> 
    9#define DEBUG_MSG(str,lev) do { if (((uint8_t)lev)>=AcousticDataFilter::DEBUG_LEVEL) { DBG_MSG << boost::posix_time::microsec_clock::local_time() << " ACOUSTICDATAFILTER(" << (void*)this << "): "<< str << '\n'; } }while( false ) 
   11#define DEBUG_MSG(str,lev) do { } while ( false ) 
   19                                                                                const std::string& port,\
 
   20                                                                                const std::string& name,\
 
   21                                                                    const std::string& server,\
 
   22                                                                                const std::string& wisdom,\
 
   23                                                                                const std::string& output,\
 
   24                                                                                const std::string& raw,\
 
   26                                                                    const int          level):  
KM3NETDAQ::JDAQClient(name,server,logger,level),\
 
   27                                                                    server_acceptor_(server_io_service_),
 
   28                                                                    strand_(trigger_io_service_)
 
 
   57  boost::asio::ip::tcp::resolver::query l_query(
address_,
port_);
 
   58  boost::asio::ip::tcp::endpoint l_endpoint = *l_resolver.resolve(l_query);
 
   60  server_acceptor_.set_option(boost::asio::ip::tcp::acceptor::reuse_address(
true));
 
 
   77  for (i=
links_.begin(); i!=
links_.end(); ++i){ (*i)->Disconnect(); }
 
 
  108      link->Start_reading();
 
 
  120#ifdef TOAFINDER_USE_FLOAT 
  121      if (fftwf_import_wisdom_from_file(pfile)==1)
 
  123                if (fftw_import_wisdom_from_file(pfile)==1)
 
 
  140#ifdef TOAFINDER_USE_FLOAT 
  141      fftwf_export_wisdom_to_file(pfile);
 
  143      fftw_export_wisdom_to_file(pfile);
 
 
  156  Parser dummy(std::string(buffer, length),
';');
 
  159  std::string l_debug_file_path;
 
  160  std::string l_window;
 
  161  std::string l_overlap;
 
  167  l_window            = dummy.
Find(
"ADF_analysis_window_size", 0);
 
  168  l_overlap           = dummy.
Find(
"ADF_analysis_window_overlap", 0);
 
  169  l_probes            = dummy.
Find(
"ADF_waveform");
 
  170  l_dom_configuration = dummy.
Find(
"ADF_DOM_configuration");
 
  172  l_toa_path=dummy.
Find(
"ADF_TOA_path");
 
  174  l_dbg_path=dummy.
Find(
"ADF_DBG_path");
 
  177  DEBUG_MSG(
"SM:Configure. win="<<l_window,2);
 
  178  DEBUG_MSG(
"SM:Configure. ovr="<<l_overlap,2);
 
  182  DEBUG_MSG(
"SM:Configure. n dom="<<l_dom_configuration.size(),2);
 
  183  DEBUG_MSG(
"SM:Configure. n pro="<<l_probes.size(),2);
 
  185  for (
auto i=0; i< l_probes.size(); i++) {
 
  186    DEBUG_MSG(
"SM:Configure. l_probes[" << i << 
"]=" << l_probes[i] << 
"\n",2);
 
  189  int probe_errors = 
Create_probes(l_probes,atoi(l_window.c_str()));
 
  191    ERROR(probe_errors << 
" errors encountered when reading probes from configuration\n");
 
  197    ERROR(dom_errors << 
" errors encountered when reading doms from configuration\n");
 
 
  215  for(
const auto& probeString: probes)
 
  218      if (waveform==std::nullopt) {
 
  220        ERROR(
"could not parse probe line " << probeString << 
"\n");
 
  223      DEBUG_MSG(
"creating probe id "<<waveform->id,1);
 
  224      pProbe l_probe = boost::make_shared<KM3::TOALIB::CTOAFinder::probeSignalT>(*(
new KM3::TOALIB::CTOAFinder::probeSignalT(window)));
 
  226      l_probe->copyFromBuffer(waveform->samples.data(),waveform->samples.size());
 
  227      DEBUG_MSG(
"insert probe id"<<waveform->id,1);
 
 
  240  for (
const auto& line : dom_configuration) {
 
  243    if (config==std::nullopt) {
 
  245      ERROR(
"could not parse DOM configuration line " << line << 
"\n");
 
  249    const auto& [ 
dom_id, probe_configs, write_flag ] = config.value();
 
  260    for (
const auto& probe_config: probe_configs) {
 
  261      DEBUG_MSG(
"adding probe "<<probe_config.id<<
" with threshold "<<probe_config.threshold<<
" to DOM "<<
dom_id,1);
 
  262      auto known_probe = 
probes_.find(probe_config.id);
 
  263      if (known_probe== 
probes_.end()) {
 
  264        ERROR(
"probe id " << probe_config.id << 
" not found in the internal map ! Not adding it to our list of probes !" << 
"\n");
 
  267      l_dom->Add_probe(known_probe->second,probe_config.id,probe_config.threshold);
 
  269    DEBUG_MSG(
"setting test id="<<write_flag,1);
 
  270    l_dom->Set_test(write_flag);
 
 
  298  std::time_t seconds = std::time(0);
 
  299  l_file+=
"TOA_"+std::to_string((
long long unsigned int)seconds)+
".bin";
 
  300  toa_file_.open(l_file.c_str(),std::ofstream::binary);
 
  301  DEBUG_MSG(
"Toa file opened at "<<seconds,1);
 
 
#define DEBUG_MSG(str, lev)
 
#define SERVER_THREAD_POOL
 
std::pair< int, pProbe > probe_entry
 
#define TRIGGER_THREAD_POOL
 
std::pair< std::size_t, pDOM > dom_entry
 
General purpose messaging.
 
boost::shared_ptr< KM3NeT_Acoustic_Link > pLink
 
boost::shared_ptr< KM3::TOALIB::CTOAFinder::probeSignalT > pProbe
 
boost::shared_ptr< KM3NeT_DOM > pDOM
 
int Create_DOMs(std::vector< std::string > doms, std::string &debug_file_path, std::size_t window, std::size_t overlap)
 
boost::asio::io_service::strand strand_
 
std::string toa_file_path_
 
boost::asio::ip::tcp::acceptor server_acceptor_
 
virtual ~AcousticDataFilter()
 
void Send_toa(ToA_Packet packet)
 
virtual void actionQuit(int length, const char *buffer)
 
boost::atomic< bool > exit_
 
boost::atomic< bool > running_
 
boost::asio::io_service::work * trigger_work_
 
boost::thread_group trigger_threads_
 
virtual void actionContinue(int length, const char *buffer)
 
int Create_probes(std::vector< std::string > probes, std::size_t window)
 
virtual void actionConfigure(int length, const char *buffer)
 
std::vector< pLink > links_
 
virtual void actionReset(int length, const char *buffer)
 
std::map< std::size_t, pDOM > doms_
 
boost::asio::io_service::work * server_work_
 
virtual void actionStop(int length, const char *buffer)
 
boost::asio::io_service server_io_service_
 
boost::asio::io_service trigger_io_service_
 
const JNET::JTag & clientTag() const
 
boost::thread_group server_threads_
 
virtual void actionInit(int length, const char *buffer)
 
AcousticDataFilter(const std::string &address, const std::string &port, const std::string &name, const std::string &server, const std::string &wisdom, const std::string &output, const std::string &raw, JLOGGER::JLogger *logger, const int level)
 
void Accept_completed(pLink link, const boost::system::error_code &error)
 
void Send_toa_async(ToA_Packet packet)
 
virtual void actionPause(int length, const char *buffer)
 
virtual void actionStart(int length, const char *buffer)
 
std::map< std::size_t, pProbe > probes_
 
std::string debug_file_path_
 
JDAQStateMachine::ev_configure_event ev_configure
 
Interface for logging messages.
 
void replaceEvent(const JTag &oldTag, const JTag &newTag, JDAQEvent_t &event)
Replace tag of given event in event table.
 
std::vector< std::string > Find(const std::string &tag)
 
KM3NeT DAQ data structures and auxiliaries.
 
static const JNET::JTag RC_CMD
 
std::optional< DOMConfig > parseDOMConfiguration(const std::string &dom_configuration_line)
Parse a line that should contain the ADF configuration for a single DOM.
 
std::optional< Waveform< T > > parseWaveformSamples(const std::string &adf_waveform_line)