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

Go to the source code of this file.

Macros

#define nParticleChanges   6
 

Functions

MCGIDI_reactionMCGIDI_reaction_new (statusMessageReporting *smr)
 
int MCGIDI_reaction_initialize (statusMessageReporting *smr, MCGIDI_reaction *reaction)
 
MCGIDI_reactionMCGIDI_reaction_free (statusMessageReporting *smr, MCGIDI_reaction *reaction)
 
int MCGIDI_reaction_release (statusMessageReporting *smr, MCGIDI_reaction *reaction)
 
int MCGIDI_reaction_parseFromTOM (statusMessageReporting *smr, xDataTOM_element *element, MCGIDI_target_heated *target, MCGIDI_POPs *pops, MCGIDI_reaction *reaction)
 
enum MCGIDI_reactionType MCGIDI_reaction_getReactionType (statusMessageReporting *, MCGIDI_reaction *reaction)
 
MCGIDI_target_heatedMCGIDI_reaction_getTargetHeated (statusMessageReporting *, MCGIDI_reaction *reaction)
 
double MCGIDI_reaction_getProjectileMass_MeV (statusMessageReporting *smr, MCGIDI_reaction *reaction)
 
double MCGIDI_reaction_getTargetMass_MeV (statusMessageReporting *smr, MCGIDI_reaction *reaction)
 
int MCGIDI_reaction_getDomain (statusMessageReporting *, MCGIDI_reaction *reaction, double *EMin, double *EMax)
 
int MCGIDI_reaction_fixDomains (statusMessageReporting *, MCGIDI_reaction *reaction, double EMin, double EMax, nfu_status *status)
 
double MCGIDI_reaction_getCrossSectionAtE (statusMessageReporting *smr, MCGIDI_reaction *reaction, MCGIDI_quantitiesLookupModes &modes, bool sampling)
 
double MCGIDI_reaction_getFinalQ (statusMessageReporting *, MCGIDI_reaction *reaction, MCGIDI_quantitiesLookupModes &)
 
int MCGIDI_reaction_getENDF_MTNumber (MCGIDI_reaction *reaction)
 
int MCGIDI_reaction_getENDL_CSNumbers (MCGIDI_reaction *reaction, int *S)
 
MCGIDI_productsInfoMCGIDI_reaction_getProductsInfo (MCGIDI_reaction *reaction)
 
int MCGIDI_reaction_recast (statusMessageReporting *smr, MCGIDI_reaction *reaction, GIDI_settings &, GIDI_settings_particle const *projectileSettings, double temperature_MeV, ptwXPoints *totalGroupedCrossSection)
 
int MCGIDI_productsInfo_getNumberOfUniqueProducts (MCGIDI_productsInfo *productsInfo)
 
int MCGIDI_productsInfo_getPoPsIndexAtIndex (MCGIDI_productsInfo *productsInfo, int index)
 
enum MCGIDI_productMultiplicityType MCGIDI_productsInfo_getMultiplicityTypeAtIndex (MCGIDI_productsInfo *productsInfo, int index)
 
int MCGIDI_productsInfo_getIntegerMultiplicityAtIndex (MCGIDI_productsInfo *productsInfo, int index)
 
int MCGIDI_productsInfo_getTransportableAtIndex (MCGIDI_productsInfo *productsInfo, int index)
 

Macro Definition Documentation

◆ nParticleChanges

#define nParticleChanges   6

Definition at line 18 of file MCGIDI_reaction.cc.

Function Documentation

◆ MCGIDI_productsInfo_getIntegerMultiplicityAtIndex()

int MCGIDI_productsInfo_getIntegerMultiplicityAtIndex ( MCGIDI_productsInfo productsInfo,
int  index 
)

Definition at line 550 of file MCGIDI_reaction.cc.

550 {
551
552 if( ( index < 0 ) || ( index >= productsInfo->numberOfProducts ) ) return( -1 );
553 return( productsInfo->productInfo[index].multiplicity );
554}
MCGIDI_productInfo * productInfo
Definition: MCGIDI.h:275

◆ MCGIDI_productsInfo_getMultiplicityTypeAtIndex()

enum MCGIDI_productMultiplicityType MCGIDI_productsInfo_getMultiplicityTypeAtIndex ( MCGIDI_productsInfo productsInfo,
int  index 
)

Definition at line 542 of file MCGIDI_reaction.cc.

542 {
543
544 if( ( index < 0 ) || ( index >= productsInfo->numberOfProducts ) ) return( MCGIDI_productMultiplicityType_invalid_e );
545 return( productsInfo->productInfo[index].productMultiplicityType );
546}
@ MCGIDI_productMultiplicityType_invalid_e
Definition: MCGIDI.h:205
enum MCGIDI_productMultiplicityType productMultiplicityType
Definition: MCGIDI.h:267

◆ MCGIDI_productsInfo_getNumberOfUniqueProducts()

int MCGIDI_productsInfo_getNumberOfUniqueProducts ( MCGIDI_productsInfo productsInfo)

Definition at line 527 of file MCGIDI_reaction.cc.

527 {
528
529 return( productsInfo->numberOfProducts );
530}

◆ MCGIDI_productsInfo_getPoPsIndexAtIndex()

int MCGIDI_productsInfo_getPoPsIndexAtIndex ( MCGIDI_productsInfo productsInfo,
int  index 
)

Definition at line 534 of file MCGIDI_reaction.cc.

534 {
535
536 if( ( index < 0 ) || ( index >= productsInfo->numberOfProducts ) ) return( -1 );
537 return( productsInfo->productInfo[index].globalPoPsIndex );
538}

◆ MCGIDI_productsInfo_getTransportableAtIndex()

int MCGIDI_productsInfo_getTransportableAtIndex ( MCGIDI_productsInfo productsInfo,
int  index 
)

Definition at line 558 of file MCGIDI_reaction.cc.

558 {
559
560 if( ( index < 0 ) || ( index >= productsInfo->numberOfProducts ) ) return( -1 );
561 return( productsInfo->productInfo[index].transportable );
562}

◆ MCGIDI_reaction_fixDomains()

int MCGIDI_reaction_fixDomains ( statusMessageReporting smr,
MCGIDI_reaction reaction,
double  EMin,
double  EMax,
nfu_status status 
)

Definition at line 366 of file MCGIDI_reaction.cc.

366 {
367
368 double lowerEps = 1e-14, upperEps = -1e-14;
369
370 if( reaction->EMin == EMin ) lowerEps = 0.;
371 if( reaction->EMax == EMax ) upperEps = 0.;
372 if( ( lowerEps == 0. ) && ( upperEps == 0. ) ) return( 0 );
373
374 *status = ptwXY_dullEdges( reaction->crossSection, lowerEps, upperEps, 1 );
375 return( *status != nfu_Okay );
376}
@ nfu_Okay
Definition: nf_utilities.h:25
nfu_status ptwXY_dullEdges(ptwXYPoints *ptwXY, double lowerEps, double upperEps, int positiveXOnly)
ptwXYPoints * crossSection
Definition: MCGIDI.h:426

Referenced by MCGIDI_target_heated_read().

◆ MCGIDI_reaction_free()

MCGIDI_reaction * MCGIDI_reaction_free ( statusMessageReporting smr,
MCGIDI_reaction reaction 
)

Definition at line 60 of file MCGIDI_reaction.cc.

60 {
61
62 MCGIDI_reaction_release( smr, reaction );
63 smr_freeMemory( (void **) &reaction );
64 return( NULL );
65}
int MCGIDI_reaction_release(statusMessageReporting *smr, MCGIDI_reaction *reaction)
void * smr_freeMemory(void **p)

Referenced by MCGIDI_reaction_new().

◆ MCGIDI_reaction_getCrossSectionAtE()

double MCGIDI_reaction_getCrossSectionAtE ( statusMessageReporting smr,
MCGIDI_reaction reaction,
MCGIDI_quantitiesLookupModes modes,
bool  sampling 
)

Definition at line 380 of file MCGIDI_reaction.cc.

381 {
382
383 double e_in = modes.getProjectileEnergy( ), xsec;
384
386 if( e_in < reaction->EMin ) e_in = reaction->EMin;
387 if( e_in > reaction->EMax ) e_in = reaction->EMax;
388 ptwXY_getValueAtX( reaction->crossSection, e_in, &xsec ); }
390 int index = modes.getGroupIndex( );
391 double *xSecP = ptwX_getPointAtIndex( reaction->crossSectionGrouped, index );
392
393 if( xSecP != NULL ) {
394 xsec = *xSecP;
395 if( sampling && ( index == reaction->thresholdGroupIndex ) ) xsec += reaction->thresholdGroupedDeltaCrossSection; }
396 else {
397 xsec = 0.;
398 smr_setReportError2( smr, smr_unknownID, 1, "Invalid cross section group index %d", index );
399 } }
400 else {
401 xsec = 0.;
402 }
403 return( xsec );
404}
@ MCGIDI_quantityLookupMode_pointwise
Definition: MCGIDI.h:78
@ MCGIDI_quantityLookupMode_grouped
Definition: MCGIDI.h:79
int getGroupIndex(void) const
Definition: MCGIDI.h:100
enum MCGIDI_quantityLookupMode getCrossSectionMode(void) const
Definition: MCGIDI.h:107
double getProjectileEnergy(void) const
Definition: MCGIDI.h:97
nfu_status ptwXY_getValueAtX(ptwXYPoints *ptwXY, double x, double *y)
Definition: ptwXY_core.cc:844
double * ptwX_getPointAtIndex(ptwXPoints *ptwX, int64_t index)
Definition: ptwX_core.cc:206
#define smr_setReportError2(smr, libraryID, code, fmt,...)
#define smr_unknownID
int thresholdGroupIndex
Definition: MCGIDI.h:422
double thresholdGroupedDeltaCrossSection
Definition: MCGIDI.h:424
ptwXPoints * crossSectionGrouped
Definition: MCGIDI.h:427

Referenced by MCGIDI_target_heated_getIndexReactionCrossSectionAtE().

◆ MCGIDI_reaction_getDomain()

int MCGIDI_reaction_getDomain ( statusMessageReporting smr,
MCGIDI_reaction reaction,
double *  EMin,
double *  EMax 
)

Definition at line 350 of file MCGIDI_reaction.cc.

350 {
351/*
352* Return value
353* < 0 No cross section data.
354* == 0 Okay and EMin and EMax set.
355* > 0 error, EMin and EMax undefined.
356*/
357
358 if( !reaction->domainValuesPresent ) return( -1 );
359 *EMin = reaction->EMin;
360 *EMax = reaction->EMax;
361 return( 0 );
362}
int domainValuesPresent
Definition: MCGIDI.h:421

Referenced by MCGIDI_outputChannel_getDomain(), and MCGIDI_target_heated_read().

◆ MCGIDI_reaction_getENDF_MTNumber()

int MCGIDI_reaction_getENDF_MTNumber ( MCGIDI_reaction reaction)

Definition at line 415 of file MCGIDI_reaction.cc.

415 {
416
417 return( reaction->ENDF_MT );
418}

Referenced by G4GIDI_target::init().

◆ MCGIDI_reaction_getENDL_CSNumbers()

int MCGIDI_reaction_getENDL_CSNumbers ( MCGIDI_reaction reaction,
int *  S 
)

Definition at line 422 of file MCGIDI_reaction.cc.

422 {
423
424 if( S != NULL ) *S = reaction->ENDL_S;
425 return( reaction->ENDL_C );
426}
double S(double temp)

◆ MCGIDI_reaction_getFinalQ()

double MCGIDI_reaction_getFinalQ ( statusMessageReporting smr,
MCGIDI_reaction reaction,
MCGIDI_quantitiesLookupModes modes 
)

Definition at line 408 of file MCGIDI_reaction.cc.

408 {
409
410 return( reaction->finalQ );
411}
double finalQ
Definition: MCGIDI.h:425

Referenced by MCGIDI_target_heated_getIndexReactionFinalQ().

◆ MCGIDI_reaction_getProductsInfo()

MCGIDI_productsInfo * MCGIDI_reaction_getProductsInfo ( MCGIDI_reaction reaction)

Definition at line 489 of file MCGIDI_reaction.cc.

489 {
490
491 return( &(reaction->productsInfo) );
492}
MCGIDI_productsInfo productsInfo
Definition: MCGIDI.h:429

◆ MCGIDI_reaction_getProjectileMass_MeV()

double MCGIDI_reaction_getProjectileMass_MeV ( statusMessageReporting smr,
MCGIDI_reaction reaction 
)

Definition at line 336 of file MCGIDI_reaction.cc.

336 {
337
338 return( MCGIDI_target_heated_getProjectileMass_MeV( smr, reaction->target ) );
339}
double MCGIDI_target_heated_getProjectileMass_MeV(statusMessageReporting *smr, MCGIDI_target_heated *target)
MCGIDI_target_heated * target
Definition: MCGIDI.h:416

Referenced by MCGIDI_outputChannel_getProjectileMass_MeV(), MCGIDI_outputChannel_parseFromTOM(), and MCGIDI_outputChannel_sampleProductsAtE().

◆ MCGIDI_reaction_getReactionType()

enum MCGIDI_reactionType MCGIDI_reaction_getReactionType ( statusMessageReporting smr,
MCGIDI_reaction reaction 
)

Definition at line 322 of file MCGIDI_reaction.cc.

322 {
323
324 return( reaction->reactionType );
325}
enum MCGIDI_reactionType reactionType
Definition: MCGIDI.h:418

Referenced by MCGIDI_target_getReactionTypeAtIndex().

◆ MCGIDI_reaction_getTargetHeated()

MCGIDI_target_heated * MCGIDI_reaction_getTargetHeated ( statusMessageReporting smr,
MCGIDI_reaction reaction 
)

Definition at line 329 of file MCGIDI_reaction.cc.

329 {
330
331 return( reaction->target );
332}

Referenced by MCGIDI_outputChannel_getTargetHeated().

◆ MCGIDI_reaction_getTargetMass_MeV()

double MCGIDI_reaction_getTargetMass_MeV ( statusMessageReporting smr,
MCGIDI_reaction reaction 
)

Definition at line 343 of file MCGIDI_reaction.cc.

343 {
344
345 return( MCGIDI_target_heated_getTargetMass_MeV( smr, reaction->target ) );
346}
double MCGIDI_target_heated_getTargetMass_MeV(statusMessageReporting *smr, MCGIDI_target_heated *target)

Referenced by MCGIDI_outputChannel_getTargetMass_MeV(), MCGIDI_outputChannel_parseFromTOM(), and MCGIDI_outputChannel_sampleProductsAtE().

◆ MCGIDI_reaction_initialize()

int MCGIDI_reaction_initialize ( statusMessageReporting smr,
MCGIDI_reaction reaction 
)

Definition at line 42 of file MCGIDI_reaction.cc.

42 {
43
44 if( MCGIDI_reaction_initialize2( smr, reaction ) != 0 ) return( 1 );
46 return( 0 );
47}
std::map< int, enum GIDI::MCGIDI_transportability > transportabilitiesMap
Definition: MCGIDI.h:171
transportabilitiesMap * transportabilities
Definition: MCGIDI.h:430

Referenced by MCGIDI_reaction_new(), and MCGIDI_reaction_parseFromTOM().

◆ MCGIDI_reaction_new()

MCGIDI_reaction * MCGIDI_reaction_new ( statusMessageReporting smr)

Definition at line 31 of file MCGIDI_reaction.cc.

31 {
32
33 MCGIDI_reaction *reaction;
34
35 if( ( reaction = (MCGIDI_reaction *) smr_malloc2( smr, sizeof( MCGIDI_reaction ), 0, "reaction" ) ) == NULL ) return( NULL );
36 if( MCGIDI_reaction_initialize( smr, reaction ) ) reaction = MCGIDI_reaction_free( smr, reaction );
37 return( reaction );
38}
int MCGIDI_reaction_initialize(statusMessageReporting *smr, MCGIDI_reaction *reaction)
MCGIDI_reaction * MCGIDI_reaction_free(statusMessageReporting *smr, MCGIDI_reaction *reaction)
#define smr_malloc2(smr, size, zero, forItem)

◆ MCGIDI_reaction_parseFromTOM()

int MCGIDI_reaction_parseFromTOM ( statusMessageReporting smr,
xDataTOM_element element,
MCGIDI_target_heated target,
MCGIDI_POPs pops,
MCGIDI_reaction reaction 
)

Definition at line 84 of file MCGIDI_reaction.cc.

85 {
86
87 xDataTOM_element *child, *linear, *outputChannel;
88 enum xDataTOM_interpolationFlag independent, dependent;
90 char const *outputChannelStr, *crossSectionUnits[2] = { "MeV", "b" };
91
92 MCGIDI_reaction_initialize( smr, reaction );
93
94 reaction->target = target;
96 if( xDataTOME_copyAttributionList( smr, &(reaction->attributes), element ) ) goto err;
97 if( xDataTOME_convertAttributeToInteger( smr, element, "ENDF_MT", &(reaction->ENDF_MT) ) ) goto err;
98 if( ( outputChannelStr = xDataTOM_getAttributesValueInElement( element, "outputChannel" ) ) == NULL ) goto err;
99 if( ( reaction->outputChannelStr = smr_allocateCopyString2( smr, outputChannelStr, "reaction->outputChannelStr" ) ) == NULL ) goto err;
100
101 if( ( child = xDataTOME_getOneElementByName( smr, element, "crossSection", 1 ) ) == NULL ) goto err;
102 if( ( linear = xDataTOME_getOneElementByName( smr, child, "linear", 0 ) ) == NULL ) {
103 if( ( linear = xDataTOME_getOneElementByName( smr, child, "pointwise", 1 ) ) == NULL ) goto err;
104 }
105 if( xDataTOME_getInterpolation( smr, linear, 0, &independent, &dependent, &qualifier ) ) goto err;
106 if( ( independent != xDataTOM_interpolationFlag_linear ) || ( dependent != xDataTOM_interpolationFlag_linear ) ) {
107 smr_setReportError2( smr, smr_unknownID, 1, "cross section interpolation (%d,%d) is not linear-linear", independent, dependent );
108 goto err;
109 }
110 if( ( reaction->crossSection = MCGIDI_misc_dataFromElement2ptwXYPointsInUnitsOf( smr, linear, crossSectionUnits ) ) == NULL ) goto err;
111 reaction->domainValuesPresent = 1;
112 reaction->EMin = ptwXY_getXMin( reaction->crossSection );
113 reaction->EMax = ptwXY_getXMax( reaction->crossSection );
114
115 if( ( outputChannel = xDataTOME_getOneElementByName( smr, element, "outputChannel", 1 ) ) == NULL ) goto err;
116 if( MCGIDI_outputChannel_parseFromTOM( smr, outputChannel, pops, &(reaction->outputChannel), reaction, NULL ) ) goto err;
117
118 if( MCGIDI_reaction_ParseReactionTypeAndDetermineProducts( smr, pops, reaction ) != 0 ) goto err;
119
120 return( 0 );
121
122err:
123 MCGIDI_reaction_release( smr, reaction );
124 return( 1 );
125}
@ MCGIDI_reactionType_unknown_e
Definition: MCGIDI.h:187
int MCGIDI_outputChannel_parseFromTOM(statusMessageReporting *smr, xDataTOM_element *element, MCGIDI_POPs *pops, MCGIDI_outputChannel *outputChannel, MCGIDI_reaction *reaction, MCGIDI_product *parent)
ptwXYPoints * MCGIDI_misc_dataFromElement2ptwXYPointsInUnitsOf(statusMessageReporting *smr, xDataTOM_element *linear, char const *toUnits[2])
Definition: MCGIDI_misc.cc:424
double ptwXY_getXMin(ptwXYPoints *ptwXY)
Definition: ptwXY_core.cc:1206
double ptwXY_getXMax(ptwXYPoints *ptwXY)
Definition: ptwXY_core.cc:1239
#define smr_allocateCopyString2(smr, s, forItem)
xDataTOM_attributionList attributes
Definition: MCGIDI.h:420
char const * outputChannelStr
Definition: MCGIDI.h:419
MCGIDI_outputChannel outputChannel
Definition: MCGIDI.h:428
xDataTOM_element * xDataTOME_getOneElementByName(statusMessageReporting *smr, xDataTOM_element *element, char const *name, int required)
Definition: xDataTOM.cc:246
int xDataTOME_copyAttributionList(statusMessageReporting *smr, xDataTOM_attributionList *desc, xDataTOM_element *element)
Definition: xDataTOM.cc:293
xDataTOM_interpolationFlag
Definition: xDataTOM.h:19
@ xDataTOM_interpolationFlag_linear
Definition: xDataTOM.h:19
int xDataTOME_getInterpolation(statusMessageReporting *smr, xDataTOM_element *element, int index, enum xDataTOM_interpolationFlag *independent, enum xDataTOM_interpolationFlag *dependent, enum xDataTOM_interpolationQualifier *qualifier)
Definition: xDataTOM.cc:314
char const * xDataTOM_getAttributesValueInElement(xDataTOM_element *element, char const *name)
Definition: xDataTOM.cc:286
int xDataTOME_convertAttributeToInteger(statusMessageReporting *smr, xDataTOM_element *element, char const *name, int *n)
Definition: xDataTOM.cc:300
xDataTOM_interpolationQualifier
Definition: xDataTOM.h:21

◆ MCGIDI_reaction_recast()

int MCGIDI_reaction_recast ( statusMessageReporting smr,
MCGIDI_reaction reaction,
GIDI_settings settings,
GIDI_settings_particle const *  projectileSettings,
double  temperature_MeV,
ptwXPoints totalGroupedCrossSection 
)

Definition at line 496 of file MCGIDI_reaction.cc.

497 {
498
499 if( totalGroupedCrossSection != NULL ) {
500 nfu_status status_nf;
501 GIDI_settings_group group( projectileSettings->getGroup( ) );
502
503 if( reaction->crossSectionGrouped != NULL ) reaction->crossSectionGrouped = ptwX_free( reaction->crossSectionGrouped );
504 if( ( reaction->crossSectionGrouped = projectileSettings->groupFunction( smr, reaction->crossSection, temperature_MeV, 0 ) ) == NULL ) return( 1 );
505 if( ( status_nf = ptwX_add_ptwX( totalGroupedCrossSection, reaction->crossSectionGrouped ) ) != nfu_Okay ) return( 1 );
506
508 reaction->thresholdGroupIndex = group.getGroupIndexFromEnergy( reaction->EMin, false );
509 if( reaction->thresholdGroupIndex > -1 ) {
510 reaction->thresholdGroupDomain = group[reaction->thresholdGroupIndex+1] - reaction->EMin;
511 if( reaction->thresholdGroupDomain > 0 ) {
512 /* factor 2 for linear reject in bin but above threshold. */
514 ( 2 * ( group[reaction->thresholdGroupIndex+1] - group[reaction->thresholdGroupIndex] ) / reaction->thresholdGroupDomain - 1 );
515 }
516 }
517 }
518 return( 0 );
519}
enum nfu_status_e nfu_status
nfu_status ptwX_add_ptwX(ptwXPoints *ptwX1, ptwXPoints *ptwX2)
Definition: ptwX_core.cc:479
ptwXPoints * ptwX_free(ptwXPoints *ptwX)
Definition: ptwX_core.cc:158
double thresholdGroupDomain
Definition: MCGIDI.h:423

Referenced by MCGIDI_target_heated_recast().

◆ MCGIDI_reaction_release()

int MCGIDI_reaction_release ( statusMessageReporting smr,
MCGIDI_reaction reaction 
)

Definition at line 69 of file MCGIDI_reaction.cc.

69 {
70
71 ptwXY_free( reaction->crossSection );
72 ptwX_free( reaction->crossSectionGrouped );
74 xDataTOMAL_release( &(reaction->attributes) );
75 smr_freeMemory( (void **) &(reaction->outputChannelStr) );
76 if( reaction->productsInfo.productInfo != NULL ) smr_freeMemory( (void **) &(reaction->productsInfo.productInfo) );
77 delete reaction->transportabilities;
78 MCGIDI_reaction_initialize2( smr, reaction );
79 return( 0 );
80}
int MCGIDI_outputChannel_release(statusMessageReporting *smr, MCGIDI_outputChannel *outputChannel)
ptwXYPoints * ptwXY_free(ptwXYPoints *ptwXY)
Definition: ptwXY_core.cc:574
void xDataTOMAL_release(xDataTOM_attributionList *attributes)
Definition: xDataTOM.cc:361

Referenced by MCGIDI_reaction_free(), MCGIDI_reaction_parseFromTOM(), and MCGIDI_target_heated_release().