Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-02-22 10:31:18

0001 //----------------------------------*-C++-*----------------------------------//
0002 // Copyright 2020-2024 UT-Battelle, LLC, and other Celeritas developers.
0003 // See the top-level COPYRIGHT file for details.
0004 // SPDX-License-Identifier: (Apache-2.0 OR MIT)
0005 //---------------------------------------------------------------------------//
0006 //! \file celeritas/em/model/BetheHeitlerModel.hh
0007 //---------------------------------------------------------------------------//
0008 #pragma once
0009 
0010 #include <memory>
0011 
0012 #include "celeritas/em/data/BetheHeitlerData.hh"
0013 #include "celeritas/phys/ImportedModelAdapter.hh"
0014 #include "celeritas/phys/ImportedProcessAdapter.hh"
0015 #include "celeritas/phys/Model.hh"
0016 #include "celeritas/phys/ParticleParams.hh"
0017 
0018 namespace celeritas
0019 {
0020 //---------------------------------------------------------------------------//
0021 /*!
0022  * Set up and launch the Bethe-Heitler model interaction.
0023  */
0024 class BetheHeitlerModel final : public Model, public StaticConcreteAction
0025 {
0026   public:
0027     //!@{
0028     //! \name Type aliases
0029     using SPConstImported = std::shared_ptr<ImportedProcesses const>;
0030     //!@}
0031 
0032   public:
0033     // Construct from model ID and other necessary data
0034     BetheHeitlerModel(ActionId id,
0035                       ParticleParams const& particles,
0036                       SPConstImported data,
0037                       bool enable_lpm);
0038 
0039     // Particle types and energy ranges that this model applies to
0040     SetApplicability applicability() const final;
0041 
0042     // Get the microscopic cross sections for the given particle and material
0043     MicroXsBuilders micro_xs(Applicability) const final;
0044 
0045     // Apply the interaction kernel on host
0046     void step(CoreParams const&, CoreStateHost&) const final;
0047 
0048     // Apply the interaction kernel on device
0049     void step(CoreParams const&, CoreStateDevice&) const final;
0050 
0051     //!@{
0052     //! Access model data
0053     BetheHeitlerData const& host_ref() const { return data_; }
0054     BetheHeitlerData const& device_ref() const { return data_; }
0055     //!@}
0056 
0057   private:
0058     BetheHeitlerData data_;
0059     ImportedModelAdapter imported_;
0060 };
0061 
0062 //---------------------------------------------------------------------------//
0063 }  // namespace celeritas