53 init( fileName.c_str( ) );
60 int i, j,
n, *p, *q, ir;
61 MCGIDI_reaction *reaction;
64 sourceFilename = fileName;
70 projectilesPOPID = target->projectilePOP->globalPoPsIndex;
71 name = target->targetPOP->name;
73 equalProbableBinSampleMethod =
"constant";
74 elasticIndices = NULL;
75 nElasticIndices = nCaptureIndices = nFissionIndices = nOthersIndices = 0;
78 if( ( p = elasticIndices = (
int *) smr_malloc2( &smr, n *
sizeof(
double ), 1,
"elasticIndices" ) ) == NULL ) {
82 for( i = 0; i <
n; i++ ) {
90 for( i = 0; i <
n; i++ ) {
99 for( i = 0; i <
n; i++ ) {
102 if( ( ir != 18 ) && ( ir != 19 ) && ( ir != 20 ) && ( ir != 21 ) && ( ir != 38 ) )
continue;
107 for( i = 0; i <
n; i++ ) {
108 for( j = 0, q = elasticIndices; j < nElasticIndices; j++, q++ )
if( *q == i )
break;
109 if( j < nElasticIndices )
continue;
110 for( j = 0, q = captureIndices; j < nCaptureIndices; j++, q++ )
if( *q == i )
break;
111 if( j < nCaptureIndices )
continue;
112 for( j = 0, q = fissionIndices; j < nFissionIndices; j++, q++ )
if( *q == i )
break;
113 if( j < nFissionIndices )
continue;
119 printf(
"elastic %d: ", nElasticIndices );
120 for( i = 0; i < nElasticIndices; i++ ) printf(
" %d", elasticIndices[i] );
121 printf(
"\ncapture %d: ", nCaptureIndices );
122 for( i = 0; i < nCaptureIndices; i++ ) printf(
" %d", captureIndices[i] );
123 printf(
"\nfission %d: ", nFissionIndices );
124 for( i = 0; i < nFissionIndices; i++ ) printf(
" %d", fissionIndices[i] );
125 printf(
"\nothers %d: ", nOthersIndices );
126 for( i = 0; i < nOthersIndices; i++ ) printf(
" %d", othersIndices[i] );
153 return( target->targetPOP->Z );
160 return( target->targetPOP->A );
167 return( target->targetPOP->m );
195 return( equalProbableBinSampleMethod );
202 if( method ==
"constant" ) {
203 equalProbableBinSampleMethod =
"constant"; }
204 if( method ==
"linear" ) {
205 equalProbableBinSampleMethod =
"linear"; }
230 MCGIDI_reaction *reaction;
236 return(
string( reaction->outputChannelStr ) );
244 MCGIDI_reaction *reaction;
245 vector<channelID> *listOfChannels;
247 listOfChannels =
new vector<channelID>(
n );
248 for( i = 0; i <
n; i++ ) {
250 (*listOfChannels)[i] = reaction->outputChannelStr;
252 return( listOfChannels );
266 MCGIDI_quantitiesLookupModes mode( projectilesPOPID );
268 mode.setProjectileEnergy( e_in );
269 mode.setCrossSectionMode( MCGIDI_quantityLookupMode_pointwise );
270 mode.setTemperature( temperature );
279 return( sumChannelCrossSectionAtE( nElasticIndices, elasticIndices, e_in, temperature ) );
286 return( sumChannelCrossSectionAtE( nCaptureIndices, captureIndices, e_in, temperature ) );
293 return( sumChannelCrossSectionAtE( nFissionIndices, fissionIndices, e_in, temperature ) );
300 return( sumChannelCrossSectionAtE( nOthersIndices, othersIndices, e_in, temperature ) );
309 MCGIDI_quantitiesLookupModes mode( projectilesPOPID );
311 mode.setProjectileEnergy( e_in );
312 mode.setCrossSectionMode( MCGIDI_quantityLookupMode_pointwise );
313 mode.setTemperature( temperature );
315 for( i = 0; i < nIndices; i++ )
323 double (*rng)(
void * ),
void *rngState ) {
326 double xsec = 0., rxsec = sumChannelCrossSectionAtE( nIndices, indices, e_in, temperature ) * rng( rngState );
327 MCGIDI_quantitiesLookupModes mode( projectilesPOPID );
329 mode.setProjectileEnergy( e_in );
330 mode.setCrossSectionMode( MCGIDI_quantityLookupMode_pointwise );
331 mode.setTemperature( temperature );
333 for( i = 0; i < nIndices - 1; i++ ) {
335 if( xsec >= rxsec )
break;
337 return( indices[i] );
344 MCGIDI_decaySamplingInfo decaySamplingInfo;
346 MCGIDI_product *product;
347 MCGIDI_quantitiesLookupModes mode( projectilesPOPID );
354 mode.setProjectileEnergy( e_in );
355 mode.setCrossSectionMode( MCGIDI_quantityLookupMode_pointwise );
356 mode.setTemperature( temperature );
358 decaySamplingInfo.isVelocity = 0;
359 decaySamplingInfo.rng = rng;
360 decaySamplingInfo.rngState = rngState;
366 return( decaySamplingInfo.mu );
373 return( getFinalState( nCaptureIndices, captureIndices, e_in, temperature, rng, rngState ) );
380 return( getFinalState( nFissionIndices, fissionIndices, e_in, temperature, rng, rngState ) );
387 return( getFinalState( nOthersIndices, othersIndices, e_in, temperature, rng, rngState ) );
393 double (*rng)(
void * ),
void *rngState ) {
396 vector<G4GIDI_Product> *products = NULL;
397 MCGIDI_decaySamplingInfo decaySamplingInfo;
398 MCGIDI_sampledProductsDatas sampledProductsDatas;
399 MCGIDI_sampledProductsData *productData;
400 MCGIDI_quantitiesLookupModes mode( projectilesPOPID );
402 decaySamplingInfo.isVelocity = 0;
403 decaySamplingInfo.rng = rng;
404 decaySamplingInfo.rngState = rngState;
406 if( nIndices == 0 ) {
409 if( nIndices == 1 ) {
410 index = indices[0]; }
412 index = sampleChannelCrossSectionAtE( nIndices, indices, e_in, temperature, rng, rngState );
422 mode.setProjectileEnergy( e_in );
423 mode.setCrossSectionMode( MCGIDI_quantityLookupMode_pointwise );
424 mode.setTemperature( temperature );
427 &decaySamplingInfo, &sampledProductsDatas );
433 if( ( products =
new vector<G4GIDI_Product>( n ) ) != NULL ) {
434 for( i = 0; i <
n; i++ ) {
435 productData = &(sampledProductsDatas.products[i]);
436 (*products)[i].A = productData->pop->A;
437 (*products)[i].Z = productData->pop->Z;
438 (*products)[i].m = productData->pop->m;
439 (*products)[i].kineticEnergy = productData->kineticEnergy;
440 (*products)[i].px = productData->px_vx;
441 (*products)[i].py = productData->py_vy;
442 (*products)[i].pz = productData->pz_vz;
443 (*products)[i].birthTimeSec = productData->birthTimeSec;
int MCGIDI_target_numberOfReactions(statusMessageReporting *smr, MCGIDI_target *target)
double getFissionCrossSectionAtE(double e_in, double temperature)
std::string * getFilename(void)
void smr_print(statusMessageReporting *smr, int clear)
MCGIDI_target * MCGIDI_target_newRead(statusMessageReporting *smr, const char *fileName)
G4GIDI_target(const char *fileName)
double getOthersCrossSectionAtE(double e_in, double temperature)
void init(const char *fileName)
double sumChannelCrossSectionAtE(int nIndices, int *indices, double e_in, double temperature)
int sampleChannelCrossSectionAtE(int nIndices, int *indices, double e_in, double temperature, double(*rng)(void *), void *rngState)
double getReactionsDomain(int index, double *EMin, double *EMax)
int MCGIDI_sampledProducts_initialize(statusMessageReporting *smr, MCGIDI_sampledProductsDatas *sampledProductsDatas, int incrementSize)
int MCGIDI_target_heated_sampleIndexReactionProductsAtE(statusMessageReporting *smr, MCGIDI_target_heated *target, int index, MCGIDI_quantitiesLookupModes &modes, MCGIDI_decaySamplingInfo *decaySamplingInfo, MCGIDI_sampledProductsDatas *productDatas)
double G4GIDI_targetMass(const char *targetSymbol)
double MCGIDI_target_getTotalCrossSectionAtTAndE(statusMessageReporting *smr, MCGIDI_target *target, MCGIDI_quantitiesLookupModes &modes, bool sampling)
std::vector< G4GIDI_Product > * getOthersFinalState(double e_in, double temperature, double(*rng)(void *), void *rngState)
channelID getChannelsID(int channelIndex)
int smr_initialize(statusMessageReporting *smr, enum smr_status verbosity, int append)
double getElasticCrossSectionAtE(double e_in, double temperature)
int getTemperatures(double *temperatures)
void smr_release(statusMessageReporting *smr)
double getTotalCrossSectionAtE(double e_in, double temperature)
double MCGIDI_target_getIndexReactionCrossSectionAtE(statusMessageReporting *smr, MCGIDI_target *target, int index, MCGIDI_quantitiesLookupModes &modes, bool sampling)
std::vector< G4GIDI_Product > * getFissionFinalState(double e_in, double temperature, double(*rng)(void *), void *rngState)
double MCGIDI_target_heated_getReactionsThreshold(statusMessageReporting *, MCGIDI_target_heated *target, int index)
double getCaptureCrossSectionAtE(double e_in, double temperature)
int MCGIDI_target_heated_getReactionsDomain(statusMessageReporting *, MCGIDI_target_heated *target, int index, double *EMin, double *EMax)
double getElasticFinalState(double e_in, double temperature, double(*rng)(void *), void *rngState)
int smr_isOk(statusMessageReporting *smr)
void * smr_freeMemory(void **p)
MCGIDI_product * MCGIDI_outputChannel_getProductAtIndex(statusMessageReporting *smr, MCGIDI_outputChannel *outputChannel, int i)
std::vector< G4GIDI_Product > * getFinalState(int nIndices, int *indices, double e_in, double temperature, double(*rng)(void *), void *rngState)
std::string * getName(void)
std::vector< G4GIDI_Product > * getCaptureFinalState(double e_in, double temperature, double(*rng)(void *), void *rngState)
int MCGIDI_product_sampleMu(statusMessageReporting *smr, MCGIDI_product *product, MCGIDI_quantitiesLookupModes &modes, MCGIDI_decaySamplingInfo *decaySamplingInfo)
int getNumberOfProductionChannels(void)
std::vector< channelID > * getProductionChannelIDs(void)
int setEqualProbableBinSampleMethod(std::string method)
MCGIDI_reaction * MCGIDI_target_heated_getReactionAtIndex_smr(statusMessageReporting *smr, MCGIDI_target_heated *target, int index)
double getReactionsThreshold(int index)
MCGIDI_target * MCGIDI_target_free(statusMessageReporting *smr, MCGIDI_target *target)
int MCGIDI_target_getTemperatures(statusMessageReporting *, MCGIDI_target *target, double *temperatures)
int getNumberOfChannels(void)
int readTemperature(int index)
int MCGIDI_target_readHeatedTarget(statusMessageReporting *smr, MCGIDI_target *target, int index)
int MCGIDI_reaction_getENDF_MTNumber(MCGIDI_reaction *reaction)
std::vector< channelID > * getChannelIDs(void)
MCGIDI_reaction * MCGIDI_target_heated_getReactionAtIndex(MCGIDI_target_heated *target, int index)
std::string getEqualProbableBinSampleMethod(void)
int MCGIDI_sampledProducts_release(statusMessageReporting *, MCGIDI_sampledProductsDatas *sampledProductsDatas)
int MCGIDI_target_numberOfProductionReactions(statusMessageReporting *, MCGIDI_target *)