diff --git a/.gitignore b/.gitignore index 0074d8f8226cd2d7070bafd7378cfdb5f7b42600..d7e348cdd97756e6f19f2bc17d3539d9d2fd631f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ *.cflags *.config *.creator +*.creator.user *.cxxflags *.files *.includes diff --git a/CMakeLists.txt b/CMakeLists.txt index 9a5baefac94726e63f772dda0afa8a0752814071..e30905717d049ba21ce436dd1d1910f9edfd0497 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,276 +1,51 @@ -cmake_minimum_required(VERSION 2.8.11) +cmake_minimum_required(VERSION 3.22) -set(proj_name fazia-ecc) -set(proj_version 2.0) -if(${CMAKE_VERSION} VERSION_LESS 3.0) - project(${proj_name}) - set(PROJECT_VERSION ${proj_version}) - set(${proj_name}_VERSION ${proj_version}) -else() - cmake_policy(VERSION 3.0) - project(${proj_name} VERSION ${proj_version}) -endif() - -set(CMAKE_BUILD_TYPE "RelWithDebInfo") -set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} - ${CMAKE_SOURCE_DIR}/cmake - ${CMAKE_SOURCE_DIR}/externals/cmake/AddSubproject +project(merger-stat + VERSION 3.0 + DESCRIPTION "Utility tha make some useful stats from merged data" + LANGUAGES CXX C ) -include(AddSubproject) - -# automatically add paths to external libraries to RPATH of all binaries -set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) - -# ============================================================================= -# ------------------------------ Build options -------------------------------- -# ============================================================================= - -option(USE_TAPIRMQ "use TapirMQ-client to push metadata and logs to InfluxDB" ON) - -set(LIBARIES_TO_LINK) - -# look for KaliVeda with FAZIA libraries and optionally sqlite -find_package(KaliVeda 1.10 REQUIRED FAZIA) -include(${KALIVEDA_USE_FILE}) -list(APPEND LIBRARIES_TO_LINK ${KALIVEDA_LIBRARIES}) - -# look for ROOT -find_package(ROOT REQUIRED GuiHtml Thread) -include(SetUpROOTBuild) -list(APPEND LIBRARIES_TO_LINK ${ROOT_LIBRARIES}) - -# look for libcurl -find_package(CURL REQUIRED) -if(CURL_FOUND) - include_directories(${CURL_INCLUDE_DIRS}) -endif() +#- set path to our cmake modules +set(CMAKE_MODULE_PATH + ${PROJECT_SOURCE_DIR}/cmake + ${PROJECT_SOURCE_DIR}/external/CMakeListsUtilities + ${PROJECT_SOURCE_DIR}/external/FindPackageAddDependency + ${PROJECT_SOURCE_DIR}/external/FindZeroMQ + ${CMAKE_MODULE_PATH} + ) -# to read GANIL MFM merged frame (INDRA-FAZIA) -#---sources available from: https://gitlab.in2p3.fr/jdfcode/mfmlib.git -find_package(mfmlib QUIET) -if(mfmlib_FOUND) - set(HAVE_MFMLIB yes) - include_directories(${mfmlib_INCLUDE_DIRS}) - list(APPEND LIBRARIES_TO_LINK ${mfmlib_LIBRARIES}) -endif(mfmlib_FOUND) +#-- to handle dependencies on other packages +include(FindPackageAddDependency) -# to read GANIL Mesytec data -#---sources available from: https://gitlab.in2p3.fr/mesytec-ganil/mesytec_data -find_package(mesytec_data REQUIRED) -if(mesytec_data_FOUND) - set(WITH_MESYTEC yes) - include_directories(${mesytec_data_INCLUDE_DIRS}) - list(APPEND LIBRARIES_TO_LINK ${mesytec_data_LIBRARIES}) +include(GNUPackageInstallDirs) -else() - message(STATUS "mesytec_data not found...") -endif() +include(StandardRpathHandling) +set(CMAKE_INCLUDE_CURRENT_DIR_IN_INTERFACE ON) -# look for boost -find_package(Boost COMPONENTS program_options) -if(Boost_PROGRAM_OPTIONS_FOUND) - set(HAVE_BOOST yes) - include_directories(${Boost_INCLUDE_DIRS}) - list(APPEND LIBRARIES_TO_LINK ${Boost_PROGRAM_OPTIONS_LIBRARY}) +find_package_add_dependency(Protobuf REQUIRED) +if(Protobuf_FOUND) + set(HAVE_PROTOBUF yes) endif() -include(GNUInstallDirs) -set(CMAKE_INSTALL_PKGINCDIR ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}) -set(CMAKE_INSTALL_PKGLIBDIR ${CMAKE_INSTALL_LIBDIR}/${PROJECT_NAME}) -set(CMAKE_INSTALL_PKGCONFIGDIR ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}) - -#------------------------------------------------------------------------------------------- -# Build & install analysis tools (former fazia-oscillo branch) -# look for protobuf -find_package(Protobuf) -if(NOT PROTOBUF_FOUND) - # we may need pkg-config to find installation - find_package(PkgConfig QUIET) - - if(PkgConfig_FOUND) - message(STATUS "Looking for protobuf with pkg-config") - ## use pkg-config to get hints for protobuf locations - pkg_check_modules(PROTOBUF QUIET protobuf) - if(PROTOBUF_FOUND) - set(CMAKE_LIBRARY_PATH ${PROTOBUF_LIBRARY_DIRS} ${CMAKE_LIBRARY_PATH}) - set(PROTOBUF_INCLUDE_DIR ${PROTOBUF_INCLUDE_DIRS}) - set(Protobuf_INCLUDE_DIR ${PROTOBUF_INCLUDE_DIRS}) - find_package(Protobuf) - endif(PROTOBUF_FOUND) - endif(PkgConfig_FOUND) -endif(NOT PROTOBUF_FOUND) -if(PROTOBUF_FOUND) - # protobuf requires C++11 or higher - # check if -std=c++11/4/7 flag already in cxx flags - string(FIND ${CMAKE_CXX_FLAGS} "-std=c++11" CPP11_FLAGS) - string(FIND ${CMAKE_CXX_FLAGS} "-std=c++14" CPP14_FLAGS) - string(FIND ${CMAKE_CXX_FLAGS} "-std=c++17" CPP17_FLAGS) - if((CPP11_FLAGS GREATER 0) OR (CPP14_FLAGS GREATER 0) OR (CPP17_FLAGS GREATER 0)) - # nothing to do, one of flags is already present - else() - include(CheckCXXCompilerFlag) - CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11) - if(COMPILER_SUPPORTS_CXX11) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") - endif() - endif() -endif(PROTOBUF_FOUND) - -add_definitions( -DOSCILLO_DATADIR="${CMAKE_INSTALL_FULL_SYSCONFDIR}" ) - -# look for ZeroMQ -find_package(ZMQ) -if(PROTOBUF_FOUND AND ZMQ_FOUND) - set(HAVE_PROTOBUF yes) - include_directories(${PROTOBUF_INCLUDE_DIRS}) - message(STATUS "Protobuf include dir = ${PROTOBUF_INCLUDE_DIRS}") - include_directories(${CMAKE_BINARY_DIR}/protobuf) - - set(HAVE_ZMQ_H yes) - include_directories(${ZMQ_INCLUDE_DIRS}) - list(APPEND LIBRARIES_TO_LINK ${ZMQ_LIBRARIES}) - message(STATUS "ZMQ include dir = ${ZMQ_INCLUDE_DIRS}") - message(STATUS "ZMQ library = ${ZMQ_LIBRARIES}") - - # generate protobuf source from event description - set(FAZIA_EVENT_PROTO FzEventSet.proto) - add_subdirectory(protobuf) - get_property(FAZIA_PROTOBUF_LIB GLOBAL PROPERTY FAZIA_PROTOBUF_LIB) - list(APPEND LIBRARIES_TO_LINK ${FAZIA_PROTOBUF_LIB}) - -endif(PROTOBUF_FOUND AND ZMQ_FOUND) - -set(LIBRARY_TARGETS) -if(USE_TAPIRMQ) - list(APPEND LIBRARY_TARGETS tapirmq-client) - add_subproject(externals/tapirmq-client - PATH_TO_LIBS "$ORIGIN/fazia-ecc:$ORIGIN/../lib/fazia-ecc") - message(NOTICE "using TapirMQ-client library") -endif(USE_TAPIRMQ) - - -# generate config.h -configure_file(${CMAKE_SOURCE_DIR}/config.h.in ${CMAKE_BINARY_DIR}/fzoscillo-config.h) -install(FILES ${CMAKE_BINARY_DIR}/fzoscillo-config.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) -include_directories(${CMAKE_BINARY_DIR}) -add_definitions( -DHAVE_CONFIG_H ) - -add_definitions( -DPKGBUILDDIR=${PROJECT_BINARY_DIR} -DPKGDATADIR=${CMAKE_INSTALL_FULL_DATADIR} -DPKGHTMLDIR=${CMAKE_INSTALL_FULL_HTMLDIR} ) - -list(APPEND LIBRARY_TARGETS fazia-ecc-base) -add_subdirectory(base) -include_directories(${CMAKE_SOURCE_DIR}/base) -list(APPEND LIBRARY_TARGETS fazia-ecc-ecc) -add_subdirectory(ecc) -install_subproject_targets() - -include_directories(${CMAKE_SOURCE_DIR}/ecc) -list(APPEND LIBRARY_TARGETS fazia-ecc-mon) -add_subdirectory(monitoring) -include_directories(${CMAKE_SOURCE_DIR}/monitoring) - -add_subdirectory(merger) - -list(APPEND LIBRARIES_TO_LINK ${LIBRARY_TARGETS}) - -add_subdirectory(execs) - -set(doc_DATA README INSTALL README.server README.usersguide COPYING) -install(FILES ${doc_DATA} DESTINATION ${CMAKE_INSTALL_DOCDIR}) - -install(DIRECTORY etc/ DESTINATION ${CMAKE_INSTALL_SYSCONFDIR}) -# install PHP scripts for webserver database access -install(DIRECTORY webserver DESTINATION ${CMAKE_INSTALL_SYSCONFDIR}) - -include(CreateConfigScript) -create_config_script() - - -if(PROTOBUF_FOUND AND ZMQ_FOUND) - - - if(DEFINED ENV{SITE}) - if($ENV{SITE} STREQUAL "CCIN2P3") #-at IN2P3 Computing Centre, build with support for xrootd - find_package(XROOTD) - if(XROOTD_FOUND) - list(APPEND LIBRARIES_TO_LINK ${XROOTD_LIBRARIES}) - endif() - endif() - endif() - - # configure subdirectories for different executables - add_subdirectory(oscillo) - add_subdirectory(viewer) - if(HAVE_MFMLIB AND WITH_MESYTEC) - add_subdirectory(indra-viewer) - add_subdirectory(indra-scaler) - endif() -# - obsolete: do not build -# add_subdirectory(converter) - add_subdirectory(database) - add_subdirectory(replay) - add_subdirectory(scaler) - -endif(PROTOBUF_FOUND AND ZMQ_FOUND) - -include(CheckCXXSymbolExists) -set(CMAKE_REQUIRED_INCLUDES ${KALIVEDA_INCLUDE_DIR}) -CHECK_CXX_SYMBOL_EXISTS(WITH_RSQLITE KVConfig.h GOT_KVSQLITE) - -if(GOT_KVSQLITE) - message(STATUS "Got KVSQLITE") - add_subdirectory(dbviewer) -else() - message(STATUS "No KVSQLITE: dbviewer directory will not be compiled") +#-- look for ZeroMQ (not obligatory) +find_package_add_dependency(ZeroMQ QUIET + BEFORE_FIND "set(CMAKE_MODULE_PATH \${CMAKE_CURRENT_LIST_DIR} \${CMAKE_MODULE_PATH})" + ) +if(ZeroMQ_FOUND) + set(HAVE_ZMQ_H yes) + install( + FILES ${PROJECT_SOURCE_DIR}/external/FindZeroMQ/FindZeroMQ.cmake + DESTINATION ${CMAKE_INSTALL_PKGCONFIGDIR} + ) endif() +find_package(Boost REQUIRED COMPONENTS program_options) -# set RPATH on all executables in order to find private utility libraries -# libfazia_protobuf_event.so & libfazia_sound.so which will not be installed in a -# standard library directory but in $PREFIX/bin/fazia-ecc/ -get_property(EXEC_TARGET_LIST GLOBAL PROPERTY EXEC_TARGET_LIST) -foreach(exec_target ${EXEC_TARGET_LIST}) - get_target_property(TARGET_RUNPATH ${exec_target} INSTALL_RPATH) - list(APPEND TARGET_RUNPATH ${CMAKE_INSTALL_FULL_BINDIR}/${PROJECT_NAME}) - set_target_properties(${exec_target} PROPERTIES INSTALL_RPATH "${TARGET_RUNPATH}") -endforeach() - -#install user's guides -install(DIRECTORY doc/ DESTINATION ${CMAKE_INSTALL_HTMLDIR}) - -#generate & install class reference doc -add_custom_target(html - make -f ${PROJECT_SOURCE_DIR}/make.html ROOTEXEC=${ROOT_EXECUTABLE} srcdir=${PROJECT_SOURCE_DIR} builddir=${PROJECT_BUILD_DIR} - COMMAND ${CMAKE_COMMAND} -E copy_directory ${PROJECT_BINARY_DIR}/htmldoc ${CMAKE_INSTALL_FULL_HTMLDIR} - WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} - ) - - - - - - - - - - - - - - - - - - +find_package(mfmlib REQUIRED) -find_package(Protobuf REQUIRED) -PROTOBUF_GENERATE_CPP(PROTO_SRCS PROTO_HDRS MergerInfo.proto) +find_package(ROOT REQUIRED) -add_executable(merger-spy merger-spy.cpp MergerInfo.pb.cc merger_spy.cpp) -target_include_directories(merger-spy PRIVATE ${CMAKE_CURRENT_BINARY_DIR}) +add_subdirectory(src) -target_link_libraries(merger-spy ${LIBRARIES_TO_LINK}) -install(TARGETS merger-spy DESTINATION ${CMAKE_INSTALL_BINDIR}) -set_property(GLOBAL APPEND PROPERTY EXEC_TARGET_LIST merger-spy) diff --git a/MergerInfo.proto b/MergerInfo.proto deleted file mode 100644 index 35cbbd55c8e90703ad8607dbfc60c2279587afa1..0000000000000000000000000000000000000000 --- a/MergerInfo.proto +++ /dev/null @@ -1,53 +0,0 @@ -syntax = "proto3"; - -package myprotobuf; - -option optimize_for = SPEED; -option cc_generic_services = false; - -message log{ - - enum log_type{ - fDebug = 0; - fInfo = 1; - fWarning = 2; - fError = 3; - } - -log_type type = 1; -string value=2; -} - -message point{ -double x=1; -double y=2; -} - -message histogram{ -string name = 1; -string labelx = 2; -string labely= 3; -repeated point points = 4; -} - -message rate{ -string name = 1; -double value = 2; -//repeated point points = 2; -} - -message histogram_frame{ -string name = 1; -repeated histogram histos = 2; -} - -message rate_frame{ -string name = 1; -repeated rate rates = 2; -} - -message merger_info{ -repeated histogram_frame histo_frames = 1; -repeated rate_frame rate_frames = 2; -repeated log logs = 3; -} diff --git a/external/CMakeListsUtilities/.gitrepo b/external/cmake/CMakeListsUtilities/.gitrepo similarity index 100% rename from external/CMakeListsUtilities/.gitrepo rename to external/cmake/CMakeListsUtilities/.gitrepo diff --git a/external/CMakeListsUtilities/CheckProjectIsTopLevel.cmake b/external/cmake/CMakeListsUtilities/CheckProjectIsTopLevel.cmake similarity index 100% rename from external/CMakeListsUtilities/CheckProjectIsTopLevel.cmake rename to external/cmake/CMakeListsUtilities/CheckProjectIsTopLevel.cmake diff --git a/external/CMakeListsUtilities/GNUPackageInstallDirs.cmake b/external/cmake/CMakeListsUtilities/GNUPackageInstallDirs.cmake similarity index 100% rename from external/CMakeListsUtilities/GNUPackageInstallDirs.cmake rename to external/cmake/CMakeListsUtilities/GNUPackageInstallDirs.cmake diff --git a/external/CMakeListsUtilities/InstallConfigPackage.cmake b/external/cmake/CMakeListsUtilities/InstallConfigPackage.cmake similarity index 100% rename from external/CMakeListsUtilities/InstallConfigPackage.cmake rename to external/cmake/CMakeListsUtilities/InstallConfigPackage.cmake diff --git a/external/CMakeListsUtilities/InstallConfigPackageVersion.cmake b/external/cmake/CMakeListsUtilities/InstallConfigPackageVersion.cmake similarity index 100% rename from external/CMakeListsUtilities/InstallConfigPackageVersion.cmake rename to external/cmake/CMakeListsUtilities/InstallConfigPackageVersion.cmake diff --git a/external/CMakeListsUtilities/README.md b/external/cmake/CMakeListsUtilities/README.md similarity index 100% rename from external/CMakeListsUtilities/README.md rename to external/cmake/CMakeListsUtilities/README.md diff --git a/external/CMakeListsUtilities/StandardRpathHandling.cmake b/external/cmake/CMakeListsUtilities/StandardRpathHandling.cmake similarity index 100% rename from external/CMakeListsUtilities/StandardRpathHandling.cmake rename to external/cmake/CMakeListsUtilities/StandardRpathHandling.cmake diff --git a/external/CMakeListsUtilities/projectConfig.cmake.in b/external/cmake/CMakeListsUtilities/projectConfig.cmake.in similarity index 100% rename from external/CMakeListsUtilities/projectConfig.cmake.in rename to external/cmake/CMakeListsUtilities/projectConfig.cmake.in diff --git a/external/FindPackageAddDependency/.gitrepo b/external/cmake/FindPackageAddDependency/.gitrepo similarity index 100% rename from external/FindPackageAddDependency/.gitrepo rename to external/cmake/FindPackageAddDependency/.gitrepo diff --git a/external/FindPackageAddDependency/FindPackageAddDependency.cmake b/external/cmake/FindPackageAddDependency/FindPackageAddDependency.cmake similarity index 100% rename from external/FindPackageAddDependency/FindPackageAddDependency.cmake rename to external/cmake/FindPackageAddDependency/FindPackageAddDependency.cmake diff --git a/external/FindPackageAddDependency/README.md b/external/cmake/FindPackageAddDependency/README.md similarity index 100% rename from external/FindPackageAddDependency/README.md rename to external/cmake/FindPackageAddDependency/README.md diff --git a/external/FindZeroMQ/.gitrepo b/external/cmake/FindZeroMQ/.gitrepo similarity index 100% rename from external/FindZeroMQ/.gitrepo rename to external/cmake/FindZeroMQ/.gitrepo diff --git a/external/FindZeroMQ/FindZeroMQ.cmake b/external/cmake/FindZeroMQ/FindZeroMQ.cmake similarity index 100% rename from external/FindZeroMQ/FindZeroMQ.cmake rename to external/cmake/FindZeroMQ/FindZeroMQ.cmake diff --git a/external/FindZeroMQ/README.md b/external/cmake/FindZeroMQ/README.md similarity index 100% rename from external/FindZeroMQ/README.md rename to external/cmake/FindZeroMQ/README.md diff --git a/external/FindZeroMQ/zmq_compat.h b/external/cmake/FindZeroMQ/zmq_compat.h similarity index 100% rename from external/FindZeroMQ/zmq_compat.h rename to external/cmake/FindZeroMQ/zmq_compat.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..c2de7b989105f0bc99ce37d2176f396226209ccf --- /dev/null +++ b/src/CMakeLists.txt @@ -0,0 +1,9 @@ +PROTOBUF_GENERATE_CPP(PROTO_SRCS PROTO_HDRS MergerInfo.proto) + +add_executable(merger-stat merger-spy.cpp ${PROTO_SRCS} merger_spy.cpp) +target_link_libraries(merger-stat PRIVATE ROOT::Hist ROOT::Thread Boost::program_options mfmlib::mfm libzmq protobuf::libprotobuf) +target_include_directories(merger-stat INTERFACE $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/src>) + +install(TARGETS merger-stat DESTINATION ${CMAKE_INSTALL_BINDIR}) + +set_property(GLOBAL APPEND PROPERTY EXEC_TARGET_LIST merger-stat) diff --git a/merger-spy.cpp b/src/merger-spy.cpp similarity index 89% rename from merger-spy.cpp rename to src/merger-spy.cpp index d2c982403ce1430b4d3b28e75be6ab6a5e4e6966..c9ede89866092cec585513a46ed4ab609ef03749 100644 --- a/merger-spy.cpp +++ b/src/merger-spy.cpp @@ -4,37 +4,15 @@ #include "boost/program_options.hpp" -#include "math.h" #include "Riostream.h" -#include "TMath.h" -#include "TApplication.h" -#include "KVEnv.h" -#include "KVString.h" -#include "MFMFileReader.h" - -#include "KVDataRepositoryManager.h" -#include "KVDataSetManager.h" -#include "KVMultiDetArray.h" -#include "KVINDRADetector.h" -#include "KVNameValueList.h" -#include "KVINDRA.h" - -#include "TRandom3.h" #include <iostream> #include <fstream> #include <string> #include <sstream> -#include "zmq.hpp" -#include "MergerInfo.pb.h" - #include "merger_spy.h" -#include "MFMMergeFrame.h" -#include "MFMFaziaFrame.h" -#include "MFMMesytecMDPPFrame.h" - namespace po = boost::program_options; using namespace std; diff --git a/merger_spy.cpp b/src/merger_spy.cpp similarity index 100% rename from merger_spy.cpp rename to src/merger_spy.cpp diff --git a/merger_spy.h b/src/merger_spy.h similarity index 99% rename from merger_spy.h rename to src/merger_spy.h index 42d981c991b32c59cdc408daeb3527a3eebdee68..8941ca40205b9cc2771b510f57a4ceac02a7474a 100644 --- a/merger_spy.h +++ b/src/merger_spy.h @@ -5,7 +5,6 @@ #define __merger_spy_H -#include "KVConfig.h" #include "TThread.h" #include "TDatime.h" #include "TH1F.h"