Geant4 10.7.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
xDataTOM_importXML_XYs.cc
Go to the documentation of this file.
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
11
12#if defined __cplusplus
13namespace GIDI {
14using namespace GIDI;
15#endif
16
17static int xDataXML_XYsDataToTOM2( statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_xDataInfo *xDI, int index, int length, double value,
18 double accuracy );
19/*
20************************************************************
21*/
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 ) {
47 goto err;
48 }
49 return( 0 );
50
51err:
52 return( 1 );
53}
54/*
55************************************************************
56*/
57static 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
69err:
70 smr_freeMemory( (void **) &(xDI->data) );
71 return( 1 );
72}
73/*
74************************************************************
75*/
76int 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
89err:
90 smr_freeMemory( (void **) &(XYs->data) );
91 return( 1 );
92}
93/*
94************************************************************
95*/
96int 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
#define smr_setReportError3(smr, userInterface, libraryID, code, fmt,...)
void * smr_freeMemory(void **p)
#define smr_setReportError3p(smr, userInterface, libraryID, code, fmt)
#define smr_malloc2(smr, size, zero, forItem)
double value
Definition: xDataTOM.h:82
xDataTOM_subAxes subAxes
Definition: xDataTOM.h:83
double accuracy
Definition: xDataTOM.h:82
double * data
Definition: xDataTOM.h:84
xDataTOM_xDataInfo xDataInfo
Definition: xDataTOM.h:187
const char * ID
Definition: xDataTOM.h:151
xDataTOM_element * element
Definition: xDataTOM.h:152
xDataTOM_axes axes
Definition: xDataTOM.h:153
xDataTOM_subAxesType
Definition: xDataTOM.h:24
@ xDataTOM_subAxesType_proxy
Definition: xDataTOM.h:24
int xDataTOM_subAxes_initialize(statusMessageReporting *smr, xDataTOM_subAxes *subAxes, enum xDataTOM_subAxesType type, int offset, xDataTOM_axes *axes, xDataTOM_interpolation *interpolation)
int xDataXML_XYsDataToTOM(statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_XYs *XYs, int index, int length, double value, double accuracy, enum xDataTOM_subAxesType subAxesType, int axesOffest, xDataTOM_axes *axes, xDataTOM_interpolation *interpolation)
int xDataXML_stringToDoubles(statusMessageReporting *smr, xDataXML_element *XE, char const *s, int length, double *d)
int xDataXML_stringTo_double(statusMessageReporting *smr, void *smrUserInterface, char const *c, double *value, char const *endings, char **e)
int xDataXML_XYsToTOM(statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_element *TE)
void * xDataXML_get_smrUserInterfaceFromElement(xDataXML_element *element)
xDataXML_element * xDataXML_getNextElement(xDataXML_element *element)
xDataTOM_Int xDataXML_convertAttributeTo_xDataTOM_Int(statusMessageReporting *smr, xDataXML_element *element, char const *name, xDataTOM_Int *n, int required)
xDataXML_element * xDataXML_getFirstElement(xDataXML_element *element)
int xDataXML_axesElememtToTOM(statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_axes *axes)
int xDataXML_convertAttributeToDouble(statusMessageReporting *smr, xDataXML_element *element, char const *name, double *d, int required)
char const * xDataTOM_XYs_ID
Definition: xDataTOM_XYs.cc:14
int xDataTOM_smrLibraryID
Definition: xDataTOM.cc:34