ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
xDataTOM_importXML_KalbachMann.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file xDataTOM_importXML_KalbachMann.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 
18 /*
19 ************************************************************
20 */
22 
23  int length;
24  xDataTOM_xDataInfo *xDI = &(TE->xDataInfo);
25  xDataTOM_KalbachMann *KalbachMann;
26  char const *wLabel, *form;
27  xDataXML_element *XMLChild;
28  xDataTOM_axes *axes = &(xDI->axes);
29 
30 /* Need to release KalbachMann if an error occurs later. */
31  if( ( xDI->data = xDataXML_initializeData( smr, XE, TE, xDataTOM_KalbachMann_ID, sizeof( xDataTOM_KalbachMann ) ) ) == NULL ) return( 1 );
32  KalbachMann = (xDataTOM_KalbachMann *) xDI->data;
33 
34  if( ( form = xDataXML_getAttributesValueInElement( XE, "form" ) ) == NULL ) goto err;
35  if( strcmp( form, "fr" ) == 0 ) {
36  KalbachMann->type = xDataTOM_KalbachMannType_fr; }
37  else if( strcmp( form, "fra" ) == 0 ) {
38  KalbachMann->type = xDataTOM_KalbachMannType_fra; }
39  else {
41  "invalid KalbachMann type - '%s'", form );
42  goto err;
43  }
44  if( ( wLabel = xDataTOM_axes_getLabel( smr, axes, 0 ) ) == NULL ) goto err;
45  length = xDataXML_numberOfElementsByTagName( smr, XE, wLabel );
46  if( xDataTOM_KalbachMann_initialize( smr, KalbachMann, length, axes ) != 0 ) return( 1 );
47 
48  for( XMLChild = xDataXML_getFirstElement( XE ); XMLChild != NULL; XMLChild = xDataXML_getNextElement( XMLChild ) ) {
49  if( strcmp( "axes", XMLChild->name ) == 0 ) {
50  continue; }
51  else if( strcmp( wLabel, XMLChild->name ) == 0 ) {
52  if( xDataXML_KalbachMannCoefficientsToTOM( smr, XMLChild, &(KalbachMann->coefficients[KalbachMann->numberOfEnergies]) ) != 0 ) goto err;
53  KalbachMann->numberOfEnergies++; }
54  else {
56  "invalid element '%s' in xData = 'KalbachMann'", XMLChild->name );
57  goto err;
58  }
59  }
60 
61  return( 0 );
62 
63 err:
64  smr_freeMemory( (void **) &(xDI->data) );
65  return( 1 );
66 }
67 /*
68 ************************************************************
69 */
71 
72  int index, length;
73  double value;
74 
75  coefficients->coefficients = NULL;
76  if( xDataXML_convertAttributeTo_xDataTOM_Int( smr, XE, "index", &index, 1 ) != 0 ) return( 1 );
77  if( xDataXML_convertAttributeTo_xDataTOM_Int( smr, XE, "length", &length, 1 ) != 0 ) return( 1 );
78  if( xDataXML_convertAttributeToDouble( smr, XE, "value", &value, 1 ) != 0 ) return( 1 );
79  coefficients->index = index;
80  coefficients->length = length;
81  coefficients->value = value;
82  if( ( coefficients->coefficients = (double *) smr_malloc2( smr, length * sizeof( double ), 0, "coefficients->coefficients" ) ) == NULL ) goto err;
83  if( xDataXML_stringToDoubles( smr, XE, XE->text.text, length, (double *) coefficients->coefficients ) != 0 ) goto err;
84  return( 0 );
85 
86 err:
87  if( coefficients->coefficients != NULL ) smr_freeMemory( (void **) &(coefficients->coefficients) );
88  return( 1 );
89 }
90 
91 #if defined __cplusplus
92 }
93 #endif