8 #include "MCGIDI_fromTOM.h"
9 #include "MCGIDI_misc.h"
10 #include "MCGIDI_private.h"
12 #if defined __cplusplus
24 xDataTOM_element *angularEnergyElement;
34 if( distribution->angular ) distribution->angular =
MCGIDI_angular_free( smr, distribution->angular );
42 xDataTOM_element *angularEnergyElement, *pointwise = NULL;
43 char const *nativeData;
48 if( strcmp( nativeData,
"pointwise" ) == 0 ) {
50 else if( strcmp( nativeData,
"linear" ) == 0 ) {
53 smr_setReportError2( smr, smr_unknownID, 1,
"angularEnergy nativeData = '%s' not supported", nativeData );
70 char const *energyOutProbabilityUnits[2] = {
"MeV",
"1/MeV" };
71 MCGIDI_angularEnergy *angularEnergy = NULL;
72 ptwXY_interpolation interpolationXY, interpolationWY, interpolationVY;
74 xDataTOM_W_XYs *W_XYs;
75 xDataTOM_V_W_XYs *V_W_XYs;
76 MCGIDI_pdfsOfXGivenW *pdfOfEpGivenEAndMu = NULL, *pdfOfEpGivenEAndMu2 = NULL;
77 ptwXYPoints *pdfXY1 = NULL;
79 enum xDataTOM_frame frame;
86 if( ( V_W_XYs = (xDataTOM_V_W_XYs *)
xDataTOME_getXDataIfID( smr, pointwise,
"V_W_XYs" ) ) == NULL )
goto err;
92 if( ( pdfOfEpGivenEAndMu = (MCGIDI_pdfsOfXGivenW *) smr_malloc2( smr, V_W_XYs->length *
sizeof( MCGIDI_pdfsOfXGivenW ), 1,
"pdfOfEpGivenEAndMu" ) ) == NULL )
goto err;
93 for( iV = 0; iV < V_W_XYs->length; iV++ ) {
94 W_XYs = &(V_W_XYs->W_XYs[iV]);
95 pdfOfEpGivenEAndMu2 = &(pdfOfEpGivenEAndMu[iV]);
96 pdfOfEpGivenEAndMu2->Ws = NULL;
97 pdfOfEpGivenEAndMu2->dist = NULL;
99 pdfOfEpGivenEAndMu2->interpolationWY = interpolationWY;
100 pdfOfEpGivenEAndMu2->interpolationXY = interpolationXY;
101 if( ( pdfOfEpGivenEAndMu2->Ws = (
double *) smr_malloc2( smr, W_XYs->length *
sizeof(
double ), 1,
"pdfOfEpGivenEAndMu2->Ws" ) ) == NULL )
goto err;
102 if( ( pdfOfEpGivenEAndMu2->dist = (MCGIDI_pdfOfX *) smr_malloc2( smr, W_XYs->length *
sizeof( MCGIDI_pdfOfX ), 0,
"pdfOfEpGivenEAndMu2->dist" ) ) == NULL )
goto err;
104 for( iW = 0; iW < W_XYs->length; iW++ ) {
105 XYs = &(W_XYs->XYs[iW]);
108 if( status != nfu_Okay )
goto errA;
113 pdfOfEpGivenEAndMu2->Ws[iW] = XYs->value;
115 pdfOfEpGivenEAndMu2->numberOfWs++;
119 pdfOfEpGivenEAndMu2 = NULL;
123 angularEnergy->frame = frame;
125 angularEnergy->pdfOfMuGivenE.numberOfWs = distribution->angular->dists.numberOfWs;
126 angularEnergy->pdfOfMuGivenE.interpolationWY = distribution->angular->dists.interpolationWY;
127 angularEnergy->pdfOfMuGivenE.interpolationXY = distribution->angular->dists.interpolationXY;
128 angularEnergy->pdfOfMuGivenE.Ws = distribution->angular->dists.Ws;
129 angularEnergy->pdfOfMuGivenE.dist = distribution->angular->dists.dist;
131 distribution->angular = NULL;
133 angularEnergy->pdfOfEpGivenEAndMu = pdfOfEpGivenEAndMu;
134 distribution->angularEnergy = angularEnergy;
135 distribution->type = MCGIDI_distributionType_angularEnergy_e;
140 smr_setReportError2( smr, smr_unknownID, 1,
"ptwXY_integrateDomain err = %d: %s\n", status,
nfu_statusMessage( status ) );
144 if( pdfOfEpGivenEAndMu != NULL ) {
151 #if defined __cplusplus
xDataTOM_element * xDataTOME_getOneElementByName(statusMessageReporting *smr, xDataTOM_element *element, char const *name, int required)
int MCGIDI_LLNLAngular_angularEnergy_parseFromTOM(statusMessageReporting *smr, xDataTOM_element *element, MCGIDI_distribution *distribution)
MCGIDI_angularEnergy * MCGIDI_angularEnergy_new(statusMessageReporting *smr)
nfu_status ptwXY_add_double(ptwXYPoints *ptwXY, double value)
ptwXYPoints * ptwXY_free(ptwXYPoints *ptwXY)
static int MCGIDI_LLNL_angularEnergy_parseFromTOM(statusMessageReporting *smr, xDataTOM_element *element, MCGIDI_distribution *distribution)
int MCGIDI_sampling_pdfsOfXGivenW_release(statusMessageReporting *smr, MCGIDI_pdfsOfXGivenW *dists)
ptwXYPoints * MCGIDI_misc_dataFromXYs2ptwXYPointsInUnitsOf(statusMessageReporting *smr, xDataTOM_XYs *XYs, ptwXY_interpolation interpolation, char const *toUnits[2])
int MCGIDI_fromTOM_pdfOfX(statusMessageReporting *smr, ptwXYPoints *pdfXY, MCGIDI_pdfOfX *dist, double *norm)
int smr_isOk(statusMessageReporting *smr)
void * xDataTOME_getXDataIfID(statusMessageReporting *smr, xDataTOM_element *TE, char const *ID)
void * smr_freeMemory(void **p)
char const * xDataTOM_getAttributesValueInElement(xDataTOM_element *element, char const *name)
MCGIDI_angular * MCGIDI_angular_free(statusMessageReporting *smr, MCGIDI_angular *angular)
const char * nfu_statusMessage(nfu_status status)
int MCGIDI_angular_parseFromTOM(statusMessageReporting *smr, xDataTOM_element *element, MCGIDI_distribution *distribution, ptwXYPoints *norms)
enum xDataTOM_frame MCGIDI_misc_getProductFrame(statusMessageReporting *smr, xDataTOM_element *frameElement)
static int MCGIDI_LLNL_angularEnergy_parsePointwiseFromTOM(statusMessageReporting *smr, xDataTOM_element *pointwise, MCGIDI_distribution *distribution)
double ptwXY_integrateDomain(ptwXYPoints *ptwXY, nfu_status *status)
int MCGIDI_fromTOM_interpolation(statusMessageReporting *smr, xDataTOM_element *element, int index, ptwXY_interpolation *interpolation)