File indexing completed on 2026-04-09 07:49:31
0001 #pragma once
0002
0003
0004 #if defined(__CUDACC__) || defined(__CUDABE__)
0005 #define SCARRIER_METHOD __device__
0006 #else
0007 #define SCARRIER_METHOD
0008 #endif
0009
0010 #include "OpticksGenstep.h"
0011 #include "OpticksPhoton.h"
0012
0013 #include "smath.h"
0014 #include "scuda.h"
0015 #include "squad.h"
0016
0017 #if defined(__CUDACC__) || defined(__CUDABE__)
0018 #else
0019 #include "srngcpu.h"
0020 #endif
0021
0022
0023
0024 struct scarrier
0025 {
0026 quad q0 ;
0027 quad q1 ;
0028 quad q2 ;
0029 quad q3 ;
0030 quad q4 ;
0031 quad q5 ;
0032
0033
0034 SCARRIER_METHOD static void generate( sphoton& p, RNG& rng, const quad6& gs, unsigned long long photon_id, unsigned genstep_id );
0035
0036
0037
0038 #if defined(__CUDACC__) || defined(__CUDABE__) || defined(MOCK_CURAND) || defined(MOCK_CUDA)
0039 #else
0040 SCARRIER_METHOD static void FillGenstep( scarrier& gs, int matline, int numphoton_per_genstep, bool dump ) ;
0041 #endif
0042
0043 };
0044
0045
0046
0047 inline SCARRIER_METHOD void scarrier::generate( sphoton& p_, RNG& rng, const quad6& gs, unsigned long long photon_id, unsigned genstep_id )
0048 {
0049 quad4& p = (quad4&)p_ ;
0050
0051 p.q0.f = gs.q2.f ;
0052 p.q0.f.y += float(photon_id)*10.f ;
0053
0054 p.q1.f = gs.q3.f ;
0055 p.q2.f = gs.q4.f ;
0056 p.q3.f = gs.q5.f ;
0057 p.set_flag(TORCH);
0058 }
0059
0060 #if defined(__CUDACC__) || defined(__CUDABE__) || defined(MOCK_CURAND)
0061 #else
0062 inline void scarrier::FillGenstep( scarrier& gs, int matline, int numphoton_per_genstep, bool dump )
0063 {
0064 gs.q0.u = make_uint4( OpticksGenstep_CARRIER, 0u, 0u, numphoton_per_genstep );
0065 gs.q1.u = make_uint4( 0u,0u,0u,0u );
0066 gs.q2.f = make_float4( 0.f, 0.f, 0.f, 0.f );
0067 gs.q3.f = make_float4( 1.f, 0.f, 0.f, 1.f );
0068 gs.q4.f = make_float4( 0.f, 1.f, 0.f, 500.f );
0069 gs.q5.f = make_float4( 0.f, 0.f, 0.f, 0.f );
0070
0071 gs.q3.u.w = 0u ;
0072
0073 }
0074 #endif
0075
0076
0077