Geant4 10.7.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
MCGIDI_distribution.cc File Reference
#include <string.h>
#include <cmath>
#include "MCGIDI.h"
#include "MCGIDI_misc.h"

Go to the source code of this file.

Functions

MCGIDI_distributionMCGIDI_distribution_new (statusMessageReporting *smr)
 
int MCGIDI_distribution_initialize (statusMessageReporting *, MCGIDI_distribution *distribution)
 
MCGIDI_distributionMCGIDI_distribution_free (statusMessageReporting *smr, MCGIDI_distribution *distribution)
 
int MCGIDI_distribution_release (statusMessageReporting *smr, MCGIDI_distribution *distribution)
 
int MCGIDI_distribution_parseFromTOM (statusMessageReporting *smr, xDataTOM_element *element, MCGIDI_product *product, MCGIDI_POPs *, ptwXYPoints *norms)
 

Function Documentation

◆ MCGIDI_distribution_free()

MCGIDI_distribution * MCGIDI_distribution_free ( statusMessageReporting smr,
MCGIDI_distribution distribution 
)

Definition at line 38 of file MCGIDI_distribution.cc.

38 {
39
40 MCGIDI_distribution_release( smr, distribution );
41 smr_freeMemory( (void **) &distribution );
42 return( NULL );
43}
int MCGIDI_distribution_release(statusMessageReporting *smr, MCGIDI_distribution *distribution)
void * smr_freeMemory(void **p)

Referenced by MCGIDI_distribution_new().

◆ MCGIDI_distribution_initialize()

int MCGIDI_distribution_initialize ( statusMessageReporting smr,
MCGIDI_distribution distribution 
)

Definition at line 30 of file MCGIDI_distribution.cc.

30 {
31
32 memset( distribution, 0, sizeof( MCGIDI_distribution ) );
33 return( 0 );
34}

Referenced by MCGIDI_distribution_new(), MCGIDI_distribution_parseFromTOM(), and MCGIDI_distribution_release().

◆ MCGIDI_distribution_new()

MCGIDI_distribution * MCGIDI_distribution_new ( statusMessageReporting smr)

Definition at line 19 of file MCGIDI_distribution.cc.

19 {
20
21 MCGIDI_distribution *distribution;
22
23 if( ( distribution = (MCGIDI_distribution *) smr_malloc2( smr, sizeof( MCGIDI_distribution ), 0, "distribution" ) ) == NULL ) return( NULL );
24 if( MCGIDI_distribution_initialize( smr, distribution ) ) distribution = MCGIDI_distribution_free( smr, distribution );
25 return( distribution );
26}
MCGIDI_distribution * MCGIDI_distribution_free(statusMessageReporting *smr, MCGIDI_distribution *distribution)
int MCGIDI_distribution_initialize(statusMessageReporting *, MCGIDI_distribution *distribution)
#define smr_malloc2(smr, size, zero, forItem)

◆ MCGIDI_distribution_parseFromTOM()

int MCGIDI_distribution_parseFromTOM ( statusMessageReporting smr,
xDataTOM_element element,
MCGIDI_product product,
MCGIDI_POPs pops,
ptwXYPoints norms 
)

Definition at line 61 of file MCGIDI_distribution.cc.

61 {
62
63 char const *nativeData, *gammaEnergy;
64 double gammaEnergy_MeV;
65 MCGIDI_distribution *distribution = &(product->distribution);
66 xDataTOM_element *distributionElement;
68
69 MCGIDI_distribution_initialize( smr, distribution );
70
71 distribution->product = product;
72 if( ( distributionElement = xDataTOME_getOneElementByName( smr, element, "distributions", 1 ) ) == NULL ) goto err;
73 if( ( nativeData = xDataTOM_getAttributesValueInElement( distributionElement, "nativeData" ) ) == NULL ) goto err;
74
75 if( strcmp( product->pop->name, "gamma" ) == 0 ) {
76 if( ( gammaEnergy = xDataTOM_getAttributesValueInElement( element, "discrete" ) ) != NULL ) {
77 if( MCGIDI_misc_PQUStringToDoubleInUnitOf( smr, gammaEnergy, "MeV", &gammaEnergy_MeV ) ) goto err;
79 else if( ( gammaEnergy = xDataTOM_getAttributesValueInElement( element, "primary" ) ) != NULL ) {
80 if( MCGIDI_misc_PQUStringToDoubleInUnitOf( smr, gammaEnergy, "MeV", &gammaEnergy_MeV ) ) goto err;
82 }
83 if( gammaEnergy != NULL ) {
84 if( strcmp( nativeData, "angular" ) ) {
85 smr_setReportError2( smr, smr_unknownID, 1, "%s gamma can only have a distribution with 'nativeData' = 'angular' and not '%s'",
86 gammaEnergy, nativeData );
87 goto err;
88 }
89 nativeData = "uncorrelated";
90 }
91 }
92
93 if( strcmp( nativeData, "angular" ) == 0 ) {
94 if( MCGIDI_angular_parseFromTOM( smr, distributionElement, distribution, norms ) ) goto err; }
95 else if( strcmp( nativeData, "uncorrelated" ) == 0 ) {
96 if( MCGIDI_uncorrelated_parseFromTOM( smr, distributionElement, distribution, norms, energyType, gammaEnergy_MeV ) ) goto err; }
97 else if( strcmp( nativeData, "energyAngular" ) == 0 ) {
98 if( MCGIDI_energyAngular_parseFromTOM( smr, distributionElement, distribution ) ) goto err; }
99 else if( strcmp( nativeData, "angularEnergy" ) == 0 ) {
100 if( MCGIDI_angularEnergy_parseFromTOM( smr, distributionElement, distribution ) ) goto err; }
101 else if( strcmp( nativeData, "Legendre" ) == 0 ) {
102 if( MCGIDI_energyAngular_parseFromTOM( smr, distributionElement, distribution ) ) goto err; }
103 else if( strcmp( nativeData, "LLNLAngular_angularEnergy" ) == 0 ) {
104 if( MCGIDI_LLNLAngular_angularEnergy_parseFromTOM( smr, distributionElement, distribution ) ) goto err; }
105 else if( strcmp( nativeData, "none" ) == 0 ) {
106 distribution->type = MCGIDI_distributionType_none_e; }
107 else if( strcmp( nativeData, "unknown" ) == 0 ) {
108 distribution->type = MCGIDI_distributionType_unknown_e; }
109 else {
110 smr_setReportError2( smr, smr_unknownID, 1, "Unsupported distribution = '%s'\n", nativeData );
111 goto err;
112 }
113
114 return( 0 );
115
116err:
117 MCGIDI_distribution_release( smr, distribution );
118 return( 1 );
119}
int MCGIDI_LLNLAngular_angularEnergy_parseFromTOM(statusMessageReporting *smr, xDataTOM_element *element, MCGIDI_distribution *distribution)
int MCGIDI_uncorrelated_parseFromTOM(statusMessageReporting *smr, xDataTOM_element *element, MCGIDI_distribution *distribution, ptwXYPoints *norms, enum MCGIDI_energyType energyType, double gammaEnergy_MeV)
@ MCGIDI_distributionType_unknown_e
Definition: MCGIDI.h:208
@ MCGIDI_distributionType_none_e
Definition: MCGIDI.h:208
int MCGIDI_angular_parseFromTOM(statusMessageReporting *smr, xDataTOM_element *element, MCGIDI_distribution *distribution, ptwXYPoints *norms)
int MCGIDI_angularEnergy_parseFromTOM(statusMessageReporting *smr, xDataTOM_element *element, MCGIDI_distribution *distribution)
int MCGIDI_energyAngular_parseFromTOM(statusMessageReporting *smr, xDataTOM_element *element, MCGIDI_distribution *distribution)
int MCGIDI_misc_PQUStringToDoubleInUnitOf(statusMessageReporting *smr, char const *str, char const *toUnit, double *value)
Definition: MCGIDI_misc.cc:356
MCGIDI_energyType
Definition: MCGIDI.h:214
@ MCGIDI_energyType_unknown
Definition: MCGIDI.h:214
@ MCGIDI_energyType_primaryGamma
Definition: MCGIDI.h:214
@ MCGIDI_energyType_discreteGamma
Definition: MCGIDI.h:214
#define smr_setReportError2(smr, libraryID, code, fmt,...)
#define smr_unknownID
char * name
Definition: MCGIDI.h:232
MCGIDI_product * product
Definition: MCGIDI.h:381
enum MCGIDI_distributionType type
Definition: MCGIDI.h:382
MCGIDI_POP * pop
Definition: MCGIDI.h:401
MCGIDI_distribution distribution
Definition: MCGIDI.h:411
xDataTOM_element * xDataTOME_getOneElementByName(statusMessageReporting *smr, xDataTOM_element *element, char const *name, int required)
Definition: xDataTOM.cc:246
char const * xDataTOM_getAttributesValueInElement(xDataTOM_element *element, char const *name)
Definition: xDataTOM.cc:286

Referenced by MCGIDI_product_parseFromTOM().

◆ MCGIDI_distribution_release()

int MCGIDI_distribution_release ( statusMessageReporting smr,
MCGIDI_distribution distribution 
)

Definition at line 47 of file MCGIDI_distribution.cc.

47 {
48
49 if( distribution->angular ) distribution->angular = MCGIDI_angular_free( smr, distribution->angular );
50 if( distribution->energy ) distribution->energy = MCGIDI_energy_free( smr, distribution->energy );
51 if( distribution->KalbachMann ) distribution->KalbachMann = MCGIDI_KalbachMann_free( smr, distribution->KalbachMann );
52 if( distribution->energyAngular ) distribution->energyAngular = MCGIDI_energyAngular_free( smr, distribution->energyAngular );
53 if( distribution->angularEnergy ) distribution->angularEnergy = MCGIDI_angularEnergy_free( smr, distribution->angularEnergy );
54
55 MCGIDI_distribution_initialize( smr, distribution );
56 return( 0 );
57}
MCGIDI_energyAngular * MCGIDI_energyAngular_free(statusMessageReporting *smr, MCGIDI_energyAngular *energyAngular)
MCGIDI_angularEnergy * MCGIDI_angularEnergy_free(statusMessageReporting *smr, MCGIDI_angularEnergy *energyAngular)
MCGIDI_energy * MCGIDI_energy_free(statusMessageReporting *smr, MCGIDI_energy *energy)
MCGIDI_angular * MCGIDI_angular_free(statusMessageReporting *smr, MCGIDI_angular *angular)
MCGIDI_KalbachMann * MCGIDI_KalbachMann_free(statusMessageReporting *smr, MCGIDI_KalbachMann *KalbachMann)
MCGIDI_angularEnergy * angularEnergy
Definition: MCGIDI.h:386
MCGIDI_energy * energy
Definition: MCGIDI.h:384
MCGIDI_angular * angular
Definition: MCGIDI.h:383
MCGIDI_energyAngular * energyAngular
Definition: MCGIDI.h:385
MCGIDI_KalbachMann * KalbachMann
Definition: MCGIDI.h:387

Referenced by MCGIDI_distribution_free(), MCGIDI_distribution_parseFromTOM(), and MCGIDI_product_release().