From a27ee4113995a0dd21907aae8748cb39f50b548b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20S=C3=A1nchez=20Castillo?= Date: Mon, 27 Jan 2025 03:58:20 -0600 Subject: [PATCH 01/16] Adapt Calibration Service from ICARUS --- sbndcode/AnalysisTree/AnalysisTree_module.cc | 2 +- sbndcode/AnalysisTree/CMakeLists.txt | 1 - .../AnalysisTree/analysistreemodule_sbnd.fcl | 2 +- sbndcode/CMakeLists.txt | 2 + sbndcode/DatabaseInterface/CMakeLists.txt | 36 +++ .../IPMTTimingCorrectionService.h | 33 +++ .../PMTTimingCorrectionProvider.cxx | 235 ++++++++++++++++++ .../PMTTimingCorrectionService_service.cc | 60 +++++ .../DatabaseInterface/PMTTimingCorrections.h | 44 ++++ .../PMTTimingCorrectionsProvider.h | 123 +++++++++ ups/product_deps | 2 +- 11 files changed, 536 insertions(+), 4 deletions(-) create mode 100644 sbndcode/DatabaseInterface/CMakeLists.txt create mode 100644 sbndcode/DatabaseInterface/IPMTTimingCorrectionService.h create mode 100644 sbndcode/DatabaseInterface/PMTTimingCorrectionProvider.cxx create mode 100644 sbndcode/DatabaseInterface/PMTTimingCorrectionService_service.cc create mode 100644 sbndcode/DatabaseInterface/PMTTimingCorrections.h create mode 100644 sbndcode/DatabaseInterface/PMTTimingCorrectionsProvider.h diff --git a/sbndcode/AnalysisTree/AnalysisTree_module.cc b/sbndcode/AnalysisTree/AnalysisTree_module.cc index 97ef855c1..52df446e7 100644 --- a/sbndcode/AnalysisTree/AnalysisTree_module.cc +++ b/sbndcode/AnalysisTree/AnalysisTree_module.cc @@ -3747,4 +3747,4 @@ namespace sbnd{ } -#endif +#endif \ No newline at end of file diff --git a/sbndcode/AnalysisTree/CMakeLists.txt b/sbndcode/AnalysisTree/CMakeLists.txt index fd3d2f311..4885c2bd7 100644 --- a/sbndcode/AnalysisTree/CMakeLists.txt +++ b/sbndcode/AnalysisTree/CMakeLists.txt @@ -38,4 +38,3 @@ cet_build_plugin(AnalysisTree art::Module SOURCE AnalysisTree_module.cc LIBRARIE # install_headers() install_fhicl() install_source() - diff --git a/sbndcode/AnalysisTree/analysistreemodule_sbnd.fcl b/sbndcode/AnalysisTree/analysistreemodule_sbnd.fcl index fa7786aee..21f73cdc4 100644 --- a/sbndcode/AnalysisTree/analysistreemodule_sbnd.fcl +++ b/sbndcode/AnalysisTree/analysistreemodule_sbnd.fcl @@ -39,4 +39,4 @@ sbnd_analysistree: CaloAlg: @local::sbnd_calorimetryalgmc } -END_PROLOG +END_PROLOG \ No newline at end of file diff --git a/sbndcode/CMakeLists.txt b/sbndcode/CMakeLists.txt index 60d203e74..ea3e2737c 100644 --- a/sbndcode/CMakeLists.txt +++ b/sbndcode/CMakeLists.txt @@ -41,3 +41,5 @@ add_subdirectory(WireCell) add_subdirectory(Decoders) add_subdirectory(ChannelMaps) + +add_subdirectory(DatabaseInterface) diff --git a/sbndcode/DatabaseInterface/CMakeLists.txt b/sbndcode/DatabaseInterface/CMakeLists.txt new file mode 100644 index 000000000..5ac479e40 --- /dev/null +++ b/sbndcode/DatabaseInterface/CMakeLists.txt @@ -0,0 +1,36 @@ +cet_enable_asserts() + +set( MODULE_LIBRARIES + lardataobj::RecoBase + sbnobj::Common_Trigger + larcore::Geometry_Geometry_service + lardata::DetectorClocksService + art_root_io::TFileService_service + art_root_io::tfile_support + lardataobj::RawData + ROOT::Tree +) +set( LIB_LIBRARIES + art::Framework_Services_Registry + messagefacility::MF_MessageLogger + lardataobj::RecoBase + lardata::Utilities + sbnobj::Common_PMT_Data + larevt::CalibrationDBI_IOVData + larevt::CalibrationDBI_Providers +) +set( SERVICE_LIBRARIES + sbndcode_DatabaseInterface + larcore::Geometry_Geometry_service + lardata::DetectorClocksService +) + +file(GLOB lib_srcs *.cxx) + +art_make_library( SOURCE ${lib_srcs} LIBRARIES PUBLIC ${LIB_LIBRARIES}) + +cet_build_plugin( PMTTimingCorrectionService art::service LIBRARIES PUBLIC ${SERVICE_LIBRARIES}) + +install_headers() +install_fhicl() +install_source() \ No newline at end of file diff --git a/sbndcode/DatabaseInterface/IPMTTimingCorrectionService.h b/sbndcode/DatabaseInterface/IPMTTimingCorrectionService.h new file mode 100644 index 000000000..4be242617 --- /dev/null +++ b/sbndcode/DatabaseInterface/IPMTTimingCorrectionService.h @@ -0,0 +1,33 @@ +/** + * @file icaruscode/Timing/IPMTTimingCorrectionService.h + * @brief Wrapper class for 'PMTTimingCorrectionsProvider.h' + * @author Andrea Scarpelli (ascarpell@bnl.gov), Gianluca Petrillo (petrillo@slac.stanford.edu) + */ + +#ifndef ICARUSCODE_TIMING_IPMTTIMINGCORRECTIONSERVICE_H +#define ICARUSCODE_TIMING_IPMTTIMINGCORRECTIONSERVICE_H + +// ICARUS libraries +#include "sbndcode/DatabaseInterface/PMTTimingCorrections.h" + +// LArSoft libraries +#include "larcore/CoreUtils/ServiceProviderWrappers.h" + + +// ----------------------------------------------------------------------------- +namespace sbndDB { + /// The only thing this service does is to return its service provider of type + /// `icarusDB::PMTTimingCorrections`. + using IPMTTimingCorrectionService + = lar::ServiceProviderInterfaceWrapper; +} + + +// ----------------------------------------------------------------------------- +DECLARE_ART_SERVICE_INTERFACE(sbndDB::IPMTTimingCorrectionService, SHARED) + + +// ----------------------------------------------------------------------------- + + +#endif // ICARUSCODE_TIMING_IPMTTIMINGCORRECTIONSERVICE_H \ No newline at end of file diff --git a/sbndcode/DatabaseInterface/PMTTimingCorrectionProvider.cxx b/sbndcode/DatabaseInterface/PMTTimingCorrectionProvider.cxx new file mode 100644 index 000000000..1c0d197e4 --- /dev/null +++ b/sbndcode/DatabaseInterface/PMTTimingCorrectionProvider.cxx @@ -0,0 +1,235 @@ +/** + * @file icaruscode/Timing/PMTTimingCorrectionsProvider.cxx + * @brief Service for the PMT timing corrections. + * @author Andrea Scarpelli (ascarpell@bnl.gov), Matteo Vicenzi (mvicenzi@bnl.gov) + */ + +// Framework includes +#include "art/Framework/Services/Registry/ServiceDefinitionMacros.h" +#include "art/Framework/Principal/Run.h" +#include "messagefacility/MessageLogger/MessageLogger.h" +#include "cetlib_except/exception.h" + +// Local +#include "sbndcode/DatabaseInterface/PMTTimingCorrections.h" +#include "sbndcode/DatabaseInterface/PMTTimingCorrectionsProvider.h" + +// Database interface helpers +#include "larevt/CalibrationDBI/Providers/DBFolder.h" +#include "larevt/CalibrationDBI/IOVData/TimeStampDecoder.h" + +// C/C++ standard libraries +#include +#include + +//-------------------------------------------------------------------------------- + +sbndDB::PMTTimingCorrectionsProvider::PMTTimingCorrectionsProvider + (const fhicl::ParameterSet& pset) + : fVerbose{ pset.get("Verbose", false) } + , fLogCategory{ pset.get("LogCategory", "PMTTimingCorrection") } + { + fhicl::ParameterSet const tags{ pset.get("CorrectionTags") }; + fCablesTag = tags.get("CablesTag"); + fLaserTag = tags.get("LaserTag"); + fCosmicsTag = tags.get("CosmicsTag"); + if( fVerbose ) mf::LogInfo(fLogCategory) << "Database tags for timing corrections:\n" + << "Cables corrections " << fCablesTag << "\n" + << "Laser corrections " << fLaserTag << "\n" + << "Cosmics corrections " << fCosmicsTag; + } + +// ------------------------------------------------------------------------------- + +uint64_t sbndDB::PMTTimingCorrectionsProvider::RunToDatabaseTimestamp( uint32_t run ) const{ + + // Run number to timestamp used in the db + // DBFolder.h only takes 19 digit (= timestamp in nano second), + // but ICARUS tables are currently using run numbers + // Step 1) Add 1000000000 to the run number; e.g., run XXXXX -> 10000XXXXX + // Step 2) Multiply 1000000000 + uint64_t runNum = uint64_t(run); + uint64_t timestamp = runNum+1000000000; + timestamp *= 1000000000; + + if( fVerbose ) mf::LogInfo(fLogCategory) << "Run " << runNum << " corrections from DB timestamp " << timestamp; + + return timestamp; +} + +// ------------------------------------------------------------------------------- + +/// Function to look up the calibration database at the table holding the pmt hardware cables corrections +void sbndDB::PMTTimingCorrectionsProvider::ReadPMTCablesCorrections( uint32_t run ) { + + // pmt_cables_delay: delays of the cables relative to trigger + // and reset distribution + const std::string dbname("pmt_cables_delays_data"); + lariov::DBFolder db(dbname, "", "", fCablesTag, true, false); + + bool ret = db.UpdateData( RunToDatabaseTimestamp(run) ); // select table based on run number + mf::LogDebug(fLogCategory) << dbname + " corrections" << (ret? "": " not") << " updated for run " << run; + mf::LogTrace(fLogCategory) + << "Fetched IoV [ " << db.CachedStart().DBStamp() << " ; " << db.CachedEnd().DBStamp() + << " ] to cover t=" << RunToDatabaseTimestamp(run) + << " [=" << lariov::TimeStampDecoder::DecodeTimeStamp(RunToDatabaseTimestamp(run)).DBStamp() << "]"; + + std::vector channelList; + if (int res = db.GetChannelList(channelList); res != 0) { + throw cet::exception + ( "PMTTimingCorrectionsProvider" ) << "GetChannelList() returned " << res << " on run " << run << " query in " << dbname << "\n"; + } + + if (channelList.empty()) { + throw cet::exception("PMTTimingCorrectionsProvider") << "Got an empty channel list for run " << run << " in " << dbname << "\n"; + } + + for( auto channel : channelList ) { + + // PPS reset correction + double reset_distribution_delay = 0; + int error = db.GetNamedChannelData( channel, "reset_distribution_delay", reset_distribution_delay ); + if( error ) throw cet::exception("PMTTimingCorrectionsProvider") << "Encountered error (code " << error << ") while trying to access 'reset_distribution_delay' on table " << dbname << "\n"; + + // Trigger cable delay + double trigger_reference_delay = 0; + error = db.GetNamedChannelData( channel, "trigger_reference_delay", trigger_reference_delay ); + if( error ) throw cet::exception( "PMTTimingCorrectionsProvider" ) << "Encountered error (code " << error << ") while trying to access 'trigger_reference_delay' on table " << dbname << "\n"; + + // Phase correction + double phase_correction = 0; + error = db.GetNamedChannelData( channel, "phase_correction", phase_correction ); + if( error ) throw cet::exception( "PMTTimingCorrectionsProvider" ) << "Encountered error (code " << error << ") while trying to access 'phase_correction' on table " << dbname << "\n"; + + /// This is the delay due to the cables connecting the 'global' trigger crate FPGA to the spare channel of the first digitizer in each VME crates. + /// The phase correction is an additional fudge factor + /// holding local variation due to constant clock offsets (it can be up to 8 ns) + /// It can be absorbed within other corrections if necessary + /// Corrections are saved in ns, but icaruscode wants us + /// Correction are saved with the sing correspoding to their time direction + fDatabaseTimingCorrections[channel].triggerCableDelay = -(trigger_reference_delay-phase_correction)/1000.; + + /// This is the delay along the distribution line of the TTT reset + /// The phase correction is an additional fudge factor + /// holding local variation due to constant clock offsets (it can be up to 8 ns) + /// It can be absorbed within other corrections if necessary + /// Corrections are saved in ns, but icaruscode wants us + /// Corrections are additive! + fDatabaseTimingCorrections[channel].resetCableDelay = (reset_distribution_delay-phase_correction)/1000.; + } + +} + + +// ----------------------------------------------------------------------------- + +/// Function to look up the calibration database at the table holding the pmt timing corrections measured using the laser +void sbndDB::PMTTimingCorrectionsProvider::ReadLaserCorrections( uint32_t run ) { + + const std::string dbname("pmt_laser_timing_data"); + lariov::DBFolder db(dbname, "", "", fLaserTag, true, false); + + bool ret = db.UpdateData( RunToDatabaseTimestamp(run) ); // select table based on run number + mf::LogDebug(fLogCategory) << dbname + " corrections" << (ret? "": " not") << " updated for run " << run; + mf::LogTrace(fLogCategory) + << "Fetched IoV [ " << db.CachedStart().DBStamp() << " ; " << db.CachedEnd().DBStamp() + << " ] to cover t=" << RunToDatabaseTimestamp(run) + << " [=" << lariov::TimeStampDecoder::DecodeTimeStamp(RunToDatabaseTimestamp(run)).DBStamp() << "]"; + + std::vector channelList; + if (int res = db.GetChannelList(channelList); res != 0) { + throw cet::exception + ( "PMTTimingCorrectionsProvider" ) << "GetChannelList() returned " << res << " on run " << run << " query in " << dbname << "\n"; + } + + if (channelList.empty()) { + throw cet::exception("PMTTimingCorrectionsProvider") << "got an empty channel list for run " << run << " in " << dbname << "\n"; + } + + for( auto channel : channelList ) { + + // Laser correction + double t_signal = 0; + int error = db.GetNamedChannelData( channel, "t_signal", t_signal ); + if( error ) throw cet::exception( "PMTTimingCorrectionsProvider" ) << "Encountered error (code " << error << ") while trying to access 't_signal' on table " << dbname << "\n"; + + /// pmt_laser_delay: delay from the Electron Transit time inside the PMT + /// and the PMT signal cable + /// corrections are saved in ns, but icaruscode wants us + /// Corrections are additive! + fDatabaseTimingCorrections[channel].laserCableDelay = -t_signal/1000.; + } +} + +// ----------------------------------------------------------------------------- + +/// Function to look up the calibration database at the table holding the pmt timing corrections measured using cosmic muons +void sbndDB::PMTTimingCorrectionsProvider::ReadCosmicsCorrections( uint32_t run ) { + + const std::string dbname("pmt_cosmics_timing_data"); + lariov::DBFolder db(dbname, "", "", fCosmicsTag, true, false); + + bool ret = db.UpdateData( RunToDatabaseTimestamp(run) ); // select table based on run number + mf::LogDebug(fLogCategory) << dbname + " corrections" << (ret? "": " not") << " updated for run " << run; + mf::LogTrace(fLogCategory) + << "Fetched IoV [ " << db.CachedStart().DBStamp() << " ; " << db.CachedEnd().DBStamp() + << " ] to cover t=" << RunToDatabaseTimestamp(run) + << " [=" << lariov::TimeStampDecoder::DecodeTimeStamp(RunToDatabaseTimestamp(run)).DBStamp() << "]"; + + std::vector channelList; + if (int res = db.GetChannelList(channelList); res != 0) { + throw cet::exception + ( "PMTTimingCorrectionsProvider" ) << "GetChannelList() returned " << res << " on run " << run << " query in " << dbname << "\n"; + } + + if (channelList.empty()) { + throw cet::exception("PMTTimingCorrectionsProvider") << "Got an empty channel list for run " << run << " in " << dbname << "\n"; + } + + for( auto channel : channelList ) { + + // Cosmics correction + double mean_residual_ns = 0; + int error = db.GetNamedChannelData( channel, "mean_residual_ns", mean_residual_ns ); + if( error ) throw cet::exception( "PMTTimingCorrectionsProvider" ) << "Encountered error (code " << error << ") while trying to access 'mean_residual_ns' on table " << dbname << "\n"; + + /// pmt_cosmics_residual: time residuals from downward going cosmics tracks + /// correcting for point-like laser emission and pmts that do not see laser light + /// corrections are saved in ns, but icaruscode wants us + /// Corrections are additive! + fDatabaseTimingCorrections[channel].cosmicsCorrections = -mean_residual_ns/1000.; + } + +} + + +// ----------------------------------------------------------------------------- + + +/// Read all the corrections from the database and save them inside a map, whose index +/// is the PMT channel number +void sbndDB::PMTTimingCorrectionsProvider::readTimeCorrectionDatabase(const art::Run& run){ + + // Clear before the run + fDatabaseTimingCorrections.clear(); + + ReadPMTCablesCorrections(run.id().run()); + ReadLaserCorrections(run.id().run()); + ReadCosmicsCorrections(run.id().run()); + + if( fVerbose ) { + + mf::LogInfo(fLogCategory) << "Dump information from database " << std::endl; + mf::LogVerbatim(fLogCategory) << "channel, trigger cable delay, reset cable delay, laser corrections, muons corrections" << std::endl; + for( auto const & [key, value] : fDatabaseTimingCorrections ){ + mf::LogVerbatim(fLogCategory) + << key << " " + << value.triggerCableDelay << "," + << value.resetCableDelay << ", " + << value.laserCableDelay << ", " + << value.cosmicsCorrections << "," + << std::endl; + } + } + +} \ No newline at end of file diff --git a/sbndcode/DatabaseInterface/PMTTimingCorrectionService_service.cc b/sbndcode/DatabaseInterface/PMTTimingCorrectionService_service.cc new file mode 100644 index 000000000..fd19456c7 --- /dev/null +++ b/sbndcode/DatabaseInterface/PMTTimingCorrectionService_service.cc @@ -0,0 +1,60 @@ +/** + * @file icaruscode/Timing/PMTTimingCorrectionService_service.cc + * @brief Wrapper class for 'PMTTimingCorrectionsProvider.h' + * @author Andrea Scarpelli (ascarpell@bnl.gov) + */ + +#include "sbndcode/DatabaseInterface/IPMTTimingCorrectionService.h" +#include "sbndcode/DatabaseInterface/PMTTimingCorrectionsProvider.h" + +// framework libraries +#include "art/Framework/Principal/Run.h" +#include "art/Framework/Services/Registry/ActivityRegistry.h" +#include "art/Framework/Services/Registry/ServiceDefinitionMacros.h" +#include "art/Framework/Services/Registry/ServiceDeclarationMacros.h" +#include "fhiclcpp/ParameterSet.h" +#include "cetlib_except/exception.h" + + +// ----------------------------------------------------------------------------- +namespace sbndDB { class PMTTimingCorrectionService; } +class sbndDB::PMTTimingCorrectionService + : public IPMTTimingCorrectionService, private PMTTimingCorrectionsProvider { + + void preBeginRun(const art::Run& run); + + /// Returns a constant pointer to the service provider + virtual PMTTimingCorrectionsProvider const* do_provider() const override + { return this; } + + public: + + PMTTimingCorrectionService(const fhicl::ParameterSet& pset, art::ActivityRegistry& reg); + +}; // class icarusDB::PMTTimingCorrectionService + + +// ----------------------------------------------------------------------------- +// --- Implementation +// ----------------------------------------------------------------------------- +sbndDB::PMTTimingCorrectionService::PMTTimingCorrectionService + (const fhicl::ParameterSet& pset, art::ActivityRegistry& reg) + : PMTTimingCorrectionsProvider(pset) +{ + reg.sPreBeginRun.watch(this, &PMTTimingCorrectionService::preBeginRun); +} + + +// ----------------------------------------------------------------------------- +void sbndDB::PMTTimingCorrectionService::preBeginRun(const art::Run& run) +{ + readTimeCorrectionDatabase(run); +} + + +// ----------------------------------------------------------------------------- +DECLARE_ART_SERVICE_INTERFACE_IMPL(sbndDB::PMTTimingCorrectionService, sbndDB::IPMTTimingCorrectionService, SHARED) +DEFINE_ART_SERVICE_INTERFACE_IMPL(sbndDB::PMTTimingCorrectionService, sbndDB::IPMTTimingCorrectionService) + + +// ----------------------------------------------------------------------------- \ No newline at end of file diff --git a/sbndcode/DatabaseInterface/PMTTimingCorrections.h b/sbndcode/DatabaseInterface/PMTTimingCorrections.h new file mode 100644 index 000000000..c0db8b763 --- /dev/null +++ b/sbndcode/DatabaseInterface/PMTTimingCorrections.h @@ -0,0 +1,44 @@ +/////////////////////////////////////////////////////////////////////// +/// +/// \file icaruscode/Timing/PMTTimingCorrections.h +/// +/// \brief Interface class between the calibration database and the PMT time corrections +/// +/// \author A. Scarpelli +/// +/// \mailto ascarpell@bnl.gov +/// +//////////////////////////////////////////////////////////////////////// + +#ifndef ICARUSCODE_TIMING_PMTTIMINGCORRECTIONS_H +#define ICARUSCODE_TIMING_PMTTIMINGCORRECTIONS_H + + +#include "larcorealg/CoreUtils/UncopiableAndUnmovableClass.h" + +#include "art/Framework/Services/Registry/ServiceDeclarationMacros.h" +#include "art/Framework/Principal/Run.h" + +namespace sbndDB { + + class PMTTimingCorrections: lar::UncopiableClass + { + public: + + virtual ~PMTTimingCorrections() noexcept = default; + + virtual double getTriggerCableDelay( unsigned int channelID ) const = 0; + + virtual double getResetCableDelay( unsigned int channelID ) const = 0; + + virtual double getLaserCorrections( unsigned int channelID ) const = 0; + + virtual double getCosmicsCorrections( unsigned int channelID ) const = 0; + + }; // end class + +}// end of namespace + +DECLARE_ART_SERVICE_INTERFACE(sbndDB::PMTTimingCorrections, SHARED) + +#endif \ No newline at end of file diff --git a/sbndcode/DatabaseInterface/PMTTimingCorrectionsProvider.h b/sbndcode/DatabaseInterface/PMTTimingCorrectionsProvider.h new file mode 100644 index 000000000..7d39c8e41 --- /dev/null +++ b/sbndcode/DatabaseInterface/PMTTimingCorrectionsProvider.h @@ -0,0 +1,123 @@ +/** + * @file icaruscode/Timing/PMTTimingCorrectionsProvider.h + * @brief Service for the PMT timing corrections. + * @author Andrea Scarpelli (ascarpell@bnl.gov), Matteo Vicenzi (mvicenzi@bnl.gov) + */ + +#ifndef ICARUSCODE_TIMING_PMTIMINGCORRECTIONSPROVIDER_H +#define ICARUSCODE_TIMING_PMTIMINGCORRECTIONSPROVIDER_H + +// Framework includes +#include "art/Framework/Services/Registry/ServiceDefinitionMacros.h" +#include "art/Framework/Services/Registry/ActivityRegistry.h" +#include "art/Framework/Services/Registry/ServiceHandle.h" +#include "art/Framework/Services/Registry/ServiceDeclarationMacros.h" +#include "art/Framework/Principal/Run.h" +#include "messagefacility/MessageLogger/MessageLogger.h" +#include "cetlib_except/exception.h" +#include "fhiclcpp/ParameterSet.h" + +// Local +#include "sbndcode/DatabaseInterface/PMTTimingCorrections.h" + +// C/C++ standard libraries +#include +#include +#include + +namespace sbndDB::details { + + /// Structure for single channel corrections + struct PMTTimeCorrectionsDB { + + double triggerCableDelay=0; ///< [µs] + double resetCableDelay=0; ///< [µs] + double laserCableDelay=0; ///< [µs] + double cosmicsCorrections=0; ///< [µs] + + }; + +} // sbndDB::details + +namespace sbndDB{ class PMTTimingCorrectionsProvider; } +/** + * @brief + * + * This module reads the PMT timing corrections from the database. + * Corrections are picked according to the run number being processed. + * + * All time corrections are offsets (in microseconds) that need to be _added_ to the uncorrected time. + * + * Configuration parameters + * ------------------------- + * * `CorrectionTags`: tags to select the correction versions: + * * `CablesTag` (default: `v1r0`): correction for cable delay. + * * `LaserTag` (default: `v1r0`): first order PMT time correction, from laser data. + * * `CosmicsTag` (default: `v1r0`): second order PMT time correction, from cosmic rays. + * * `Verbose` (default: `false`): Print-out the corrections read from the database. + * * `LogCategory` (default: `PMTTimingCorrection") + * + */ +class sbndDB::PMTTimingCorrectionsProvider : public PMTTimingCorrections { + + public: + + PMTTimingCorrectionsProvider(const fhicl::ParameterSet& pset); + + /// Read timing corrections from the database + void readTimeCorrectionDatabase(const art::Run& run); + + /// Get time delay on the trigger line + double getTriggerCableDelay( unsigned int channelID ) const override { + return getChannelCorrOrDefault(channelID).triggerCableDelay; + }; + + /// Get time delay on the PPS reset line + double getResetCableDelay( unsigned int channelID ) const override { + return getChannelCorrOrDefault(channelID).resetCableDelay; + }; + + /// Get timing corrections from laser data + double getLaserCorrections( unsigned int channelID ) const override { + return getChannelCorrOrDefault(channelID).laserCableDelay; + }; + + /// Get timing corrections from cosmics data + double getCosmicsCorrections( unsigned int channelID ) const override { + return getChannelCorrOrDefault(channelID).cosmicsCorrections; + }; + + private: + + using PMTTimeCorrectionsDB = details::PMTTimeCorrectionsDB; + static constexpr PMTTimeCorrectionsDB CorrectionDefaults {}; ///< Default values + + bool fVerbose = false; ///< Whether to print the configuration we read. + std::string fLogCategory; ///< Category tag for messages. + std::string fCablesTag; ///< Tag for cable corrections database. + std::string fLaserTag; ///< Tag for laser corrections database. + std::string fCosmicsTag; ///< Tag for cosmics corrections database. + + /// Map of corrections by channel + std::map fDatabaseTimingCorrections; + + /// Internal access to the channel correction record; returns defaults if not present. + PMTTimeCorrectionsDB const& getChannelCorrOrDefault + (unsigned int channelID) const + { + auto const it = fDatabaseTimingCorrections.find(channelID); + return (it == fDatabaseTimingCorrections.end())? CorrectionDefaults: it->second; + } + + /// Convert run number to internal database + uint64_t RunToDatabaseTimestamp(uint32_t run) const; + + void ReadPMTCablesCorrections(uint32_t run); + + void ReadLaserCorrections(uint32_t run); + + void ReadCosmicsCorrections(uint32_t run); + +}; // services class + +#endif \ No newline at end of file diff --git a/ups/product_deps b/ups/product_deps index 18ebbdd67..c5c16e298 100644 --- a/ups/product_deps +++ b/ups/product_deps @@ -253,7 +253,7 @@ wpdir product_dir wire-cell-cfg # #################################### product version qual flags -sbncode v09_93_01_01 - +sbncode v09_93_01_02 - cetmodules v3_24_01 - only_for_build sbnd_data v01_25_00 - optional sbndutil v09_93_01_01 - optional From a0a6e8cb4124f1f276df86c9a614c36846884297 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20S=C3=A1nchez=20Castillo?= Date: Mon, 3 Mar 2025 05:22:09 -0600 Subject: [PATCH 02/16] Add actua database variables --- sbndcode/DatabaseInterface/CMakeLists.txt | 2 +- ...ice.h => IPMTCalibrationDatabaseService.h} | 16 +- .../PMTCalibrationDatabase.h | 42 ++++ .../PMTCalibrationDatabaseProvider.cxx | 169 +++++++++++++ .../PMTCalibrationDatabaseProvider.h | 128 ++++++++++ .../PMTCalibrationDatabaseService_service.cc | 61 +++++ .../PMTTimingCorrectionProvider.cxx | 235 ------------------ .../PMTTimingCorrectionService_service.cc | 60 ----- .../DatabaseInterface/PMTTimingCorrections.h | 44 ---- .../PMTTimingCorrectionsProvider.h | 123 --------- .../DatabaseInterface/database_config.fcl | 13 + .../Alg/OpDeconvolutionAlgWienerData_tool.cc | 18 +- 12 files changed, 438 insertions(+), 473 deletions(-) rename sbndcode/DatabaseInterface/{IPMTTimingCorrectionService.h => IPMTCalibrationDatabaseService.h} (57%) create mode 100644 sbndcode/DatabaseInterface/PMTCalibrationDatabase.h create mode 100644 sbndcode/DatabaseInterface/PMTCalibrationDatabaseProvider.cxx create mode 100644 sbndcode/DatabaseInterface/PMTCalibrationDatabaseProvider.h create mode 100644 sbndcode/DatabaseInterface/PMTCalibrationDatabaseService_service.cc delete mode 100644 sbndcode/DatabaseInterface/PMTTimingCorrectionProvider.cxx delete mode 100644 sbndcode/DatabaseInterface/PMTTimingCorrectionService_service.cc delete mode 100644 sbndcode/DatabaseInterface/PMTTimingCorrections.h delete mode 100644 sbndcode/DatabaseInterface/PMTTimingCorrectionsProvider.h create mode 100644 sbndcode/DatabaseInterface/database_config.fcl diff --git a/sbndcode/DatabaseInterface/CMakeLists.txt b/sbndcode/DatabaseInterface/CMakeLists.txt index 5ac479e40..63d64409b 100644 --- a/sbndcode/DatabaseInterface/CMakeLists.txt +++ b/sbndcode/DatabaseInterface/CMakeLists.txt @@ -29,7 +29,7 @@ file(GLOB lib_srcs *.cxx) art_make_library( SOURCE ${lib_srcs} LIBRARIES PUBLIC ${LIB_LIBRARIES}) -cet_build_plugin( PMTTimingCorrectionService art::service LIBRARIES PUBLIC ${SERVICE_LIBRARIES}) +cet_build_plugin( PMTCalibrationDatabaseService art::service LIBRARIES PUBLIC ${SERVICE_LIBRARIES}) install_headers() install_fhicl() diff --git a/sbndcode/DatabaseInterface/IPMTTimingCorrectionService.h b/sbndcode/DatabaseInterface/IPMTCalibrationDatabaseService.h similarity index 57% rename from sbndcode/DatabaseInterface/IPMTTimingCorrectionService.h rename to sbndcode/DatabaseInterface/IPMTCalibrationDatabaseService.h index 4be242617..c5b188164 100644 --- a/sbndcode/DatabaseInterface/IPMTTimingCorrectionService.h +++ b/sbndcode/DatabaseInterface/IPMTCalibrationDatabaseService.h @@ -4,11 +4,11 @@ * @author Andrea Scarpelli (ascarpell@bnl.gov), Gianluca Petrillo (petrillo@slac.stanford.edu) */ -#ifndef ICARUSCODE_TIMING_IPMTTIMINGCORRECTIONSERVICE_H -#define ICARUSCODE_TIMING_IPMTTIMINGCORRECTIONSERVICE_H +#ifndef SBNDCCODE_DATABASEINTERFACE_IPMTCALIBRATIONDATABASESERVICE_H +#define SBNDCCODE_DATABASEINTERFACE_IPMTCALIBRATIONDATABASESERVICE_H // ICARUS libraries -#include "sbndcode/DatabaseInterface/PMTTimingCorrections.h" +#include "sbndcode/DatabaseInterface/PMTCalibrationDatabase.h" // LArSoft libraries #include "larcore/CoreUtils/ServiceProviderWrappers.h" @@ -17,17 +17,17 @@ // ----------------------------------------------------------------------------- namespace sbndDB { /// The only thing this service does is to return its service provider of type - /// `icarusDB::PMTTimingCorrections`. - using IPMTTimingCorrectionService - = lar::ServiceProviderInterfaceWrapper; + /// `sbndDB::PMTCalibrationDatabase`. + using IPMTCalibrationDatabaseService + = lar::ServiceProviderInterfaceWrapper; } // ----------------------------------------------------------------------------- -DECLARE_ART_SERVICE_INTERFACE(sbndDB::IPMTTimingCorrectionService, SHARED) +DECLARE_ART_SERVICE_INTERFACE(sbndDB::IPMTCalibrationDatabaseService, SHARED) // ----------------------------------------------------------------------------- -#endif // ICARUSCODE_TIMING_IPMTTIMINGCORRECTIONSERVICE_H \ No newline at end of file +#endif // ICARUSCODE_DATABASEINTERFACE_IPMTCALIBRATIONDATABASESERVICE_H \ No newline at end of file diff --git a/sbndcode/DatabaseInterface/PMTCalibrationDatabase.h b/sbndcode/DatabaseInterface/PMTCalibrationDatabase.h new file mode 100644 index 000000000..6454ebfe5 --- /dev/null +++ b/sbndcode/DatabaseInterface/PMTCalibrationDatabase.h @@ -0,0 +1,42 @@ +/////////////////////////////////////////////////////////////////////// +/// +/// Interface class between the calibration database and the PMT time corrections +/// +/// A. Scarpelli +/// +/// \mailto ascarpell@bnl.gov +/// +//////////////////////////////////////////////////////////////////////// +// Ported to SBND by Alejandro Sanchez-Castillo, Jan. 2025 + +#ifndef SBNDCCODE_DATABASEINTERFACE_PMTCALIBRATIONDATABASE_H +#define SBNDCCODE_DATABASEINTERFACE_PMTCALIBRATIONDATABASE_H + + +#include "larcorealg/CoreUtils/UncopiableAndUnmovableClass.h" + +#include "art/Framework/Services/Registry/ServiceDeclarationMacros.h" +#include "art/Framework/Principal/Run.h" + +namespace sbndDB { + + class PMTCalibrationDatabase: lar::UncopiableClass + { + public: + + virtual ~PMTCalibrationDatabase() noexcept = default; + virtual int getBreakoutBox( unsigned int channelID ) const = 0; + virtual int getCAENDigitizer( unsigned int channelID ) const = 0; + virtual int getCAENDigitizerChannel( unsigned int channelID ) const = 0; + virtual double getTotalTransitTime( unsigned int channelID ) const = 0; + virtual double getSPEAmplitude( unsigned int channelID ) const = 0; + virtual double getGaussFilterPower( unsigned int channelID ) const = 0; + virtual double getGaussFilterWC( unsigned int channelID ) const = 0; + virtual std::vector getSER( unsigned int channelID ) const = 0; + }; // end class + +}// end of namespace + +DECLARE_ART_SERVICE_INTERFACE(sbndDB::PMTCalibrationDatabase, SHARED) + +#endif \ No newline at end of file diff --git a/sbndcode/DatabaseInterface/PMTCalibrationDatabaseProvider.cxx b/sbndcode/DatabaseInterface/PMTCalibrationDatabaseProvider.cxx new file mode 100644 index 000000000..5913c7f5b --- /dev/null +++ b/sbndcode/DatabaseInterface/PMTCalibrationDatabaseProvider.cxx @@ -0,0 +1,169 @@ +/* + * Service for the PMT Calibration Database. + * Andrea Scarpelli (ascarpell@bnl.gov), Matteo Vicenzi (mvicenzi@bnl.gov) + */ +// Ported from icaruscode to SBND by Alejandro Sanchez-Castillo, Jan. 2025 + + +// Framework includes +#include "art/Framework/Services/Registry/ServiceDefinitionMacros.h" +#include "art/Framework/Principal/Run.h" +#include "messagefacility/MessageLogger/MessageLogger.h" +#include "cetlib_except/exception.h" + +// Local +#include "sbndcode/DatabaseInterface/PMTCalibrationDatabase.h" +#include "sbndcode/DatabaseInterface/PMTCalibrationDatabaseProvider.h" + +// Database interface helpers +#include "larevt/CalibrationDBI/Providers/DBFolder.h" +#include "larevt/CalibrationDBI/IOVData/TimeStampDecoder.h" + +// C/C++ standard libraries +#include +#include + +//-------------------------------------------------------------------------------- + +sbndDB::PMTCalibrationDatabaseProvider::PMTCalibrationDatabaseProvider + (const fhicl::ParameterSet& pset) + : fVerbose{ pset.get("Verbose", false) } + , fLogCategory{ pset.get("LogCategory", "PMTTimingCorrection") } + { + fhicl::ParameterSet const tags{ pset.get("CorrectionTags") }; + fCablesTag = tags.get("CablesTag"); + fDatabaseTimeStamp = tags.get("DatabaseTimeStamp"); + fTableName = tags.get("TableName"); + fVariabletoread = tags.get("VariableToRead"); + fSERLength = tags.get("SERLength"); + if( fVerbose ) mf::LogInfo(fLogCategory) << "Database tags for timing corrections:\n" + << "Cables corrections " << fCablesTag << "\n" ; + } + +// ------------------------------------------------------------------------------- + +uint64_t sbndDB::PMTCalibrationDatabaseProvider::RunToDatabaseTimestamp( uint32_t run ) const{ + + // Run number to timestamp used in the db + // DBFolder.h only takes 19 digit (= timestamp in nano second), + // but ICARUS tables are currently using run numbers + // Step 1) Add 1000000000 to the run number; e.g., run XXXXX -> 10000XXXXX + // Step 2) Multiply 1000000000 + uint64_t runNum = uint64_t(run); + uint64_t timestamp = runNum+1000000000; + timestamp *= 1000000000; + + if( fVerbose ) mf::LogInfo(fLogCategory) << "Run " << runNum << " corrections from DB timestamp " << timestamp; + + return timestamp; +} + +// ------------------------------------------------------------------------------- + +/// Function to look up the calibration database at the table holding the pmt hardware cables corrections +void sbndDB::PMTCalibrationDatabaseProvider::ReadPMTCalibration( uint32_t run ) { + + // pmt_cables_delay: delays of the cables relative to trigger + // and reset distribution + + const std::string dbname(fTableName); + lariov::DBFolder db(dbname, "", "", fCablesTag, true, false); + + bool ret = db.UpdateData( fDatabaseTimeStamp ); // select table based on run number + mf::LogDebug(fLogCategory) << dbname + " corrections" << (ret? "": " not") << " updated for run " << run; + mf::LogTrace(fLogCategory) + << "Fetched IoV [ " << db.CachedStart().DBStamp() << " ; " << db.CachedEnd().DBStamp() + << " ] to cover t=" << RunToDatabaseTimestamp(run) + << " [=" << lariov::TimeStampDecoder::DecodeTimeStamp(RunToDatabaseTimestamp(run)).DBStamp() << "]"; + + std::vector channelList; + if (int res = db.GetChannelList(channelList); res != 0) { + throw cet::exception + ( "PMTTimingCorrectionsProvider" ) << "GetChannelList() returned " << res << " on run " << run << " query in " << dbname << "\n"; + } + + if (channelList.empty()) { + throw cet::exception("PMTTimingCorrectionsProvider") << "Got an empty channel list for run " << run << " in " << dbname << "\n"; + } + + for( auto channel : channelList ) { + // Read breakout box + long _breakoutbox = 0; + int error = db.GetNamedChannelData( channel, "breakout_box", _breakoutbox ); + if( error ) throw cet::exception( "PMTTimingCorrectionsProvider" ) << "Encountered error (code " << error << ") while trying to access 'breakout_box' on table " << dbname << "\n"; + fPMTCalibrationData[channel].breakoutBox = static_cast(_breakoutbox); + + // Read caen digitizer + long _caen_digitizer=0; + error = db.GetNamedChannelData( channel, "caen_digitizer", _caen_digitizer ); + if( error ) throw cet::exception( "PMTTimingCorrectionsProvider" ) << "Encountered error (code " << error << ") while trying to access 'caen_digitizer' on table " << dbname << "\n"; + fPMTCalibrationData[channel].caenDigitizer = static_cast(_caen_digitizer); + + // Read caen digitizer channel + long _caen_digitizer_channel=0; + error = db.GetNamedChannelData( channel, "caen_digitizer_channel", _caen_digitizer_channel ); + if( error ) throw cet::exception( "PMTTimingCorrectionsProvider" ) << "Encountered error (code " << error << ") while trying to access 'caen_digitizer_channel' on table " << dbname << "\n"; + fPMTCalibrationData[channel].caenDigitizerChannel = static_cast(_caen_digitizer_channel); + + // Read total transit time + double _total_transit_time =0.; + error = db.GetNamedChannelData( channel, "total_transit_time", _total_transit_time ); + if( error ) throw cet::exception( "PMTTimingCorrectionsProvider" ) << "Encountered error (code " << error << ") while trying to access 'total_transit_time' on table " << dbname << "\n"; + fPMTCalibrationData[channel].totalTransitTime = _total_transit_time; + + // Read spe amplitude + double _spe_amplitude=0.; + error = db.GetNamedChannelData( channel, "spe_amp", _spe_amplitude ); + if( error ) throw cet::exception( "PMTTimingCorrectionsProvider" ) << "Encountered error (code " << error << ") while trying to access 'spe_amplitude' on table " << dbname << "\n"; + fPMTCalibrationData[channel].spe_amplitude = _spe_amplitude; + + // Read gauss filter power + double _gauss_w_wc_power=0; + error = db.GetNamedChannelData( channel, "gauss_w_wc_power", _gauss_w_wc_power ); + if( error ) throw cet::exception( "PMTTimingCorrectionsProvider" ) << "Encountered error (code " << error << ") while trying to access 'gauss_w_wc_power' on table " << dbname << "\n"; + fPMTCalibrationData[channel].gauss_wc_power = _gauss_w_wc_power; + + // Read gauss filter wc + double _gauss_wc = 0.; + error = db.GetNamedChannelData( channel, "gauss_wc", _gauss_wc ); + if( error ) throw cet::exception( "PMTTimingCorrectionsProvider" ) << "Encountered error (code " << error << ") while trying to access 'gauss_wc' on table " << dbname << "\n"; + fPMTCalibrationData[channel].gauss_wc = _gauss_wc; + + // Read SER + std::vector _ser; + std::string name_base = "ser_vec_"; + for(size_t i=0; i +#include +#include + + +namespace sbndDB{ class PMTCalibrationDatabaseProvider; } +/** + * @brief + * + * This module reads the PMT timing corrections from the database. + * Corrections are picked according to the run number being processed. + * + * All time corrections are offsets (in microseconds) that need to be _added_ to the uncorrected time. + * + * Configuration parameters + * ------------------------- + * * `CorrectionTags`: tags to select the correction versions: + * * `CablesTag` (default: `v1r0`): correction for cable delay. + * * `LaserTag` (default: `v1r0`): first order PMT time correction, from laser data. + * * `CosmicsTag` (default: `v1r0`): second order PMT time correction, from cosmic rays. + * * `Verbose` (default: `false`): Print-out the corrections read from the database. + * * `LogCategory` (default: `PMTTimingCorrection") + * + */ +class sbndDB::PMTCalibrationDatabaseProvider : public PMTCalibrationDatabase { + + public: + + PMTCalibrationDatabaseProvider(const fhicl::ParameterSet& pset); + + /// Read timing corrections from the database + void readPMTCalibrationDatabase(const art::Run& run); + + /// Get time delay on the trigger line + int getBreakoutBox( unsigned int channelID ) const override { + return getChannelCorrOrDefault(channelID).breakoutBox; + }; + int getCAENDigitizer( unsigned int channelID ) const override { + return getChannelCorrOrDefault(channelID).caenDigitizer; + }; + int getCAENDigitizerChannel( unsigned int channelID ) const override { + return getChannelCorrOrDefault(channelID).caenDigitizerChannel; + }; + double getTotalTransitTime( unsigned int channelID ) const override { + return getChannelCorrOrDefault(channelID).totalTransitTime; + }; + double getSPEAmplitude( unsigned int channelID ) const override { + return getChannelCorrOrDefault(channelID).spe_amplitude; + }; + double getGaussFilterPower( unsigned int channelID ) const override { + return getChannelCorrOrDefault(channelID).gauss_wc_power; + }; + double getGaussFilterWC( unsigned int channelID ) const override { + return getChannelCorrOrDefault(channelID).gauss_wc; + }; + std::vector getSER( unsigned int channelID ) const override { + return getChannelCorrOrDefault(channelID).ser; + }; + private: + + bool fVerbose = false; ///< Whether to print the configuration we read. + std::string fLogCategory; ///< Category tag for messages. + std::string fCablesTag; ///< Tag for cable corrections database. + long fDatabaseTimeStamp; + std::string fLaserTag; ///< Tag for laser corrections database. + std::string fCosmicsTag; ///< Tag for cosmics corrections database. + std::string fTableName; + std::string fVariabletoread; + size_t fSERLength; + + /// Structure for single channel corrections + struct PMTCalibrationDB { + + size_t breakoutBox=0; + size_t caenDigitizer=0; + size_t caenDigitizerChannel=0; + size_t totalTransitTime=0; + double spe_amplitude=0.; + double gauss_wc_power=0.; + double gauss_wc=0.; + std::vector ser={}; + }; + + const PMTCalibrationDB CorrectionDefaults = {0, 0, 0, 0, 0.0, 0.0, 0.0, {}}; + + /// Map of corrections by channel + std::map fPMTCalibrationData; + + /// Internal access to the channel correction record; returns defaults if not present. + PMTCalibrationDB const& getChannelCorrOrDefault + (unsigned int channelID) const + { + auto const it = fPMTCalibrationData.find(channelID); + return (it == fPMTCalibrationData.end())? CorrectionDefaults: it->second; + } + + /// Convert run number to internal database + uint64_t RunToDatabaseTimestamp(uint32_t run) const; + + void ReadPMTCalibration(uint32_t run); + + +}; // services class + +#endif \ No newline at end of file diff --git a/sbndcode/DatabaseInterface/PMTCalibrationDatabaseService_service.cc b/sbndcode/DatabaseInterface/PMTCalibrationDatabaseService_service.cc new file mode 100644 index 000000000..3db25b02b --- /dev/null +++ b/sbndcode/DatabaseInterface/PMTCalibrationDatabaseService_service.cc @@ -0,0 +1,61 @@ +/** + * Wrapper class for 'PMTCalibrationDatabaseProvider.h' + * Andrea Scarpelli (ascarpell@bnl.gov) + */ +// Ported to SBND by Alejandro Sanchez-Castillo, Jan. 2025 + + +#include "sbndcode/DatabaseInterface/IPMTCalibrationDatabaseService.h" +#include "sbndcode/DatabaseInterface/PMTCalibrationDatabaseProvider.h" + +// framework libraries +#include "art/Framework/Principal/Run.h" +#include "art/Framework/Services/Registry/ActivityRegistry.h" +#include "art/Framework/Services/Registry/ServiceDefinitionMacros.h" +#include "art/Framework/Services/Registry/ServiceDeclarationMacros.h" +#include "fhiclcpp/ParameterSet.h" +#include "cetlib_except/exception.h" + + +// ----------------------------------------------------------------------------- +namespace sbndDB { class PMTCalibrationDatabaseService; } +class sbndDB::PMTCalibrationDatabaseService + : public IPMTCalibrationDatabaseService, private PMTCalibrationDatabaseProvider { + + void preBeginRun(const art::Run& run); + + /// Returns a constant pointer to the service provider + virtual PMTCalibrationDatabaseProvider const* do_provider() const override + { return this; } + + public: + + PMTCalibrationDatabaseService(const fhicl::ParameterSet& pset, art::ActivityRegistry& reg); + +}; // class sbndDB::PMTCalibrationDatabaseService + + +// ----------------------------------------------------------------------------- +// --- Implementation +// ----------------------------------------------------------------------------- +sbndDB::PMTCalibrationDatabaseService::PMTCalibrationDatabaseService + (const fhicl::ParameterSet& pset, art::ActivityRegistry& reg) + : PMTCalibrationDatabaseProvider(pset) +{ + reg.sPreBeginRun.watch(this, &PMTCalibrationDatabaseService::preBeginRun); +} + + +// ----------------------------------------------------------------------------- +void sbndDB::PMTCalibrationDatabaseService::preBeginRun(const art::Run& run) +{ + readPMTCalibrationDatabase(run); +} + + +// ----------------------------------------------------------------------------- +DECLARE_ART_SERVICE_INTERFACE_IMPL(sbndDB::PMTCalibrationDatabaseService, sbndDB::IPMTCalibrationDatabaseService, SHARED) +DEFINE_ART_SERVICE_INTERFACE_IMPL(sbndDB::PMTCalibrationDatabaseService, sbndDB::IPMTCalibrationDatabaseService) + + +// ----------------------------------------------------------------------------- \ No newline at end of file diff --git a/sbndcode/DatabaseInterface/PMTTimingCorrectionProvider.cxx b/sbndcode/DatabaseInterface/PMTTimingCorrectionProvider.cxx deleted file mode 100644 index 1c0d197e4..000000000 --- a/sbndcode/DatabaseInterface/PMTTimingCorrectionProvider.cxx +++ /dev/null @@ -1,235 +0,0 @@ -/** - * @file icaruscode/Timing/PMTTimingCorrectionsProvider.cxx - * @brief Service for the PMT timing corrections. - * @author Andrea Scarpelli (ascarpell@bnl.gov), Matteo Vicenzi (mvicenzi@bnl.gov) - */ - -// Framework includes -#include "art/Framework/Services/Registry/ServiceDefinitionMacros.h" -#include "art/Framework/Principal/Run.h" -#include "messagefacility/MessageLogger/MessageLogger.h" -#include "cetlib_except/exception.h" - -// Local -#include "sbndcode/DatabaseInterface/PMTTimingCorrections.h" -#include "sbndcode/DatabaseInterface/PMTTimingCorrectionsProvider.h" - -// Database interface helpers -#include "larevt/CalibrationDBI/Providers/DBFolder.h" -#include "larevt/CalibrationDBI/IOVData/TimeStampDecoder.h" - -// C/C++ standard libraries -#include -#include - -//-------------------------------------------------------------------------------- - -sbndDB::PMTTimingCorrectionsProvider::PMTTimingCorrectionsProvider - (const fhicl::ParameterSet& pset) - : fVerbose{ pset.get("Verbose", false) } - , fLogCategory{ pset.get("LogCategory", "PMTTimingCorrection") } - { - fhicl::ParameterSet const tags{ pset.get("CorrectionTags") }; - fCablesTag = tags.get("CablesTag"); - fLaserTag = tags.get("LaserTag"); - fCosmicsTag = tags.get("CosmicsTag"); - if( fVerbose ) mf::LogInfo(fLogCategory) << "Database tags for timing corrections:\n" - << "Cables corrections " << fCablesTag << "\n" - << "Laser corrections " << fLaserTag << "\n" - << "Cosmics corrections " << fCosmicsTag; - } - -// ------------------------------------------------------------------------------- - -uint64_t sbndDB::PMTTimingCorrectionsProvider::RunToDatabaseTimestamp( uint32_t run ) const{ - - // Run number to timestamp used in the db - // DBFolder.h only takes 19 digit (= timestamp in nano second), - // but ICARUS tables are currently using run numbers - // Step 1) Add 1000000000 to the run number; e.g., run XXXXX -> 10000XXXXX - // Step 2) Multiply 1000000000 - uint64_t runNum = uint64_t(run); - uint64_t timestamp = runNum+1000000000; - timestamp *= 1000000000; - - if( fVerbose ) mf::LogInfo(fLogCategory) << "Run " << runNum << " corrections from DB timestamp " << timestamp; - - return timestamp; -} - -// ------------------------------------------------------------------------------- - -/// Function to look up the calibration database at the table holding the pmt hardware cables corrections -void sbndDB::PMTTimingCorrectionsProvider::ReadPMTCablesCorrections( uint32_t run ) { - - // pmt_cables_delay: delays of the cables relative to trigger - // and reset distribution - const std::string dbname("pmt_cables_delays_data"); - lariov::DBFolder db(dbname, "", "", fCablesTag, true, false); - - bool ret = db.UpdateData( RunToDatabaseTimestamp(run) ); // select table based on run number - mf::LogDebug(fLogCategory) << dbname + " corrections" << (ret? "": " not") << " updated for run " << run; - mf::LogTrace(fLogCategory) - << "Fetched IoV [ " << db.CachedStart().DBStamp() << " ; " << db.CachedEnd().DBStamp() - << " ] to cover t=" << RunToDatabaseTimestamp(run) - << " [=" << lariov::TimeStampDecoder::DecodeTimeStamp(RunToDatabaseTimestamp(run)).DBStamp() << "]"; - - std::vector channelList; - if (int res = db.GetChannelList(channelList); res != 0) { - throw cet::exception - ( "PMTTimingCorrectionsProvider" ) << "GetChannelList() returned " << res << " on run " << run << " query in " << dbname << "\n"; - } - - if (channelList.empty()) { - throw cet::exception("PMTTimingCorrectionsProvider") << "Got an empty channel list for run " << run << " in " << dbname << "\n"; - } - - for( auto channel : channelList ) { - - // PPS reset correction - double reset_distribution_delay = 0; - int error = db.GetNamedChannelData( channel, "reset_distribution_delay", reset_distribution_delay ); - if( error ) throw cet::exception("PMTTimingCorrectionsProvider") << "Encountered error (code " << error << ") while trying to access 'reset_distribution_delay' on table " << dbname << "\n"; - - // Trigger cable delay - double trigger_reference_delay = 0; - error = db.GetNamedChannelData( channel, "trigger_reference_delay", trigger_reference_delay ); - if( error ) throw cet::exception( "PMTTimingCorrectionsProvider" ) << "Encountered error (code " << error << ") while trying to access 'trigger_reference_delay' on table " << dbname << "\n"; - - // Phase correction - double phase_correction = 0; - error = db.GetNamedChannelData( channel, "phase_correction", phase_correction ); - if( error ) throw cet::exception( "PMTTimingCorrectionsProvider" ) << "Encountered error (code " << error << ") while trying to access 'phase_correction' on table " << dbname << "\n"; - - /// This is the delay due to the cables connecting the 'global' trigger crate FPGA to the spare channel of the first digitizer in each VME crates. - /// The phase correction is an additional fudge factor - /// holding local variation due to constant clock offsets (it can be up to 8 ns) - /// It can be absorbed within other corrections if necessary - /// Corrections are saved in ns, but icaruscode wants us - /// Correction are saved with the sing correspoding to their time direction - fDatabaseTimingCorrections[channel].triggerCableDelay = -(trigger_reference_delay-phase_correction)/1000.; - - /// This is the delay along the distribution line of the TTT reset - /// The phase correction is an additional fudge factor - /// holding local variation due to constant clock offsets (it can be up to 8 ns) - /// It can be absorbed within other corrections if necessary - /// Corrections are saved in ns, but icaruscode wants us - /// Corrections are additive! - fDatabaseTimingCorrections[channel].resetCableDelay = (reset_distribution_delay-phase_correction)/1000.; - } - -} - - -// ----------------------------------------------------------------------------- - -/// Function to look up the calibration database at the table holding the pmt timing corrections measured using the laser -void sbndDB::PMTTimingCorrectionsProvider::ReadLaserCorrections( uint32_t run ) { - - const std::string dbname("pmt_laser_timing_data"); - lariov::DBFolder db(dbname, "", "", fLaserTag, true, false); - - bool ret = db.UpdateData( RunToDatabaseTimestamp(run) ); // select table based on run number - mf::LogDebug(fLogCategory) << dbname + " corrections" << (ret? "": " not") << " updated for run " << run; - mf::LogTrace(fLogCategory) - << "Fetched IoV [ " << db.CachedStart().DBStamp() << " ; " << db.CachedEnd().DBStamp() - << " ] to cover t=" << RunToDatabaseTimestamp(run) - << " [=" << lariov::TimeStampDecoder::DecodeTimeStamp(RunToDatabaseTimestamp(run)).DBStamp() << "]"; - - std::vector channelList; - if (int res = db.GetChannelList(channelList); res != 0) { - throw cet::exception - ( "PMTTimingCorrectionsProvider" ) << "GetChannelList() returned " << res << " on run " << run << " query in " << dbname << "\n"; - } - - if (channelList.empty()) { - throw cet::exception("PMTTimingCorrectionsProvider") << "got an empty channel list for run " << run << " in " << dbname << "\n"; - } - - for( auto channel : channelList ) { - - // Laser correction - double t_signal = 0; - int error = db.GetNamedChannelData( channel, "t_signal", t_signal ); - if( error ) throw cet::exception( "PMTTimingCorrectionsProvider" ) << "Encountered error (code " << error << ") while trying to access 't_signal' on table " << dbname << "\n"; - - /// pmt_laser_delay: delay from the Electron Transit time inside the PMT - /// and the PMT signal cable - /// corrections are saved in ns, but icaruscode wants us - /// Corrections are additive! - fDatabaseTimingCorrections[channel].laserCableDelay = -t_signal/1000.; - } -} - -// ----------------------------------------------------------------------------- - -/// Function to look up the calibration database at the table holding the pmt timing corrections measured using cosmic muons -void sbndDB::PMTTimingCorrectionsProvider::ReadCosmicsCorrections( uint32_t run ) { - - const std::string dbname("pmt_cosmics_timing_data"); - lariov::DBFolder db(dbname, "", "", fCosmicsTag, true, false); - - bool ret = db.UpdateData( RunToDatabaseTimestamp(run) ); // select table based on run number - mf::LogDebug(fLogCategory) << dbname + " corrections" << (ret? "": " not") << " updated for run " << run; - mf::LogTrace(fLogCategory) - << "Fetched IoV [ " << db.CachedStart().DBStamp() << " ; " << db.CachedEnd().DBStamp() - << " ] to cover t=" << RunToDatabaseTimestamp(run) - << " [=" << lariov::TimeStampDecoder::DecodeTimeStamp(RunToDatabaseTimestamp(run)).DBStamp() << "]"; - - std::vector channelList; - if (int res = db.GetChannelList(channelList); res != 0) { - throw cet::exception - ( "PMTTimingCorrectionsProvider" ) << "GetChannelList() returned " << res << " on run " << run << " query in " << dbname << "\n"; - } - - if (channelList.empty()) { - throw cet::exception("PMTTimingCorrectionsProvider") << "Got an empty channel list for run " << run << " in " << dbname << "\n"; - } - - for( auto channel : channelList ) { - - // Cosmics correction - double mean_residual_ns = 0; - int error = db.GetNamedChannelData( channel, "mean_residual_ns", mean_residual_ns ); - if( error ) throw cet::exception( "PMTTimingCorrectionsProvider" ) << "Encountered error (code " << error << ") while trying to access 'mean_residual_ns' on table " << dbname << "\n"; - - /// pmt_cosmics_residual: time residuals from downward going cosmics tracks - /// correcting for point-like laser emission and pmts that do not see laser light - /// corrections are saved in ns, but icaruscode wants us - /// Corrections are additive! - fDatabaseTimingCorrections[channel].cosmicsCorrections = -mean_residual_ns/1000.; - } - -} - - -// ----------------------------------------------------------------------------- - - -/// Read all the corrections from the database and save them inside a map, whose index -/// is the PMT channel number -void sbndDB::PMTTimingCorrectionsProvider::readTimeCorrectionDatabase(const art::Run& run){ - - // Clear before the run - fDatabaseTimingCorrections.clear(); - - ReadPMTCablesCorrections(run.id().run()); - ReadLaserCorrections(run.id().run()); - ReadCosmicsCorrections(run.id().run()); - - if( fVerbose ) { - - mf::LogInfo(fLogCategory) << "Dump information from database " << std::endl; - mf::LogVerbatim(fLogCategory) << "channel, trigger cable delay, reset cable delay, laser corrections, muons corrections" << std::endl; - for( auto const & [key, value] : fDatabaseTimingCorrections ){ - mf::LogVerbatim(fLogCategory) - << key << " " - << value.triggerCableDelay << "," - << value.resetCableDelay << ", " - << value.laserCableDelay << ", " - << value.cosmicsCorrections << "," - << std::endl; - } - } - -} \ No newline at end of file diff --git a/sbndcode/DatabaseInterface/PMTTimingCorrectionService_service.cc b/sbndcode/DatabaseInterface/PMTTimingCorrectionService_service.cc deleted file mode 100644 index fd19456c7..000000000 --- a/sbndcode/DatabaseInterface/PMTTimingCorrectionService_service.cc +++ /dev/null @@ -1,60 +0,0 @@ -/** - * @file icaruscode/Timing/PMTTimingCorrectionService_service.cc - * @brief Wrapper class for 'PMTTimingCorrectionsProvider.h' - * @author Andrea Scarpelli (ascarpell@bnl.gov) - */ - -#include "sbndcode/DatabaseInterface/IPMTTimingCorrectionService.h" -#include "sbndcode/DatabaseInterface/PMTTimingCorrectionsProvider.h" - -// framework libraries -#include "art/Framework/Principal/Run.h" -#include "art/Framework/Services/Registry/ActivityRegistry.h" -#include "art/Framework/Services/Registry/ServiceDefinitionMacros.h" -#include "art/Framework/Services/Registry/ServiceDeclarationMacros.h" -#include "fhiclcpp/ParameterSet.h" -#include "cetlib_except/exception.h" - - -// ----------------------------------------------------------------------------- -namespace sbndDB { class PMTTimingCorrectionService; } -class sbndDB::PMTTimingCorrectionService - : public IPMTTimingCorrectionService, private PMTTimingCorrectionsProvider { - - void preBeginRun(const art::Run& run); - - /// Returns a constant pointer to the service provider - virtual PMTTimingCorrectionsProvider const* do_provider() const override - { return this; } - - public: - - PMTTimingCorrectionService(const fhicl::ParameterSet& pset, art::ActivityRegistry& reg); - -}; // class icarusDB::PMTTimingCorrectionService - - -// ----------------------------------------------------------------------------- -// --- Implementation -// ----------------------------------------------------------------------------- -sbndDB::PMTTimingCorrectionService::PMTTimingCorrectionService - (const fhicl::ParameterSet& pset, art::ActivityRegistry& reg) - : PMTTimingCorrectionsProvider(pset) -{ - reg.sPreBeginRun.watch(this, &PMTTimingCorrectionService::preBeginRun); -} - - -// ----------------------------------------------------------------------------- -void sbndDB::PMTTimingCorrectionService::preBeginRun(const art::Run& run) -{ - readTimeCorrectionDatabase(run); -} - - -// ----------------------------------------------------------------------------- -DECLARE_ART_SERVICE_INTERFACE_IMPL(sbndDB::PMTTimingCorrectionService, sbndDB::IPMTTimingCorrectionService, SHARED) -DEFINE_ART_SERVICE_INTERFACE_IMPL(sbndDB::PMTTimingCorrectionService, sbndDB::IPMTTimingCorrectionService) - - -// ----------------------------------------------------------------------------- \ No newline at end of file diff --git a/sbndcode/DatabaseInterface/PMTTimingCorrections.h b/sbndcode/DatabaseInterface/PMTTimingCorrections.h deleted file mode 100644 index c0db8b763..000000000 --- a/sbndcode/DatabaseInterface/PMTTimingCorrections.h +++ /dev/null @@ -1,44 +0,0 @@ -/////////////////////////////////////////////////////////////////////// -/// -/// \file icaruscode/Timing/PMTTimingCorrections.h -/// -/// \brief Interface class between the calibration database and the PMT time corrections -/// -/// \author A. Scarpelli -/// -/// \mailto ascarpell@bnl.gov -/// -//////////////////////////////////////////////////////////////////////// - -#ifndef ICARUSCODE_TIMING_PMTTIMINGCORRECTIONS_H -#define ICARUSCODE_TIMING_PMTTIMINGCORRECTIONS_H - - -#include "larcorealg/CoreUtils/UncopiableAndUnmovableClass.h" - -#include "art/Framework/Services/Registry/ServiceDeclarationMacros.h" -#include "art/Framework/Principal/Run.h" - -namespace sbndDB { - - class PMTTimingCorrections: lar::UncopiableClass - { - public: - - virtual ~PMTTimingCorrections() noexcept = default; - - virtual double getTriggerCableDelay( unsigned int channelID ) const = 0; - - virtual double getResetCableDelay( unsigned int channelID ) const = 0; - - virtual double getLaserCorrections( unsigned int channelID ) const = 0; - - virtual double getCosmicsCorrections( unsigned int channelID ) const = 0; - - }; // end class - -}// end of namespace - -DECLARE_ART_SERVICE_INTERFACE(sbndDB::PMTTimingCorrections, SHARED) - -#endif \ No newline at end of file diff --git a/sbndcode/DatabaseInterface/PMTTimingCorrectionsProvider.h b/sbndcode/DatabaseInterface/PMTTimingCorrectionsProvider.h deleted file mode 100644 index 7d39c8e41..000000000 --- a/sbndcode/DatabaseInterface/PMTTimingCorrectionsProvider.h +++ /dev/null @@ -1,123 +0,0 @@ -/** - * @file icaruscode/Timing/PMTTimingCorrectionsProvider.h - * @brief Service for the PMT timing corrections. - * @author Andrea Scarpelli (ascarpell@bnl.gov), Matteo Vicenzi (mvicenzi@bnl.gov) - */ - -#ifndef ICARUSCODE_TIMING_PMTIMINGCORRECTIONSPROVIDER_H -#define ICARUSCODE_TIMING_PMTIMINGCORRECTIONSPROVIDER_H - -// Framework includes -#include "art/Framework/Services/Registry/ServiceDefinitionMacros.h" -#include "art/Framework/Services/Registry/ActivityRegistry.h" -#include "art/Framework/Services/Registry/ServiceHandle.h" -#include "art/Framework/Services/Registry/ServiceDeclarationMacros.h" -#include "art/Framework/Principal/Run.h" -#include "messagefacility/MessageLogger/MessageLogger.h" -#include "cetlib_except/exception.h" -#include "fhiclcpp/ParameterSet.h" - -// Local -#include "sbndcode/DatabaseInterface/PMTTimingCorrections.h" - -// C/C++ standard libraries -#include -#include -#include - -namespace sbndDB::details { - - /// Structure for single channel corrections - struct PMTTimeCorrectionsDB { - - double triggerCableDelay=0; ///< [µs] - double resetCableDelay=0; ///< [µs] - double laserCableDelay=0; ///< [µs] - double cosmicsCorrections=0; ///< [µs] - - }; - -} // sbndDB::details - -namespace sbndDB{ class PMTTimingCorrectionsProvider; } -/** - * @brief - * - * This module reads the PMT timing corrections from the database. - * Corrections are picked according to the run number being processed. - * - * All time corrections are offsets (in microseconds) that need to be _added_ to the uncorrected time. - * - * Configuration parameters - * ------------------------- - * * `CorrectionTags`: tags to select the correction versions: - * * `CablesTag` (default: `v1r0`): correction for cable delay. - * * `LaserTag` (default: `v1r0`): first order PMT time correction, from laser data. - * * `CosmicsTag` (default: `v1r0`): second order PMT time correction, from cosmic rays. - * * `Verbose` (default: `false`): Print-out the corrections read from the database. - * * `LogCategory` (default: `PMTTimingCorrection") - * - */ -class sbndDB::PMTTimingCorrectionsProvider : public PMTTimingCorrections { - - public: - - PMTTimingCorrectionsProvider(const fhicl::ParameterSet& pset); - - /// Read timing corrections from the database - void readTimeCorrectionDatabase(const art::Run& run); - - /// Get time delay on the trigger line - double getTriggerCableDelay( unsigned int channelID ) const override { - return getChannelCorrOrDefault(channelID).triggerCableDelay; - }; - - /// Get time delay on the PPS reset line - double getResetCableDelay( unsigned int channelID ) const override { - return getChannelCorrOrDefault(channelID).resetCableDelay; - }; - - /// Get timing corrections from laser data - double getLaserCorrections( unsigned int channelID ) const override { - return getChannelCorrOrDefault(channelID).laserCableDelay; - }; - - /// Get timing corrections from cosmics data - double getCosmicsCorrections( unsigned int channelID ) const override { - return getChannelCorrOrDefault(channelID).cosmicsCorrections; - }; - - private: - - using PMTTimeCorrectionsDB = details::PMTTimeCorrectionsDB; - static constexpr PMTTimeCorrectionsDB CorrectionDefaults {}; ///< Default values - - bool fVerbose = false; ///< Whether to print the configuration we read. - std::string fLogCategory; ///< Category tag for messages. - std::string fCablesTag; ///< Tag for cable corrections database. - std::string fLaserTag; ///< Tag for laser corrections database. - std::string fCosmicsTag; ///< Tag for cosmics corrections database. - - /// Map of corrections by channel - std::map fDatabaseTimingCorrections; - - /// Internal access to the channel correction record; returns defaults if not present. - PMTTimeCorrectionsDB const& getChannelCorrOrDefault - (unsigned int channelID) const - { - auto const it = fDatabaseTimingCorrections.find(channelID); - return (it == fDatabaseTimingCorrections.end())? CorrectionDefaults: it->second; - } - - /// Convert run number to internal database - uint64_t RunToDatabaseTimestamp(uint32_t run) const; - - void ReadPMTCablesCorrections(uint32_t run); - - void ReadLaserCorrections(uint32_t run); - - void ReadCosmicsCorrections(uint32_t run); - -}; // services class - -#endif \ No newline at end of file diff --git a/sbndcode/DatabaseInterface/database_config.fcl b/sbndcode/DatabaseInterface/database_config.fcl new file mode 100644 index 000000000..4e9b2e557 --- /dev/null +++ b/sbndcode/DatabaseInterface/database_config.fcl @@ -0,0 +1,13 @@ +BEGIN_PROLOG + +sbnd_pmttimingservice: +{ + # service name: IPMTTimingCorrectionService + service_provider: PMTTimingCorrectionService + CorrectionTags: { + CablesTag: "v1r0" + } + Verbose: false +} + +END_PROLOG diff --git a/sbndcode/OpDetReco/OpDeconvolution/Alg/OpDeconvolutionAlgWienerData_tool.cc b/sbndcode/OpDetReco/OpDeconvolution/Alg/OpDeconvolutionAlgWienerData_tool.cc index cbd23acef..c138e5772 100644 --- a/sbndcode/OpDetReco/OpDeconvolution/Alg/OpDeconvolutionAlgWienerData_tool.cc +++ b/sbndcode/OpDetReco/OpDeconvolution/Alg/OpDeconvolutionAlgWienerData_tool.cc @@ -26,7 +26,8 @@ #include "TComplex.h" #include "sbndcode/OpDetReco/OpDeconvolution/Alg/OpDeconvolutionAlg.hh" - +#include "sbndcode/DatabaseInterface/PMTCalibrationDatabase.h" +#include "sbndcode/DatabaseInterface/IPMTCalibrationDatabaseService.h" namespace opdet { class OpDeconvolutionAlgWiener; @@ -88,6 +89,8 @@ class opdet::OpDeconvolutionAlgWiener : opdet::OpDeconvolutionAlg { short unsigned int fBaseSampleBins; double fBaseVarCut; + sbndDB::PMTCalibrationDatabase const* fPMTCalibrationDatabaseService; + // Declare member functions void ApplyExpoAvSmoothing(std::vector& wf); void ApplyUnAvSmoothing(std::vector& wf); @@ -166,7 +169,9 @@ opdet::OpDeconvolutionAlgWiener::OpDeconvolutionAlgWiener(fhicl::ParameterSet co fSinglePEWaveVector = *SinglePEVec_p; fSinglePEChannels = *fSinglePEChannels_p; fPeakAmplitude = *fPeakAmplitude_p; - fFilterParamVector = *fFilterParamVector_p; + fFilterParamVector = *fFilterParamVector_p; + + fPMTCalibrationDatabaseService = lar::providerFrom(); mf::LogInfo("OpDeconvolutionAlg")<<"Loaded SER from "< wfDeco; wfDeco.reserve(wfVector.size()); for(auto const& wf : wfVector) From 17533235803681aceaf5c009191bbd35719e45e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20S=C3=A1nchez=20Castillo?= Date: Mon, 3 Mar 2025 05:53:09 -0600 Subject: [PATCH 03/16] Format code --- .clang-format | 108 +++++++ sbndcode/.clang-format | 108 +++++++ sbndcode/DatabaseInterface/.clang-format | 107 +++++++ sbndcode/DatabaseInterface/CMakeLists.txt | 18 +- .../IPMTCalibrationDatabaseService.h | 8 +- .../PMTCalibrationDatabase.h | 33 +- .../PMTCalibrationDatabaseProvider.cxx | 285 ++++++++++-------- .../PMTCalibrationDatabaseService_service.cc | 50 ++- sbndcode/DatabaseInterface/clang-format | 41 +++ .../DatabaseInterface/database_config.fcl | 14 +- 10 files changed, 571 insertions(+), 201 deletions(-) create mode 100644 .clang-format create mode 100644 sbndcode/.clang-format create mode 100644 sbndcode/DatabaseInterface/.clang-format create mode 100644 sbndcode/DatabaseInterface/clang-format diff --git a/.clang-format b/.clang-format new file mode 100644 index 000000000..b25048292 --- /dev/null +++ b/.clang-format @@ -0,0 +1,108 @@ +# LArSoft format agreed upon by SciSoft team in Sept. 2022 +--- +Language: Cpp +# BasedOnStyle: Mozilla +AccessModifierOffset: -2 +AlignAfterOpenBracket: Align +AlignConsecutiveAssignments: false +AlignConsecutiveDeclarations: false +AlignEscapedNewlines: Right +AlignOperands: true +AlignTrailingComments: true +AllowAllParametersOfDeclarationOnNextLine: false +AllowShortBlocksOnASingleLine: true +AllowShortCaseLabelsOnASingleLine: true +AllowShortFunctionsOnASingleLine: Inline +AllowShortIfStatementsOnASingleLine: true +AllowShortLoopsOnASingleLine: false +AlwaysBreakAfterDefinitionReturnType: None +AlwaysBreakAfterReturnType: None +AlwaysBreakBeforeMultilineStrings: false +AlwaysBreakTemplateDeclarations: true +BinPackArguments: false +BinPackParameters: false +BraceWrapping: + AfterClass: false + AfterControlStatement: false + AfterEnum: false + AfterFunction: true + AfterNamespace: false + AfterObjCDeclaration: false + AfterStruct: false + AfterUnion: false + BeforeCatch: true + BeforeElse: true + IndentBraces: false + SplitEmptyFunction: false + SplitEmptyRecord: false + SplitEmptyNamespace: false +BreakBeforeBinaryOperators: None +BreakBeforeBraces: Custom +BreakBeforeInheritanceComma: false +BreakBeforeTernaryOperators: false +# BreakConstructorInitializersBeforeComma: false +BreakConstructorInitializers: BeforeComma +BreakAfterJavaFieldAnnotations: false +BreakStringLiterals: true +ColumnLimit: 100 +CommentPragmas: '^ IWYU pragma:' +CompactNamespaces: false +ConstructorInitializerAllOnOneLineOrOnePerLine: true +ConstructorInitializerIndentWidth: 2 +ContinuationIndentWidth: 2 +Cpp11BracedListStyle: true +DerivePointerAlignment: false +DisableFormat: false +ExperimentalAutoDetectBinPacking: false +FixNamespaceComments: false +ForEachMacros: + - foreach + - Q_FOREACH + - BOOST_FOREACH +IncludeCategories: + - Regex: '^"(llvm|llvm-c|clang|clang-c)/' + Priority: 2 + - Regex: '^(<|"(gtest|gmock|isl|json)/)' + Priority: 3 + - Regex: '.*' + Priority: 1 +IncludeIsMainRegex: '(Test)?$' +IndentCaseLabels: false +IndentWidth: 2 +IndentWrappedFunctionNames: false +JavaScriptQuotes: Leave +JavaScriptWrapImports: true +KeepEmptyLinesAtTheStartOfBlocks: true +MacroBlockBegin: '' +MacroBlockEnd: '' +MaxEmptyLinesToKeep: 1 +NamespaceIndentation: All +ObjCBlockIndentWidth: 2 +ObjCSpaceAfterProperty: true +ObjCSpaceBeforeProtocolList: false +PenaltyBreakAssignment: 2 +PenaltyBreakBeforeFirstCallParameter: 19 +PenaltyBreakComment: 300 +PenaltyBreakFirstLessLess: 120 +PenaltyBreakString: 1000 +PenaltyExcessCharacter: 1000000 +PenaltyReturnTypeOnItsOwnLine: 200 +PointerAlignment: Left +ReflowComments: false +SortIncludes: true +SortUsingDeclarations: true +SpaceAfterCStyleCast: false +SpaceAfterTemplateKeyword: true +SpaceBeforeAssignmentOperators: true +SpaceBeforeParens: ControlStatements +SpaceInEmptyParentheses: false +SpacesBeforeTrailingComments: 1 +SpacesInAngles: false +SpacesInContainerLiterals: false +SpacesInCStyleCastParentheses: false +SpacesInParentheses: false +SpacesInSquareBrackets: false +Standard: Cpp11 +TabWidth: 8 +UseTab: Never +... \ No newline at end of file diff --git a/sbndcode/.clang-format b/sbndcode/.clang-format new file mode 100644 index 000000000..b25048292 --- /dev/null +++ b/sbndcode/.clang-format @@ -0,0 +1,108 @@ +# LArSoft format agreed upon by SciSoft team in Sept. 2022 +--- +Language: Cpp +# BasedOnStyle: Mozilla +AccessModifierOffset: -2 +AlignAfterOpenBracket: Align +AlignConsecutiveAssignments: false +AlignConsecutiveDeclarations: false +AlignEscapedNewlines: Right +AlignOperands: true +AlignTrailingComments: true +AllowAllParametersOfDeclarationOnNextLine: false +AllowShortBlocksOnASingleLine: true +AllowShortCaseLabelsOnASingleLine: true +AllowShortFunctionsOnASingleLine: Inline +AllowShortIfStatementsOnASingleLine: true +AllowShortLoopsOnASingleLine: false +AlwaysBreakAfterDefinitionReturnType: None +AlwaysBreakAfterReturnType: None +AlwaysBreakBeforeMultilineStrings: false +AlwaysBreakTemplateDeclarations: true +BinPackArguments: false +BinPackParameters: false +BraceWrapping: + AfterClass: false + AfterControlStatement: false + AfterEnum: false + AfterFunction: true + AfterNamespace: false + AfterObjCDeclaration: false + AfterStruct: false + AfterUnion: false + BeforeCatch: true + BeforeElse: true + IndentBraces: false + SplitEmptyFunction: false + SplitEmptyRecord: false + SplitEmptyNamespace: false +BreakBeforeBinaryOperators: None +BreakBeforeBraces: Custom +BreakBeforeInheritanceComma: false +BreakBeforeTernaryOperators: false +# BreakConstructorInitializersBeforeComma: false +BreakConstructorInitializers: BeforeComma +BreakAfterJavaFieldAnnotations: false +BreakStringLiterals: true +ColumnLimit: 100 +CommentPragmas: '^ IWYU pragma:' +CompactNamespaces: false +ConstructorInitializerAllOnOneLineOrOnePerLine: true +ConstructorInitializerIndentWidth: 2 +ContinuationIndentWidth: 2 +Cpp11BracedListStyle: true +DerivePointerAlignment: false +DisableFormat: false +ExperimentalAutoDetectBinPacking: false +FixNamespaceComments: false +ForEachMacros: + - foreach + - Q_FOREACH + - BOOST_FOREACH +IncludeCategories: + - Regex: '^"(llvm|llvm-c|clang|clang-c)/' + Priority: 2 + - Regex: '^(<|"(gtest|gmock|isl|json)/)' + Priority: 3 + - Regex: '.*' + Priority: 1 +IncludeIsMainRegex: '(Test)?$' +IndentCaseLabels: false +IndentWidth: 2 +IndentWrappedFunctionNames: false +JavaScriptQuotes: Leave +JavaScriptWrapImports: true +KeepEmptyLinesAtTheStartOfBlocks: true +MacroBlockBegin: '' +MacroBlockEnd: '' +MaxEmptyLinesToKeep: 1 +NamespaceIndentation: All +ObjCBlockIndentWidth: 2 +ObjCSpaceAfterProperty: true +ObjCSpaceBeforeProtocolList: false +PenaltyBreakAssignment: 2 +PenaltyBreakBeforeFirstCallParameter: 19 +PenaltyBreakComment: 300 +PenaltyBreakFirstLessLess: 120 +PenaltyBreakString: 1000 +PenaltyExcessCharacter: 1000000 +PenaltyReturnTypeOnItsOwnLine: 200 +PointerAlignment: Left +ReflowComments: false +SortIncludes: true +SortUsingDeclarations: true +SpaceAfterCStyleCast: false +SpaceAfterTemplateKeyword: true +SpaceBeforeAssignmentOperators: true +SpaceBeforeParens: ControlStatements +SpaceInEmptyParentheses: false +SpacesBeforeTrailingComments: 1 +SpacesInAngles: false +SpacesInContainerLiterals: false +SpacesInCStyleCastParentheses: false +SpacesInParentheses: false +SpacesInSquareBrackets: false +Standard: Cpp11 +TabWidth: 8 +UseTab: Never +... \ No newline at end of file diff --git a/sbndcode/DatabaseInterface/.clang-format b/sbndcode/DatabaseInterface/.clang-format new file mode 100644 index 000000000..18f47b4f6 --- /dev/null +++ b/sbndcode/DatabaseInterface/.clang-format @@ -0,0 +1,107 @@ +# LArSoft format agreed upon by SciSoft team in Sept. 2022 +--- +Language: Cpp +# BasedOnStyle: Mozilla +AccessModifierOffset: -2 +AlignAfterOpenBracket: Align +AlignConsecutiveAssignments: false +AlignConsecutiveDeclarations: false +AlignEscapedNewlines: Right +AlignOperands: true +AlignTrailingComments: true +AllowAllParametersOfDeclarationOnNextLine: false +AllowShortBlocksOnASingleLine: true +AllowShortCaseLabelsOnASingleLine: true +AllowShortFunctionsOnASingleLine: Inline +AllowShortIfStatementsOnASingleLine: true +AllowShortLoopsOnASingleLine: false +AlwaysBreakAfterDefinitionReturnType: None +AlwaysBreakAfterReturnType: None +AlwaysBreakBeforeMultilineStrings: false +AlwaysBreakTemplateDeclarations: true +BinPackArguments: false +BinPackParameters: false +BraceWrapping: + AfterClass: false + AfterControlStatement: false + AfterEnum: false + AfterFunction: true + AfterNamespace: false + AfterObjCDeclaration: false + AfterStruct: false + AfterUnion: false + BeforeCatch: true + BeforeElse: true + IndentBraces: false + SplitEmptyFunction: false + SplitEmptyRecord: false + SplitEmptyNamespace: false +BreakBeforeBinaryOperators: None +BreakBeforeBraces: Custom +BreakBeforeInheritanceComma: false +BreakBeforeTernaryOperators: false +# BreakConstructorInitializersBeforeComma: false +BreakConstructorInitializers: BeforeComma +BreakAfterJavaFieldAnnotations: false +BreakStringLiterals: true +ColumnLimit: 100 +CommentPragmas: '^ IWYU pragma:' +CompactNamespaces: false +ConstructorInitializerAllOnOneLineOrOnePerLine: true +ConstructorInitializerIndentWidth: 2 +ContinuationIndentWidth: 2 +Cpp11BracedListStyle: true +DerivePointerAlignment: false +DisableFormat: false +ExperimentalAutoDetectBinPacking: false +FixNamespaceComments: false +ForEachMacros: + - foreach + - Q_FOREACH + - BOOST_FOREACH +IncludeCategories: + - Regex: '^"(llvm|llvm-c|clang|clang-c)/' + Priority: 2 + - Regex: '^(<|"(gtest|gmock|isl|json)/)' + Priority: 3 + - Regex: '.*' + Priority: 1 +IncludeIsMainRegex: '(Test)?$' +IndentCaseLabels: false +IndentWidth: 2 +IndentWrappedFunctionNames: false +JavaScriptQuotes: Leave +JavaScriptWrapImports: true +KeepEmptyLinesAtTheStartOfBlocks: true +MacroBlockBegin: '' +MacroBlockEnd: '' +MaxEmptyLinesToKeep: 1 +NamespaceIndentation: All +ObjCBlockIndentWidth: 2 +ObjCSpaceAfterProperty: true +ObjCSpaceBeforeProtocolList: false +PenaltyBreakAssignment: 2 +PenaltyBreakBeforeFirstCallParameter: 19 +PenaltyBreakComment: 300 +PenaltyBreakFirstLessLess: 120 +PenaltyBreakString: 1000 +PenaltyExcessCharacter: 1000000 +PenaltyReturnTypeOnItsOwnLine: 200 +PointerAlignment: Left +ReflowComments: false +SortIncludes: true +SortUsingDeclarations: true +SpaceAfterCStyleCast: false +SpaceAfterTemplateKeyword: true +SpaceBeforeAssignmentOperators: true +SpaceBeforeParens: ControlStatements +SpaceInEmptyParentheses: false +SpacesBeforeTrailingComments: 1 +SpacesInAngles: false +SpacesInContainerLiterals: false +SpacesInCStyleCastParentheses: false +SpacesInParentheses: false +SpacesInSquareBrackets: false +Standard: Cpp11 +TabWidth: 8 +UseTab: Never \ No newline at end of file diff --git a/sbndcode/DatabaseInterface/CMakeLists.txt b/sbndcode/DatabaseInterface/CMakeLists.txt index 63d64409b..1ce6f3755 100644 --- a/sbndcode/DatabaseInterface/CMakeLists.txt +++ b/sbndcode/DatabaseInterface/CMakeLists.txt @@ -1,28 +1,18 @@ cet_enable_asserts() set( MODULE_LIBRARIES - lardataobj::RecoBase - sbnobj::Common_Trigger - larcore::Geometry_Geometry_service - lardata::DetectorClocksService - art_root_io::TFileService_service + art_root_io::TFileService_service art_root_io::tfile_support - lardataobj::RawData - ROOT::Tree ) set( LIB_LIBRARIES - art::Framework_Services_Registry - messagefacility::MF_MessageLogger - lardataobj::RecoBase - lardata::Utilities - sbnobj::Common_PMT_Data + art::Framework_Services_Registry + messagefacility::MF_MessageLogger + lardata::Utilities larevt::CalibrationDBI_IOVData larevt::CalibrationDBI_Providers ) set( SERVICE_LIBRARIES sbndcode_DatabaseInterface - larcore::Geometry_Geometry_service - lardata::DetectorClocksService ) file(GLOB lib_srcs *.cxx) diff --git a/sbndcode/DatabaseInterface/IPMTCalibrationDatabaseService.h b/sbndcode/DatabaseInterface/IPMTCalibrationDatabaseService.h index c5b188164..0885ee419 100644 --- a/sbndcode/DatabaseInterface/IPMTCalibrationDatabaseService.h +++ b/sbndcode/DatabaseInterface/IPMTCalibrationDatabaseService.h @@ -13,21 +13,17 @@ // LArSoft libraries #include "larcore/CoreUtils/ServiceProviderWrappers.h" - // ----------------------------------------------------------------------------- namespace sbndDB { /// The only thing this service does is to return its service provider of type /// `sbndDB::PMTCalibrationDatabase`. - using IPMTCalibrationDatabaseService - = lar::ServiceProviderInterfaceWrapper; + using IPMTCalibrationDatabaseService = + lar::ServiceProviderInterfaceWrapper; } - // ----------------------------------------------------------------------------- DECLARE_ART_SERVICE_INTERFACE(sbndDB::IPMTCalibrationDatabaseService, SHARED) - // ----------------------------------------------------------------------------- - #endif // ICARUSCODE_DATABASEINTERFACE_IPMTCALIBRATIONDATABASESERVICE_H \ No newline at end of file diff --git a/sbndcode/DatabaseInterface/PMTCalibrationDatabase.h b/sbndcode/DatabaseInterface/PMTCalibrationDatabase.h index 6454ebfe5..1ce738eca 100644 --- a/sbndcode/DatabaseInterface/PMTCalibrationDatabase.h +++ b/sbndcode/DatabaseInterface/PMTCalibrationDatabase.h @@ -12,30 +12,27 @@ #ifndef SBNDCCODE_DATABASEINTERFACE_PMTCALIBRATIONDATABASE_H #define SBNDCCODE_DATABASEINTERFACE_PMTCALIBRATIONDATABASE_H - #include "larcorealg/CoreUtils/UncopiableAndUnmovableClass.h" -#include "art/Framework/Services/Registry/ServiceDeclarationMacros.h" #include "art/Framework/Principal/Run.h" +#include "art/Framework/Services/Registry/ServiceDeclarationMacros.h" namespace sbndDB { - class PMTCalibrationDatabase: lar::UncopiableClass - { - public: - - virtual ~PMTCalibrationDatabase() noexcept = default; - virtual int getBreakoutBox( unsigned int channelID ) const = 0; - virtual int getCAENDigitizer( unsigned int channelID ) const = 0; - virtual int getCAENDigitizerChannel( unsigned int channelID ) const = 0; - virtual double getTotalTransitTime( unsigned int channelID ) const = 0; - virtual double getSPEAmplitude( unsigned int channelID ) const = 0; - virtual double getGaussFilterPower( unsigned int channelID ) const = 0; - virtual double getGaussFilterWC( unsigned int channelID ) const = 0; - virtual std::vector getSER( unsigned int channelID ) const = 0; - }; // end class - -}// end of namespace + class PMTCalibrationDatabase : lar::UncopiableClass { + public: + virtual ~PMTCalibrationDatabase() noexcept = default; + virtual int getBreakoutBox(unsigned int channelID) const = 0; + virtual int getCAENDigitizer(unsigned int channelID) const = 0; + virtual int getCAENDigitizerChannel(unsigned int channelID) const = 0; + virtual double getTotalTransitTime(unsigned int channelID) const = 0; + virtual double getSPEAmplitude(unsigned int channelID) const = 0; + virtual double getGaussFilterPower(unsigned int channelID) const = 0; + virtual double getGaussFilterWC(unsigned int channelID) const = 0; + virtual std::vector getSER(unsigned int channelID) const = 0; + }; // end class + +} // end of namespace DECLARE_ART_SERVICE_INTERFACE(sbndDB::PMTCalibrationDatabase, SHARED) diff --git a/sbndcode/DatabaseInterface/PMTCalibrationDatabaseProvider.cxx b/sbndcode/DatabaseInterface/PMTCalibrationDatabaseProvider.cxx index 5913c7f5b..f10a07afe 100644 --- a/sbndcode/DatabaseInterface/PMTCalibrationDatabaseProvider.cxx +++ b/sbndcode/DatabaseInterface/PMTCalibrationDatabaseProvider.cxx @@ -4,20 +4,19 @@ */ // Ported from icaruscode to SBND by Alejandro Sanchez-Castillo, Jan. 2025 - // Framework includes -#include "art/Framework/Services/Registry/ServiceDefinitionMacros.h" #include "art/Framework/Principal/Run.h" -#include "messagefacility/MessageLogger/MessageLogger.h" +#include "art/Framework/Services/Registry/ServiceDefinitionMacros.h" #include "cetlib_except/exception.h" +#include "messagefacility/MessageLogger/MessageLogger.h" // Local #include "sbndcode/DatabaseInterface/PMTCalibrationDatabase.h" #include "sbndcode/DatabaseInterface/PMTCalibrationDatabaseProvider.h" // Database interface helpers -#include "larevt/CalibrationDBI/Providers/DBFolder.h" #include "larevt/CalibrationDBI/IOVData/TimeStampDecoder.h" +#include "larevt/CalibrationDBI/Providers/DBFolder.h" // C/C++ standard libraries #include @@ -25,145 +24,175 @@ //-------------------------------------------------------------------------------- -sbndDB::PMTCalibrationDatabaseProvider::PMTCalibrationDatabaseProvider - (const fhicl::ParameterSet& pset) - : fVerbose{ pset.get("Verbose", false) } - , fLogCategory{ pset.get("LogCategory", "PMTTimingCorrection") } - { - fhicl::ParameterSet const tags{ pset.get("CorrectionTags") }; - fCablesTag = tags.get("CablesTag"); - fDatabaseTimeStamp = tags.get("DatabaseTimeStamp"); - fTableName = tags.get("TableName"); - fVariabletoread = tags.get("VariableToRead"); - fSERLength = tags.get("SERLength"); - if( fVerbose ) mf::LogInfo(fLogCategory) << "Database tags for timing corrections:\n" - << "Cables corrections " << fCablesTag << "\n" ; - } +sbndDB::PMTCalibrationDatabaseProvider::PMTCalibrationDatabaseProvider( + const fhicl::ParameterSet& pset) + : fVerbose{pset.get("Verbose", false)} + , fLogCategory{pset.get("LogCategory", "PMTTimingCorrection")} +{ + fhicl::ParameterSet const tags{pset.get("CorrectionTags")}; + fCablesTag = tags.get("CablesTag"); + fDatabaseTimeStamp = tags.get("DatabaseTimeStamp"); + fTableName = tags.get("TableName"); + fVariabletoread = tags.get("VariableToRead"); + fSERLength = tags.get("SERLength"); + if (fVerbose) + mf::LogInfo(fLogCategory) << "Database tags for timing corrections:\n" + << "Cables corrections " << fCablesTag << "\n"; +} // ------------------------------------------------------------------------------- -uint64_t sbndDB::PMTCalibrationDatabaseProvider::RunToDatabaseTimestamp( uint32_t run ) const{ +uint64_t sbndDB::PMTCalibrationDatabaseProvider::RunToDatabaseTimestamp(uint32_t run) const +{ + + // Run number to timestamp used in the db + // DBFolder.h only takes 19 digit (= timestamp in nano second), + // but ICARUS tables are currently using run numbers + // Step 1) Add 1000000000 to the run number; e.g., run XXXXX -> 10000XXXXX + // Step 2) Multiply 1000000000 + uint64_t runNum = uint64_t(run); + uint64_t timestamp = runNum + 1000000000; + timestamp *= 1000000000; - // Run number to timestamp used in the db - // DBFolder.h only takes 19 digit (= timestamp in nano second), - // but ICARUS tables are currently using run numbers - // Step 1) Add 1000000000 to the run number; e.g., run XXXXX -> 10000XXXXX - // Step 2) Multiply 1000000000 - uint64_t runNum = uint64_t(run); - uint64_t timestamp = runNum+1000000000; - timestamp *= 1000000000; + if (fVerbose) + mf::LogInfo(fLogCategory) << "Run " << runNum << " corrections from DB timestamp " << timestamp; - if( fVerbose ) mf::LogInfo(fLogCategory) << "Run " << runNum << " corrections from DB timestamp " << timestamp; - - return timestamp; + return timestamp; } // ------------------------------------------------------------------------------- /// Function to look up the calibration database at the table holding the pmt hardware cables corrections -void sbndDB::PMTCalibrationDatabaseProvider::ReadPMTCalibration( uint32_t run ) { - - // pmt_cables_delay: delays of the cables relative to trigger - // and reset distribution - - const std::string dbname(fTableName); - lariov::DBFolder db(dbname, "", "", fCablesTag, true, false); - - bool ret = db.UpdateData( fDatabaseTimeStamp ); // select table based on run number - mf::LogDebug(fLogCategory) << dbname + " corrections" << (ret? "": " not") << " updated for run " << run; - mf::LogTrace(fLogCategory) - << "Fetched IoV [ " << db.CachedStart().DBStamp() << " ; " << db.CachedEnd().DBStamp() - << " ] to cover t=" << RunToDatabaseTimestamp(run) - << " [=" << lariov::TimeStampDecoder::DecodeTimeStamp(RunToDatabaseTimestamp(run)).DBStamp() << "]"; - - std::vector channelList; - if (int res = db.GetChannelList(channelList); res != 0) { - throw cet::exception - ( "PMTTimingCorrectionsProvider" ) << "GetChannelList() returned " << res << " on run " << run << " query in " << dbname << "\n"; - } - - if (channelList.empty()) { - throw cet::exception("PMTTimingCorrectionsProvider") << "Got an empty channel list for run " << run << " in " << dbname << "\n"; - } - - for( auto channel : channelList ) { - // Read breakout box - long _breakoutbox = 0; - int error = db.GetNamedChannelData( channel, "breakout_box", _breakoutbox ); - if( error ) throw cet::exception( "PMTTimingCorrectionsProvider" ) << "Encountered error (code " << error << ") while trying to access 'breakout_box' on table " << dbname << "\n"; - fPMTCalibrationData[channel].breakoutBox = static_cast(_breakoutbox); - - // Read caen digitizer - long _caen_digitizer=0; - error = db.GetNamedChannelData( channel, "caen_digitizer", _caen_digitizer ); - if( error ) throw cet::exception( "PMTTimingCorrectionsProvider" ) << "Encountered error (code " << error << ") while trying to access 'caen_digitizer' on table " << dbname << "\n"; - fPMTCalibrationData[channel].caenDigitizer = static_cast(_caen_digitizer); - - // Read caen digitizer channel - long _caen_digitizer_channel=0; - error = db.GetNamedChannelData( channel, "caen_digitizer_channel", _caen_digitizer_channel ); - if( error ) throw cet::exception( "PMTTimingCorrectionsProvider" ) << "Encountered error (code " << error << ") while trying to access 'caen_digitizer_channel' on table " << dbname << "\n"; - fPMTCalibrationData[channel].caenDigitizerChannel = static_cast(_caen_digitizer_channel); - - // Read total transit time - double _total_transit_time =0.; - error = db.GetNamedChannelData( channel, "total_transit_time", _total_transit_time ); - if( error ) throw cet::exception( "PMTTimingCorrectionsProvider" ) << "Encountered error (code " << error << ") while trying to access 'total_transit_time' on table " << dbname << "\n"; - fPMTCalibrationData[channel].totalTransitTime = _total_transit_time; - - // Read spe amplitude - double _spe_amplitude=0.; - error = db.GetNamedChannelData( channel, "spe_amp", _spe_amplitude ); - if( error ) throw cet::exception( "PMTTimingCorrectionsProvider" ) << "Encountered error (code " << error << ") while trying to access 'spe_amplitude' on table " << dbname << "\n"; - fPMTCalibrationData[channel].spe_amplitude = _spe_amplitude; - - // Read gauss filter power - double _gauss_w_wc_power=0; - error = db.GetNamedChannelData( channel, "gauss_w_wc_power", _gauss_w_wc_power ); - if( error ) throw cet::exception( "PMTTimingCorrectionsProvider" ) << "Encountered error (code " << error << ") while trying to access 'gauss_w_wc_power' on table " << dbname << "\n"; - fPMTCalibrationData[channel].gauss_wc_power = _gauss_w_wc_power; - - // Read gauss filter wc - double _gauss_wc = 0.; - error = db.GetNamedChannelData( channel, "gauss_wc", _gauss_wc ); - if( error ) throw cet::exception( "PMTTimingCorrectionsProvider" ) << "Encountered error (code " << error << ") while trying to access 'gauss_wc' on table " << dbname << "\n"; - fPMTCalibrationData[channel].gauss_wc = _gauss_wc; - - // Read SER - std::vector _ser; - std::string name_base = "ser_vec_"; - for(size_t i=0; i channelList; + if (int res = db.GetChannelList(channelList); res != 0) { + throw cet::exception("PMTTimingCorrectionsProvider") + << "GetChannelList() returned " << res << " on run " << run << " query in " << dbname << "\n"; + } + + if (channelList.empty()) { + throw cet::exception("PMTTimingCorrectionsProvider") + << "Got an empty channel list for run " << run << " in " << dbname << "\n"; + } + + for (auto channel : channelList) { + // Read breakout box + long _breakoutbox = 0; + int error = db.GetNamedChannelData(channel, "breakout_box", _breakoutbox); + if (error) + throw cet::exception("PMTTimingCorrectionsProvider") + << "Encountered error (code " << error + << ") while trying to access 'breakout_box' on table " << dbname << "\n"; + fPMTCalibrationData[channel].breakoutBox = static_cast(_breakoutbox); + + // Read caen digitizer + long _caen_digitizer = 0; + error = db.GetNamedChannelData(channel, "caen_digitizer", _caen_digitizer); + if (error) + throw cet::exception("PMTTimingCorrectionsProvider") + << "Encountered error (code " << error + << ") while trying to access 'caen_digitizer' on table " << dbname << "\n"; + fPMTCalibrationData[channel].caenDigitizer = static_cast(_caen_digitizer); + + // Read caen digitizer channel + long _caen_digitizer_channel = 0; + error = db.GetNamedChannelData(channel, "caen_digitizer_channel", _caen_digitizer_channel); + if (error) + throw cet::exception("PMTTimingCorrectionsProvider") + << "Encountered error (code " << error + << ") while trying to access 'caen_digitizer_channel' on table " << dbname << "\n"; + fPMTCalibrationData[channel].caenDigitizerChannel = static_cast(_caen_digitizer_channel); + + // Read total transit time + double _total_transit_time = 0.; + error = db.GetNamedChannelData(channel, "total_transit_time", _total_transit_time); + if (error) + throw cet::exception("PMTTimingCorrectionsProvider") + << "Encountered error (code " << error + << ") while trying to access 'total_transit_time' on table " << dbname << "\n"; + fPMTCalibrationData[channel].totalTransitTime = _total_transit_time; + + // Read spe amplitude + double _spe_amplitude = 0.; + error = db.GetNamedChannelData(channel, "spe_amp", _spe_amplitude); + if (error) + throw cet::exception("PMTTimingCorrectionsProvider") + << "Encountered error (code " << error + << ") while trying to access 'spe_amplitude' on table " << dbname << "\n"; + fPMTCalibrationData[channel].spe_amplitude = _spe_amplitude; + + // Read gauss filter power + double _gauss_w_wc_power = 0; + error = db.GetNamedChannelData(channel, "gauss_w_wc_power", _gauss_w_wc_power); + if (error) + throw cet::exception("PMTTimingCorrectionsProvider") + << "Encountered error (code " << error + << ") while trying to access 'gauss_w_wc_power' on table " << dbname << "\n"; + fPMTCalibrationData[channel].gauss_wc_power = _gauss_w_wc_power; + + // Read gauss filter wc + double _gauss_wc = 0.; + error = db.GetNamedChannelData(channel, "gauss_wc", _gauss_wc); + if (error) + throw cet::exception("PMTTimingCorrectionsProvider") + << "Encountered error (code " << error << ") while trying to access 'gauss_wc' on table " + << dbname << "\n"; + fPMTCalibrationData[channel].gauss_wc = _gauss_wc; + + // Read SER + std::vector _ser; + std::string name_base = "ser_vec_"; + for (size_t i = 0; i < fSERLength; i++) { + std::string entry_num = std::to_string(i); + std::string entry_name = name_base + entry_num; + double _ser_component = 0.; + error = db.GetNamedChannelData(channel, entry_name, _ser_component); + if (error) + throw cet::exception("PMTTimingCorrectionsProvider") + << "Encountered error (code " << error << ") while trying to access 'ser_vec' on table " + << dbname << "\n"; + _ser.push_back(_ser_component); } + fPMTCalibrationData[channel].ser = _ser; + } } // ----------------------------------------------------------------------------- -/// Read all the corrections from the database and save them inside a map, whose index +/// Read all the corrections from the database and save them inside a map, whose index /// is the PMT channel number -void sbndDB::PMTCalibrationDatabaseProvider::readPMTCalibrationDatabase(const art::Run& run){ - - // Clear before the run - fPMTCalibrationData.clear(); - - ReadPMTCalibration(run.id().run()); - - if( fVerbose ) { - mf::LogInfo(fLogCategory) << "Dump information from database " << std::endl; - mf::LogVerbatim(fLogCategory) << "channel, trigger cable delay, reset cable delay, laser corrections, muons corrections" << std::endl; - for( auto const & [key, value] : fPMTCalibrationData ){ - mf::LogVerbatim(fLogCategory) - << key << " " - << value.breakoutBox << "," - << std::endl; - } +void sbndDB::PMTCalibrationDatabaseProvider::readPMTCalibrationDatabase(const art::Run& run) +{ + + // Clear before the run + fPMTCalibrationData.clear(); + + ReadPMTCalibration(run.id().run()); + + if (fVerbose) { + mf::LogInfo(fLogCategory) << "Dump information from database " << std::endl; + mf::LogVerbatim(fLogCategory) + << "channel, trigger cable delay, reset cable delay, laser corrections, muons corrections" + << std::endl; + for (auto const& [key, value] : fPMTCalibrationData) { + mf::LogVerbatim(fLogCategory) << key << " " << value.breakoutBox << "," << std::endl; } + } } \ No newline at end of file diff --git a/sbndcode/DatabaseInterface/PMTCalibrationDatabaseService_service.cc b/sbndcode/DatabaseInterface/PMTCalibrationDatabaseService_service.cc index 3db25b02b..740acf89f 100644 --- a/sbndcode/DatabaseInterface/PMTCalibrationDatabaseService_service.cc +++ b/sbndcode/DatabaseInterface/PMTCalibrationDatabaseService_service.cc @@ -4,58 +4,56 @@ */ // Ported to SBND by Alejandro Sanchez-Castillo, Jan. 2025 - #include "sbndcode/DatabaseInterface/IPMTCalibrationDatabaseService.h" #include "sbndcode/DatabaseInterface/PMTCalibrationDatabaseProvider.h" // framework libraries #include "art/Framework/Principal/Run.h" #include "art/Framework/Services/Registry/ActivityRegistry.h" -#include "art/Framework/Services/Registry/ServiceDefinitionMacros.h" #include "art/Framework/Services/Registry/ServiceDeclarationMacros.h" -#include "fhiclcpp/ParameterSet.h" +#include "art/Framework/Services/Registry/ServiceDefinitionMacros.h" #include "cetlib_except/exception.h" - +#include "fhiclcpp/ParameterSet.h" // ----------------------------------------------------------------------------- -namespace sbndDB { class PMTCalibrationDatabaseService; } -class sbndDB::PMTCalibrationDatabaseService - : public IPMTCalibrationDatabaseService, private PMTCalibrationDatabaseProvider { - - void preBeginRun(const art::Run& run); - - /// Returns a constant pointer to the service provider - virtual PMTCalibrationDatabaseProvider const* do_provider() const override - { return this; } - - public: - - PMTCalibrationDatabaseService(const fhicl::ParameterSet& pset, art::ActivityRegistry& reg); - -}; // class sbndDB::PMTCalibrationDatabaseService +namespace sbndDB { + class PMTCalibrationDatabaseService; +} +class sbndDB::PMTCalibrationDatabaseService : public IPMTCalibrationDatabaseService, + private PMTCalibrationDatabaseProvider { + void preBeginRun(const art::Run& run); + + /// Returns a constant pointer to the service provider + virtual PMTCalibrationDatabaseProvider const* do_provider() const override { return this; } + +public: + PMTCalibrationDatabaseService(const fhicl::ParameterSet& pset, art::ActivityRegistry& reg); + +}; // class sbndDB::PMTCalibrationDatabaseService // ----------------------------------------------------------------------------- // --- Implementation // ----------------------------------------------------------------------------- -sbndDB::PMTCalibrationDatabaseService::PMTCalibrationDatabaseService - (const fhicl::ParameterSet& pset, art::ActivityRegistry& reg) +sbndDB::PMTCalibrationDatabaseService::PMTCalibrationDatabaseService( + const fhicl::ParameterSet& pset, + art::ActivityRegistry& reg) : PMTCalibrationDatabaseProvider(pset) { reg.sPreBeginRun.watch(this, &PMTCalibrationDatabaseService::preBeginRun); } - // ----------------------------------------------------------------------------- void sbndDB::PMTCalibrationDatabaseService::preBeginRun(const art::Run& run) { readPMTCalibrationDatabase(run); } - // ----------------------------------------------------------------------------- -DECLARE_ART_SERVICE_INTERFACE_IMPL(sbndDB::PMTCalibrationDatabaseService, sbndDB::IPMTCalibrationDatabaseService, SHARED) -DEFINE_ART_SERVICE_INTERFACE_IMPL(sbndDB::PMTCalibrationDatabaseService, sbndDB::IPMTCalibrationDatabaseService) - +DECLARE_ART_SERVICE_INTERFACE_IMPL(sbndDB::PMTCalibrationDatabaseService, + sbndDB::IPMTCalibrationDatabaseService, + SHARED) +DEFINE_ART_SERVICE_INTERFACE_IMPL(sbndDB::PMTCalibrationDatabaseService, + sbndDB::IPMTCalibrationDatabaseService) // ----------------------------------------------------------------------------- \ No newline at end of file diff --git a/sbndcode/DatabaseInterface/clang-format b/sbndcode/DatabaseInterface/clang-format new file mode 100644 index 000000000..d1203e917 --- /dev/null +++ b/sbndcode/DatabaseInterface/clang-format @@ -0,0 +1,41 @@ +#LArSoft format agreed upon by SciSoft team in Sept.2022 +-- -Language : Cpp +#BasedOnStyle : Mozilla + AccessModifierOffset : -2 AlignAfterOpenBracket : Align AlignConsecutiveAssignments + : false AlignConsecutiveDeclarations : false AlignEscapedNewlines : Right AlignOperands + : true AlignTrailingComments : true AllowAllParametersOfDeclarationOnNextLine + : false AllowShortBlocksOnASingleLine : true AllowShortCaseLabelsOnASingleLine + : true AllowShortFunctionsOnASingleLine : Inline AllowShortIfStatementsOnASingleLine + : true AllowShortLoopsOnASingleLine : false AlwaysBreakAfterDefinitionReturnType + : None AlwaysBreakAfterReturnType : None AlwaysBreakBeforeMultilineStrings + : false AlwaysBreakTemplateDeclarations : true BinPackArguments : false BinPackParameters + : false BraceWrapping : AfterClass : false AfterControlStatement : false AfterEnum + : false AfterFunction : true AfterNamespace : false AfterObjCDeclaration : false AfterStruct + : false AfterUnion : false BeforeCatch : true BeforeElse : true IndentBraces + : false SplitEmptyFunction : false SplitEmptyRecord : false SplitEmptyNamespace + : false BreakBeforeBinaryOperators : None BreakBeforeBraces : Custom BreakBeforeInheritanceComma + : false BreakBeforeTernaryOperators : false +#BreakConstructorInitializersBeforeComma : false + BreakConstructorInitializers + : BeforeComma BreakAfterJavaFieldAnnotations : false BreakStringLiterals + : true ColumnLimit : 100 CommentPragmas : '^ IWYU pragma:' CompactNamespaces + : false ConstructorInitializerAllOnOneLineOrOnePerLine + : true ConstructorInitializerIndentWidth : 2 ContinuationIndentWidth : 2 Cpp11BracedListStyle + : true DerivePointerAlignment : false DisableFormat : false ExperimentalAutoDetectBinPacking + : false FixNamespaceComments : false ForEachMacros : -foreach - + Q_FOREACH - + BOOST_FOREACH IncludeCategories : -Regex : '^"(llvm|llvm-c|clang|clang-c)/' Priority : 2 - + Regex : '^(<|"(gtest|gmock|isl|json)/)' Priority : 3 - + Regex : '.*' Priority : 1 IncludeIsMainRegex + : '(Test)?$' IndentCaseLabels : false IndentWidth : 2 IndentWrappedFunctionNames + : false JavaScriptQuotes : Leave JavaScriptWrapImports : true KeepEmptyLinesAtTheStartOfBlocks + : true MacroBlockBegin : '' MacroBlockEnd : '' MaxEmptyLinesToKeep : 1 NamespaceIndentation + : All ObjCBlockIndentWidth : 2 ObjCSpaceAfterProperty : true ObjCSpaceBeforeProtocolList + : false PenaltyBreakAssignment : 2 PenaltyBreakBeforeFirstCallParameter : 19 PenaltyBreakComment : 300 PenaltyBreakFirstLessLess : 120 PenaltyBreakString : 1000 PenaltyExcessCharacter : 1000000 PenaltyReturnTypeOnItsOwnLine : 200 PointerAlignment + : Left ReflowComments : false SortIncludes : true SortUsingDeclarations + : true SpaceAfterCStyleCast : false SpaceAfterTemplateKeyword + : true SpaceBeforeAssignmentOperators : true SpaceBeforeParens + : ControlStatements SpaceInEmptyParentheses + : false SpacesBeforeTrailingComments : 1 SpacesInAngles : false SpacesInContainerLiterals + : false SpacesInCStyleCastParentheses : false SpacesInParentheses : false SpacesInSquareBrackets + : false Standard : Cpp11 TabWidth : 8 UseTab : Never... \ No newline at end of file diff --git a/sbndcode/DatabaseInterface/database_config.fcl b/sbndcode/DatabaseInterface/database_config.fcl index 4e9b2e557..61bdc731d 100644 --- a/sbndcode/DatabaseInterface/database_config.fcl +++ b/sbndcode/DatabaseInterface/database_config.fcl @@ -1,13 +1,9 @@ BEGIN_PROLOG -sbnd_pmttimingservice: -{ - # service name: IPMTTimingCorrectionService - service_provider: PMTTimingCorrectionService - CorrectionTags: { - CablesTag: "v1r0" - } - Verbose: false +sbnd_pmttimingservice : { + service_provider: PMTTimingCorrectionService + CorrectionTags: {CablesTag: "v1r0"} + Verbose: false } -END_PROLOG +END_PROLOG \ No newline at end of file From 534c3c1137a9b0f3ed3985819867a6681bcca0e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20S=C3=A1nchez=20Castillo?= Date: Mon, 3 Mar 2025 05:53:56 -0600 Subject: [PATCH 04/16] Remove .clang-format --- sbndcode/DatabaseInterface/.clang-format | 107 ----------------------- sbndcode/DatabaseInterface/clang-format | 41 --------- 2 files changed, 148 deletions(-) delete mode 100644 sbndcode/DatabaseInterface/.clang-format delete mode 100644 sbndcode/DatabaseInterface/clang-format diff --git a/sbndcode/DatabaseInterface/.clang-format b/sbndcode/DatabaseInterface/.clang-format deleted file mode 100644 index 18f47b4f6..000000000 --- a/sbndcode/DatabaseInterface/.clang-format +++ /dev/null @@ -1,107 +0,0 @@ -# LArSoft format agreed upon by SciSoft team in Sept. 2022 ---- -Language: Cpp -# BasedOnStyle: Mozilla -AccessModifierOffset: -2 -AlignAfterOpenBracket: Align -AlignConsecutiveAssignments: false -AlignConsecutiveDeclarations: false -AlignEscapedNewlines: Right -AlignOperands: true -AlignTrailingComments: true -AllowAllParametersOfDeclarationOnNextLine: false -AllowShortBlocksOnASingleLine: true -AllowShortCaseLabelsOnASingleLine: true -AllowShortFunctionsOnASingleLine: Inline -AllowShortIfStatementsOnASingleLine: true -AllowShortLoopsOnASingleLine: false -AlwaysBreakAfterDefinitionReturnType: None -AlwaysBreakAfterReturnType: None -AlwaysBreakBeforeMultilineStrings: false -AlwaysBreakTemplateDeclarations: true -BinPackArguments: false -BinPackParameters: false -BraceWrapping: - AfterClass: false - AfterControlStatement: false - AfterEnum: false - AfterFunction: true - AfterNamespace: false - AfterObjCDeclaration: false - AfterStruct: false - AfterUnion: false - BeforeCatch: true - BeforeElse: true - IndentBraces: false - SplitEmptyFunction: false - SplitEmptyRecord: false - SplitEmptyNamespace: false -BreakBeforeBinaryOperators: None -BreakBeforeBraces: Custom -BreakBeforeInheritanceComma: false -BreakBeforeTernaryOperators: false -# BreakConstructorInitializersBeforeComma: false -BreakConstructorInitializers: BeforeComma -BreakAfterJavaFieldAnnotations: false -BreakStringLiterals: true -ColumnLimit: 100 -CommentPragmas: '^ IWYU pragma:' -CompactNamespaces: false -ConstructorInitializerAllOnOneLineOrOnePerLine: true -ConstructorInitializerIndentWidth: 2 -ContinuationIndentWidth: 2 -Cpp11BracedListStyle: true -DerivePointerAlignment: false -DisableFormat: false -ExperimentalAutoDetectBinPacking: false -FixNamespaceComments: false -ForEachMacros: - - foreach - - Q_FOREACH - - BOOST_FOREACH -IncludeCategories: - - Regex: '^"(llvm|llvm-c|clang|clang-c)/' - Priority: 2 - - Regex: '^(<|"(gtest|gmock|isl|json)/)' - Priority: 3 - - Regex: '.*' - Priority: 1 -IncludeIsMainRegex: '(Test)?$' -IndentCaseLabels: false -IndentWidth: 2 -IndentWrappedFunctionNames: false -JavaScriptQuotes: Leave -JavaScriptWrapImports: true -KeepEmptyLinesAtTheStartOfBlocks: true -MacroBlockBegin: '' -MacroBlockEnd: '' -MaxEmptyLinesToKeep: 1 -NamespaceIndentation: All -ObjCBlockIndentWidth: 2 -ObjCSpaceAfterProperty: true -ObjCSpaceBeforeProtocolList: false -PenaltyBreakAssignment: 2 -PenaltyBreakBeforeFirstCallParameter: 19 -PenaltyBreakComment: 300 -PenaltyBreakFirstLessLess: 120 -PenaltyBreakString: 1000 -PenaltyExcessCharacter: 1000000 -PenaltyReturnTypeOnItsOwnLine: 200 -PointerAlignment: Left -ReflowComments: false -SortIncludes: true -SortUsingDeclarations: true -SpaceAfterCStyleCast: false -SpaceAfterTemplateKeyword: true -SpaceBeforeAssignmentOperators: true -SpaceBeforeParens: ControlStatements -SpaceInEmptyParentheses: false -SpacesBeforeTrailingComments: 1 -SpacesInAngles: false -SpacesInContainerLiterals: false -SpacesInCStyleCastParentheses: false -SpacesInParentheses: false -SpacesInSquareBrackets: false -Standard: Cpp11 -TabWidth: 8 -UseTab: Never \ No newline at end of file diff --git a/sbndcode/DatabaseInterface/clang-format b/sbndcode/DatabaseInterface/clang-format deleted file mode 100644 index d1203e917..000000000 --- a/sbndcode/DatabaseInterface/clang-format +++ /dev/null @@ -1,41 +0,0 @@ -#LArSoft format agreed upon by SciSoft team in Sept.2022 --- -Language : Cpp -#BasedOnStyle : Mozilla - AccessModifierOffset : -2 AlignAfterOpenBracket : Align AlignConsecutiveAssignments - : false AlignConsecutiveDeclarations : false AlignEscapedNewlines : Right AlignOperands - : true AlignTrailingComments : true AllowAllParametersOfDeclarationOnNextLine - : false AllowShortBlocksOnASingleLine : true AllowShortCaseLabelsOnASingleLine - : true AllowShortFunctionsOnASingleLine : Inline AllowShortIfStatementsOnASingleLine - : true AllowShortLoopsOnASingleLine : false AlwaysBreakAfterDefinitionReturnType - : None AlwaysBreakAfterReturnType : None AlwaysBreakBeforeMultilineStrings - : false AlwaysBreakTemplateDeclarations : true BinPackArguments : false BinPackParameters - : false BraceWrapping : AfterClass : false AfterControlStatement : false AfterEnum - : false AfterFunction : true AfterNamespace : false AfterObjCDeclaration : false AfterStruct - : false AfterUnion : false BeforeCatch : true BeforeElse : true IndentBraces - : false SplitEmptyFunction : false SplitEmptyRecord : false SplitEmptyNamespace - : false BreakBeforeBinaryOperators : None BreakBeforeBraces : Custom BreakBeforeInheritanceComma - : false BreakBeforeTernaryOperators : false -#BreakConstructorInitializersBeforeComma : false - BreakConstructorInitializers - : BeforeComma BreakAfterJavaFieldAnnotations : false BreakStringLiterals - : true ColumnLimit : 100 CommentPragmas : '^ IWYU pragma:' CompactNamespaces - : false ConstructorInitializerAllOnOneLineOrOnePerLine - : true ConstructorInitializerIndentWidth : 2 ContinuationIndentWidth : 2 Cpp11BracedListStyle - : true DerivePointerAlignment : false DisableFormat : false ExperimentalAutoDetectBinPacking - : false FixNamespaceComments : false ForEachMacros : -foreach - - Q_FOREACH - - BOOST_FOREACH IncludeCategories : -Regex : '^"(llvm|llvm-c|clang|clang-c)/' Priority : 2 - - Regex : '^(<|"(gtest|gmock|isl|json)/)' Priority : 3 - - Regex : '.*' Priority : 1 IncludeIsMainRegex - : '(Test)?$' IndentCaseLabels : false IndentWidth : 2 IndentWrappedFunctionNames - : false JavaScriptQuotes : Leave JavaScriptWrapImports : true KeepEmptyLinesAtTheStartOfBlocks - : true MacroBlockBegin : '' MacroBlockEnd : '' MaxEmptyLinesToKeep : 1 NamespaceIndentation - : All ObjCBlockIndentWidth : 2 ObjCSpaceAfterProperty : true ObjCSpaceBeforeProtocolList - : false PenaltyBreakAssignment : 2 PenaltyBreakBeforeFirstCallParameter : 19 PenaltyBreakComment : 300 PenaltyBreakFirstLessLess : 120 PenaltyBreakString : 1000 PenaltyExcessCharacter : 1000000 PenaltyReturnTypeOnItsOwnLine : 200 PointerAlignment - : Left ReflowComments : false SortIncludes : true SortUsingDeclarations - : true SpaceAfterCStyleCast : false SpaceAfterTemplateKeyword - : true SpaceBeforeAssignmentOperators : true SpaceBeforeParens - : ControlStatements SpaceInEmptyParentheses - : false SpacesBeforeTrailingComments : 1 SpacesInAngles : false SpacesInContainerLiterals - : false SpacesInCStyleCastParentheses : false SpacesInParentheses : false SpacesInSquareBrackets - : false Standard : Cpp11 TabWidth : 8 UseTab : Never... \ No newline at end of file From 6191ff9d700fe40a6a03cca116be114f24cc351b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20S=C3=A1nchez=20Castillo?= Date: Mon, 3 Mar 2025 08:14:54 -0600 Subject: [PATCH 05/16] Remove clang.formal files --- .clang-format | 108 ----------------------------------------- sbndcode/.clang-format | 108 ----------------------------------------- ups/product_deps | 1 - 3 files changed, 217 deletions(-) delete mode 100644 .clang-format delete mode 100644 sbndcode/.clang-format diff --git a/.clang-format b/.clang-format deleted file mode 100644 index b25048292..000000000 --- a/.clang-format +++ /dev/null @@ -1,108 +0,0 @@ -# LArSoft format agreed upon by SciSoft team in Sept. 2022 ---- -Language: Cpp -# BasedOnStyle: Mozilla -AccessModifierOffset: -2 -AlignAfterOpenBracket: Align -AlignConsecutiveAssignments: false -AlignConsecutiveDeclarations: false -AlignEscapedNewlines: Right -AlignOperands: true -AlignTrailingComments: true -AllowAllParametersOfDeclarationOnNextLine: false -AllowShortBlocksOnASingleLine: true -AllowShortCaseLabelsOnASingleLine: true -AllowShortFunctionsOnASingleLine: Inline -AllowShortIfStatementsOnASingleLine: true -AllowShortLoopsOnASingleLine: false -AlwaysBreakAfterDefinitionReturnType: None -AlwaysBreakAfterReturnType: None -AlwaysBreakBeforeMultilineStrings: false -AlwaysBreakTemplateDeclarations: true -BinPackArguments: false -BinPackParameters: false -BraceWrapping: - AfterClass: false - AfterControlStatement: false - AfterEnum: false - AfterFunction: true - AfterNamespace: false - AfterObjCDeclaration: false - AfterStruct: false - AfterUnion: false - BeforeCatch: true - BeforeElse: true - IndentBraces: false - SplitEmptyFunction: false - SplitEmptyRecord: false - SplitEmptyNamespace: false -BreakBeforeBinaryOperators: None -BreakBeforeBraces: Custom -BreakBeforeInheritanceComma: false -BreakBeforeTernaryOperators: false -# BreakConstructorInitializersBeforeComma: false -BreakConstructorInitializers: BeforeComma -BreakAfterJavaFieldAnnotations: false -BreakStringLiterals: true -ColumnLimit: 100 -CommentPragmas: '^ IWYU pragma:' -CompactNamespaces: false -ConstructorInitializerAllOnOneLineOrOnePerLine: true -ConstructorInitializerIndentWidth: 2 -ContinuationIndentWidth: 2 -Cpp11BracedListStyle: true -DerivePointerAlignment: false -DisableFormat: false -ExperimentalAutoDetectBinPacking: false -FixNamespaceComments: false -ForEachMacros: - - foreach - - Q_FOREACH - - BOOST_FOREACH -IncludeCategories: - - Regex: '^"(llvm|llvm-c|clang|clang-c)/' - Priority: 2 - - Regex: '^(<|"(gtest|gmock|isl|json)/)' - Priority: 3 - - Regex: '.*' - Priority: 1 -IncludeIsMainRegex: '(Test)?$' -IndentCaseLabels: false -IndentWidth: 2 -IndentWrappedFunctionNames: false -JavaScriptQuotes: Leave -JavaScriptWrapImports: true -KeepEmptyLinesAtTheStartOfBlocks: true -MacroBlockBegin: '' -MacroBlockEnd: '' -MaxEmptyLinesToKeep: 1 -NamespaceIndentation: All -ObjCBlockIndentWidth: 2 -ObjCSpaceAfterProperty: true -ObjCSpaceBeforeProtocolList: false -PenaltyBreakAssignment: 2 -PenaltyBreakBeforeFirstCallParameter: 19 -PenaltyBreakComment: 300 -PenaltyBreakFirstLessLess: 120 -PenaltyBreakString: 1000 -PenaltyExcessCharacter: 1000000 -PenaltyReturnTypeOnItsOwnLine: 200 -PointerAlignment: Left -ReflowComments: false -SortIncludes: true -SortUsingDeclarations: true -SpaceAfterCStyleCast: false -SpaceAfterTemplateKeyword: true -SpaceBeforeAssignmentOperators: true -SpaceBeforeParens: ControlStatements -SpaceInEmptyParentheses: false -SpacesBeforeTrailingComments: 1 -SpacesInAngles: false -SpacesInContainerLiterals: false -SpacesInCStyleCastParentheses: false -SpacesInParentheses: false -SpacesInSquareBrackets: false -Standard: Cpp11 -TabWidth: 8 -UseTab: Never -... \ No newline at end of file diff --git a/sbndcode/.clang-format b/sbndcode/.clang-format deleted file mode 100644 index b25048292..000000000 --- a/sbndcode/.clang-format +++ /dev/null @@ -1,108 +0,0 @@ -# LArSoft format agreed upon by SciSoft team in Sept. 2022 ---- -Language: Cpp -# BasedOnStyle: Mozilla -AccessModifierOffset: -2 -AlignAfterOpenBracket: Align -AlignConsecutiveAssignments: false -AlignConsecutiveDeclarations: false -AlignEscapedNewlines: Right -AlignOperands: true -AlignTrailingComments: true -AllowAllParametersOfDeclarationOnNextLine: false -AllowShortBlocksOnASingleLine: true -AllowShortCaseLabelsOnASingleLine: true -AllowShortFunctionsOnASingleLine: Inline -AllowShortIfStatementsOnASingleLine: true -AllowShortLoopsOnASingleLine: false -AlwaysBreakAfterDefinitionReturnType: None -AlwaysBreakAfterReturnType: None -AlwaysBreakBeforeMultilineStrings: false -AlwaysBreakTemplateDeclarations: true -BinPackArguments: false -BinPackParameters: false -BraceWrapping: - AfterClass: false - AfterControlStatement: false - AfterEnum: false - AfterFunction: true - AfterNamespace: false - AfterObjCDeclaration: false - AfterStruct: false - AfterUnion: false - BeforeCatch: true - BeforeElse: true - IndentBraces: false - SplitEmptyFunction: false - SplitEmptyRecord: false - SplitEmptyNamespace: false -BreakBeforeBinaryOperators: None -BreakBeforeBraces: Custom -BreakBeforeInheritanceComma: false -BreakBeforeTernaryOperators: false -# BreakConstructorInitializersBeforeComma: false -BreakConstructorInitializers: BeforeComma -BreakAfterJavaFieldAnnotations: false -BreakStringLiterals: true -ColumnLimit: 100 -CommentPragmas: '^ IWYU pragma:' -CompactNamespaces: false -ConstructorInitializerAllOnOneLineOrOnePerLine: true -ConstructorInitializerIndentWidth: 2 -ContinuationIndentWidth: 2 -Cpp11BracedListStyle: true -DerivePointerAlignment: false -DisableFormat: false -ExperimentalAutoDetectBinPacking: false -FixNamespaceComments: false -ForEachMacros: - - foreach - - Q_FOREACH - - BOOST_FOREACH -IncludeCategories: - - Regex: '^"(llvm|llvm-c|clang|clang-c)/' - Priority: 2 - - Regex: '^(<|"(gtest|gmock|isl|json)/)' - Priority: 3 - - Regex: '.*' - Priority: 1 -IncludeIsMainRegex: '(Test)?$' -IndentCaseLabels: false -IndentWidth: 2 -IndentWrappedFunctionNames: false -JavaScriptQuotes: Leave -JavaScriptWrapImports: true -KeepEmptyLinesAtTheStartOfBlocks: true -MacroBlockBegin: '' -MacroBlockEnd: '' -MaxEmptyLinesToKeep: 1 -NamespaceIndentation: All -ObjCBlockIndentWidth: 2 -ObjCSpaceAfterProperty: true -ObjCSpaceBeforeProtocolList: false -PenaltyBreakAssignment: 2 -PenaltyBreakBeforeFirstCallParameter: 19 -PenaltyBreakComment: 300 -PenaltyBreakFirstLessLess: 120 -PenaltyBreakString: 1000 -PenaltyExcessCharacter: 1000000 -PenaltyReturnTypeOnItsOwnLine: 200 -PointerAlignment: Left -ReflowComments: false -SortIncludes: true -SortUsingDeclarations: true -SpaceAfterCStyleCast: false -SpaceAfterTemplateKeyword: true -SpaceBeforeAssignmentOperators: true -SpaceBeforeParens: ControlStatements -SpaceInEmptyParentheses: false -SpacesBeforeTrailingComments: 1 -SpacesInAngles: false -SpacesInContainerLiterals: false -SpacesInCStyleCastParentheses: false -SpacesInParentheses: false -SpacesInSquareBrackets: false -Standard: Cpp11 -TabWidth: 8 -UseTab: Never -... \ No newline at end of file diff --git a/ups/product_deps b/ups/product_deps index 9bde8ef7a..bfe683046 100644 --- a/ups/product_deps +++ b/ups/product_deps @@ -253,7 +253,6 @@ wpdir product_dir wire-cell-cfg # #################################### product version qual flags - sbncode v10_04_03 - cetmodules v3_24_01 - only_for_build sbnd_data v01_27_00 - optional From 3ee8046123a9ba9c3201de0d2401e06c49e0d59d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20S=C3=A1nchez=20Castillo?= Date: Mon, 3 Mar 2025 08:20:01 -0600 Subject: [PATCH 06/16] Fix typo --- sbndcode/AnalysisTree/CMakeLists.txt | 2 +- sbndcode/DatabaseInterface/IPMTCalibrationDatabaseService.h | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/sbndcode/AnalysisTree/CMakeLists.txt b/sbndcode/AnalysisTree/CMakeLists.txt index 6718b275d..c2a0d4e82 100644 --- a/sbndcode/AnalysisTree/CMakeLists.txt +++ b/sbndcode/AnalysisTree/CMakeLists.txt @@ -36,4 +36,4 @@ set( MODULE_LIBRARIES larcorealg::Geometry cet_build_plugin(AnalysisTree art::Module SOURCE AnalysisTree_module.cc LIBRARIES ${MODULE_LIBRARIES} ) # install_headers() install_fhicl() -install_source() +install_source() \ No newline at end of file diff --git a/sbndcode/DatabaseInterface/IPMTCalibrationDatabaseService.h b/sbndcode/DatabaseInterface/IPMTCalibrationDatabaseService.h index 0885ee419..db2d4db1f 100644 --- a/sbndcode/DatabaseInterface/IPMTCalibrationDatabaseService.h +++ b/sbndcode/DatabaseInterface/IPMTCalibrationDatabaseService.h @@ -3,6 +3,7 @@ * @brief Wrapper class for 'PMTTimingCorrectionsProvider.h' * @author Andrea Scarpelli (ascarpell@bnl.gov), Gianluca Petrillo (petrillo@slac.stanford.edu) */ +// Ported to SBND by Alejandro Sanchez-Castillo, Jan. 2025 #ifndef SBNDCCODE_DATABASEINTERFACE_IPMTCALIBRATIONDATABASESERVICE_H #define SBNDCCODE_DATABASEINTERFACE_IPMTCALIBRATIONDATABASESERVICE_H From 7a520f68a1784ec852fc57d8cc3797165ad3dd52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20S=C3=A1nchez=20Castillo?= Date: Mon, 3 Mar 2025 10:38:31 -0600 Subject: [PATCH 07/16] Undo unrequired changes --- .../Alg/OpDeconvolutionAlgWienerData_tool.cc | 20 +++---------------- 1 file changed, 3 insertions(+), 17 deletions(-) diff --git a/sbndcode/OpDetReco/OpDeconvolution/Alg/OpDeconvolutionAlgWienerData_tool.cc b/sbndcode/OpDetReco/OpDeconvolution/Alg/OpDeconvolutionAlgWienerData_tool.cc index c138e5772..fbe6796a5 100644 --- a/sbndcode/OpDetReco/OpDeconvolution/Alg/OpDeconvolutionAlgWienerData_tool.cc +++ b/sbndcode/OpDetReco/OpDeconvolution/Alg/OpDeconvolutionAlgWienerData_tool.cc @@ -26,8 +26,7 @@ #include "TComplex.h" #include "sbndcode/OpDetReco/OpDeconvolution/Alg/OpDeconvolutionAlg.hh" -#include "sbndcode/DatabaseInterface/PMTCalibrationDatabase.h" -#include "sbndcode/DatabaseInterface/IPMTCalibrationDatabaseService.h" + namespace opdet { class OpDeconvolutionAlgWiener; @@ -89,8 +88,6 @@ class opdet::OpDeconvolutionAlgWiener : opdet::OpDeconvolutionAlg { short unsigned int fBaseSampleBins; double fBaseVarCut; - sbndDB::PMTCalibrationDatabase const* fPMTCalibrationDatabaseService; - // Declare member functions void ApplyExpoAvSmoothing(std::vector& wf); void ApplyUnAvSmoothing(std::vector& wf); @@ -169,9 +166,7 @@ opdet::OpDeconvolutionAlgWiener::OpDeconvolutionAlgWiener(fhicl::ParameterSet co fSinglePEWaveVector = *SinglePEVec_p; fSinglePEChannels = *fSinglePEChannels_p; fPeakAmplitude = *fPeakAmplitude_p; - fFilterParamVector = *fFilterParamVector_p; - - fPMTCalibrationDatabaseService = lar::providerFrom(); + fFilterParamVector = *fFilterParamVector_p; mf::LogInfo("OpDeconvolutionAlg")<<"Loaded SER from "< wfDeco; wfDeco.reserve(wfVector.size()); for(auto const& wf : wfVector) @@ -563,4 +549,4 @@ std::vector opdet::OpDeconvolutionAlgWiener::DeconvolutionKernel(size_ return kernel; } -DEFINE_ART_CLASS_TOOL(opdet::OpDeconvolutionAlgWiener) +DEFINE_ART_CLASS_TOOL(opdet::OpDeconvolutionAlgWiener) \ No newline at end of file From 00e23d5506a927d9f102c96457e9ec490621d449 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20S=C3=A1nchez=20Castillo?= Date: Mon, 3 Mar 2025 10:54:06 -0600 Subject: [PATCH 08/16] Cleanup --- .../IPMTCalibrationDatabaseService.h | 2 +- .../PMTCalibrationDatabaseProvider.cxx | 15 +++++---------- .../PMTCalibrationDatabaseProvider.h | 19 +------------------ .../DatabaseInterface/database_config.fcl | 7 ++++++- 4 files changed, 13 insertions(+), 30 deletions(-) diff --git a/sbndcode/DatabaseInterface/IPMTCalibrationDatabaseService.h b/sbndcode/DatabaseInterface/IPMTCalibrationDatabaseService.h index db2d4db1f..6cdca3a34 100644 --- a/sbndcode/DatabaseInterface/IPMTCalibrationDatabaseService.h +++ b/sbndcode/DatabaseInterface/IPMTCalibrationDatabaseService.h @@ -27,4 +27,4 @@ DECLARE_ART_SERVICE_INTERFACE(sbndDB::IPMTCalibrationDatabaseService, SHARED) // ----------------------------------------------------------------------------- -#endif // ICARUSCODE_DATABASEINTERFACE_IPMTCALIBRATIONDATABASESERVICE_H \ No newline at end of file +#endif \ No newline at end of file diff --git a/sbndcode/DatabaseInterface/PMTCalibrationDatabaseProvider.cxx b/sbndcode/DatabaseInterface/PMTCalibrationDatabaseProvider.cxx index f10a07afe..f146555e8 100644 --- a/sbndcode/DatabaseInterface/PMTCalibrationDatabaseProvider.cxx +++ b/sbndcode/DatabaseInterface/PMTCalibrationDatabaseProvider.cxx @@ -30,14 +30,13 @@ sbndDB::PMTCalibrationDatabaseProvider::PMTCalibrationDatabaseProvider( , fLogCategory{pset.get("LogCategory", "PMTTimingCorrection")} { fhicl::ParameterSet const tags{pset.get("CorrectionTags")}; - fCablesTag = tags.get("CablesTag"); + fPMTCalibrationDatabaseTag = tags.get("PMTCalibrationDatabaseTag"); fDatabaseTimeStamp = tags.get("DatabaseTimeStamp"); fTableName = tags.get("TableName"); - fVariabletoread = tags.get("VariableToRead"); fSERLength = tags.get("SERLength"); if (fVerbose) mf::LogInfo(fLogCategory) << "Database tags for timing corrections:\n" - << "Cables corrections " << fCablesTag << "\n"; + << "Cables corrections " << fPMTCalibrationDatabaseTag << "\n"; } // ------------------------------------------------------------------------------- @@ -47,7 +46,7 @@ uint64_t sbndDB::PMTCalibrationDatabaseProvider::RunToDatabaseTimestamp(uint32_t // Run number to timestamp used in the db // DBFolder.h only takes 19 digit (= timestamp in nano second), - // but ICARUS tables are currently using run numbers + // but SBND tables are currently using run numbers // Step 1) Add 1000000000 to the run number; e.g., run XXXXX -> 10000XXXXX // Step 2) Multiply 1000000000 uint64_t runNum = uint64_t(run); @@ -65,14 +64,10 @@ uint64_t sbndDB::PMTCalibrationDatabaseProvider::RunToDatabaseTimestamp(uint32_t /// Function to look up the calibration database at the table holding the pmt hardware cables corrections void sbndDB::PMTCalibrationDatabaseProvider::ReadPMTCalibration(uint32_t run) { - - // pmt_cables_delay: delays of the cables relative to trigger - // and reset distribution - const std::string dbname(fTableName); - lariov::DBFolder db(dbname, "", "", fCablesTag, true, false); + lariov::DBFolder db(dbname, "", "", fPMTCalibrationDatabaseTag, true, false); - bool ret = db.UpdateData(fDatabaseTimeStamp); // select table based on run number + bool ret = db.UpdateData(fDatabaseTimeStamp); // select table based on timestamp (this is temporary, once we generate db based on run numbers this should be changed) mf::LogDebug(fLogCategory) << dbname + " corrections" << (ret ? "" : " not") << " updated for run " << run; mf::LogTrace(fLogCategory) diff --git a/sbndcode/DatabaseInterface/PMTCalibrationDatabaseProvider.h b/sbndcode/DatabaseInterface/PMTCalibrationDatabaseProvider.h index 7d9f4d310..ec97bcaf0 100644 --- a/sbndcode/DatabaseInterface/PMTCalibrationDatabaseProvider.h +++ b/sbndcode/DatabaseInterface/PMTCalibrationDatabaseProvider.h @@ -31,18 +31,6 @@ namespace sbndDB{ class PMTCalibrationDatabaseProvider; } * @brief * * This module reads the PMT timing corrections from the database. - * Corrections are picked according to the run number being processed. - * - * All time corrections are offsets (in microseconds) that need to be _added_ to the uncorrected time. - * - * Configuration parameters - * ------------------------- - * * `CorrectionTags`: tags to select the correction versions: - * * `CablesTag` (default: `v1r0`): correction for cable delay. - * * `LaserTag` (default: `v1r0`): first order PMT time correction, from laser data. - * * `CosmicsTag` (default: `v1r0`): second order PMT time correction, from cosmic rays. - * * `Verbose` (default: `false`): Print-out the corrections read from the database. - * * `LogCategory` (default: `PMTTimingCorrection") * */ class sbndDB::PMTCalibrationDatabaseProvider : public PMTCalibrationDatabase { @@ -51,10 +39,8 @@ class sbndDB::PMTCalibrationDatabaseProvider : public PMTCalibrationDatabase { PMTCalibrationDatabaseProvider(const fhicl::ParameterSet& pset); - /// Read timing corrections from the database void readPMTCalibrationDatabase(const art::Run& run); - /// Get time delay on the trigger line int getBreakoutBox( unsigned int channelID ) const override { return getChannelCorrOrDefault(channelID).breakoutBox; }; @@ -83,12 +69,9 @@ class sbndDB::PMTCalibrationDatabaseProvider : public PMTCalibrationDatabase { bool fVerbose = false; ///< Whether to print the configuration we read. std::string fLogCategory; ///< Category tag for messages. - std::string fCablesTag; ///< Tag for cable corrections database. + std::string fPMTCalibrationDatabaseTag; long fDatabaseTimeStamp; - std::string fLaserTag; ///< Tag for laser corrections database. - std::string fCosmicsTag; ///< Tag for cosmics corrections database. std::string fTableName; - std::string fVariabletoread; size_t fSERLength; /// Structure for single channel corrections diff --git a/sbndcode/DatabaseInterface/database_config.fcl b/sbndcode/DatabaseInterface/database_config.fcl index 61bdc731d..992f7356e 100644 --- a/sbndcode/DatabaseInterface/database_config.fcl +++ b/sbndcode/DatabaseInterface/database_config.fcl @@ -2,7 +2,12 @@ BEGIN_PROLOG sbnd_pmttimingservice : { service_provider: PMTTimingCorrectionService - CorrectionTags: {CablesTag: "v1r0"} + CorrectionTags: { + PMTCalibrationDatabaseTag: "v1r1" + DatabaseTimeStamp: 1740739388000000000 + TableName: "pds_calibration" + SERLength: 550 + } Verbose: false } From b04ca7e0093e346ac2b7e8c2ca58fc0c76548659 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20S=C3=A1nchez=20Castillo?= Date: Mon, 3 Mar 2025 10:59:03 -0600 Subject: [PATCH 09/16] Cleanup --- sbndcode/AnalysisTree/AnalysisTree_module.cc | 2 +- sbndcode/AnalysisTree/CMakeLists.txt | 3 ++- sbndcode/AnalysisTree/analysistreemodule_sbnd.fcl | 2 +- .../OpDeconvolution/Alg/OpDeconvolutionAlgWienerData_tool.cc | 2 +- 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/sbndcode/AnalysisTree/AnalysisTree_module.cc b/sbndcode/AnalysisTree/AnalysisTree_module.cc index f63e658c4..2cd7ba6f2 100644 --- a/sbndcode/AnalysisTree/AnalysisTree_module.cc +++ b/sbndcode/AnalysisTree/AnalysisTree_module.cc @@ -3743,4 +3743,4 @@ namespace sbnd{ } -#endif \ No newline at end of file +#endif diff --git a/sbndcode/AnalysisTree/CMakeLists.txt b/sbndcode/AnalysisTree/CMakeLists.txt index c2a0d4e82..1a73b54d6 100644 --- a/sbndcode/AnalysisTree/CMakeLists.txt +++ b/sbndcode/AnalysisTree/CMakeLists.txt @@ -36,4 +36,5 @@ set( MODULE_LIBRARIES larcorealg::Geometry cet_build_plugin(AnalysisTree art::Module SOURCE AnalysisTree_module.cc LIBRARIES ${MODULE_LIBRARIES} ) # install_headers() install_fhicl() -install_source() \ No newline at end of file +install_source() + diff --git a/sbndcode/AnalysisTree/analysistreemodule_sbnd.fcl b/sbndcode/AnalysisTree/analysistreemodule_sbnd.fcl index 21f73cdc4..fa7786aee 100644 --- a/sbndcode/AnalysisTree/analysistreemodule_sbnd.fcl +++ b/sbndcode/AnalysisTree/analysistreemodule_sbnd.fcl @@ -39,4 +39,4 @@ sbnd_analysistree: CaloAlg: @local::sbnd_calorimetryalgmc } -END_PROLOG \ No newline at end of file +END_PROLOG diff --git a/sbndcode/OpDetReco/OpDeconvolution/Alg/OpDeconvolutionAlgWienerData_tool.cc b/sbndcode/OpDetReco/OpDeconvolution/Alg/OpDeconvolutionAlgWienerData_tool.cc index fbe6796a5..cbd23acef 100644 --- a/sbndcode/OpDetReco/OpDeconvolution/Alg/OpDeconvolutionAlgWienerData_tool.cc +++ b/sbndcode/OpDetReco/OpDeconvolution/Alg/OpDeconvolutionAlgWienerData_tool.cc @@ -549,4 +549,4 @@ std::vector opdet::OpDeconvolutionAlgWiener::DeconvolutionKernel(size_ return kernel; } -DEFINE_ART_CLASS_TOOL(opdet::OpDeconvolutionAlgWiener) \ No newline at end of file +DEFINE_ART_CLASS_TOOL(opdet::OpDeconvolutionAlgWiener) From 9a2ea438e91f0ad5a8381af42524ab8e5f3d234c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20S=C3=A1nchez=20Castillo?= Date: Wed, 5 Mar 2025 03:43:30 -0600 Subject: [PATCH 10/16] Include fcl and locate in calibration folder --- sbndcode/CMakeLists.txt | 3 --- sbndcode/Calibration/CMakeLists.txt | 1 + .../PDSDatabaseInterface}/CMakeLists.txt | 12 +++++++----- .../IPMTCalibrationDatabaseService.h | 2 +- .../PDSDatabaseInterface}/PMTCalibrationDatabase.h | 0 .../PMTCalibrationDatabaseProvider.cxx | 4 ++-- .../PMTCalibrationDatabaseProvider.h | 2 +- .../PMTCalibrationDatabaseService_service.cc | 4 ++-- .../pmtcalibrationdatabase_sbnd.fcl} | 0 sbndcode/LArSoftConfigurations/services_sbnd.fcl | 1 + 10 files changed, 15 insertions(+), 14 deletions(-) rename sbndcode/{DatabaseInterface => Calibration/PDSDatabaseInterface}/CMakeLists.txt (63%) rename sbndcode/{DatabaseInterface => Calibration/PDSDatabaseInterface}/IPMTCalibrationDatabaseService.h (93%) rename sbndcode/{DatabaseInterface => Calibration/PDSDatabaseInterface}/PMTCalibrationDatabase.h (100%) rename sbndcode/{DatabaseInterface => Calibration/PDSDatabaseInterface}/PMTCalibrationDatabaseProvider.cxx (98%) rename sbndcode/{DatabaseInterface => Calibration/PDSDatabaseInterface}/PMTCalibrationDatabaseProvider.h (98%) rename sbndcode/{DatabaseInterface => Calibration/PDSDatabaseInterface}/PMTCalibrationDatabaseService_service.cc (93%) rename sbndcode/{DatabaseInterface/database_config.fcl => Calibration/PDSDatabaseInterface/pmtcalibrationdatabase_sbnd.fcl} (100%) diff --git a/sbndcode/CMakeLists.txt b/sbndcode/CMakeLists.txt index 13392d790..2cbffdab2 100644 --- a/sbndcode/CMakeLists.txt +++ b/sbndcode/CMakeLists.txt @@ -45,6 +45,3 @@ add_subdirectory(ChannelMaps) # for CVN add_subdirectory(SBNDCVN) - -# for Calibration database -add_subdirectory(DatabaseInterface) diff --git a/sbndcode/Calibration/CMakeLists.txt b/sbndcode/Calibration/CMakeLists.txt index 91776a677..dbf8cb7e3 100644 --- a/sbndcode/Calibration/CMakeLists.txt +++ b/sbndcode/Calibration/CMakeLists.txt @@ -1,3 +1,4 @@ add_subdirectory(OpReco) add_subdirectory(CRT) add_subdirectory(DQM) +add_subdirectory(PDSDatabaseInterface) diff --git a/sbndcode/DatabaseInterface/CMakeLists.txt b/sbndcode/Calibration/PDSDatabaseInterface/CMakeLists.txt similarity index 63% rename from sbndcode/DatabaseInterface/CMakeLists.txt rename to sbndcode/Calibration/PDSDatabaseInterface/CMakeLists.txt index 1ce6f3755..7740dbb6b 100644 --- a/sbndcode/DatabaseInterface/CMakeLists.txt +++ b/sbndcode/Calibration/PDSDatabaseInterface/CMakeLists.txt @@ -1,18 +1,20 @@ cet_enable_asserts() set( MODULE_LIBRARIES - art_root_io::TFileService_service - art_root_io::tfile_support + art_root_io::TFileService_service + art_root_io::tfile_support ) set( LIB_LIBRARIES art::Framework_Services_Registry messagefacility::MF_MessageLogger lardata::Utilities - larevt::CalibrationDBI_IOVData - larevt::CalibrationDBI_Providers + larevt::CalibrationDBI_IOVData + larevt::CalibrationDBI_Providers ) set( SERVICE_LIBRARIES - sbndcode_DatabaseInterface + sbndcode_Calibration_PDSDatabaseInterface + larcore::Geometry_Geometry_service + lardata::DetectorClocksService ) file(GLOB lib_srcs *.cxx) diff --git a/sbndcode/DatabaseInterface/IPMTCalibrationDatabaseService.h b/sbndcode/Calibration/PDSDatabaseInterface/IPMTCalibrationDatabaseService.h similarity index 93% rename from sbndcode/DatabaseInterface/IPMTCalibrationDatabaseService.h rename to sbndcode/Calibration/PDSDatabaseInterface/IPMTCalibrationDatabaseService.h index 6cdca3a34..5f7e5d96e 100644 --- a/sbndcode/DatabaseInterface/IPMTCalibrationDatabaseService.h +++ b/sbndcode/Calibration/PDSDatabaseInterface/IPMTCalibrationDatabaseService.h @@ -9,7 +9,7 @@ #define SBNDCCODE_DATABASEINTERFACE_IPMTCALIBRATIONDATABASESERVICE_H // ICARUS libraries -#include "sbndcode/DatabaseInterface/PMTCalibrationDatabase.h" +#include "sbndcode/Calibration/PDSDatabaseInterface/PMTCalibrationDatabase.h" // LArSoft libraries #include "larcore/CoreUtils/ServiceProviderWrappers.h" diff --git a/sbndcode/DatabaseInterface/PMTCalibrationDatabase.h b/sbndcode/Calibration/PDSDatabaseInterface/PMTCalibrationDatabase.h similarity index 100% rename from sbndcode/DatabaseInterface/PMTCalibrationDatabase.h rename to sbndcode/Calibration/PDSDatabaseInterface/PMTCalibrationDatabase.h diff --git a/sbndcode/DatabaseInterface/PMTCalibrationDatabaseProvider.cxx b/sbndcode/Calibration/PDSDatabaseInterface/PMTCalibrationDatabaseProvider.cxx similarity index 98% rename from sbndcode/DatabaseInterface/PMTCalibrationDatabaseProvider.cxx rename to sbndcode/Calibration/PDSDatabaseInterface/PMTCalibrationDatabaseProvider.cxx index f146555e8..050f41e34 100644 --- a/sbndcode/DatabaseInterface/PMTCalibrationDatabaseProvider.cxx +++ b/sbndcode/Calibration/PDSDatabaseInterface/PMTCalibrationDatabaseProvider.cxx @@ -11,8 +11,8 @@ #include "messagefacility/MessageLogger/MessageLogger.h" // Local -#include "sbndcode/DatabaseInterface/PMTCalibrationDatabase.h" -#include "sbndcode/DatabaseInterface/PMTCalibrationDatabaseProvider.h" +#include "sbndcode/Calibration/PDSDatabaseInterface/PMTCalibrationDatabase.h" +#include "sbndcode/Calibration/PDSDatabaseInterface/PMTCalibrationDatabaseProvider.h" // Database interface helpers #include "larevt/CalibrationDBI/IOVData/TimeStampDecoder.h" diff --git a/sbndcode/DatabaseInterface/PMTCalibrationDatabaseProvider.h b/sbndcode/Calibration/PDSDatabaseInterface/PMTCalibrationDatabaseProvider.h similarity index 98% rename from sbndcode/DatabaseInterface/PMTCalibrationDatabaseProvider.h rename to sbndcode/Calibration/PDSDatabaseInterface/PMTCalibrationDatabaseProvider.h index ec97bcaf0..5db877ec7 100644 --- a/sbndcode/DatabaseInterface/PMTCalibrationDatabaseProvider.h +++ b/sbndcode/Calibration/PDSDatabaseInterface/PMTCalibrationDatabaseProvider.h @@ -18,7 +18,7 @@ #include "fhiclcpp/ParameterSet.h" // Local -#include "sbndcode/DatabaseInterface/PMTCalibrationDatabase.h" +#include "sbndcode/Calibration/PDSDatabaseInterface/PMTCalibrationDatabase.h" // C/C++ standard libraries #include diff --git a/sbndcode/DatabaseInterface/PMTCalibrationDatabaseService_service.cc b/sbndcode/Calibration/PDSDatabaseInterface/PMTCalibrationDatabaseService_service.cc similarity index 93% rename from sbndcode/DatabaseInterface/PMTCalibrationDatabaseService_service.cc rename to sbndcode/Calibration/PDSDatabaseInterface/PMTCalibrationDatabaseService_service.cc index 740acf89f..2af030301 100644 --- a/sbndcode/DatabaseInterface/PMTCalibrationDatabaseService_service.cc +++ b/sbndcode/Calibration/PDSDatabaseInterface/PMTCalibrationDatabaseService_service.cc @@ -4,8 +4,8 @@ */ // Ported to SBND by Alejandro Sanchez-Castillo, Jan. 2025 -#include "sbndcode/DatabaseInterface/IPMTCalibrationDatabaseService.h" -#include "sbndcode/DatabaseInterface/PMTCalibrationDatabaseProvider.h" +#include "sbndcode/Calibration/PDSDatabaseInterface/IPMTCalibrationDatabaseService.h" +#include "sbndcode/Calibration/PDSDatabaseInterface/PMTCalibrationDatabaseProvider.h" // framework libraries #include "art/Framework/Principal/Run.h" diff --git a/sbndcode/DatabaseInterface/database_config.fcl b/sbndcode/Calibration/PDSDatabaseInterface/pmtcalibrationdatabase_sbnd.fcl similarity index 100% rename from sbndcode/DatabaseInterface/database_config.fcl rename to sbndcode/Calibration/PDSDatabaseInterface/pmtcalibrationdatabase_sbnd.fcl diff --git a/sbndcode/LArSoftConfigurations/services_sbnd.fcl b/sbndcode/LArSoftConfigurations/services_sbnd.fcl index 4b746351f..3ed49518e 100644 --- a/sbndcode/LArSoftConfigurations/services_sbnd.fcl +++ b/sbndcode/LArSoftConfigurations/services_sbnd.fcl @@ -45,6 +45,7 @@ #include "database_sbnd.fcl" #include "sam_sbnd.fcl" #include "spacecharge_sbnd.fcl" +#include "pmtcalibrationdatabase_sbnd.fcl" BEGIN_PROLOG From 606be670eb18a1dd99b7cafd9c5a5a50dcaa4411 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20S=C3=A1nchez=20Castillo?= Date: Wed, 5 Mar 2025 04:18:15 -0600 Subject: [PATCH 11/16] Fix service provider name --- .../PDSDatabaseInterface/pmtcalibrationdatabase_sbnd.fcl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sbndcode/Calibration/PDSDatabaseInterface/pmtcalibrationdatabase_sbnd.fcl b/sbndcode/Calibration/PDSDatabaseInterface/pmtcalibrationdatabase_sbnd.fcl index 992f7356e..340f70051 100644 --- a/sbndcode/Calibration/PDSDatabaseInterface/pmtcalibrationdatabase_sbnd.fcl +++ b/sbndcode/Calibration/PDSDatabaseInterface/pmtcalibrationdatabase_sbnd.fcl @@ -1,7 +1,7 @@ BEGIN_PROLOG -sbnd_pmttimingservice : { - service_provider: PMTTimingCorrectionService +sbnd_pmtcalibrationdatabaseservice : { + service_provider: "PMTCalibrationDatabaseService" CorrectionTags: { PMTCalibrationDatabaseTag: "v1r1" DatabaseTimeStamp: 1740739388000000000 From 30ebdc0321499e8d25090928cd8bcfb7a8f55603 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20S=C3=A1nchez=20Castillo?= Date: Wed, 5 Mar 2025 04:25:04 -0600 Subject: [PATCH 12/16] Add pmt calibration database service --- sbndcode/LArSoftConfigurations/services_sbnd.fcl | 1 + 1 file changed, 1 insertion(+) diff --git a/sbndcode/LArSoftConfigurations/services_sbnd.fcl b/sbndcode/LArSoftConfigurations/services_sbnd.fcl index 3ed49518e..6ba1cfe07 100644 --- a/sbndcode/LArSoftConfigurations/services_sbnd.fcl +++ b/sbndcode/LArSoftConfigurations/services_sbnd.fcl @@ -89,6 +89,7 @@ sbnd_services: ChannelStatusService: @local::sbnd_data_channelstatus DetPedestalService: @local::sbnd_detpedestalservice # from database_sbnd.fcl SpaceCharge: @local::sbnd_spacecharge + IPMTCalibrationDatabaseService: @local::sbnd_pmtcalibrationdatabaseservice } # sbnd_services From 527400209b08b6fc73cc73ca6031425215f3aae5 Mon Sep 17 00:00:00 2001 From: Bear Carlson Date: Fri, 7 Mar 2025 13:04:58 -0800 Subject: [PATCH 13/16] Bump `sbnd_data` version --- ups/product_deps | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ups/product_deps b/ups/product_deps index bfe683046..d5447eb82 100644 --- a/ups/product_deps +++ b/ups/product_deps @@ -255,7 +255,7 @@ wpdir product_dir wire-cell-cfg product version qual flags sbncode v10_04_03 - cetmodules v3_24_01 - only_for_build -sbnd_data v01_27_00 - optional +sbnd_data v01_28_00 - optional sbndutil v10_04_03 - optional end_product_list #################################### From e791f419dc507291640fe9db24fd6690b4ccdb9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20S=C3=A1nchez=20Castillo?= Date: Thu, 27 Mar 2025 15:35:29 -0500 Subject: [PATCH 14/16] Fix pds_calibration.db path --- .../PDSDatabaseInterface/pmtcalibrationdatabase_sbnd.fcl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sbndcode/Calibration/PDSDatabaseInterface/pmtcalibrationdatabase_sbnd.fcl b/sbndcode/Calibration/PDSDatabaseInterface/pmtcalibrationdatabase_sbnd.fcl index 340f70051..c427804d5 100644 --- a/sbndcode/Calibration/PDSDatabaseInterface/pmtcalibrationdatabase_sbnd.fcl +++ b/sbndcode/Calibration/PDSDatabaseInterface/pmtcalibrationdatabase_sbnd.fcl @@ -5,7 +5,7 @@ sbnd_pmtcalibrationdatabaseservice : { CorrectionTags: { PMTCalibrationDatabaseTag: "v1r1" DatabaseTimeStamp: 1740739388000000000 - TableName: "pds_calibration" + TableName: "CalibrationDatabase/pds_calibration" SERLength: 550 } Verbose: false From 4fa3605e5995bc4b4b2a20a8fdff0cd07ba30f0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20S=C3=A1nchez=20Castillo?= Date: Thu, 3 Apr 2025 11:52:29 -0500 Subject: [PATCH 15/16] Add CalibrationDatabase to FW_SEARCH_PATH --- ups/product_deps | 1 + 1 file changed, 1 insertion(+) diff --git a/ups/product_deps b/ups/product_deps index 4c672249d..84bcd3bee 100644 --- a/ups/product_deps +++ b/ups/product_deps @@ -326,6 +326,7 @@ end_qualifier_list table_fragment_begin # currently, XML pandora files are installed in 'scripts': pathPrepend(FW_SEARCH_PATH, ${SBNDCODE_DIR}/scripts) + pathPrepend(FW_SEARCH_PATH, ${SBND_DATA_DIR}/CalibrationDatabase) pathPrepend(FW_SEARCH_PATH, /cvmfs/sbnd.osgstorage.org/pnfs/fnal.gov/usr/sbnd/persistent/stash) pathPrepend(PYTHONPATH, ${UPS_PROD_DIR}/python) # wirecell external data files; cfg path append to wpdir=${SBNDCODE_DIR}/wire-cell-cfg From cf8014a2ceab0cb6b2d20edc1f7c6ec37d8705c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20S=C3=A1nchez=20Castillo?= Date: Thu, 3 Apr 2025 11:54:04 -0500 Subject: [PATCH 16/16] Reference .db file to the new path in FW_SEARCH_PATH --- .../PDSDatabaseInterface/pmtcalibrationdatabase_sbnd.fcl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sbndcode/Calibration/PDSDatabaseInterface/pmtcalibrationdatabase_sbnd.fcl b/sbndcode/Calibration/PDSDatabaseInterface/pmtcalibrationdatabase_sbnd.fcl index c427804d5..340f70051 100644 --- a/sbndcode/Calibration/PDSDatabaseInterface/pmtcalibrationdatabase_sbnd.fcl +++ b/sbndcode/Calibration/PDSDatabaseInterface/pmtcalibrationdatabase_sbnd.fcl @@ -5,7 +5,7 @@ sbnd_pmtcalibrationdatabaseservice : { CorrectionTags: { PMTCalibrationDatabaseTag: "v1r1" DatabaseTimeStamp: 1740739388000000000 - TableName: "CalibrationDatabase/pds_calibration" + TableName: "pds_calibration" SERLength: 550 } Verbose: false