Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-11-07 10:20:32

0001 //------------------------------- -*- C++ -*- -------------------------------//
0002 // Copyright Celeritas contributors: see top-level COPYRIGHT file for details
0003 // SPDX-License-Identifier: (Apache-2.0 OR MIT)
0004 //---------------------------------------------------------------------------//
0005 //! \file larceler/PDFullSimCeler.hh
0006 //! \note This file is an `art` plugin and should only be included by its .cc
0007 //---------------------------------------------------------------------------//
0008 #pragma once
0009 
0010 #include <memory>
0011 #include <art/Framework/Core/EDProducer.h>
0012 #include <art/Utilities/ToolConfigTable.h>
0013 
0014 #include "corecel/Macros.hh"
0015 #include "celeritas/inp/StandaloneInput.hh"  // IWYU pragma: keep
0016 
0017 #include "LarStandaloneRunner.hh"
0018 
0019 #include "detail/PDFullSimCelerConfig.hh"
0020 
0021 namespace sim
0022 {
0023 class SimEnergyDeposit;
0024 class OpDetBacktrackerRecord;
0025 }  // namespace sim
0026 
0027 namespace celeritas
0028 {
0029 //---------------------------------------------------------------------------//
0030 /*!
0031  * Run optical photons in a standalone simulation.
0032  *
0033  * This plugin implements a replacement for LArSim's \c phot::PDFastSimPAR
0034  * class. It is instantiated by a FHiCL workflow file with a set of
0035  * parameters. It takes a vector of energy-depositing steps and returns a
0036  * vector of detector responses. It is executed after the detector simulation
0037  * module (ionization, recombination, scintillation, etc.) with a vector of
0038  * steps that contain local energy deposition.
0039  *
0040  * The execution happens \em after LArG4 is complete, so it is completely
0041  * independent of the Geant4 run manager and execution. It requires an input
0042  * GDML with:
0043  * - Detector geometry description
0044  * - Bulk optical physics properties (e.g., Rayleigh scattering in argon)
0045  * - Surface properties (e.g., roughness, reflection probability)
0046  * - Detector properties (e.g., sensitive volumes, efficiency multipliers)
0047  *
0048  * \internal
0049  * \par Parameter set definitions
0050  *
0051  * See \c celeritas::detail::PDFullSimCelerConfig .
0052  */
0053 class PDFullSimCeler final : public art::EDProducer
0054 {
0055   public:
0056     //!@{
0057     //! \name Type aliases
0058     using Config = detail::PDFullSimCelerConfig;
0059     using Parameters = art::EDProducer::Table<Config>;
0060     ///@}
0061 
0062   public:
0063     // Construct with fcl parameters
0064     explicit PDFullSimCeler(Parameters const& p);
0065     CELER_DELETE_COPY_MOVE(PDFullSimCeler);
0066 
0067     // Start simulating events
0068     void beginJob() final;
0069 
0070     // Simulate a single event
0071     void produce(art::Event&) final;
0072 
0073     // Tear down optical simulation library
0074     void endJob() final;
0075 
0076   private:
0077     //! Runner input for building in beginJob
0078     LarStandaloneRunner::Input runner_inp_;
0079     //! Identifying tag should usually be set to IonAndScint
0080     art::InputTag sim_tag_;
0081 
0082     //! Constructed runner to process an event
0083     std::unique_ptr<LarStandaloneRunner> runner_;
0084 };
0085 
0086 //---------------------------------------------------------------------------//
0087 }  // namespace celeritas