From 11c58d730396893ddb1227a972db14485fc49650 Mon Sep 17 00:00:00 2001 From: lbu Date: Tue, 25 Feb 2025 11:50:21 -0500 Subject: [PATCH 1/7] Add initial user post action in optical physics to be used for optical detector/calorimeter --- src/celeritas/CMakeLists.txt | 1 + src/celeritas/optical/CoreParams.cc | 3 + .../optical/action/UserPostAction.cc | 52 ++++++++++++++++ .../optical/action/UserPostAction.hh | 39 ++++++++++++ .../optical/action/detail/UserPostExecutor.hh | 59 +++++++++++++++++++ 5 files changed, 154 insertions(+) create mode 100644 src/celeritas/optical/action/UserPostAction.cc create mode 100644 src/celeritas/optical/action/UserPostAction.hh create mode 100644 src/celeritas/optical/action/detail/UserPostExecutor.hh diff --git a/src/celeritas/CMakeLists.txt b/src/celeritas/CMakeLists.txt index 3fa6cc94e5..7517c5d3bc 100644 --- a/src/celeritas/CMakeLists.txt +++ b/src/celeritas/CMakeLists.txt @@ -315,6 +315,7 @@ celeritas_polysource(optical/action/BoundaryAction) celeritas_polysource(optical/action/InitializeTracksAction) celeritas_polysource(optical/action/PreStepAction) celeritas_polysource(optical/action/TrackingCutAction) +celeritas_polysource(optical/action/UserPostAction) celeritas_polysource(optical/action/detail/TrackInitAlgorithms) celeritas_polysource(optical/detail/CherenkovGeneratorAction) celeritas_polysource(optical/detail/CherenkovOffloadAction) diff --git a/src/celeritas/optical/CoreParams.cc b/src/celeritas/optical/CoreParams.cc index a78ae9e1cd..4b306d6e71 100644 --- a/src/celeritas/optical/CoreParams.cc +++ b/src/celeritas/optical/CoreParams.cc @@ -24,6 +24,7 @@ #include "action/LocateVacanciesAction.hh" #include "action/PreStepAction.hh" #include "action/TrackingCutAction.hh" +#include "action/UserPostAction.hh" namespace celeritas { @@ -89,6 +90,8 @@ CoreScalars build_actions(ActionRegistry* reg) scalars.tracking_cut_action = reg->next_id(); reg->insert(make_shared(scalars.tracking_cut_action)); + reg->insert(make_shared(reg->next_id())); + //// END ACTIONS //// reg->insert(make_shared(reg->next_id())); diff --git a/src/celeritas/optical/action/UserPostAction.cc b/src/celeritas/optical/action/UserPostAction.cc new file mode 100644 index 0000000000..cdaaa1e3ec --- /dev/null +++ b/src/celeritas/optical/action/UserPostAction.cc @@ -0,0 +1,52 @@ +//------------------------------- -*- C++ -*- -------------------------------// +// Copyright Celeritas contributors: see top-level COPYRIGHT file for details +// SPDX-License-Identifier: (Apache-2.0 OR MIT) +//---------------------------------------------------------------------------// +//! \file celeritas/optical/action/UserPostAction.cc +//---------------------------------------------------------------------------// +#include "UserPostAction.hh" + +#include "celeritas/optical/CoreParams.hh" +#include "celeritas/optical/CoreState.hh" + +#include "ActionLauncher.hh" +#include "TrackSlotExecutor.hh" + +#include "detail/UserPostExecutor.hh" + +namespace celeritas +{ +namespace optical +{ +//---------------------------------------------------------------------------// +/*! + * Construct with action ID. + */ +UserPostAction::UserPostAction(ActionId aid) + : StaticConcreteAction(aid, "along-step", "move to interaction or boundary") +{ +} + +//---------------------------------------------------------------------------// +/*! + * Launch the boundary action on host. + */ +void UserPostAction::step(CoreParams const& params, CoreStateHost& state) const +{ + auto detect_and_update + = [](CoreTrackView& track) { detail::UserPostExecutor{}(track); }; + auto execute = make_active_thread_executor( + params.ptr(), state.ptr(), detect_and_update); + return launch_action(state, execute); +} + +#if !CELER_USE_DEVICE +void UserPostAction::step(CoreParams const&, CoreStateDevice&) const +{ + CELER_NOT_CONFIGURED("CUDA OR HIP"); +} +#endif + +//---------------------------------------------------------------------------// +} // namespace optical +} // namespace celeritas \ No newline at end of file diff --git a/src/celeritas/optical/action/UserPostAction.hh b/src/celeritas/optical/action/UserPostAction.hh new file mode 100644 index 0000000000..30f491d6aa --- /dev/null +++ b/src/celeritas/optical/action/UserPostAction.hh @@ -0,0 +1,39 @@ +//------------------------------- -*- C++ -*- -------------------------------// +// Copyright Celeritas contributors: see top-level COPYRIGHT file for details +// SPDX-License-Identifier: (Apache-2.0 OR MIT) +//---------------------------------------------------------------------------// +//! \file celeritas/optical/action/UserPostAction.hh +//---------------------------------------------------------------------------// +#pragma once + +#include "ActionInterface.hh" + +namespace celeritas +{ +namespace optical +{ +//---------------------------------------------------------------------------// +/*! + * Check track interaction with optical detector, deposit (print) energy and + * kill track + */ +class UserPostAction final : public OpticalStepActionInterface, + public StaticConcreteAction +{ + public: + // Construct with ID + explicit UserPostAction(ActionId); + + // Launch kernel with host data + void step(CoreParams const&, CoreStateHost&) const final; + + // Launch kernel with device data + void step(CoreParams const&, CoreStateDevice&) const final; + + //! Dependency ordering of the action + StepActionOrder order() const final { return StepActionOrder::post; } +}; + +//---------------------------------------------------------------------------// +} // namespace optical +} // namespace celeritas \ No newline at end of file diff --git a/src/celeritas/optical/action/detail/UserPostExecutor.hh b/src/celeritas/optical/action/detail/UserPostExecutor.hh new file mode 100644 index 0000000000..83c4fc04c2 --- /dev/null +++ b/src/celeritas/optical/action/detail/UserPostExecutor.hh @@ -0,0 +1,59 @@ +//------------------------------- -*- C++ -*- -------------------------------// +// Copyright Celeritas contributors: see top-level COPYRIGHT file for details +// SPDX-License-Identifier: (Apache-2.0 OR MIT) +//---------------------------------------------------------------------------// +//! \file celeritas/optical/action/detail/AlongStepExecutor.hh +//---------------------------------------------------------------------------// +#pragma once + +#include "corecel/Assert.hh" +#include "corecel/Macros.hh" +#include "celeritas/Types.hh" +#include "celeritas/optical/CoreTrackView.hh" +#include "celeritas/optical/SimTrackView.hh" + +namespace celeritas +{ +namespace optical +{ +namespace detail +{ +//---------------------------------------------------------------------------// +/*! + * Complete end-of-step activity for a track. + * + * - Update track time + * - Update number of steps + * - Update remaining MFPs to interaction + */ +struct UserPostExecutor +{ + inline CELER_FUNCTION void operator()(CoreTrackView& track); +}; + +//---------------------------------------------------------------------------// +CELER_FUNCTION void UserPostExecutor::operator()(CoreTrackView& track) +{ + auto sim = track.sim(); + // If track previously killed in step, don't contribute + if (sim.status() == TrackStatus::killed) + { + return; + } + + // If track is alive, check for detection + if (sim.status() == TrackStatus::alive) + { + // Extract track geometry + // auto geo = track.geometry(); + + // check for track geometry in optical detector list + + // If found, print energy, print volume, and kill track + } +} + +//---------------------------------------------------------------------------// +} // namespace detail +} // namespace optical +} // namespace celeritas \ No newline at end of file From d2ccff2b8e352802ee2254c010c3d9a12c6f77a8 Mon Sep 17 00:00:00 2001 From: lbu Date: Tue, 25 Feb 2025 11:58:24 -0500 Subject: [PATCH 2/7] Rename to CaloAction --- src/celeritas/CMakeLists.txt | 2 +- src/celeritas/optical/CoreParams.cc | 4 ++-- .../action/{UserPostAction.cc => CaloAction.cc} | 14 +++++++------- .../action/{UserPostAction.hh => CaloAction.hh} | 10 +++++----- .../{UserPostExecutor.hh => CaloExecutor.hh} | 4 ++-- 5 files changed, 17 insertions(+), 17 deletions(-) rename src/celeritas/optical/action/{UserPostAction.cc => CaloAction.cc} (76%) rename src/celeritas/optical/action/{UserPostAction.hh => CaloAction.hh} (83%) rename src/celeritas/optical/action/detail/{UserPostExecutor.hh => CaloExecutor.hh} (94%) diff --git a/src/celeritas/CMakeLists.txt b/src/celeritas/CMakeLists.txt index 7517c5d3bc..b6f8bf5d62 100644 --- a/src/celeritas/CMakeLists.txt +++ b/src/celeritas/CMakeLists.txt @@ -315,7 +315,7 @@ celeritas_polysource(optical/action/BoundaryAction) celeritas_polysource(optical/action/InitializeTracksAction) celeritas_polysource(optical/action/PreStepAction) celeritas_polysource(optical/action/TrackingCutAction) -celeritas_polysource(optical/action/UserPostAction) +celeritas_polysource(optical/action/CaloAction) celeritas_polysource(optical/action/detail/TrackInitAlgorithms) celeritas_polysource(optical/detail/CherenkovGeneratorAction) celeritas_polysource(optical/detail/CherenkovOffloadAction) diff --git a/src/celeritas/optical/CoreParams.cc b/src/celeritas/optical/CoreParams.cc index 4b306d6e71..0132edbce2 100644 --- a/src/celeritas/optical/CoreParams.cc +++ b/src/celeritas/optical/CoreParams.cc @@ -20,11 +20,11 @@ #include "TrackInitParams.hh" #include "action/AlongStepAction.hh" #include "action/BoundaryAction.hh" +#include "action/CaloAction.hh" #include "action/InitializeTracksAction.hh" #include "action/LocateVacanciesAction.hh" #include "action/PreStepAction.hh" #include "action/TrackingCutAction.hh" -#include "action/UserPostAction.hh" namespace celeritas { @@ -90,7 +90,7 @@ CoreScalars build_actions(ActionRegistry* reg) scalars.tracking_cut_action = reg->next_id(); reg->insert(make_shared(scalars.tracking_cut_action)); - reg->insert(make_shared(reg->next_id())); + reg->insert(make_shared(reg->next_id())); //// END ACTIONS //// diff --git a/src/celeritas/optical/action/UserPostAction.cc b/src/celeritas/optical/action/CaloAction.cc similarity index 76% rename from src/celeritas/optical/action/UserPostAction.cc rename to src/celeritas/optical/action/CaloAction.cc index cdaaa1e3ec..48fdff77f3 100644 --- a/src/celeritas/optical/action/UserPostAction.cc +++ b/src/celeritas/optical/action/CaloAction.cc @@ -2,9 +2,9 @@ // Copyright Celeritas contributors: see top-level COPYRIGHT file for details // SPDX-License-Identifier: (Apache-2.0 OR MIT) //---------------------------------------------------------------------------// -//! \file celeritas/optical/action/UserPostAction.cc +//! \file celeritas/optical/action/CaloAction.cc //---------------------------------------------------------------------------// -#include "UserPostAction.hh" +#include "CaloAction.hh" #include "celeritas/optical/CoreParams.hh" #include "celeritas/optical/CoreState.hh" @@ -12,7 +12,7 @@ #include "ActionLauncher.hh" #include "TrackSlotExecutor.hh" -#include "detail/UserPostExecutor.hh" +#include "detail/CaloExecutor.hh" namespace celeritas { @@ -22,7 +22,7 @@ namespace optical /*! * Construct with action ID. */ -UserPostAction::UserPostAction(ActionId aid) +CaloAction::CaloAction(ActionId aid) : StaticConcreteAction(aid, "along-step", "move to interaction or boundary") { } @@ -31,17 +31,17 @@ UserPostAction::UserPostAction(ActionId aid) /*! * Launch the boundary action on host. */ -void UserPostAction::step(CoreParams const& params, CoreStateHost& state) const +void CaloAction::step(CoreParams const& params, CoreStateHost& state) const { auto detect_and_update - = [](CoreTrackView& track) { detail::UserPostExecutor{}(track); }; + = [](CoreTrackView& track) { detail::CaloExecutor{}(track); }; auto execute = make_active_thread_executor( params.ptr(), state.ptr(), detect_and_update); return launch_action(state, execute); } #if !CELER_USE_DEVICE -void UserPostAction::step(CoreParams const&, CoreStateDevice&) const +void CaloAction::step(CoreParams const&, CoreStateDevice&) const { CELER_NOT_CONFIGURED("CUDA OR HIP"); } diff --git a/src/celeritas/optical/action/UserPostAction.hh b/src/celeritas/optical/action/CaloAction.hh similarity index 83% rename from src/celeritas/optical/action/UserPostAction.hh rename to src/celeritas/optical/action/CaloAction.hh index 30f491d6aa..03c1681058 100644 --- a/src/celeritas/optical/action/UserPostAction.hh +++ b/src/celeritas/optical/action/CaloAction.hh @@ -2,7 +2,7 @@ // Copyright Celeritas contributors: see top-level COPYRIGHT file for details // SPDX-License-Identifier: (Apache-2.0 OR MIT) //---------------------------------------------------------------------------// -//! \file celeritas/optical/action/UserPostAction.hh +//! \file celeritas/optical/action/CaloAction.hh //---------------------------------------------------------------------------// #pragma once @@ -17,12 +17,12 @@ namespace optical * Check track interaction with optical detector, deposit (print) energy and * kill track */ -class UserPostAction final : public OpticalStepActionInterface, - public StaticConcreteAction +class CaloAction final : public OpticalStepActionInterface, + public StaticConcreteAction { public: // Construct with ID - explicit UserPostAction(ActionId); + explicit CaloAction(ActionId); // Launch kernel with host data void step(CoreParams const&, CoreStateHost&) const final; @@ -31,7 +31,7 @@ class UserPostAction final : public OpticalStepActionInterface, void step(CoreParams const&, CoreStateDevice&) const final; //! Dependency ordering of the action - StepActionOrder order() const final { return StepActionOrder::post; } + StepActionOrder order() const final { return StepActionOrder::user_post; } }; //---------------------------------------------------------------------------// diff --git a/src/celeritas/optical/action/detail/UserPostExecutor.hh b/src/celeritas/optical/action/detail/CaloExecutor.hh similarity index 94% rename from src/celeritas/optical/action/detail/UserPostExecutor.hh rename to src/celeritas/optical/action/detail/CaloExecutor.hh index 83c4fc04c2..c0e1a1a368 100644 --- a/src/celeritas/optical/action/detail/UserPostExecutor.hh +++ b/src/celeritas/optical/action/detail/CaloExecutor.hh @@ -26,13 +26,13 @@ namespace detail * - Update number of steps * - Update remaining MFPs to interaction */ -struct UserPostExecutor +struct CaloExecutor { inline CELER_FUNCTION void operator()(CoreTrackView& track); }; //---------------------------------------------------------------------------// -CELER_FUNCTION void UserPostExecutor::operator()(CoreTrackView& track) +CELER_FUNCTION void CaloExecutor::operator()(CoreTrackView& track) { auto sim = track.sim(); // If track previously killed in step, don't contribute From afbf0d6ab32388523917ac7d4c66de2cb6bbc76e Mon Sep 17 00:00:00 2001 From: lbu Date: Mon, 3 Mar 2025 09:51:02 -0500 Subject: [PATCH 3/7] Fix description for optical calorimater action --- src/celeritas/optical/action/CaloAction.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/celeritas/optical/action/CaloAction.cc b/src/celeritas/optical/action/CaloAction.cc index 48fdff77f3..cfe8734041 100644 --- a/src/celeritas/optical/action/CaloAction.cc +++ b/src/celeritas/optical/action/CaloAction.cc @@ -23,7 +23,7 @@ namespace optical * Construct with action ID. */ CaloAction::CaloAction(ActionId aid) - : StaticConcreteAction(aid, "along-step", "move to interaction or boundary") + : StaticConcreteAction(aid, "track-calo", "contribute to detector") { } From 59534969011e127db3a53ccab271ab5c97ca3971 Mon Sep 17 00:00:00 2001 From: lbu Date: Mon, 3 Mar 2025 11:27:18 -0500 Subject: [PATCH 4/7] extract volume ID from track geometry and add pseudo-code block for checking against detector volumes and detector responce (print energy and volume then kill track) --- .../optical/action/detail/CaloExecutor.hh | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/celeritas/optical/action/detail/CaloExecutor.hh b/src/celeritas/optical/action/detail/CaloExecutor.hh index c0e1a1a368..24f8e3b1f7 100644 --- a/src/celeritas/optical/action/detail/CaloExecutor.hh +++ b/src/celeritas/optical/action/detail/CaloExecutor.hh @@ -44,10 +44,22 @@ CELER_FUNCTION void CaloExecutor::operator()(CoreTrackView& track) // If track is alive, check for detection if (sim.status() == TrackStatus::alive) { - // Extract track geometry - // auto geo = track.geometry(); + // Extract track geometry and current volume ID + auto geo = track.geometry(); + auto v_id = geo.volume_id(); // check for track geometry in optical detector list + // TODO:: fix below pseudo-code + // for(auto det_id : range(volume_ids_.size()) + // { + // if (v_id == volume_ids[det_id]) + // { + // auto energy = track.energy(); + // std::cout << "Killing track in Volume " << v_id + // << " with energy " << energy << std::endl; + // sim.status(TrackStatus::Killed); + // } + // } // If found, print energy, print volume, and kill track } From 4857439a4491ac249e5c541a6021357ffe0833ec Mon Sep 17 00:00:00 2001 From: lbu Date: Wed, 5 Mar 2025 14:16:58 -0500 Subject: [PATCH 5/7] Adds input to Optical collector for a label vector of optical detectors that gets passed to the core params input that is passed to the optical action step functions --- src/celeritas/optical/CoreParams.hh | 5 +++++ src/celeritas/optical/OpticalCollector.cc | 1 + src/celeritas/optical/OpticalCollector.hh | 4 ++++ src/celeritas/optical/detail/OpticalLaunchAction.hh | 4 ++++ 4 files changed, 14 insertions(+) diff --git a/src/celeritas/optical/CoreParams.hh b/src/celeritas/optical/CoreParams.hh index f8f381a1be..320ced323f 100644 --- a/src/celeritas/optical/CoreParams.hh +++ b/src/celeritas/optical/CoreParams.hh @@ -10,6 +10,7 @@ #include "corecel/data/DeviceVector.hh" #include "corecel/data/ObserverPtr.hh" #include "corecel/data/ParamsDataInterface.hh" +#include "corecel/io/Label.hh" #include "celeritas/geo/GeoFwd.hh" #include "celeritas/random/RngParamsFwd.hh" @@ -41,6 +42,7 @@ class CoreParams final : public ParamsDataInterface using SPConstRng = std::shared_ptr; using SPConstTrackInit = std::shared_ptr; using SPActionRegistry = std::shared_ptr; + using VecLabel = std::vector