File indexing completed on 2026-11-07 10:11:38
0001
0002
0003
0004
0005
0006
0007 #pragma once
0008
0009 #include <memory>
0010
0011 #include "corecel/cont/Span.hh"
0012 #include "corecel/data/AuxInterface.hh"
0013 #include "corecel/data/AuxStateVec.hh"
0014 #include "celeritas/optical/action/ActionInterface.hh"
0015 #include "celeritas/phys/GeneratorInterface.hh"
0016
0017 #include "DirectGeneratorData.hh"
0018 #include "GeneratorBase.hh"
0019
0020 namespace celeritas
0021 {
0022 class CoreParams;
0023
0024 namespace optical
0025 {
0026 class CoreStateBase;
0027
0028
0029
0030
0031
0032
0033
0034
0035 class DirectGeneratorAction final : public GeneratorBase
0036 {
0037 public:
0038
0039
0040 using SpanConstData = Span<TrackInitializer const>;
0041
0042
0043 public:
0044
0045 static std::shared_ptr<DirectGeneratorAction> make_and_insert(
0046 CoreParams const&);
0047
0048
0049 DirectGeneratorAction(ActionId, AuxId, GeneratorId);
0050
0051
0052 void insert(CoreStateBase&, SpanConstData) const;
0053
0054
0055 UPState create_state(MemSpace, StreamId, size_type) const final;
0056
0057
0058 void step(CoreParams const&, CoreStateHost&) const final;
0059
0060
0061 void step(CoreParams const&, CoreStateDevice&) const final;
0062
0063 private:
0064
0065
0066 template<MemSpace M>
0067 void insert_impl(CoreState<M>&, SpanConstData) const;
0068
0069 template<MemSpace M>
0070 void step_impl(CoreParams const&, CoreState<M>&) const;
0071
0072 void generate(CoreParams const&, CoreStateHost&) const;
0073 void generate(CoreParams const&, CoreStateDevice&) const;
0074 };
0075
0076
0077 }
0078 }