Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/processes/hadronic/models/lend/src/xDataTOM_importXML_XYs.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 ]

  1 /*
  2 # <<BEGIN-copyright>>
  3 # <<END-copyright>>
  4 */
  5 #include <stdlib.h>
  6 #include <string.h>
  7 #include <limits.h>
  8 #include <ctype.h>
  9 
 10 #include "xDataTOM_importXML_private.h"
 11 
 12 #if defined __cplusplus
 13 namespace GIDI {
 14 using namespace GIDI;
 15 #endif
 16 
 17 static int xDataXML_XYsDataToTOM2( statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_xDataInfo *xDI, int index, int length, double value, 
 18     double accuracy );
 19 /*
 20 ************************************************************
 21 */
 22 int xDataXML_XYsToTOM( statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_element *TE ) {
 23 
 24     int dataProcessed = 0, length;
 25     double accuracy;
 26     xDataTOM_xDataInfo *xDI = &(TE->xDataInfo);
 27     xDataXML_element *XMLChild;
 28 
 29     xDI->element = TE;
 30     if( xDataXML_convertAttributeTo_xDataTOM_Int( smr, XE, "length", &length, 1 ) != 0 ) return( 1 );
 31     if( xDataXML_convertAttributeToDouble( smr, XE, "accuracy", &accuracy, 1 ) != 0 ) return( 1 );
 32     if( xDataXML_axesElememtToTOM( smr, XE, &(xDI->axes) ) != 0 ) return( 1 );
 33     for( XMLChild = xDataXML_getFirstElement( XE ); XMLChild != NULL; XMLChild = xDataXML_getNextElement( XMLChild ) ) {
 34         if( strcmp( "axes", XMLChild->name ) == 0 ) {
 35             continue; }
 36         else if( strcmp( "data", XMLChild->name ) == 0 ) {
 37             if( dataProcessed ) {
 38                 smr_setReportError3p( smr, xDataXML_get_smrUserInterfaceFromElement( XE ), xDataTOM_smrLibraryID, -1, "multiple 'data' elements found" );
 39                 goto err;
 40             }
 41             dataProcessed = 1;
 42             if( xDataXML_XYsDataToTOM2( smr, XMLChild, xDI, -1, length, 0., accuracy ) != 0 ) goto err;
 43         }
 44     }
 45     if( dataProcessed == 0 ) {
 46         smr_setReportError3p( smr, xDataXML_get_smrUserInterfaceFromElement( XE ), xDataTOM_smrLibraryID, -1, "data element missing" );
 47         goto err;
 48     }
 49     return( 0 );
 50 
 51 err:
 52     return( 1 );
 53 }
 54 /*
 55 ************************************************************
 56 */
 57 static int xDataXML_XYsDataToTOM2( statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_xDataInfo *xDI, int index, int length, double value, 
 58         double accuracy ) {
 59 
 60     xDataTOM_XYs *XYs;
 61 
 62     xDI->ID = xDataTOM_XYs_ID;
 63     if( ( xDI->data = (xDataTOM_XYs *) smr_malloc2( smr, sizeof( xDataTOM_XYs ), 1, "xDI->data" ) ) == NULL ) goto err;
 64     XYs = (xDataTOM_XYs *) xDI->data;
 65 
 66     if( xDataXML_XYsDataToTOM( smr, XE, XYs, index, length, value, accuracy, xDataTOM_subAxesType_proxy, 0, &(xDI->axes), NULL ) != 0 ) goto err;
 67     return( 0 );
 68 
 69 err:
 70     smr_freeMemory( (void **) &(xDI->data) );
 71     return( 1 );   
 72 }
 73 /*
 74 ************************************************************
 75 */
 76 int xDataXML_XYsDataToTOM( statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_XYs *XYs, int index, int length, double value, double accuracy, 
 77         enum xDataTOM_subAxesType subAxesType, int axesOffest, xDataTOM_axes *axes, xDataTOM_interpolation *interpolation ) {
 78 
 79     XYs->index = index;
 80     XYs->length = length;
 81     XYs->value = value;
 82     XYs->accuracy = accuracy;
 83     if( xDataTOM_subAxes_initialize( smr, &(XYs->subAxes), subAxesType, axesOffest, axes, interpolation ) != 0 ) return( 1 );
 84     if( ( XYs->data = (double *) smr_malloc2( smr, 2 * length * sizeof( double ), 0, "XYs->data" ) ) == NULL ) goto err;
 85 
 86     if( xDataXML_stringToDoubles( smr, XE, XE->text.text, 2 * length, (double *) XYs->data ) != 0 ) goto err;
 87     return( 0 );
 88 
 89 err:
 90     smr_freeMemory( (void **) &(XYs->data) );
 91     return( 1 );
 92 }
 93 /*
 94 ************************************************************
 95 */
 96 int xDataXML_stringToDoubles( statusMessageReporting *smr,  xDataXML_element *XE, char const *s1, int length, double *d1 ) {
 97 
 98     char *e1 = (char *) s1;
 99     int i1;
100 
101     for( i1 = 0; i1 < length; i1++, d1++, s1 = e1 ) {
102         if( xDataXML_stringTo_double( smr, xDataXML_get_smrUserInterfaceFromElement( XE ), s1, d1, " \n", &e1 ) ) return( 1 );
103     }
104     while( isspace( *e1 ) ) e1++;     /* There should be nothing but white spaces left in the string. */ // Loop checking, 11.06.2015, T. Koi
105     if( *e1 != 0 ) {
106         smr_setReportError3( smr, xDataXML_get_smrUserInterfaceFromElement( XE ), xDataTOM_smrLibraryID, -1, "text contains extra data = %s", e1 );
107         return( 1 );
108     }
109     return( 0 );
110 }
111 
112 #if defined __cplusplus
113 }
114 #endif
115