Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-09-17 08:53:36

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 celeritas/em/params/detail/MscParamsHelper.hh
0006 //---------------------------------------------------------------------------//
0007 #pragma once
0008 
0009 #include <vector>
0010 
0011 #include "corecel/Types.hh"
0012 #include "corecel/data/Collection.hh"
0013 #include "celeritas/Quantities.hh"
0014 #include "celeritas/em/data/CommonCoulombData.hh"
0015 #include "celeritas/io/ImportModel.hh"
0016 
0017 namespace celeritas
0018 {
0019 //---------------------------------------------------------------------------//
0020 class ParticleParams;
0021 struct UniformGridRecord;
0022 
0023 namespace detail
0024 {
0025 //---------------------------------------------------------------------------//
0026 /*!
0027  * Helper class for constructing multiple scattering params.
0028  */
0029 class MscParamsHelper
0030 {
0031   public:
0032     //!@{
0033     //! \name Type aliases
0034     using Energy = units::MevEnergy;
0035     using EnergyBounds = Array<Energy, 2>;
0036     using VecImportMscModel = std::vector<ImportMscModel>;
0037     using IndexValues
0038         = Collection<MscParticleId, Ownership::value, MemSpace::host, ParticleId>;
0039     using XsValues
0040         = Collection<UniformGridRecord, Ownership::value, MemSpace::host>;
0041     using Values = Collection<real_type, Ownership::value, MemSpace::host>;
0042     //!@}
0043 
0044     MscParamsHelper(ParticleParams const&,
0045                     VecImportMscModel const&,
0046                     ImportModelClass);
0047 
0048     void build_ids(CoulombIds*, IndexValues*) const;
0049     void build_xs(XsValues*, Values*) const;
0050     EnergyBounds energy_grid_bounds() const;
0051     std::vector<ParticleId> const& particle_ids() const { return par_ids_; }
0052 
0053   private:
0054     //// DATA ////
0055 
0056     ParticleParams const& particles_;
0057     ImportModelClass model_class_;
0058     std::vector<MscParticleId> pid_to_xs_;
0059     std::vector<ParticleId> par_ids_;
0060     std::vector<ImportPhysicsTable const*> xs_tables_;
0061 };
0062 
0063 //---------------------------------------------------------------------------//
0064 }  // namespace detail
0065 }  // namespace celeritas