Geant4 11.4.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
MCGIDI::URR_protareInfos Class Reference

#include <MCGIDI.hpp>

Public Member Functions

LUPI_HOST_DEVICE URR_protareInfos ()
LUPI_HOST URR_protareInfos (Vector< Protare * > &a_protares)
LUPI_HOST void setup (Vector< Protare * > &a_protares)
LUPI_HOST_DEVICE std::size_t size () const
LUPI_HOST_DEVICE URR_protareInfo const & operator[] (std::size_t a_index) const
template<typename RNG>
LUPI_HOST_DEVICE void updateProtare (MCGIDI::Protare const *a_protare, double a_energy, RNG &&a_rng)
LUPI_HOST_DEVICE void serialize (LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode)
LUPI_HOST_DEVICE std::size_t internalSize () const

Detailed Description

Definition at line 451 of file MCGIDI.hpp.

Constructor & Destructor Documentation

◆ URR_protareInfos() [1/2]

LUPI_HOST_DEVICE MCGIDI::URR_protareInfos::URR_protareInfos ( )
inline

Definition at line 457 of file MCGIDI.hpp.

457: m_URR_protareInfos( ) { }

◆ URR_protareInfos() [2/2]

LUPI_HOST MCGIDI::URR_protareInfos::URR_protareInfos ( Vector< Protare * > & a_protares)

URR_protareInfos constructor.

Parameters
a_protares[in] The list of protares to be check for URR data. Each protare with URR data add to a_URR_protareInfos.

Definition at line 34 of file MCGIDI_URR.cc.

34 {
35
36 setup( a_protares );
37}
LUPI_HOST void setup(Vector< Protare * > &a_protares)
Definition MCGIDI_URR.cc:45

Member Function Documentation

◆ internalSize()

LUPI_HOST_DEVICE std::size_t MCGIDI::URR_protareInfos::internalSize ( ) const
inline

Definition at line 468 of file MCGIDI.hpp.

468{ return m_URR_protareInfos.internalSize( ); }

◆ operator[]()

LUPI_HOST_DEVICE URR_protareInfo const & MCGIDI::URR_protareInfos::operator[] ( std::size_t a_index) const
inline

Returns the instance of m_URR_protareInfos at index a_index.

Definition at line 463 of file MCGIDI.hpp.

◆ serialize()

LUPI_HOST_DEVICE void MCGIDI::URR_protareInfos::serialize ( LUPI::DataBuffer & a_buffer,
LUPI::DataBuffer::Mode a_mode )

This method serializes this for broadcasting as needed for MPI and GPUs. The method can count the number of required bytes, pack this or unpack this depending on a_mode.

Parameters
a_buffer[in] The buffer to read or write data to depending on a_mode.
a_mode[in] Specifies the action of this method.

Definition at line 75 of file MCGIDI_URR.cc.

75 {
76
77 std::size_t vectorSize = m_URR_protareInfos.size( );
78 int vectorSizeInt = (int) vectorSize;
79 DATA_MEMBER_INT( vectorSizeInt, a_buffer, a_mode );
80 vectorSize = (std::size_t) vectorSizeInt;
81 if( a_mode == LUPI::DataBuffer::Mode::Unpack ) m_URR_protareInfos.resize( vectorSize, &a_buffer.m_placement );
82 if( a_mode == LUPI::DataBuffer::Mode::Memory ) a_buffer.m_placement += m_URR_protareInfos.internalSize();
83
84 for( std::size_t vectorIndex = 0; vectorIndex < vectorSize; ++vectorIndex ) {
85 m_URR_protareInfos[vectorIndex].serialize( a_buffer, a_mode );
86 }
87}
#define DATA_MEMBER_INT( member, buf, mode)

◆ setup()

LUPI_HOST void MCGIDI::URR_protareInfos::setup ( Vector< Protare * > & a_protares)

URR_protareInfos setup.

Parameters
a_protares[in] The list of protares to be check for URR data. Each protare with URR data add to a_URR_protareInfos.

Definition at line 45 of file MCGIDI_URR.cc.

45 {
46
47 std::vector<URR_protareInfo> URR_protareInfo_1;
48
49 for( std::size_t i1 = 0; i1 < a_protares.size( ); ++i1 ) {
50 Protare *protare = a_protares[i1];
51
52 for( std::size_t i2 = 0; i2 < protare->numberOfProtares( ); ++i2 ) {
53 ProtareSingle *protareSingle = const_cast<ProtareSingle *>( protare->protare( i2 ) );
54
55 if( protareSingle->hasURR_probabilityTables( ) ) {
56 protareSingle->setURR_index( static_cast<int>( URR_protareInfo_1.size( ) ) );
57 URR_protareInfo_1.push_back( URR_protareInfo( ) );
58 }
59 }
60 }
61
62 m_URR_protareInfos.reserve( URR_protareInfo_1.size( ) );
63 m_URR_protareInfos.clear( );
64 for( std::size_t i1 = 0; i1 < URR_protareInfo_1.size( ); ++i1 ) m_URR_protareInfos.push_back( URR_protareInfo_1[i1] );
65}

Referenced by URR_protareInfos().

◆ size()

LUPI_HOST_DEVICE std::size_t MCGIDI::URR_protareInfos::size ( ) const
inline

Definition at line 462 of file MCGIDI.hpp.

462{ return( m_URR_protareInfos.size( ) ); }

◆ updateProtare()

template<typename RNG>
LUPI_HOST_DEVICE void MCGIDI::URR_protareInfos::updateProtare ( MCGIDI::Protare const * a_protare,
double a_energy,
RNG && a_rng )
inline

Updates this if a_protare has a non-negative URR_index.

Parameters
a_protare[in] The protare whose URR_index is used to see if this needs updating.
a_energy[in] The energy of the projectile.
a_rng[in] The random number generator function that returns a double in the range [0, 1.0).

Definition at line 33 of file MCGIDI_headerSource.hpp.

33 {
34
35 for( std::size_t i1 = 0; i1 < a_protare->numberOfProtares( ); ++i1 ) {
36 ProtareSingle *protareSingle = const_cast<ProtareSingle *>( a_protare->protare( i1 ) );
37
38 if( protareSingle->URR_index( ) >= 0 ) {
39 URR_protareInfo &URR_protare_info = m_URR_protareInfos[static_cast<std::size_t>(protareSingle->URR_index())];
40
41 URR_protare_info.m_inURR = protareSingle->inURR( a_energy );
42 if( URR_protare_info.inURR( ) ) URR_protare_info.m_rng_Value = a_rng( );
43 }
44 }
45}

The documentation for this class was generated from the following files: