7 #include "MCGIDI_fromTOM.h"
9 #include "MCGIDI_misc.h"
11 #if defined __cplusplus
22 MCGIDI_energyAngular *energyAngular;
24 if( ( energyAngular = (MCGIDI_energyAngular *) smr_malloc2( smr,
sizeof( MCGIDI_energyAngular ), 0,
"energyAngular" ) ) == NULL )
return( NULL );
26 return( energyAngular );
33 memset( energyAngular, 0,
sizeof( MCGIDI_energyAngular ) );
52 for( i = 0; i < energyAngular->pdfOfEpGivenE.numberOfWs; i++ ) {
66 xDataTOM_element *energyAngularElement;
67 char const *nativeData;
72 if( strcmp( nativeData,
"KalbachMann" ) == 0 ) {
74 else if( strcmp( nativeData,
"linear" ) == 0 ) {
77 smr_setReportError2( smr, smr_unknownID, 1,
"energyAngular nativeData = '%s' not supported", nativeData );
92 double y, norm, energyInFactor, energyOutFactor;
93 char const *energyUnit, *multiplicityProbabilityUnits[2] = {
"",
"1/MeV" };
94 xDataTOM_element *linear;
95 ptwXY_interpolation interpolationXY, interpolationWY, interpolationVY;
97 xDataTOM_W_XYs *W_XYs;
98 xDataTOM_V_W_XYs *V_W_XYs;
99 MCGIDI_pdfsOfXGivenW *pdfOfEpGivenE, *pdfOfMuGivenEAndEp = NULL, *pdfOfMuGivenEAndEp2 = NULL;
100 MCGIDI_energyAngular *energyAngular = NULL;
101 ptwXYPoints *pdfXY1 = NULL, *pdfXY2 = NULL;
113 pdfOfEpGivenE = &(energyAngular->pdfOfEpGivenE);
114 pdfOfEpGivenE->interpolationWY = interpolationVY;
115 pdfOfEpGivenE->interpolationXY = interpolationWY;
117 if( ( V_W_XYs = (xDataTOM_V_W_XYs *)
xDataTOME_getXDataIfID( smr, linear,
"V_W_XYs" ) ) == NULL )
goto err;
118 if( ( pdfOfEpGivenE->Ws = (
double *) smr_malloc2( smr, V_W_XYs->length *
sizeof(
double ), 1,
"pdfOfEpGivenE->Ws" ) ) == NULL )
goto err;
119 if( ( pdfOfEpGivenE->dist = (MCGIDI_pdfOfX *) smr_malloc2( smr, V_W_XYs->length *
sizeof( MCGIDI_pdfOfX ), 0,
"pdfOfEpGivenE->dist" ) ) == NULL )
goto err;
120 if( ( pdfOfMuGivenEAndEp = (MCGIDI_pdfsOfXGivenW *) smr_malloc2( smr, V_W_XYs->length *
sizeof( MCGIDI_pdfsOfXGivenW ), 1,
"pdfOfMuGivenEAndEp" ) ) == NULL )
goto err;
132 for( iV = 0; iV < V_W_XYs->length; iV++ ) {
133 W_XYs = &(V_W_XYs->W_XYs[iV]);
134 pdfOfMuGivenEAndEp2 = &(pdfOfMuGivenEAndEp[iV]);
135 pdfOfMuGivenEAndEp2->interpolationWY = interpolationWY;
136 pdfOfMuGivenEAndEp2->interpolationXY = interpolationXY;
137 if( ( pdfXY2 =
ptwXY_new( interpolationWY, NULL, 2., 1e-6, W_XYs->length, 10, &status, 0 ) ) == NULL )
goto errA;
138 if( ( pdfOfMuGivenEAndEp2->Ws = (
double *) smr_malloc2( smr, W_XYs->length *
sizeof(
double ), 1,
"pdfOfMuGivenEAndEp2->Ws" ) ) == NULL )
goto err;
139 if( ( pdfOfMuGivenEAndEp2->dist = (MCGIDI_pdfOfX *) smr_malloc2( smr, W_XYs->length *
sizeof( MCGIDI_pdfOfX ), 0,
"pdfOfMuGivenEAndEp2->dist" ) ) == NULL )
goto err;
140 for( iW = 0; iW < W_XYs->length; iW++ ) {
141 XYs = &(W_XYs->XYs[iW]);
144 if( ( status =
ptwXY_setValueAtX( pdfXY2, energyOutFactor * XYs->value, y ) ) != nfu_Okay )
goto errA;
145 if( status != nfu_Okay )
goto errA;
150 pdfOfMuGivenEAndEp2->Ws[iW] = energyOutFactor * XYs->value;
152 pdfOfMuGivenEAndEp2->numberOfWs++;
156 pdfOfEpGivenE->Ws[iV] = energyInFactor * W_XYs->value;
158 pdfOfEpGivenE->numberOfWs++;
162 energyAngular->pdfOfMuGivenEAndEp = pdfOfMuGivenEAndEp;
163 distribution->energyAngular = energyAngular;
164 distribution->type = MCGIDI_distributionType_energyAngular_e;
169 smr_setReportError2( smr, smr_unknownID, 1,
"ptwXY_integrateDomain err = %d: %s\n", status,
nfu_statusMessage( status ) );
181 MCGIDI_decaySamplingInfo *decaySamplingInfo ) {
184 MCGIDI_energyAngular *energyAngular = distribution->energyAngular;
187 Ep = decaySamplingInfo->mu;
188 decaySamplingInfo->mu = decaySamplingInfo->Ep;
189 decaySamplingInfo->Ep = Ep;
190 decaySamplingInfo->frame = energyAngular->frame;
195 #if defined __cplusplus
xDataTOM_element * xDataTOME_getOneElementByName(statusMessageReporting *smr, xDataTOM_element *element, char const *name, int required)
MCGIDI_energyAngular * MCGIDI_energyAngular_free(statusMessageReporting *smr, MCGIDI_energyAngular *energyAngular)
int MCGIDI_KalbachMann_parseFromTOM(statusMessageReporting *smr, xDataTOM_element *element, MCGIDI_distribution *distribution)
nfu_status ptwXY_add_double(ptwXYPoints *ptwXY, double value)
ptwXYPoints * ptwXY_free(ptwXYPoints *ptwXY)
int MCGIDI_energyAngular_parseFromTOM(statusMessageReporting *smr, xDataTOM_element *element, MCGIDI_distribution *distribution)
nfu_status ptwXY_setValueAtX(ptwXYPoints *ptwXY, double x, double y)
int MCGIDI_sampling_pdfsOfXGivenW_release(statusMessageReporting *smr, MCGIDI_pdfsOfXGivenW *dists)
int MCGIDI_energyAngular_release(statusMessageReporting *smr, MCGIDI_energyAngular *energyAngular)
ptwXYPoints * MCGIDI_misc_dataFromXYs2ptwXYPointsInUnitsOf(statusMessageReporting *smr, xDataTOM_XYs *XYs, ptwXY_interpolation interpolation, char const *toUnits[2])
char const * xDataTOM_subAxes_getUnit(statusMessageReporting *smr, xDataTOM_subAxes *subAxes, int index)
int MCGIDI_sampling_doubleDistribution(statusMessageReporting *smr, MCGIDI_pdfsOfXGivenW *pdfOfWGivenV, MCGIDI_pdfsOfXGivenW *pdfOfXGivenVAndW, MCGIDI_quantitiesLookupModes &modes, MCGIDI_decaySamplingInfo *decaySamplingInfo)
int MCGIDI_fromTOM_pdfOfX(statusMessageReporting *smr, ptwXYPoints *pdfXY, MCGIDI_pdfOfX *dist, double *norm)
int MCGIDI_energyAngular_initialize(statusMessageReporting *, MCGIDI_energyAngular *energyAngular)
int smr_isOk(statusMessageReporting *smr)
void * xDataTOME_getXDataIfID(statusMessageReporting *smr, xDataTOM_element *TE, char const *ID)
void * smr_freeMemory(void **p)
double MCGIDI_misc_getUnitConversionFactor(statusMessageReporting *smr, char const *fromUnit, char const *toUnit)
char const * xDataTOM_getAttributesValueInElement(xDataTOM_element *element, char const *name)
const char * nfu_statusMessage(nfu_status status)
MCGIDI_energyAngular * MCGIDI_energyAngular_new(statusMessageReporting *smr)
enum xDataTOM_frame MCGIDI_misc_getProductFrame(statusMessageReporting *smr, xDataTOM_element *frameElement)
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)
double ptwXY_integrateDomain(ptwXYPoints *ptwXY, nfu_status *status)
int MCGIDI_fromTOM_interpolation(statusMessageReporting *smr, xDataTOM_element *element, int index, ptwXY_interpolation *interpolation)
int MCGIDI_energyAngular_sampleDistribution(statusMessageReporting *smr, MCGIDI_distribution *distribution, MCGIDI_quantitiesLookupModes &modes, MCGIDI_decaySamplingInfo *decaySamplingInfo)
static int MCGIDI_energyAngular_linear_parseFromTOM(statusMessageReporting *smr, xDataTOM_element *element, MCGIDI_distribution *distribution)