From b79d3b76ebe0b85a2c8220bf48918cd333800ded Mon Sep 17 00:00:00 2001 From: Gianluca Petrillo Date: Tue, 21 Jan 2025 02:02:33 -0600 Subject: [PATCH] SBN job metadata: icaruscode GIT version and reporting tool. The default ROOT output configuration is updated to save the metadata into art/ROOT and TFileService output files. --- CMakeLists.txt | 4 +- fcl/configurations/rootoutput_icarus.fcl | 14 ++++ icaruscode/CMakeLists.txt | 1 + icaruscode/Metadata/CMakeLists.txt | 17 +++++ icaruscode/Metadata/GITrepoVersion.cxx.in | 16 +++++ icaruscode/Metadata/GITrepoVersion.h.in | 18 +++++ .../icaruscodeRepositoryVersion_tool.cc | 67 +++++++++++++++++++ 7 files changed, 136 insertions(+), 1 deletion(-) create mode 100644 icaruscode/Metadata/CMakeLists.txt create mode 100644 icaruscode/Metadata/GITrepoVersion.cxx.in create mode 100644 icaruscode/Metadata/GITrepoVersion.h.in create mode 100644 icaruscode/Metadata/icaruscodeRepositoryVersion_tool.cc diff --git a/CMakeLists.txt b/CMakeLists.txt index 960cfb757..f93e32d60 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -52,6 +52,7 @@ find_package(ifdhc REQUIRED ) find_package(ifdh_art REQUIRED ) find_package(Range-v3 REQUIRED ) find_package(sbnobj REQUIRED ) +find_package(sbncode REQUIRED ) find_package(icarus_signal_processing REQUIRED ) find_package(icarusalg REQUIRED ) find_package(icarusutil REQUIRED ) @@ -91,10 +92,11 @@ find_package(FFTW3f REQUIRED ) find_package(FFTW3q REQUIRED ) find_package(FFTW3l REQUIRED ) -# macros for dictionary and simple_plugin +# macros for dictionary and cet_build_plugin include(ArtDictionary) include(ArtMake) include(BuildPlugins) +include(SBNutils) # ADD SOURCE CODE SUBDIRECTORIES HERE add_subdirectory(icaruscode) diff --git a/fcl/configurations/rootoutput_icarus.fcl b/fcl/configurations/rootoutput_icarus.fcl index c92d21e7c..d72f7ec26 100644 --- a/fcl/configurations/rootoutput_icarus.fcl +++ b/fcl/configurations/rootoutput_icarus.fcl @@ -45,6 +45,20 @@ icarus_rootoutput: { compressionLevel: 1 dataTier: "simulated" # still parroting something I don't understand saveMemoryObjectThreshold: 0 + + # this will run the SaveJobEnvironment results producer module every time + # RootOutput is used; see + # https://cdcvs.fnal.gov/redmine/projects/art/wiki/Release_Notes_11600#-Release-feature-Issue-7449-Analysis-support-requires-ability-to-store-objects-in-file-in-branch-other-than-Run-SubRun-or-Event + results: { + producers: { + writeConfig: { + plugin_type: SaveJobEnvironment + Repositories: [ icaruscode, sbndcode ] + } + } + result_path: [ writeConfig ] + } + } # icarus_rootoutput diff --git a/icaruscode/CMakeLists.txt b/icaruscode/CMakeLists.txt index a87cbffd7..f1a477f2e 100644 --- a/icaruscode/CMakeLists.txt +++ b/icaruscode/CMakeLists.txt @@ -15,3 +15,4 @@ add_subdirectory(RecoUtils) add_subdirectory(TPC) add_subdirectory(Utilities) #add_subdirectory(Supera) +add_subdirectory(Metadata) diff --git a/icaruscode/Metadata/CMakeLists.txt b/icaruscode/Metadata/CMakeLists.txt new file mode 100644 index 000000000..b53766b80 --- /dev/null +++ b/icaruscode/Metadata/CMakeLists.txt @@ -0,0 +1,17 @@ +GenerateRepoVersionSource(${CMAKE_PROJECT_NAME}) + +message(DEBUG "Generated source file '${${CMAKE_PROJECT_NAME}_GIT_REPO_VERSION_SOURCE}.h'") + +art_make_library() + +cet_build_plugin(icaruscodeRepositoryVersion art::tool + LIBRARIES + icaruscode::Metadata + icarusalg::Metadata + sbncode::Metadata + sbnobj::Common_Metadata + ) + +install_headers(LIST "${CMAKE_CURRENT_BINARY_DIR}/${${CMAKE_PROJECT_NAME}_GIT_REPO_VERSION_SOURCE}.h") +install_source(LIST "${CMAKE_CURRENT_BINARY_DIR}/${${CMAKE_PROJECT_NAME}_GIT_REPO_VERSION_SOURCE}.cxx") + diff --git a/icaruscode/Metadata/GITrepoVersion.cxx.in b/icaruscode/Metadata/GITrepoVersion.cxx.in new file mode 100644 index 000000000..0d2a35157 --- /dev/null +++ b/icaruscode/Metadata/GITrepoVersion.cxx.in @@ -0,0 +1,16 @@ +/** + * @file ${gitRepoVersionSourceStem}.cxx + * @brief GIT version for repository `${gitRepoName}`. + * @author automatically generated; + * template: Gianluca Petrillo (petrillo@slac.stanford.edu) + * @date January 18, 2025 + * @see ${gitRepoVersionSourceStem}.h + */ + +#include "${gitRepoVersionSourceStem}.h" + +// ----------------------------------------------------------------------------- +const char RepositoryVersion_${gitRepoName}[] = "${gitRepoVersion}"; + + +// ----------------------------------------------------------------------------- diff --git a/icaruscode/Metadata/GITrepoVersion.h.in b/icaruscode/Metadata/GITrepoVersion.h.in new file mode 100644 index 000000000..a3210703d --- /dev/null +++ b/icaruscode/Metadata/GITrepoVersion.h.in @@ -0,0 +1,18 @@ +/** + * @file ${gitRepoVersionSourceStem}.h + * @brief GIT version for repository `${gitRepoName}`. + * @author automatically generated; + * template: Gianluca Petrillo (petrillo@slac.stanford.edu) + * @date January 18, 2025 + * @see ${gitRepoVersionSourceStem}.cxx + */ + +#ifndef ${gitRepoName}_${gitRepoVersionSourceStem}_H +#define ${gitRepoName}_${gitRepoVersionSourceStem}_H + + +/// Repository version for ${gitRepoName}. +extern const char RepositoryVersion_${gitRepoName}[]; + + +#endif // ${gitRepoName}_${gitRepoVersionSourceStem}_H diff --git a/icaruscode/Metadata/icaruscodeRepositoryVersion_tool.cc b/icaruscode/Metadata/icaruscodeRepositoryVersion_tool.cc new file mode 100644 index 000000000..805c68957 --- /dev/null +++ b/icaruscode/Metadata/icaruscodeRepositoryVersion_tool.cc @@ -0,0 +1,67 @@ +/** + * @file RepositoryVersion_icaruscode_tool.cc + * @brief _art_ tool reporting the version of `icaruscode`-related packages. + * @author Gianluca Petrillo (petrillo@slac.stanford.edu) + * @date January 18, 2025 + * + */ + +// SBN libraries +#include "icaruscode/Metadata/RepositoryVersion_icaruscode.h" +#include "icarusalg/Metadata/RepositoryVersion_icarusalg.h" +#include "sbncode/Metadata/RepositoryVersionReportUtils.h" +#include "sbncode/Metadata/RepositoryVersionReporter.h" + +// framework libraries +#include "art/Utilities/ToolMacros.h" +#include "art/Utilities/ToolConfigTable.h" +#include "messagefacility/MessageLogger/MessageLogger.h" + +// C++ standard libraries +#include +#include + + +// ----------------------------------------------------------------------------- +namespace sbn { struct icaruscodeRepositoryVersion; } +/** + * @brief Implements the `sbn::RepositoryVersionReporter` interface for + * `icaruscode`. + * + * It collects information from the following repositories: `icaruscode`, + * `icarusalg` and `sbncode` (and its dependencies). + * + */ +struct sbn::icaruscodeRepositoryVersion: public sbn::RepositoryVersionReporter { + + struct Config {}; + + using Parameters = art::ToolConfigTable; + + icaruscodeRepositoryVersion(Parameters const&); + +}; // sbn::icaruscodeRepositoryVersion() + + +// ----------------------------------------------------------------------------- +// --- implementation +// ----------------------------------------------------------------------------- +sbn::icaruscodeRepositoryVersion::icaruscodeRepositoryVersion(Parameters const&) +{ + + // this will consult with `sbncode` plugin and report its dependencies too: + addVersionFromRepository(packageVersions, "sbncode"); + + packageVersions.items.emplace_back("icarusalg", ::RepositoryVersion_icarusalg); + packageVersions.items.emplace_back("icaruscode", ::RepositoryVersion_icaruscode); + + packageVersions.finish(); + +} + + +// ----------------------------------------------------------------------------- +DEFINE_ART_CLASS_TOOL(sbn::icaruscodeRepositoryVersion) + + +// -----------------------------------------------------------------------------