Back to home page

EIC code displayed by LXR

 
 

    


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 )  // static
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 );   // post
0067     gs.q3.f = make_float4( 1.f, 0.f, 0.f, 1.f );   // dirw
0068     gs.q4.f = make_float4( 0.f, 1.f, 0.f, 500.f ); // polw
0069     gs.q5.f = make_float4( 0.f, 0.f, 0.f, 0.f );   // flag
0070 
0071     gs.q3.u.w = 0u ; // former weight from "dirw" is now being used for prd.iindex
0072 
0073 }
0074 #endif
0075 
0076 
0077