ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
xDataTOM_importXML_XYs.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file xDataTOM_importXML_XYs.cc
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
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 */
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 
51 err:
52  return( 1 );
53 }
54 /*
55 ************************************************************
56 */
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