Geant4  10.03.p03
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
MCGIDI_angularEnergy.cc File Reference
#include <string.h>
#include "MCGIDI.h"
#include "MCGIDI_fromTOM.h"
#include "MCGIDI_misc.h"
#include "MCGIDI_private.h"
Include dependency graph for MCGIDI_angularEnergy.cc:

Go to the source code of this file.

Functions

static int MCGIDI_angularEnergy_parsePointwiseFromTOM (statusMessageReporting *smr, xDataTOM_element *pointwise, MCGIDI_distribution *distribution)
 
MCGIDI_angularEnergyMCGIDI_angularEnergy_new (statusMessageReporting *smr)
 
int MCGIDI_angularEnergy_initialize (statusMessageReporting *, MCGIDI_angularEnergy *angularEnergy)
 
MCGIDI_angularEnergyMCGIDI_angularEnergy_free (statusMessageReporting *smr, MCGIDI_angularEnergy *angularEnergy)
 
int MCGIDI_angularEnergy_release (statusMessageReporting *smr, MCGIDI_angularEnergy *angularEnergy)
 
int MCGIDI_angularEnergy_parseFromTOM (statusMessageReporting *smr, xDataTOM_element *element, MCGIDI_distribution *distribution)
 
int MCGIDI_angularEnergy_sampleDistribution (statusMessageReporting *smr, MCGIDI_angularEnergy *angularEnergy, MCGIDI_quantitiesLookupModes &modes, MCGIDI_decaySamplingInfo *decaySamplingInfo)
 

Function Documentation

MCGIDI_angularEnergy* MCGIDI_angularEnergy_free ( statusMessageReporting smr,
MCGIDI_angularEnergy angularEnergy 
)

Definition at line 40 of file MCGIDI_angularEnergy.cc.

40  {
41 
42  MCGIDI_angularEnergy_release( smr, angularEnergy );
43  smr_freeMemory( (void **) &angularEnergy );
44  return( NULL );
45 }
int MCGIDI_angularEnergy_release(statusMessageReporting *smr, MCGIDI_angularEnergy *energyAngular)
void * smr_freeMemory(void **p)

Here is the call graph for this function:

Here is the caller graph for this function:

int MCGIDI_angularEnergy_initialize ( statusMessageReporting ,
MCGIDI_angularEnergy angularEnergy 
)

Definition at line 32 of file MCGIDI_angularEnergy.cc.

32  {
33 
34  memset( angularEnergy, 0, sizeof( MCGIDI_angularEnergy ) );
35  return( 0 );
36 }

Here is the caller graph for this function:

MCGIDI_angularEnergy* MCGIDI_angularEnergy_new ( statusMessageReporting smr)

Definition at line 21 of file MCGIDI_angularEnergy.cc.

21  {
22 
23  MCGIDI_angularEnergy *angularEnergy;
24 
25  if( ( angularEnergy = (MCGIDI_angularEnergy *) smr_malloc2( smr, sizeof( MCGIDI_angularEnergy ), 0, "angularEnergy" ) ) == NULL ) return( NULL );
26  if( MCGIDI_angularEnergy_initialize( smr, angularEnergy ) ) angularEnergy = MCGIDI_angularEnergy_free( smr, angularEnergy );
27  return( angularEnergy );
28 }
MCGIDI_angularEnergy * MCGIDI_angularEnergy_free(statusMessageReporting *smr, MCGIDI_angularEnergy *energyAngular)
#define smr_malloc2(smr, size, zero, forItem)
int MCGIDI_angularEnergy_initialize(statusMessageReporting *smr, MCGIDI_angularEnergy *energyAngular)

Here is the call graph for this function:

Here is the caller graph for this function:

int MCGIDI_angularEnergy_parseFromTOM ( statusMessageReporting smr,
xDataTOM_element element,
MCGIDI_distribution distribution 
)

Definition at line 65 of file MCGIDI_angularEnergy.cc.

65  {
66 
67  xDataTOM_element *angularEnergyElement, *pointwise = NULL;
68  char const *nativeData;
69 
70  if( ( angularEnergyElement = xDataTOME_getOneElementByName( smr, element, "angularEnergy", 1 ) ) == NULL ) goto err;
71 
72  if( ( nativeData = xDataTOM_getAttributesValueInElement( angularEnergyElement, "nativeData" ) ) == NULL ) goto err;
73  if( strcmp( nativeData, "pointwise" ) == 0 ) {
74  if( ( pointwise = xDataTOME_getOneElementByName( smr, angularEnergyElement, "pointwise", 1 ) ) == NULL ) goto err; }
75  else if( strcmp( nativeData, "linear" ) == 0 ) {
76  if( ( pointwise = xDataTOME_getOneElementByName( smr, angularEnergyElement, "linear", 1 ) ) == NULL ) goto err; }
77  else {
78  smr_setReportError2( smr, smr_unknownID, 1, "angularEnergy nativeData = '%s' not supported", nativeData );
79  goto err;
80  }
81  if( pointwise != NULL ) return( MCGIDI_angularEnergy_parsePointwiseFromTOM( smr, pointwise, distribution ) );
82 
83  return( 0 );
84 
85 err:
86  return( 1 );
87 }
static int MCGIDI_angularEnergy_parsePointwiseFromTOM(statusMessageReporting *smr, xDataTOM_element *pointwise, MCGIDI_distribution *distribution)
#define smr_setReportError2(smr, libraryID, code, fmt,...)
xDataTOM_element * xDataTOME_getOneElementByName(statusMessageReporting *smr, xDataTOM_element *element, char const *name, int required)
Definition: xDataTOM.cc:246
#define smr_unknownID
char const * xDataTOM_getAttributesValueInElement(xDataTOM_element *element, char const *name)
Definition: xDataTOM.cc:286

Here is the call graph for this function:

Here is the caller graph for this function:

static int MCGIDI_angularEnergy_parsePointwiseFromTOM ( statusMessageReporting smr,
xDataTOM_element pointwise,
MCGIDI_distribution distribution 
)
static

Definition at line 91 of file MCGIDI_angularEnergy.cc.

91  {
92 
93  int iV, iW;
94  double y, norm, energyInFactor;
95  char const *energyUnit, *energyOutProbabilityUnits[2] = { "MeV", "1/MeV" };
96  MCGIDI_angularEnergy *angularEnergy = NULL;
97  ptwXY_interpolation interpolationXY, interpolationWY, interpolationVY;
98  xDataTOM_XYs *XYs;
99  xDataTOM_W_XYs *W_XYs;
100  xDataTOM_V_W_XYs *V_W_XYs;
101  MCGIDI_pdfsOfXGivenW *pdfOfMuGivenE, *pdfOfEpGivenEAndMu = NULL, *pdfOfEpGivenEAndMu2 = NULL;
102  ptwXYPoints *pdfXY1 = NULL, *pdfXY2 = NULL;
103  nfu_status status;
104 
105  if( MCGIDI_fromTOM_interpolation( smr, pointwise, 0, &interpolationVY ) ) goto err;
106  if( MCGIDI_fromTOM_interpolation( smr, pointwise, 1, &interpolationWY ) ) goto err;
107  if( MCGIDI_fromTOM_interpolation( smr, pointwise, 2, &interpolationXY ) ) goto err;
108  if( ( angularEnergy = MCGIDI_angularEnergy_new( smr ) ) == NULL ) goto err;
109 
110  if( ( angularEnergy->frame = MCGIDI_misc_getProductFrame( smr, pointwise ) ) == xDataTOM_frame_invalid ) goto err;
111 
112  pdfOfMuGivenE = &(angularEnergy->pdfOfMuGivenE);
113  pdfOfMuGivenE->interpolationWY = interpolationVY;
114  pdfOfMuGivenE->interpolationXY = interpolationWY;
115 
116  if( ( V_W_XYs = (xDataTOM_V_W_XYs *) xDataTOME_getXDataIfID( smr, pointwise, "V_W_XYs" ) ) == NULL ) goto err;
117  if( ( pdfOfMuGivenE->Ws = (double *) smr_malloc2( smr, V_W_XYs->length * sizeof( double ), 1, "pdfOfMuGivenE->Ws" ) ) == NULL ) goto err;
118  if( ( pdfOfMuGivenE->dist = (MCGIDI_pdfOfX *) smr_malloc2( smr, V_W_XYs->length * sizeof( MCGIDI_pdfOfX ), 0, "pdfOfMuGivenE->dist" ) ) == NULL ) goto err;
119  if( ( pdfOfEpGivenEAndMu = (MCGIDI_pdfsOfXGivenW *) smr_malloc2( smr, V_W_XYs->length * sizeof( MCGIDI_pdfsOfXGivenW ), 1, "pdfOfEpGivenEAndMu" ) ) == NULL ) goto err;
120 
121  energyUnit = xDataTOM_subAxes_getUnit( smr, &(V_W_XYs->subAxes), 0 );
122  if( !smr_isOk( smr ) ) goto err;
123  energyInFactor = MCGIDI_misc_getUnitConversionFactor( smr, energyUnit, "MeV" );
124  if( !smr_isOk( smr ) ) goto err;
125 
126  for( iV = 0; iV < V_W_XYs->length; iV++ ) {
127  W_XYs = &(V_W_XYs->W_XYs[iV]);
128  pdfOfEpGivenEAndMu2 = &(pdfOfEpGivenEAndMu[iV]);
129  pdfOfEpGivenEAndMu2->interpolationWY = interpolationWY;
130  pdfOfEpGivenEAndMu2->interpolationXY = interpolationXY;
131  if( ( pdfXY2 = ptwXY_new( interpolationWY, NULL, 2., 1e-6, W_XYs->length, 10, &status, 0 ) ) == NULL ) goto errA;
132  if( ( pdfOfEpGivenEAndMu2->Ws = (double *) smr_malloc2( smr, W_XYs->length * sizeof( double ), 1, "pdfOfEpGivenEAndMu2->Ws" ) ) == NULL ) goto err;
133  if( ( pdfOfEpGivenEAndMu2->dist = (MCGIDI_pdfOfX *) smr_malloc2( smr, W_XYs->length * sizeof( MCGIDI_pdfOfX ), 0, "pdfOfEpGivenEAndMu2->dist" ) ) == NULL ) goto err;
134  for( iW = 0; iW < W_XYs->length; iW++ ) {
135  XYs = &(W_XYs->XYs[iW]);
136  if( ( pdfXY1 = MCGIDI_misc_dataFromXYs2ptwXYPointsInUnitsOf( smr, XYs, interpolationXY, energyOutProbabilityUnits ) ) == NULL ) goto err;
137  y = ptwXY_integrateDomain( pdfXY1, &status );
138  if( ( status = ptwXY_setValueAtX( pdfXY2, XYs->value, y ) ) != nfu_Okay ) goto errA;
139  if( status != nfu_Okay ) goto errA;
140 
141  if( y == 0 ) {
142  if( ( status = ptwXY_add_double( pdfXY1, 0.5 ) ) != nfu_Okay ) goto errA;
143  }
144  pdfOfEpGivenEAndMu2->Ws[iW] = XYs->value;
145  if( MCGIDI_fromTOM_pdfOfX( smr, pdfXY1, &(pdfOfEpGivenEAndMu2->dist[iW]), &norm ) ) goto err;
146  pdfOfEpGivenEAndMu2->numberOfWs++;
147 
148  pdfXY1 = ptwXY_free( pdfXY1 );
149  }
150  pdfOfMuGivenE->Ws[iV] = energyInFactor * W_XYs->value;
151  if( MCGIDI_fromTOM_pdfOfX( smr, pdfXY2, &(pdfOfMuGivenE->dist[iV]), &norm ) ) goto err;
152  pdfOfMuGivenE->numberOfWs++;
153 
154  pdfXY2 = ptwXY_free( pdfXY2 );
155  }
156 
157  angularEnergy->pdfOfEpGivenEAndMu = pdfOfEpGivenEAndMu;
158  distribution->angularEnergy = angularEnergy;
160 
161  return( 0 );
162 
163 errA:
164  smr_setReportError2( smr, smr_unknownID, 1, "ptwXY_integrateDomain err = %d: %s\n", status, nfu_statusMessage( status ) );
165 err:
166  if( pdfXY1 != NULL ) ptwXY_free( pdfXY1 );
167  if( pdfXY2 != NULL ) ptwXY_free( pdfXY2 );
168 /* Need to free pdfOfEpGivenEAndMu. */
169  if( angularEnergy != NULL ) MCGIDI_angularEnergy_free( smr, angularEnergy );
170  return( 1 );
171 }
ptwXY_interpolation interpolationXY
Definition: MCGIDI.h:306
xDataTOM_W_XYs * W_XYs
Definition: xDataTOM.h:103
MCGIDI_angularEnergy * MCGIDI_angularEnergy_free(statusMessageReporting *smr, MCGIDI_angularEnergy *energyAngular)
xDataTOM_XYs * XYs
Definition: xDataTOM.h:97
MCGIDI_pdfsOfXGivenW pdfOfMuGivenE
Definition: MCGIDI.h:364
int MCGIDI_fromTOM_interpolation(statusMessageReporting *smr, xDataTOM_element *element, int index, enum ptwXY_interpolation_e *interpolation)
ptwXYPoints * ptwXY_free(ptwXYPoints *ptwXY)
Definition: ptwXY_core.cc:574
nfu_status ptwXY_setValueAtX(ptwXYPoints *ptwXY, double x, double y)
Definition: ptwXY_core.cc:876
double ptwXY_integrateDomain(ptwXYPoints *ptwXY, nfu_status *status)
nfu_status ptwXY_add_double(ptwXYPoints *ptwXY, double value)
int MCGIDI_fromTOM_pdfOfX(statusMessageReporting *smr, ptwXYPoints *pdfXY, MCGIDI_pdfOfX *dist, double *norm)
#define smr_setReportError2(smr, libraryID, code, fmt,...)
MCGIDI_pdfsOfXGivenW * pdfOfEpGivenEAndMu
Definition: MCGIDI.h:365
enum nfu_status_e nfu_status
ptwXY_interpolation interpolationWY
Definition: MCGIDI.h:306
void * xDataTOME_getXDataIfID(statusMessageReporting *smr, xDataTOM_element *TE, char const *ID)
Definition: xDataTOM.cc:512
#define smr_malloc2(smr, size, zero, forItem)
#define smr_unknownID
int smr_isOk(statusMessageReporting *smr)
enum ptwXY_interpolation_e ptwXY_interpolation
double value
Definition: xDataTOM.h:95
double value
Definition: xDataTOM.h:82
MCGIDI_angularEnergy * MCGIDI_angularEnergy_new(statusMessageReporting *smr)
ptwXYPoints * ptwXY_new(ptwXY_interpolation interpolation, ptwXY_interpolationOtherInfo const *interpolationOtherInfo, double biSectionMax, double accuracy, int64_t primarySize, int64_t secondarySize, nfu_status *status, int userFlag)
Definition: ptwXY_core.cc:29
enum MCGIDI_distributionType type
Definition: MCGIDI.h:382
enum xDataTOM_frame frame
Definition: MCGIDI.h:363
ptwXYPoints * MCGIDI_misc_dataFromXYs2ptwXYPointsInUnitsOf(statusMessageReporting *smr, xDataTOM_XYs *XYs, ptwXY_interpolation interpolation, char const *units[2])
Definition: MCGIDI_misc.cc:405
enum xDataTOM_frame MCGIDI_misc_getProductFrame(statusMessageReporting *smr, xDataTOM_element *frameElement)
Definition: MCGIDI_misc.cc:315
double MCGIDI_misc_getUnitConversionFactor(statusMessageReporting *smr, char const *fromUnit, char const *toUnit)
Definition: MCGIDI_misc.cc:381
const char * nfu_statusMessage(nfu_status status)
Definition: nf_utilities.cc:76
MCGIDI_angularEnergy * angularEnergy
Definition: MCGIDI.h:386
MCGIDI_pdfOfX * dist
Definition: MCGIDI.h:308
xDataTOM_subAxes subAxes
Definition: xDataTOM.h:102
char const * xDataTOM_subAxes_getUnit(statusMessageReporting *smr, xDataTOM_subAxes *subAxes, int index)

Here is the call graph for this function:

Here is the caller graph for this function:

int MCGIDI_angularEnergy_release ( statusMessageReporting smr,
MCGIDI_angularEnergy angularEnergy 
)

Definition at line 49 of file MCGIDI_angularEnergy.cc.

49  {
50 
51  int i;
52 
53  for( i = 0; i < angularEnergy->pdfOfMuGivenE.numberOfWs; i++ ) {
54  MCGIDI_sampling_pdfsOfXGivenW_release( smr, &(angularEnergy->pdfOfEpGivenEAndMu[i]) );
55  }
56  smr_freeMemory( (void **) &(angularEnergy->pdfOfEpGivenEAndMu) );
57  MCGIDI_sampling_pdfsOfXGivenW_release( smr, &(angularEnergy->pdfOfMuGivenE) );
58  MCGIDI_angularEnergy_initialize( smr, angularEnergy );
59 
60  return( 0 );
61 }
MCGIDI_pdfsOfXGivenW pdfOfMuGivenE
Definition: MCGIDI.h:364
MCGIDI_pdfsOfXGivenW * pdfOfEpGivenEAndMu
Definition: MCGIDI.h:365
int MCGIDI_sampling_pdfsOfXGivenW_release(statusMessageReporting *smr, MCGIDI_pdfsOfXGivenW *dists)
void * smr_freeMemory(void **p)
int MCGIDI_angularEnergy_initialize(statusMessageReporting *smr, MCGIDI_angularEnergy *energyAngular)

Here is the call graph for this function:

Here is the caller graph for this function:

int MCGIDI_angularEnergy_sampleDistribution ( statusMessageReporting smr,
MCGIDI_angularEnergy angularEnergy,
MCGIDI_quantitiesLookupModes modes,
MCGIDI_decaySamplingInfo decaySamplingInfo 
)

Definition at line 175 of file MCGIDI_angularEnergy.cc.

176  {
177 
178  int status = MCGIDI_sampling_doubleDistribution( smr, &(angularEnergy->pdfOfMuGivenE), angularEnergy->pdfOfEpGivenEAndMu, modes, decaySamplingInfo );
179 
180  decaySamplingInfo->frame = angularEnergy->frame;
181  return( status );
182 }
MCGIDI_pdfsOfXGivenW pdfOfMuGivenE
Definition: MCGIDI.h:364
int MCGIDI_sampling_doubleDistribution(statusMessageReporting *smr, MCGIDI_pdfsOfXGivenW *pdfOfWGivenV, MCGIDI_pdfsOfXGivenW *pdfOfXGivenVAndW, MCGIDI_quantitiesLookupModes &modes, MCGIDI_decaySamplingInfo *decaySamplingInfo)
MCGIDI_pdfsOfXGivenW * pdfOfEpGivenEAndMu
Definition: MCGIDI.h:365
enum xDataTOM_frame frame
Definition: MCGIDI.h:363
enum xDataTOM_frame frame
Definition: MCGIDI.h:256

Here is the call graph for this function:

Here is the caller graph for this function: