Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/processes/hadronic/models/lend/src/MCGIDI_distribution.cc

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

  1 /*
  2 # <<BEGIN-copyright>>
  3 # <<END-copyright>>
  4 */
  5 #include <string.h>
  6 #include <cmath>
  7 
  8 #include "MCGIDI.h"
  9 #include "MCGIDI_misc.h"
 10 
 11 #if defined __cplusplus
 12 namespace GIDI {
 13 using namespace GIDI;
 14 #endif
 15 
 16 /*
 17 ************************************************************
 18 */
 19 MCGIDI_distribution *MCGIDI_distribution_new( statusMessageReporting *smr ) {
 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 }
 27 /*
 28 ************************************************************
 29 */
 30 int MCGIDI_distribution_initialize( statusMessageReporting * /*smr*/, MCGIDI_distribution *distribution ) {
 31 
 32     memset( distribution, 0, sizeof( MCGIDI_distribution ) );
 33     return( 0 );
 34 }
 35 /*
 36 ************************************************************
 37 */
 38 MCGIDI_distribution *MCGIDI_distribution_free( statusMessageReporting *smr, MCGIDI_distribution *distribution ) {
 39 
 40     MCGIDI_distribution_release( smr, distribution );
 41     smr_freeMemory( (void **) &distribution );
 42     return( NULL );
 43 }
 44 /*
 45 ************************************************************
 46 */
 47 int MCGIDI_distribution_release( statusMessageReporting *smr, MCGIDI_distribution *distribution ) {
 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 }
 58 /*
 59 ************************************************************
 60 */
 61 int MCGIDI_distribution_parseFromTOM( statusMessageReporting *smr, xDataTOM_element *element, MCGIDI_product *product, MCGIDI_POPs * /*pops*/, ptwXYPoints *norms ) {
 62 
 63     char const *nativeData, *gammaEnergy;
 64     double gammaEnergy_MeV{0.0};
 65     MCGIDI_distribution *distribution = &(product->distribution);
 66     xDataTOM_element *distributionElement;
 67     enum MCGIDI_energyType energyType = MCGIDI_energyType_unknown;
 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;
 78             energyType = MCGIDI_energyType_discreteGamma; }
 79         else if( ( gammaEnergy = xDataTOM_getAttributesValueInElement( element, "primary" ) ) != NULL ) {
 80             if( MCGIDI_misc_PQUStringToDoubleInUnitOf( smr, gammaEnergy, "MeV", &gammaEnergy_MeV ) ) goto err;
 81             energyType = MCGIDI_energyType_primaryGamma;
 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 
116 err:
117     MCGIDI_distribution_release( smr, distribution );
118     return( 1 );
119 }
120 
121 #if defined __cplusplus
122 }
123 #endif
124 
125