From 27fc77099fc438392d8443955b2e761fd3231cec Mon Sep 17 00:00:00 2001 From: Stefano Tognini Date: Fri, 12 Dec 2025 14:20:25 -0600 Subject: [PATCH 1/8] Add optical interface tool and draft skeleton of the new optical propagation module --- larsim/PhotonPropagation/CMakeLists.txt | 19 ++++ .../IOpticalPropagation.h | 45 ++++++++ .../OpticalPropagation_module.cc | 107 ++++++++++++++++++ 3 files changed, 171 insertions(+) create mode 100644 larsim/PhotonPropagation/OpticalPropagationTools/IOpticalPropagation.h create mode 100644 larsim/PhotonPropagation/OpticalPropagation_module.cc diff --git a/larsim/PhotonPropagation/CMakeLists.txt b/larsim/PhotonPropagation/CMakeLists.txt index d1438709a..2b4a5306b 100644 --- a/larsim/PhotonPropagation/CMakeLists.txt +++ b/larsim/PhotonPropagation/CMakeLists.txt @@ -1,6 +1,7 @@ add_subdirectory(LibraryMappingTools) add_subdirectory(ScintTimeTools) add_subdirectory(OpticalPathTools) +add_subdirectory(OpticalPropagationTools) cet_make_library(LIBRARY_NAME PhotonLibraryInterface INTERFACE SOURCE IPhotonLibrary.h @@ -147,6 +148,24 @@ cet_build_plugin(PhotonLibraryAnalyzer art::EDAnalyzer ROOT::Hist ) +cet_build_plugin(OpticalPropagation art::EDProducer + LIBRARIES PRIVATE + larsim::PhotonPropagation + larsim::IonizationScintillation + larcore::ServiceUtil + lardata::LArPropertiesService + lardataobj::Simulation + art::Framework_Principal + art::Framework_Services_Registry + art_plugin_support::toolMaker + messagefacility::MF_MessageLogger + fhiclcpp::types + fhiclcpp::fhiclcpp + cetlib_except::cetlib_except + # todo: link celeritas::larcel + # todo: link opticks::opticks +) + add_executable(test_fast_acos test_fast_acos.cc) target_link_libraries(test_fast_acos PRIVATE larsim::PhotonPropagation) diff --git a/larsim/PhotonPropagation/OpticalPropagationTools/IOpticalPropagation.h b/larsim/PhotonPropagation/OpticalPropagationTools/IOpticalPropagation.h new file mode 100644 index 000000000..2d3cd7312 --- /dev/null +++ b/larsim/PhotonPropagation/OpticalPropagationTools/IOpticalPropagation.h @@ -0,0 +1,45 @@ +//---------------------------------------------------------------------------// +//! \file IOpticalPropagation.h +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // +//! \brief Abstract interface for optical simulation libraries +//---------------------------------------------------------------------------// +#pragma once + +#include +#include + +#include "lardataobj/Simulation/OpDetBacktrackerRecord.h" +#include "lardataobj/Simulation/SimEnergyDeposit.h" + +namespace phot { + //-------------------------------------------------------------------------// + /*! + * Abstract interface for optical propagation. + * + * This interface allows the addition of different optical photon propagation + * * tools. It is currently expected to manage 3 methods: + * - \c PDFastSimPAR : already available in larsim + * - \c Celeritas : Full optical particle transport on CPU and GPU + * - \c Opticks : Full optical particle transport on Nvidia GPUs + * + * The interfaces takes a vector of \c sim::SimEnergyDeposit as input and + * produces a vector of \c sim::OpDetBacktrackerRecord from detector hits. + */ + class IOpticalPropagation { + public: + //!@{ + //! \name Type aliases + using VecSED = std::vector; + using UPVecBTR = std::unique_ptr>; + ///@} + + // Initialize tool + virtual void beginJob() = 0; + + // Execute is called for every art::Event + virtual UPVecBTR executeEvent(VecSED const& edeps) = 0; + + // Bring tool back to invalid state + virtual void endJob() = 0; + }; +} // namespace phot diff --git a/larsim/PhotonPropagation/OpticalPropagation_module.cc b/larsim/PhotonPropagation/OpticalPropagation_module.cc new file mode 100644 index 000000000..339bae9d6 --- /dev/null +++ b/larsim/PhotonPropagation/OpticalPropagation_module.cc @@ -0,0 +1,107 @@ +//////////////////////////////////////////////////////////////////////// +// Class: OpticalPropagation +// Plugin Type: producer +// File: OpticalPropagation_module.cc +// +// Description: This modules adds sim::OpDetBacktrackerRecord objects to an +// art::Event from sim::SimEnergyDeposit . The optical simulation is performed +// using one of three art tools: +// - PDFastSimPAR: Semi-analytical model +// - Opticks: Uses NVIDIA OptiX to perform photon propagation on GPU +// - Celeritas: Full Monte Carlo photon propagation on CPU or GPU +// +// Generated at Tue Dec 9 09:10:34 2025 by Stefano Tognini using cetskelgen +// from cetlib version 3.18.02. +//////////////////////////////////////////////////////////////////////// + +#include "art/Framework/Core/EDProducer.h" +#include "art/Framework/Principal/Event.h" +#include "art/Framework/Principal/Handle.h" +#include "art/Utilities/make_tool.h" +#include "fhiclcpp/ParameterSet.h" +#include "messagefacility/MessageLogger/MessageLogger.h" + +#include "OpticalPropagationTools/IOpticalPropagation.h" + +#include + +namespace phot { + class OpticalPropagation; +} + +class phot::OpticalPropagation : public art::EDProducer { +public: + explicit OpticalPropagation(fhicl::ParameterSet const& p); + // The compiler-generated destructor is fine for non-base + // classes without bare pointers or other resource use. + + // Plugins should not be copied or assigned. + OpticalPropagation(OpticalPropagation const&) = delete; + OpticalPropagation(OpticalPropagation&&) = delete; + OpticalPropagation& operator=(OpticalPropagation const&) = delete; + OpticalPropagation& operator=(OpticalPropagation&&) = delete; + + // Initialize optical simulation library + void beginJob() override; + + // Run full optical simulation + void produce(art::Event& e) override; + + // Tear down optical simulation library + void endJob() override; + +private: + std::unique_ptr fOpticalPropagationTool; +}; + +//...................................................................... +/*! + * Construct with fhicl parameters: Initialize optical simulation tool. + */ +phot::OpticalPropagation::OpticalPropagation(fhicl::ParameterSet const& p) : EDProducer{p} +{ + // Initialize optical simulation library tool + fhicl::ParameterSet tool = p.get("OpticalPropagationTool"); + fOpticalPropagationTool = art::make_tool(tool); +} + +//...................................................................... +/*! + * Initialize optical simulation library object based on tool choice. + */ +void phot::OpticalPropagation::beginJob() +{ + // Allow for user-defined actions before event processing begins + fOpticalPropagationTool->beginJob(); +} + +//...................................................................... +/*! + * Produce \c sim::OpDetBacktrackerRecord objects and add to \c art::Event. + */ +void phot::OpticalPropagation::produce(art::Event& event) +{ + art::Handle> edepHandle; + if (!event.getByLabel("IonAndScint", edepHandle)) { + mf::LogError("OpticalPropagation") << "Missing IonAndScint label in art::Event"; + return; + } + + // Execute optical simulation and add result to event + auto result = fOpticalPropagationTool->executeEvent(*(edepHandle.product())); + event.put(std::move(result)); +} + +//...................................................................... +/*! + * Tear down simulation library. + */ +void phot::OpticalPropagation::endJob() +{ + // Allow for user-defined actions after event processing ends + fOpticalPropagationTool->endJob(); +} + +//...................................................................... +//! Register module in the framework +DEFINE_ART_MODULE(phot::OpticalPropagation) From a6cb9fe2d320a582e4838413e48c4a1716b3ab60 Mon Sep 17 00:00:00 2001 From: Stefano Tognini Date: Fri, 12 Dec 2025 14:21:09 -0600 Subject: [PATCH 2/8] Draft tool skeleton that will replace the PDFastSimPAR module --- .../OpticalPropagationTools/CMakeLists.txt | 17 ++++++++++ .../OpticalPropPDFastSimPAR.cc | 34 +++++++++++++++++++ .../OpticalPropPDFastSimPAR.h | 32 +++++++++++++++++ .../OpticalPropPDFastSimPAR_tool.cc | 9 +++++ .../opticalproppdfastsimpar_tool.fcl | 10 ++++++ 5 files changed, 102 insertions(+) create mode 100644 larsim/PhotonPropagation/OpticalPropagationTools/CMakeLists.txt create mode 100644 larsim/PhotonPropagation/OpticalPropagationTools/OpticalPropPDFastSimPAR.cc create mode 100644 larsim/PhotonPropagation/OpticalPropagationTools/OpticalPropPDFastSimPAR.h create mode 100644 larsim/PhotonPropagation/OpticalPropagationTools/OpticalPropPDFastSimPAR_tool.cc create mode 100644 larsim/PhotonPropagation/OpticalPropagationTools/opticalproppdfastsimpar_tool.fcl diff --git a/larsim/PhotonPropagation/OpticalPropagationTools/CMakeLists.txt b/larsim/PhotonPropagation/OpticalPropagationTools/CMakeLists.txt new file mode 100644 index 000000000..0d14ded29 --- /dev/null +++ b/larsim/PhotonPropagation/OpticalPropagationTools/CMakeLists.txt @@ -0,0 +1,17 @@ +cet_make_library(LIBRARY_NAME OpticalPropagationTools INTERFACE + SOURCE IOpticalPropagation.h +) + +cet_write_plugin_builder(phot::OpticalPropagationTools art::tool Modules + INSTALL_BUILDER) + +include(phot::OpticalPropagationTools) + +cet_build_plugin(OpticalPropPDFastSimPAR phot::OpticalPropagationTools + LIBRARIES PRIVATE + lardataobj::Simulation +) + +install_headers() +install_fhicl() +install_source() diff --git a/larsim/PhotonPropagation/OpticalPropagationTools/OpticalPropPDFastSimPAR.cc b/larsim/PhotonPropagation/OpticalPropagationTools/OpticalPropPDFastSimPAR.cc new file mode 100644 index 000000000..65dfc8e5f --- /dev/null +++ b/larsim/PhotonPropagation/OpticalPropagationTools/OpticalPropPDFastSimPAR.cc @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------------// +//! \file OpticalPropPDFastSimPAR.cc +//---------------------------------------------------------------------------// +#include "OpticalPropPDFastSimPAR.h" + +namespace phot { + //-------------------------------------------------------------------------// + /*! + * Construct \c PDFastSimPAR tool with fcl parameters. + */ + OpticalPropPDFastSimPAR::OpticalPropPDFastSimPAR() + { + // todo + } + + // Initalize fast simulation + void OpticalPropPDFastSimPAR::beginJob() + { + // todo + } + + // Execute simulation + OpticalPropPDFastSimPAR::UPVecBTR OpticalPropPDFastSimPAR::executeEvent(VecSED const& edeps) + { + // todo + return {}; + } + + // Finalize module + void OpticalPropPDFastSimPAR::endJob() + { + // todo + } +} // namespace phot diff --git a/larsim/PhotonPropagation/OpticalPropagationTools/OpticalPropPDFastSimPAR.h b/larsim/PhotonPropagation/OpticalPropagationTools/OpticalPropPDFastSimPAR.h new file mode 100644 index 000000000..23e250324 --- /dev/null +++ b/larsim/PhotonPropagation/OpticalPropagationTools/OpticalPropPDFastSimPAR.h @@ -0,0 +1,32 @@ +//---------------------------------------------------------------------------// +//! \file OpticalPropPDFastSimPAR.h +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // +//! \brief Implementation of the PDFastSimPAR optical simulation tool +//---------------------------------------------------------------------------// +#pragma once + +#include "IOpticalPropagation.h" + +namespace phot { + //-------------------------------------------------------------------------// + /*! + * Implementation of the \c PDFastSimPAR optical simulation tool. + */ + class OpticalPropPDFastSimPAR : public IOpticalPropagation { + public: + // Construct with fcl parameters + OpticalPropPDFastSimPAR(); + + // Default destructor + ~OpticalPropPDFastSimPAR() = default; + + // Initialize fast simulation + void beginJob() override; + + // Execute simulation on a single art::Event + UPVecBTR executeEvent(VecSED const& edeps) override; + + // Finalize module execution + void endJob() override; + }; +} // namespace phot diff --git a/larsim/PhotonPropagation/OpticalPropagationTools/OpticalPropPDFastSimPAR_tool.cc b/larsim/PhotonPropagation/OpticalPropagationTools/OpticalPropPDFastSimPAR_tool.cc new file mode 100644 index 000000000..0c761b6d1 --- /dev/null +++ b/larsim/PhotonPropagation/OpticalPropagationTools/OpticalPropPDFastSimPAR_tool.cc @@ -0,0 +1,9 @@ +//---------------------------------------------------------------------------// +//! \file OpticalSimPDFastSimPAR_tool.cc +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // +//! \brief Define OpticalPropPDFastSimPAR as a tool +//---------------------------------------------------------------------------// +#include "OpticalPropPDFastSimPAR.h" +#include "art/Utilities/ToolMacros.h" + +DEFINE_ART_CLASS_TOOL(phot::OpticalPropPDFastSimPAR) diff --git a/larsim/PhotonPropagation/OpticalPropagationTools/opticalproppdfastsimpar_tool.fcl b/larsim/PhotonPropagation/OpticalPropagationTools/opticalproppdfastsimpar_tool.fcl new file mode 100644 index 000000000..22c299a38 --- /dev/null +++ b/larsim/PhotonPropagation/OpticalPropagationTools/opticalproppdfastsimpar_tool.fcl @@ -0,0 +1,10 @@ +// PDFastSimPAR optical propagation tool + +BEGIN_PROLOG + +OpticalPropPDFastSimPAR: +{ + tool_type: OpticalPropPDFastSimPAR +} + +END_PROLOG From db254f00c806c8a92c91e7d74ab6a49da755e35f Mon Sep 17 00:00:00 2001 From: Stefano Tognini Date: Mon, 15 Dec 2025 14:58:02 -0600 Subject: [PATCH 3/8] Clarify documentation --- .../OpticalPropagationTools/IOpticalPropagation.h | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/larsim/PhotonPropagation/OpticalPropagationTools/IOpticalPropagation.h b/larsim/PhotonPropagation/OpticalPropagationTools/IOpticalPropagation.h index 2d3cd7312..d7585489c 100644 --- a/larsim/PhotonPropagation/OpticalPropagationTools/IOpticalPropagation.h +++ b/larsim/PhotonPropagation/OpticalPropagationTools/IOpticalPropagation.h @@ -17,7 +17,13 @@ namespace phot { * Abstract interface for optical propagation. * * This interface allows the addition of different optical photon propagation - * * tools. It is currently expected to manage 3 methods: + * tools. As an \c art::tool, the \c executeEvent function is called *once* + * during a \c art::EDProducer::produce module execution, and uses all \c + * sim::SimEnergyDeposits from an \c art::Event found by the \c art::Handle . + * + * I.e. a single \c executeEvent function call propagates all resulting + * optical photons from the existing batch of energy depositions on an + * event-by-event basis. It is currently expected to manage 3 methods: * - \c PDFastSimPAR : already available in larsim * - \c Celeritas : Full optical particle transport on CPU and GPU * - \c Opticks : Full optical particle transport on Nvidia GPUs From 74ef6de4d76be1259eff68037276bc865d25f36a Mon Sep 17 00:00:00 2001 From: Stefano Tognini Date: Mon, 15 Dec 2025 16:10:05 -0600 Subject: [PATCH 4/8] Fix build error --- .../OpticalPropagationTools/CMakeLists.txt | 9 ++++++++- .../OpticalPropagationTools/OpticalPropPDFastSimPAR.cc | 3 ++- .../OpticalPropagationTools/OpticalPropPDFastSimPAR.h | 6 +++++- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/larsim/PhotonPropagation/OpticalPropagationTools/CMakeLists.txt b/larsim/PhotonPropagation/OpticalPropagationTools/CMakeLists.txt index 0d14ded29..9e1b6d312 100644 --- a/larsim/PhotonPropagation/OpticalPropagationTools/CMakeLists.txt +++ b/larsim/PhotonPropagation/OpticalPropagationTools/CMakeLists.txt @@ -1,15 +1,22 @@ cet_make_library(LIBRARY_NAME OpticalPropagationTools INTERFACE SOURCE IOpticalPropagation.h + LIBRARIES INTERFACE + lardataobj::Simulation ) cet_write_plugin_builder(phot::OpticalPropagationTools art::tool Modules - INSTALL_BUILDER) + INSTALL_BUILDER + LIBRARIES CONDITIONAL + lardataobj::Simulation +) include(phot::OpticalPropagationTools) cet_build_plugin(OpticalPropPDFastSimPAR phot::OpticalPropagationTools + IMPL_SOURCE OpticalPropPDFastSimPAR.cc LIBRARIES PRIVATE lardataobj::Simulation + fhiclcpp::fhiclcpp ) install_headers() diff --git a/larsim/PhotonPropagation/OpticalPropagationTools/OpticalPropPDFastSimPAR.cc b/larsim/PhotonPropagation/OpticalPropagationTools/OpticalPropPDFastSimPAR.cc index 65dfc8e5f..a66ab5573 100644 --- a/larsim/PhotonPropagation/OpticalPropagationTools/OpticalPropPDFastSimPAR.cc +++ b/larsim/PhotonPropagation/OpticalPropagationTools/OpticalPropPDFastSimPAR.cc @@ -8,7 +8,8 @@ namespace phot { /*! * Construct \c PDFastSimPAR tool with fcl parameters. */ - OpticalPropPDFastSimPAR::OpticalPropPDFastSimPAR() + OpticalPropPDFastSimPAR::OpticalPropPDFastSimPAR(const fhicl::ParameterSet& p) + : IOpticalPropagation() { // todo } diff --git a/larsim/PhotonPropagation/OpticalPropagationTools/OpticalPropPDFastSimPAR.h b/larsim/PhotonPropagation/OpticalPropagationTools/OpticalPropPDFastSimPAR.h index 23e250324..30dad308a 100644 --- a/larsim/PhotonPropagation/OpticalPropagationTools/OpticalPropPDFastSimPAR.h +++ b/larsim/PhotonPropagation/OpticalPropagationTools/OpticalPropPDFastSimPAR.h @@ -7,6 +7,10 @@ #include "IOpticalPropagation.h" +#include "fhiclcpp/ParameterSet.h" +#include "lardataobj/Simulation/OpDetBacktrackerRecord.h" +#include "lardataobj/Simulation/SimEnergyDeposit.h" + namespace phot { //-------------------------------------------------------------------------// /*! @@ -15,7 +19,7 @@ namespace phot { class OpticalPropPDFastSimPAR : public IOpticalPropagation { public: // Construct with fcl parameters - OpticalPropPDFastSimPAR(); + OpticalPropPDFastSimPAR(const fhicl::ParameterSet& p); // Default destructor ~OpticalPropPDFastSimPAR() = default; From 0f05b618a40624d439a17a603622dbc11a5ba921 Mon Sep 17 00:00:00 2001 From: Stefano Tognini Date: Mon, 15 Dec 2025 16:10:42 -0600 Subject: [PATCH 5/8] Add config and job execution fcl files for the OpticalPropagation module --- .../PhotonPropagation/OpticalPropagation.fcl | 29 +++++++++++++++++++ .../optical_propagation_config.fcl | 16 ++++++++++ ...tsimpar_tool.fcl => pdfastsimpar_tool.fcl} | 1 + 3 files changed, 46 insertions(+) create mode 100644 larsim/PhotonPropagation/OpticalPropagation.fcl create mode 100644 larsim/PhotonPropagation/OpticalPropagationTools/optical_propagation_config.fcl rename larsim/PhotonPropagation/OpticalPropagationTools/{opticalproppdfastsimpar_tool.fcl => pdfastsimpar_tool.fcl} (70%) diff --git a/larsim/PhotonPropagation/OpticalPropagation.fcl b/larsim/PhotonPropagation/OpticalPropagation.fcl new file mode 100644 index 000000000..faaacba70 --- /dev/null +++ b/larsim/PhotonPropagation/OpticalPropagation.fcl @@ -0,0 +1,29 @@ +//---------------------------------------------------------------------------// +// Job execution file for the OpticalPropagatation module +//---------------------------------------------------------------------------// +# include "optical_propagation_config.fcl" + +#include "pdfastsimpar_tool.fcl" +// TODO: include Celeritas and Opticks fcl tools + +process_name: OpticalPropagationProducer + +services: +{ + // Geometry with optical SDs correctly labeled + // Maybe we need gdmlFilename_ : "geo.gdml" ? + geometry: @local::dune10kt_1x2x6_optical + + // Profiling tools for the execution + TimeTracker: {} + MemoryTracker: {} +} + +// TODO: verify these parameters +outputs: +{ + module_type: RootOutput + fileName: "output.root" // TODO Use %[flags] for automatic naming + dataTier: "simulated" + compressionLevel: 1 +} diff --git a/larsim/PhotonPropagation/OpticalPropagationTools/optical_propagation_config.fcl b/larsim/PhotonPropagation/OpticalPropagationTools/optical_propagation_config.fcl new file mode 100644 index 000000000..09ee84d0b --- /dev/null +++ b/larsim/PhotonPropagation/OpticalPropagationTools/optical_propagation_config.fcl @@ -0,0 +1,16 @@ +//---------------------------------------------------------------------------// +// OpticalPropagation_module tool selection +//---------------------------------------------------------------------------// +// Available tools are: +// @local::OpticalPropPDFastSimPAR : Semi-analytical model +// @local::Celeritas : Optical photon propagation on CPU and GPU +// @local::Opticks : Optical photon propagation on Nvidia GPUs + +BEGIN_PROLOG + +standard_opticalpropagation: +{ + OpticalPropagationTools: @local::OpticalPropPDFastSimPAR +} + +END_PROLOG diff --git a/larsim/PhotonPropagation/OpticalPropagationTools/opticalproppdfastsimpar_tool.fcl b/larsim/PhotonPropagation/OpticalPropagationTools/pdfastsimpar_tool.fcl similarity index 70% rename from larsim/PhotonPropagation/OpticalPropagationTools/opticalproppdfastsimpar_tool.fcl rename to larsim/PhotonPropagation/OpticalPropagationTools/pdfastsimpar_tool.fcl index 22c299a38..851109564 100644 --- a/larsim/PhotonPropagation/OpticalPropagationTools/opticalproppdfastsimpar_tool.fcl +++ b/larsim/PhotonPropagation/OpticalPropagationTools/pdfastsimpar_tool.fcl @@ -5,6 +5,7 @@ BEGIN_PROLOG OpticalPropPDFastSimPAR: { tool_type: OpticalPropPDFastSimPAR + // TODO: Move PDFastSimPAR_module fcl parameters here } END_PROLOG From f7b657c541cba2323d7bd57862e2a37be42cfc44 Mon Sep 17 00:00:00 2001 From: Stefano Tognini Date: Tue, 16 Dec 2025 11:56:11 -0600 Subject: [PATCH 6/8] Improve documentation; add "not implemented" log message to tool skeleton --- .../OpticalPropagationTools/CMakeLists.txt | 1 + .../OpticalPropPDFastSimPAR.cc | 64 +++++++++++-------- .../OpticalPropPDFastSimPAR.h | 46 ++++++------- .../OpticalPropagation_module.cc | 41 ++++++------ 4 files changed, 83 insertions(+), 69 deletions(-) diff --git a/larsim/PhotonPropagation/OpticalPropagationTools/CMakeLists.txt b/larsim/PhotonPropagation/OpticalPropagationTools/CMakeLists.txt index 9e1b6d312..941a2f049 100644 --- a/larsim/PhotonPropagation/OpticalPropagationTools/CMakeLists.txt +++ b/larsim/PhotonPropagation/OpticalPropagationTools/CMakeLists.txt @@ -17,6 +17,7 @@ cet_build_plugin(OpticalPropPDFastSimPAR phot::OpticalPropagationTools LIBRARIES PRIVATE lardataobj::Simulation fhiclcpp::fhiclcpp + messagefacility::MF_MessageLogger ) install_headers() diff --git a/larsim/PhotonPropagation/OpticalPropagationTools/OpticalPropPDFastSimPAR.cc b/larsim/PhotonPropagation/OpticalPropagationTools/OpticalPropPDFastSimPAR.cc index a66ab5573..affa2a3ed 100644 --- a/larsim/PhotonPropagation/OpticalPropagationTools/OpticalPropPDFastSimPAR.cc +++ b/larsim/PhotonPropagation/OpticalPropagationTools/OpticalPropPDFastSimPAR.cc @@ -3,33 +3,43 @@ //---------------------------------------------------------------------------// #include "OpticalPropPDFastSimPAR.h" -namespace phot { - //-------------------------------------------------------------------------// - /*! - * Construct \c PDFastSimPAR tool with fcl parameters. - */ - OpticalPropPDFastSimPAR::OpticalPropPDFastSimPAR(const fhicl::ParameterSet& p) - : IOpticalPropagation() - { - // todo - } +#include "messagefacility/MessageLogger/MessageLogger.h" - // Initalize fast simulation - void OpticalPropPDFastSimPAR::beginJob() - { - // todo - } +//-------------------------------------------------------------------------// +/*! + * Construct \c PDFastSimPAR tool with fcl parameters. + */ +phot::OpticalPropPDFastSimPAR::OpticalPropPDFastSimPAR(const fhicl::ParameterSet& p) + : phot::IOpticalPropagation() +{ + mf::LogError("OpticalPropPDFastSimPAR") << "Not implemented"; +} - // Execute simulation - OpticalPropPDFastSimPAR::UPVecBTR OpticalPropPDFastSimPAR::executeEvent(VecSED const& edeps) - { - // todo - return {}; - } +//-------------------------------------------------------------------------// +/*! + * Initalize fast simulation. + */ +void phot::OpticalPropPDFastSimPAR::beginJob() +{ + mf::LogError("OpticalPropPDFastSimPAR") << "Not implemented"; +} - // Finalize module - void OpticalPropPDFastSimPAR::endJob() - { - // todo - } -} // namespace phot +//-------------------------------------------------------------------------// +/*! + * Apply fast simulation to a single \c art::Event . + */ +phot::OpticalPropPDFastSimPAR::UPVecBTR phot::OpticalPropPDFastSimPAR::executeEvent( + VecSED const& edeps) +{ + mf::LogError("OpticalPropPDFastSimPAR") << "Not implemented"; + return {}; +} + +//-------------------------------------------------------------------------// +/*! + * Finalize fast simulation. + */ +void phot::OpticalPropPDFastSimPAR::endJob() +{ + mf::LogError("OpticalPropPDFastSimPAR") << "Not implemented"; +} diff --git a/larsim/PhotonPropagation/OpticalPropagationTools/OpticalPropPDFastSimPAR.h b/larsim/PhotonPropagation/OpticalPropagationTools/OpticalPropPDFastSimPAR.h index 30dad308a..f8ff26007 100644 --- a/larsim/PhotonPropagation/OpticalPropagationTools/OpticalPropPDFastSimPAR.h +++ b/larsim/PhotonPropagation/OpticalPropagationTools/OpticalPropPDFastSimPAR.h @@ -12,25 +12,27 @@ #include "lardataobj/Simulation/SimEnergyDeposit.h" namespace phot { - //-------------------------------------------------------------------------// - /*! - * Implementation of the \c PDFastSimPAR optical simulation tool. - */ - class OpticalPropPDFastSimPAR : public IOpticalPropagation { - public: - // Construct with fcl parameters - OpticalPropPDFastSimPAR(const fhicl::ParameterSet& p); - - // Default destructor - ~OpticalPropPDFastSimPAR() = default; - - // Initialize fast simulation - void beginJob() override; - - // Execute simulation on a single art::Event - UPVecBTR executeEvent(VecSED const& edeps) override; - - // Finalize module execution - void endJob() override; - }; -} // namespace phot + class OpticalPropPDFastSimPAR; +} + +//-------------------------------------------------------------------------// +/*! + * Implementation of the \c PDFastSimPAR optical simulation tool. + */ +class phot::OpticalPropPDFastSimPAR : public phot::IOpticalPropagation { +public: + // Construct with fcl parameters + OpticalPropPDFastSimPAR(const fhicl::ParameterSet& p); + + // Default destructor + ~OpticalPropPDFastSimPAR() = default; + + // Initialize fast simulation + void beginJob() override; + + // Execute simulation on a single art::Event + UPVecBTR executeEvent(VecSED const& edeps) override; + + // Finalize execution + void endJob() override; +}; diff --git a/larsim/PhotonPropagation/OpticalPropagation_module.cc b/larsim/PhotonPropagation/OpticalPropagation_module.cc index 339bae9d6..4ba127a10 100644 --- a/larsim/PhotonPropagation/OpticalPropagation_module.cc +++ b/larsim/PhotonPropagation/OpticalPropagation_module.cc @@ -31,32 +31,33 @@ namespace phot { class phot::OpticalPropagation : public art::EDProducer { public: + //! Construct with fcl parameters explicit OpticalPropagation(fhicl::ParameterSet const& p); - // The compiler-generated destructor is fine for non-base - // classes without bare pointers or other resource use. - // Plugins should not be copied or assigned. - OpticalPropagation(OpticalPropagation const&) = delete; - OpticalPropagation(OpticalPropagation&&) = delete; - OpticalPropagation& operator=(OpticalPropagation const&) = delete; - OpticalPropagation& operator=(OpticalPropagation&&) = delete; - - // Initialize optical simulation library + //! Initialize optical simulation library void beginJob() override; - // Run full optical simulation + //! Run full optical simulation void produce(art::Event& e) override; - // Tear down optical simulation library + //! Tear down optical simulation library void endJob() override; + //!@{ + //! Disable class copy and move semantics + OpticalPropagation(OpticalPropagation const&) = delete; + OpticalPropagation(OpticalPropagation&&) = delete; + OpticalPropagation& operator=(OpticalPropagation const&) = delete; + OpticalPropagation& operator=(OpticalPropagation&&) = delete; + //!@} + private: std::unique_ptr fOpticalPropagationTool; }; -//...................................................................... +//---------------------------------------------------------------------------// /*! - * Construct with fhicl parameters: Initialize optical simulation tool. + * Construct with fhicl parameters. */ phot::OpticalPropagation::OpticalPropagation(fhicl::ParameterSet const& p) : EDProducer{p} { @@ -65,9 +66,9 @@ phot::OpticalPropagation::OpticalPropagation(fhicl::ParameterSet const& p) : EDP fOpticalPropagationTool = art::make_tool(tool); } -//...................................................................... +//---------------------------------------------------------------------------// /*! - * Initialize optical simulation library object based on tool choice. + * Initialize optical simulation based on the tool choice. */ void phot::OpticalPropagation::beginJob() { @@ -75,9 +76,9 @@ void phot::OpticalPropagation::beginJob() fOpticalPropagationTool->beginJob(); } -//...................................................................... +//---------------------------------------------------------------------------// /*! - * Produce \c sim::OpDetBacktrackerRecord objects and add to \c art::Event. + * Generate and add \c sim::OpDetBacktrackerRecord objects to \c art::Event . */ void phot::OpticalPropagation::produce(art::Event& event) { @@ -92,9 +93,9 @@ void phot::OpticalPropagation::produce(art::Event& event) event.put(std::move(result)); } -//...................................................................... +//---------------------------------------------------------------------------// /*! - * Tear down simulation library. + * Tear down simulations. */ void phot::OpticalPropagation::endJob() { @@ -102,6 +103,6 @@ void phot::OpticalPropagation::endJob() fOpticalPropagationTool->endJob(); } -//...................................................................... +//---------------------------------------------------------------------------// //! Register module in the framework DEFINE_ART_MODULE(phot::OpticalPropagation) From 4319b8f8a6c1db3dfef6ec5f4c912363fa018c7b Mon Sep 17 00:00:00 2001 From: Stefano Tognini Date: Tue, 16 Dec 2025 12:35:31 -0600 Subject: [PATCH 7/8] Clean up CMakeLists module libraries; minor code reorg. --- larsim/PhotonPropagation/CMakeLists.txt | 7 -- .../IOpticalPropagation.h | 70 ++++++++++--------- 2 files changed, 36 insertions(+), 41 deletions(-) diff --git a/larsim/PhotonPropagation/CMakeLists.txt b/larsim/PhotonPropagation/CMakeLists.txt index 2b4a5306b..e5a7b2f70 100644 --- a/larsim/PhotonPropagation/CMakeLists.txt +++ b/larsim/PhotonPropagation/CMakeLists.txt @@ -150,18 +150,11 @@ cet_build_plugin(PhotonLibraryAnalyzer art::EDAnalyzer cet_build_plugin(OpticalPropagation art::EDProducer LIBRARIES PRIVATE - larsim::PhotonPropagation - larsim::IonizationScintillation - larcore::ServiceUtil - lardata::LArPropertiesService lardataobj::Simulation art::Framework_Principal - art::Framework_Services_Registry art_plugin_support::toolMaker messagefacility::MF_MessageLogger - fhiclcpp::types fhiclcpp::fhiclcpp - cetlib_except::cetlib_except # todo: link celeritas::larcel # todo: link opticks::opticks ) diff --git a/larsim/PhotonPropagation/OpticalPropagationTools/IOpticalPropagation.h b/larsim/PhotonPropagation/OpticalPropagationTools/IOpticalPropagation.h index d7585489c..4fcd795c3 100644 --- a/larsim/PhotonPropagation/OpticalPropagationTools/IOpticalPropagation.h +++ b/larsim/PhotonPropagation/OpticalPropagationTools/IOpticalPropagation.h @@ -12,40 +12,42 @@ #include "lardataobj/Simulation/SimEnergyDeposit.h" namespace phot { - //-------------------------------------------------------------------------// - /*! - * Abstract interface for optical propagation. - * - * This interface allows the addition of different optical photon propagation - * tools. As an \c art::tool, the \c executeEvent function is called *once* - * during a \c art::EDProducer::produce module execution, and uses all \c - * sim::SimEnergyDeposits from an \c art::Event found by the \c art::Handle . - * - * I.e. a single \c executeEvent function call propagates all resulting - * optical photons from the existing batch of energy depositions on an - * event-by-event basis. It is currently expected to manage 3 methods: - * - \c PDFastSimPAR : already available in larsim - * - \c Celeritas : Full optical particle transport on CPU and GPU - * - \c Opticks : Full optical particle transport on Nvidia GPUs - * - * The interfaces takes a vector of \c sim::SimEnergyDeposit as input and - * produces a vector of \c sim::OpDetBacktrackerRecord from detector hits. - */ - class IOpticalPropagation { - public: - //!@{ - //! \name Type aliases - using VecSED = std::vector; - using UPVecBTR = std::unique_ptr>; - ///@} + class IOpticalPropagation; +} - // Initialize tool - virtual void beginJob() = 0; +//-------------------------------------------------------------------------// +/*! + * Abstract interface for optical propagation. + * + * This interface allows the addition of different optical photon propagation + * tools. As an \c art::tool, the \c executeEvent function is called *once* + * during a \c art::EDProducer::produce module execution, and uses all \c + * sim::SimEnergyDeposits from an \c art::Event found by the \c art::Handle . + * + * I.e. a single \c executeEvent function call propagates all resulting + * optical photons from the existing batch of energy depositions on an + * event-by-event basis. It is currently expected to manage 3 methods: + * - \c PDFastSimPAR : already available in larsim + * - \c Celeritas : Full optical particle transport on CPU and GPU + * - \c Opticks : Full optical particle transport on Nvidia GPUs + * + * The interfaces takes a vector of \c sim::SimEnergyDeposit as input and + * produces a vector of \c sim::OpDetBacktrackerRecord from detector hits. + */ +class phot::IOpticalPropagation { +public: + //!@{ + //! \name Type aliases + using VecSED = std::vector; + using UPVecBTR = std::unique_ptr>; + ///@} - // Execute is called for every art::Event - virtual UPVecBTR executeEvent(VecSED const& edeps) = 0; + // Initialize tool + virtual void beginJob() = 0; - // Bring tool back to invalid state - virtual void endJob() = 0; - }; -} // namespace phot + // Execute is called for every art::Event + virtual UPVecBTR executeEvent(VecSED const& edeps) = 0; + + // Bring tool back to invalid state + virtual void endJob() = 0; +}; From 0de809f764980d0109db43b9ce5dc946df7325ca Mon Sep 17 00:00:00 2001 From: Stefano Tognini Date: Tue, 16 Dec 2025 12:56:36 -0600 Subject: [PATCH 8/8] Fix typo --- larsim/PhotonPropagation/OpticalPropagation.fcl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/larsim/PhotonPropagation/OpticalPropagation.fcl b/larsim/PhotonPropagation/OpticalPropagation.fcl index faaacba70..f16a18534 100644 --- a/larsim/PhotonPropagation/OpticalPropagation.fcl +++ b/larsim/PhotonPropagation/OpticalPropagation.fcl @@ -1,5 +1,5 @@ //---------------------------------------------------------------------------// -// Job execution file for the OpticalPropagatation module +// Job execution file for the OpticalPropagation module //---------------------------------------------------------------------------// # include "optical_propagation_config.fcl"