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);
207 for(
const auto& probeString: probes)
210 if (waveform==std::nullopt) {
211 ERROR(
"could not parse probe line " << probeString);
213 DEBUG_MSG(
"creating probe id "<<waveform->id,1);
214 pProbe l_probe = boost::make_shared<KM3::TOALIB::CTOAFinder::probeSignalT>(*(
new KM3::TOALIB::CTOAFinder::probeSignalT(window)));
216 l_probe->copyFromBuffer(waveform->samples.data(),waveform->samples.size());
217 DEBUG_MSG(
"insert probe id"<<waveform->id,1);
227 for(
size_t t=0;t<dom_configuration.size();++t)
229 std::istringstream l_iss(dom_configuration.at(t));
233 uint32_t l_threshold;
234 uint32_t l_waveforms;
237 std::getline(l_iss, l_line,
' ');
238 l_dom_id=atoi(l_line.c_str());
246 std::getline(l_iss, l_line,
' ');
247 l_waveforms=atoi(l_line.c_str());
248 DEBUG_MSG(
"n waveforms="<<l_waveforms,1);
249 for (uint32_t i=0; i<l_waveforms; ++i)
251 std::getline(l_iss, l_line,
' ');
252 l_probe_id=atoi(l_line.c_str());
253 std::getline(l_iss, l_line,
' ');
254 l_threshold=atoi(l_line.c_str());
255 DEBUG_MSG(
"adding probe "<<l_probe_id<<
" with threshold "<<l_threshold<<
" to DOM "<<l_dom_id,1);
256 l_dom->Add_probe(
probes_.find(l_probe_id)->second,l_probe_id,l_threshold);
258 std::getline(l_iss, l_line,
' ');
259 l_test=atoi(l_line.c_str());
261 l_dom->Set_test(l_test);
288 std::time_t seconds = std::time(0);
289 l_file+=
"TOA_"+std::to_string((
long long unsigned int)seconds)+
".bin";
290 toa_file_.open(l_file.c_str(),std::ofstream::binary);
291 DEBUG_MSG(
"Toa file opened at "<<seconds,1);
#define DEBUG_MSG(str, lev)
#define SERVER_THREAD_POOL
std::pair< std::size_t, 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
boost::asio::io_service::strand strand_
std::string toa_file_path_
boost::asio::ip::tcp::acceptor server_acceptor_
virtual ~AcousticDataFilter()
void Create_probes(std::vector< std::string > probes, std::size_t window)
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)
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_
void Create_DOMs(std::vector< std::string > doms, std::string &debug_file_path, std::size_t window, std::size_t overlap)
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< Waveform< T > > parseWaveformSamples(const std::string &adf_waveform_line)