From dfb590c3f2aa062d9643ac1ff61730728adbbbeb Mon Sep 17 00:00:00 2001 From: Chao1009 <pengc2010@gmail.com> Date: Thu, 21 Nov 2019 12:41:16 -0500 Subject: [PATCH] Update et_feeder, it now reads a datafile and write the events to the ET system --- CMakeLists.txt | 3 +++ tools/CMakeLists.txt | 2 ++ tools/et_feeder.cpp | 42 +++++++++++++++++++++++++++++++----------- 3 files changed, 36 insertions(+), 11 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6858238..346b106 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -27,6 +27,9 @@ endif() find_package(coda_et REQUIRED) get_target_property(CODA_ET_INCLUDE_DIR coda_et::coda_et INTERFACE_INCLUDE_DIRECTORIES) +find_package(EVIO REQUIRED) +get_target_property(EVIO_INCLUDE_DIR EVIO::EVIO INTERFACE_INCLUDE_DIRECTORIES) + #---------------------------------------------------------------------------- # Set up Podd and ROOT dependencies if(HCANA_BUILTIN_PODD) diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt index 74815ad..5913b61 100644 --- a/tools/CMakeLists.txt +++ b/tools/CMakeLists.txt @@ -16,6 +16,7 @@ foreach(exe_src ${APP_SOURCES}) $<INSTALL_INTERFACE:${SPDLOG_INCLUDE_DIR}> $<BUILD_INTERFACE:${FMT_INCLUDE_DIR}> $<BUILD_INTERFACE:${CODA_ET_INCLUDE_DIR}> + $<BUILD_INTERFACE:${EVIO_INCLUDE_DIR}> ) target_link_libraries(${exe} @@ -24,6 +25,7 @@ foreach(exe_src ${APP_SOURCES}) Podd::Podd Podd::Decode coda_et::coda_et + EVIO::evioxx ) install(TARGETS ${exe} DESTINATION ${CMAKE_INSTALL_BINDIR}) endforeach(exe_src ${APP_SOURCES}) diff --git a/tools/et_feeder.cpp b/tools/et_feeder.cpp index ce11688..cb14f23 100644 --- a/tools/et_feeder.cpp +++ b/tools/et_feeder.cpp @@ -1,12 +1,14 @@ #include "ConfigOption.h" #include "PRadETChannel.h" #include "et.h" -#include "evio.h" +#include "evio/evioUtil.hxx" +#include "evio/evioFileChannel.hxx" #include <csignal> #include <thread> #include <chrono> #include <iostream> +#define PROGRESS_COUNT 100 using namespace std::chrono; @@ -19,7 +21,7 @@ void signal_handler(int signal) { } -int main(int argc, char* argv[]) +int main(int argc, char* argv[]) try { // setup input arguments ConfigOption conf_opt; @@ -65,19 +67,20 @@ int main(int argc, char* argv[]) } } + // attach to ET system auto ch = new PRadETChannel(); - try { - ch->Open(host.c_str(), port, etf.c_str()); - ch->NewStation("Data Feeder"); - ch->AttachStation(); - } catch (PRadException e) { - std::cerr << e.FailureType() << ": " << e.FailureDesc() << std::endl; - return -1; - } + ch->Open(host.c_str(), port, etf.c_str()); + ch->NewStation("Data Feeder"); + ch->AttachStation(); + + // evio file reader + evio::evioFileChannel *chan = new evio::evioFileChannel(conf_opt.GetArgument(0).c_str(), "r"); + chan->open(); // install signal handler std::signal(SIGINT, signal_handler); - while (true) { + int count = 0; + while (chan->read()) { if (gSignalStatus == SIGINT) { std::cout << "Received control-C, exiting..." << std::endl; ch->ForceClose(); @@ -86,9 +89,26 @@ int main(int argc, char* argv[]) system_clock::time_point start(system_clock::now()); system_clock::time_point next(start + std::chrono::milliseconds(interval)); + if (++count % PROGRESS_COUNT == 0) { + std::cout << "Read and feed " << count << " events to ET, rate is 1 event per " + << interval << " ms.\r" << std::flush; + } + ch->Write((void*) chan->getBuffer(), chan->getBufSize() * sizeof(uint32_t)); + std::this_thread::sleep_until(next); } + std::cout << "Read and feed " << count << " events to ET, rate is 1 event per " + << interval << " ms." << std::endl; + chan->close(); return 0; + +} catch (PRadException e) { + std::cerr << e.FailureType() << ": " << e.FailureDesc() << std::endl; + return -1; +} catch (evio::evioException e) { + std::cerr << e.toString() << endl; +} catch (...) { + std::cerr << "?unknown exception" << endl; } -- GitLab