Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/processes/hadronic/models/lend/src/MCGIDI_misc.cc

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

Diff markup

Differences between /processes/hadronic/models/lend/src/MCGIDI_misc.cc (Version 11.3.0) and /processes/hadronic/models/lend/src/MCGIDI_misc.cc (Version 6.0.p1)


  1 /*                                                  1 
  2 # <<BEGIN-copyright>>                             
  3 # <<END-copyright>>                               
  4 */                                                
  5 #include <stdio.h>                                
  6 #include <stdlib.h>                               
  7 #include <string.h>                               
  8 #include <cmath>                                  
  9 #include <ctype.h>                                
 10                                                   
 11 #ifdef WIN32                                      
 12 #include <direct.h>                               
 13 #else                                             
 14 #include <unistd.h>                               
 15 #endif                                            
 16                                                   
 17 #include <ptwXY.h>                                
 18 #include <xDataTOM_importXML_private.h>           
 19                                                   
 20 #include "MCGIDI.h"                               
 21 #include "MCGIDI_misc.h"                          
 22 #include "MCGIDI_fromTOM.h"                       
 23                                                   
 24 #if defined __cplusplus                           
 25 namespace GIDI {                                  
 26 using namespace GIDI;                             
 27 #endif                                            
 28                                                   
 29 struct ZSymbol {                                  
 30     int Z;                                        
 31     char const *symbol;                           
 32 };                                                
 33                                                   
 34 static struct ZSymbol ZSymbols[] = {    {   0,    
 35         {   7, "N"  },  {   8, "O"  },  {   9,    
 36         {  16, "S"  },  {  17, "Cl" },  {  18,    
 37         {  25, "Mn" },  {  26, "Fe" },  {  27,    
 38         {  34, "Se" },  {  35, "Br" },  {  36,    
 39         {  43, "Tc" },  {  44, "Ru" },  {  45,    
 40         {  52, "Te" },  {  53, "I"  },  {  54,    
 41         {  61, "Pm" },  {  62, "Sm" },  {  63,    
 42         {  70, "Yb" },  {  71, "Lu" },  {  72,    
 43         {  79, "Au" },  {  80, "Hg" },  {  81,    
 44         {  88, "Ra" },  {  89, "Ac" },  {  90,    
 45         {  97, "Bk" },  {  98, "Cf" },  {  99,    
 46         { 106, "Sg" }, { 107, "Bh" },  { 108,     
 47                                                   
 48 static int MCGIDI_miscNameToZAm_getLevel( stat    
 49 static ptwXYPoints *MCGIDI_misc_Data2ptwXYPoin    
 50     int length, double *data, char const *from    
 51 /*                                                
 52 **********************************************    
 53 */                                                
 54 int MCGIDI_misc_NumberOfZSymbols( void ) {        
 55                                                   
 56     return( sizeof( ZSymbols ) / sizeof( struc    
 57 }                                                 
 58 /*                                                
 59 **********************************************    
 60 */                                                
 61 const char *MCGIDI_misc_ZToSymbol( int iZ ) {     
 62                                                   
 63     if( ( iZ < 0 ) || ( iZ >= MCGIDI_misc_Numb    
 64     return( ZSymbols[iZ].symbol );                
 65 }                                                 
 66 /*                                                
 67 **********************************************    
 68 */                                                
 69 int MCGIDI_misc_symbolToZ( const char *Z ) {      
 70                                                   
 71     int i, n = MCGIDI_misc_NumberOfZSymbols( )    
 72                                                   
 73     for( i = 0; i < n; i++ ) {                    
 74         if( strcmp( Z, ZSymbols[i].symbol ) ==    
 75     }                                             
 76     return( -1 );                                 
 77 }                                                 
 78 /*                                                
 79 **********************************************    
 80 */                                                
 81 int MCGIDI_miscNameToZAm( statusMessageReporti    
 82                                                   
 83     const char *p;                                
 84     char s[1024] = "", *q, *e;   /* Note 1) ro    
 85                                                   
 86     if( strlen( name ) >= ( sizeof( s ) - 1 )     
 87         smr_setReportError2( smr, smr_unknownI    
 88         return( 1 );                              
 89     }                                             
 90                                                   
 91     *Z = *A = *m = *level = 0;                    
 92     if( ( !strncmp( "FissionProduct", name, 14    
 93         *Z = 99;                                  
 94         *A = 120;                                 
 95         return( 0 );                              
 96     }                                             
 97     if( strcmp( "gamma", name ) == 0 ) return(    
 98     if( strcmp( "n", name ) == 0 ) { *A = 1; r    
 99                                                   
100     for( p = name, q = s; ( *p != 0 ) && !isdi    
101     if( *p == 0 ) {                               
102         smr_setReportError2( smr, smr_unknownI    
103         return( 1 );                              
104     }                                             
105     *q = 0;                                       
106     if( ( *Z = MCGIDI_misc_symbolToZ( s ) ) <     
107         smr_setReportError2( smr, smr_unknownI    
108     else {                  /* Getting here im    
109         if( *p == '_' ) {                         
110             if( strncmp( p, "_natural", 8 ) ==    
111                 p += 8;                           
112                 if( *p ) *level = MCGIDI_miscN    
113             else {                                
114                 smr_setReportError2( smr, smr_    
115             } }                                   
116         else {                                    
117             for( q = s; isdigit( *p ); p++, q+    
118             *q = 0;                               
119             if( strcmp( s, "natural" ) == 0 )     
120                 e = s;                            
121                 while( *e ) e++; /* Loop check    
122             else {                                
123                 *A = (int) strtol( s, &e, 10 )    
124             }                                     
125             if( *e != 0 ) {                       
126                 smr_setReportError2( smr, smr_    
127             else {          /* Getting here im    
128                 if( *p ) *level = MCGIDI_miscN    
129             }                                     
130         }                                         
131     }                                             
132                                                   
133     return( !smr_isOk( smr ) );                   
134 }                                                 
135 /*                                                
136 **********************************************    
137 */                                                
138 static int MCGIDI_miscNameToZAm_getLevel( stat    
139                                                   
140     int level = 0;                                
141     char *e;                                      
142                                                   
143     if( *p == '_' ) {                             
144         p++;                                      
145         switch( *p ) {                            
146         case 'e' :                                
147             p++;                                  
148             level = (int) strtol( p, &e, 10 );    
149             if( *e != 0 ) smr_setReportError2(    
150             break;                                
151         case 'c' :                                
152             level = MCGIDI_particleLevel_conti    
153             break;                                
154         case 's' :                                
155             level = MCGIDI_particleLevel_sum;     
156             break;                                
157         default :                                 
158             smr_setReportError2( smr, smr_unkn    
159         } }                                       
160     else {                                        
161         smr_setReportError2( smr, smr_unknownI    
162     }                                             
163     return( level );                              
164 }                                                 
165 /*                                                
166 **********************************************    
167 */                                                
168 char const *MCGIDI_misc_pointerToTOMAttributeI    
169         xDataTOM_attributionList *attributes,     
170                                                   
171     char const *value;                            
172                                                   
173     if( !smr_isOk( smr ) ) return( NULL );        
174     if( ( value = xDataTOMAL_getAttributesValu    
175         if( required ) {                          
176             smr_setReportError( smr, NULL, fil    
177         }                                         
178     }                                             
179     return( value );                              
180 }                                                 
181 /*                                                
182 **********************************************    
183 */                                                
184 char const *MCGIDI_misc_pointerToAttributeIfAl    
185         xDataTOM_attributionList *attributes,     
186                                                   
187     char const *value;                            
188                                                   
189     if( !smr_isOk( smr ) ) return( NULL );        
190     if( ( value = xDataTOMAL_getAttributesValu    
191         if( required ) {                          
192             if( element != NULL ) {               
193                 MCGIDI_misc_setMessageError_El    
194             else {                                
195                 smr_setReportError( smr, NULL,    
196             }                                     
197         }                                         
198     }                                             
199     return( value );                              
200 }                                                 
201 /*                                                
202 **********************************************    
203 */                                                
204 int MCGIDI_misc_setMessageError_Element( statu    
205     const char *fmt, ... ) {                      
206                                                   
207     int status = 0;                               
208     va_list args;                                 
209     char *msg;                                    
210                                                   
211     va_start( args, fmt );                        
212     msg = smr_vallocateFormatMessage( fmt, &ar    
213     va_end( args );                               
214     if( msg == NULL ) {                           
215         status = 1;                               
216         va_start( args, fmt );                    
217         smr_vsetReportError( smr, userInterfac    
218         va_end( args ); }                         
219     else {                                        
220         status = smr_setReportError( smr, user    
221         smr_freeMemory( (void **) &msg );         
222     }                                             
223     return( status );                             
224 }                                                 
225 /*                                                
226 **********************************************    
227 */                                                
228 xDataTOM_Int MCGIDI_misc_binarySearch( xDataTO    
229 /*                                                
230 *   Returns -2 is d < first point of ds, -1 if    
231 */                                                
232     xDataTOM_Int imin = 0, imid, imax = n - 1;    
233                                                   
234     if( d < ds[0] ) return( -2 );                 
235     if( d > ds[n-1] ) return( -1 );               
236     while( 1 ) { // Loop checking, 11.06.2015,    
237         imid = ( imin + imax ) >> 1;              
238         if( imid == imin ) break;                 
239         if( d < ds[imid] ) {                      
240             imax = imid; }                        
241         else {                                    
242             imin = imid;                          
243         }                                         
244     }                                             
245     return( imin );                               
246 }                                                 
247 /*                                                
248 **********************************************    
249 */                                                
250 char *MCGIDI_misc_getAbsPath( statusMessageRep    
251 /*                                                
252 *   User must free returned string.               
253 */                                                
254     int n = (int) strlen( fileName ) + 1, nCwd    
255     char *absPath, cwd[4 * 1024] = "", *p, *ne    
256                                                   
257     if( fileName[0] != '/' ) {                    
258         //if( getcwd( cwd, sizeof( cwd ) + 1 )    
259         //TK modified above line for compiler(    
260         if( getcwd( cwd, sizeof( cwd ) ) == NU    
261             smr_setReportError2p( smr, smr_unk    
262             return( NULL );                       
263         }                                         
264         nCwd = (int) strlen( cwd );               
265         n += nCwd + 1;                            
266     }                                             
267     if( ( absPath = (char *) smr_malloc2( smr,    
268     if( fileName[0] != '/' ) {                    
269         strcpy( absPath, cwd );                   
270         strcat( absPath, "/" );                   
271         strcat( absPath, fileName ); }            
272     else {                                        
273         strcpy( absPath, fileName );              
274     }                                             
275                                                   
276     while( 1 ) {                                  
277         if( ( needle = strstr( absPath, "/./"     
278         p = needle;                               
279         for( needle += 2; *needle; p++, needle    
280         *p = 0;                                   
281     }                                             
282     while( 1 ) {                                  
283         if( ( needle = strstr( absPath, "/../"    
284         p = needle - 1;                           
285         while( ( p > absPath ) && ( *p != '/'     
286         if( *p != '/' ) break;                    
287         if( p == absPath ) break;                 
288         for( needle += 3; *needle; p++, needle    
289         *p = 0;                                   
290     }                                             
291     return( absPath );                            
292 }                                                 
293 /*                                                
294 **********************************************    
295 */                                                
296 int MCGIDI_misc_copyXMLAttributesToTOM( status    
297                                                   
298     int i;                                        
299     xDataXML_attribute *attribute;                
300                                                   
301     xDataTOMAL_initial( smr, TOM );               
302     for( i = 0; ; i++ ) {                         
303         if( ( attribute = xDataXML_attributeBy    
304         if( xDataTOMAL_addAttribute( smr, TOM,    
305     }                                             
306     return( 0 );                                  
307                                                   
308 err:                                              
309     xDataTOMAL_release( TOM );                    
310     return( 1 );                                  
311 }                                                 
312 /*                                                
313 **********************************************    
314 */                                                
315 enum xDataTOM_frame MCGIDI_misc_getProductFram    
316                                                   
317     char const *frameString;                      
318     enum xDataTOM_frame frame = xDataTOM_frame    
319                                                   
320     if( ( frameString = xDataTOM_getAttributes    
321         if( ( frame = xDataTOM_axis_stringToFr    
322             smr_setReportError2( smr, smr_unkn    
323         }                                         
324     }                                             
325     return( frame );                              
326 }                                                 
327 /*                                                
328 **********************************************    
329 */                                                
330 int MCGIDI_misc_PQUStringToDouble( statusMessa    
331 /*                                                
332 *   Currently, white spaces are not allowed af    
333 *                                                 
334 *   Examples of allowed strings are: "2.39e6 e    
335 */                                                
336     char const *s = str;                          
337     char *e;                                      
338                                                   
339                                                   
340     while( isspace( *s ) ) s++; // Loop checki    
341     *value = strtod( s, &e ) * conversion;        
342     if( e == s ) {                                
343         smr_setReportError2( smr, smr_unknownI    
344         return( 1 );                              
345     }                                             
346     while( isspace( *e ) ) e++; // Loop checki    
347     if( strcmp( e, unit ) != 0 ) {                
348         smr_setReportError2( smr, smr_unknownI    
349         return( 1 );                              
350     }                                             
351     return( 0 );                                  
352 }                                                 
353 /*                                                
354 **********************************************    
355 */                                                
356 int MCGIDI_misc_PQUStringToDoubleInUnitOf( sta    
357 /*                                                
358 *   Currently, white spaces are not allowed af    
359 *                                                 
360 *   Examples of allowed strings are: "2.39e6 e    
361 */                                                
362     char const *s1 = str;                         
363     char *e1;                                     
364     double factor;                                
365                                                   
366     while( isspace( *s1 ) ) s1++; // Loop chec    
367     *value = strtod( s1, &e1 );                   
368     if( e1 == s1 ) {                              
369         smr_setReportError2( smr, smr_unknownI    
370         return( 1 );                              
371     }                                             
372     while( isspace( *e1 ) ) e1++; // Loop chec    
373                                                   
374     factor = MCGIDI_misc_getUnitConversionFact    
375     *value *= factor;                             
376     return( !smr_isOk( smr ) );                   
377 }                                                 
378 /*                                                
379 **********************************************    
380 */                                                
381 double MCGIDI_misc_getUnitConversionFactor( st    
382 /*                                                
383 *   This is a kludge until units are better su    
384 */                                                
385     if( strcmp( fromUnit, toUnit ) == 0 ) retu    
386                                                   
387     if( strcmp( fromUnit, "eV" ) == 0 ) {         
388         if( strcmp( toUnit, "MeV" ) == 0 ) ret    
389     else if( strcmp( fromUnit, "MeV" ) == 0 )     
390         if( strcmp( toUnit, "eV" ) == 0 ) retu    
391     else if( strcmp( fromUnit, "1/eV" ) == 0 )    
392         if( strcmp( toUnit, "1/MeV" ) == 0 ) r    
393     else if( strcmp( fromUnit, "1/MeV" ) == 0     
394         if( strcmp( toUnit, "1/eV" ) == 0 ) re    
395     else if( strcmp( fromUnit, "K" ) == 0 ) {     
396         if( strcmp( toUnit, "MeV/k" ) == 0 ) r    
397     }                                             
398                                                   
399     smr_setReportError2( smr, smr_unknownID, 1    
400     return( 1.0 );                                
401 }                                                 
402 /*                                                
403 **********************************************    
404 */                                                
405 ptwXYPoints *MCGIDI_misc_dataFromXYs2ptwXYPoin    
406         ptwXY_interpolation interpolation, cha    
407                                                   
408     int length;                                   
409     double *data;                                 
410     char const *fromUnits[2];                     
411                                                   
412     fromUnits[0] = xDataTOM_subAxes_getUnit( s    
413     if( !smr_isOk( smr ) ) return( NULL );        
414     fromUnits[1] = xDataTOM_subAxes_getUnit( s    
415     if( !smr_isOk( smr ) ) return( NULL );        
416                                                   
417     length = xDataTOM_XYs_getData( XYs, &data     
418                                                   
419     return( MCGIDI_misc_Data2ptwXYPointsInUnit    
420 }                                                 
421 /*                                                
422 **********************************************    
423 */                                                
424 ptwXYPoints *MCGIDI_misc_dataFromElement2ptwXY    
425                                                   
426     int length;                                   
427     double *data;                                 
428     xDataTOM_axes *axes = &(linear->xDataInfo.    
429     char const *fromUnits[2];                     
430     ptwXY_interpolation interpolation;            
431                                                   
432     if( axes->numberOfAxes != 2 ) {               
433         smr_setReportError2( smr, smr_unknownI    
434         return( NULL );                           
435     }                                             
436                                                   
437     if( MCGIDI_fromTOM_interpolation( smr, lin    
438     fromUnits[0] = axes->axis[0].unit;            
439     fromUnits[1] = axes->axis[1].unit;            
440                                                   
441     length = xDataTOM_XYs_getDataFromXDataInfo    
442     return( MCGIDI_misc_Data2ptwXYPointsInUnit    
443 }                                                 
444 /*                                                
445 **********************************************    
446 */                                                
447 static ptwXYPoints *MCGIDI_misc_Data2ptwXYPoin    
448         int length, double *data, char const *    
449                                                   
450     double xFactor, yFactor;                      
451     ptwXYPoints *ptwXY = NULL;                    
452     nfu_status status;                            
453                                                   
454     xFactor = MCGIDI_misc_getUnitConversionFac    
455     if( !smr_isOk( smr ) ) goto err;              
456     yFactor = MCGIDI_misc_getUnitConversionFac    
457     if( !smr_isOk( smr ) ) goto err;              
458                                                   
459                                                   
460     ptwXY = ptwXY_create( interpolation, NULL,    
461     if( status != nfu_Okay ) {                    
462         smr_setReportError2( smr, smr_unknownI    
463         goto err;                                 
464     }                                             
465                                                   
466     if( ( xFactor != 1. ) || ( yFactor != 1. )    
467         if( ( status = ptwXY_scaleOffsetXAndY(    
468             smr_setReportError2( smr, smr_unkn    
469             goto err;                             
470         }                                         
471     }                                             
472                                                   
473     return( ptwXY );                              
474                                                   
475 err:                                              
476     if( ptwXY != NULL ) ptwXY_free( ptwXY );      
477     return( NULL );                               
478 }                                                 
479 /*                                                
480 **********************************************    
481 */                                                
482 void MCGIDI_misc_updateTransportabilitiesMap(     
483                                                   
484     transportabilitiesMap::iterator iter = tra    
485                                                   
486     if( iter != transportabilities->end( ) ) {    
487         switch ( iter->second ) {                 
488         case MCGIDI_transportability_unknown :    
489             break;                                
490         case MCGIDI_transportability_none :       
491             switch( transportability ) {          
492                 case MCGIDI_transportability_u    
493                 case MCGIDI_transportability_n    
494                     transportability = MCGIDI_    
495                     break;                        
496                 case MCGIDI_transportability_p    
497                     break;                        
498                 case MCGIDI_transportability_f    
499                     transportability = MCGIDI_    
500                     break;                        
501             }                                     
502             break;                                
503         case MCGIDI_transportability_partial :    
504             transportability = MCGIDI_transpor    
505             break;                                
506         case MCGIDI_transportability_full :       
507             switch( transportability ) {          
508                 case MCGIDI_transportability_n    
509                 case MCGIDI_transportability_p    
510                     transportability = MCGIDI_    
511                     break;                        
512                 case MCGIDI_transportability_u    
513                 case MCGIDI_transportability_f    
514                     break;                        
515             }                                     
516             break;                                
517         }                                         
518     }                                             
519     (*transportabilities)[PoPID] = transportab    
520 }                                                 
521 /*                                                
522 **********************************************    
523 */                                                
524 void MCGIDI_misc_updateTransportabilitiesMap2(    
525                                                   
526     MCGIDI_misc_updateTransportabilitiesMap( t    
527 }                                                 
528                                                   
529 #if defined __cplusplus                           
530 }                                                 
531 #endif                                            
532                                                   
533