Geant4  10.02.p01
xDataTOM_axes.cc
Go to the documentation of this file.
1 /*
2 # <<BEGIN-copyright>>
3 # <<END-copyright>>
4 */
5 
6 #include <string.h>
7 
8 #include "xDataTOM_private.h"
9 
10 #if defined __cplusplus
11 namespace GIDI {
12 using namespace GIDI;
13 #endif
14 
15 static char const *xDataTOM_frame_labString = "lab";
16 static char const *xDataTOM_frame_centerOfMassString = "centerOfMass";
17 static char const *xDataTOM_frame_invalidString = "invalid";
18 /*
19 ************************************************************
20 */
21 int xDataTOM_axes_initialize( statusMessageReporting *smr, xDataTOM_axes *axes, int numberOfAxes ) {
22 
23  axes->numberOfAxes = 0;
24  if( ( axes->axis = (xDataTOM_axis *) smr_malloc2( smr, numberOfAxes * sizeof( xDataTOM_axis ), 1, "axes->axis" ) ) == NULL ) return( 1 );
25  axes->numberOfAxes = numberOfAxes;
26  return( 0 );
27 }
28 /*
29 ************************************************************
30 */
31 int xDataTOM_axes_release( xDataTOM_axes *axes ) {
32 
33  int i;
34 
35  for( i = 0; i < axes->numberOfAxes; i++ ) {
36  xDataTOM_axis_release( NULL, &(axes->axis[i]) );
37  }
38  smr_freeMemory( (void **) &(axes->axis) );
39  return( 0 );
40 }
41 /*
42 ************************************************************
43 */
44 char const *xDataTOM_axes_getLabel( statusMessageReporting *smr, xDataTOM_axes *axes, int index ) {
45 
46  if( ( index < 0 ) || ( index >= axes->numberOfAxes ) ) {
47  smr_setReportError2( smr, xDataTOM_smrLibraryID, -1, "invalid axes index = %d", index );
48  return( NULL );
49  }
50  return( axes->axis[index].label );
51 }
52 /*
53 ************************************************************
54 */
55 char const *xDataTOM_axes_getUnit( statusMessageReporting *smr, xDataTOM_axes *axes, int index ) {
56 
57  if( ( index < 0 ) || ( index >= axes->numberOfAxes ) ) {
58  smr_setReportError2( smr, xDataTOM_smrLibraryID, -1, "invalid axes index = %d", index );
59  return( NULL );
60  }
61  return( axes->axis[index].unit );
62 }
63 /*
64 ************************************************************
65 */
66 int xDataTOM_axes_getInterpolation( statusMessageReporting *smr, xDataTOM_axes *axes, int index, enum xDataTOM_interpolationFlag *independent,
67  enum xDataTOM_interpolationFlag *dependent, enum xDataTOM_interpolationQualifier *qualifier ) {
68 
69  xDataTOM_interpolation *interpolation;
70 
71  if( ( index < 0 ) || ( index >= axes->numberOfAxes ) ) {
72  smr_setReportError2( smr, xDataTOM_smrLibraryID, -1, "invalid axes index = %d", index );
73  return( 1 );
74  }
75  interpolation = &(axes->axis[index].interpolation);
76  *independent = interpolation->independent;
77  *dependent = interpolation->dependent;
78  *qualifier = interpolation->qualifier;
79 
80  return( 0 );
81 }
82 
83 /*
84 c subAxes functions.
85 */
86 /*
87 ************************************************************
88 */
89 int xDataTOM_subAxes_initialize( statusMessageReporting *smr, xDataTOM_subAxes *subAxes, enum xDataTOM_subAxesType type, int offset,
90  xDataTOM_axes *axes, xDataTOM_interpolation *interpolation ) {
91 
92  subAxes->type = type;
93  if( axes == NULL ) {
94  smr_setReportError2p( smr, xDataTOM_smrLibraryID, -1, "Axes must not be NULL" );
95  return( 1 );
96  }
97  subAxes->offset = offset;
98  if( ( offset < 0 ) || ( offset >= axes->numberOfAxes ) ) {
99  smr_setReportError2( smr, xDataTOM_smrLibraryID, -1, "offset = %d < 0 or >= axes->numberOfAxes = %d", offset, axes->numberOfAxes );
100  return( 1 );
101  }
102  if( type == xDataTOM_subAxesType_intepolationAxes ) {
103  if( interpolation == NULL ) {
104  smr_setReportError2p( smr, xDataTOM_smrLibraryID, -1, "Interpolation must not be NULL for intepolationAxes" );
105  return( 1 );
106  }
107  if( xDataTOM_interpolation_copy( smr, &(subAxes->interpolation), interpolation ) ) return( 1 ); }
108  else { /* Not used but fill in anyway. */
109  xDataTOM_interpolation_set( smr, &(subAxes->interpolation), xDataTOM_interpolationFlag_linear, xDataTOM_interpolationFlag_linear,
110  xDataTOM_interpolationQualifier_none );
111  }
112  subAxes->axes = axes;
113  return( 0 );
114 }
115 /*
116 ************************************************************
117 */
118 int xDataTOM_subAxes_release( xDataTOM_subAxes *subAxes ) {
119 
120  subAxes->axes = NULL;
121  return( 0 );
122 }
123 /*
124 ************************************************************
125 */
126 char const *xDataTOM_subAxes_getLabel( statusMessageReporting *smr, xDataTOM_subAxes *subAxes, int index ) {
127 
128  return( xDataTOM_axes_getLabel( smr, subAxes->axes, index + subAxes->offset ) );
129 }
130 /*
131 ************************************************************
132 */
133 char const *xDataTOM_subAxes_getUnit( statusMessageReporting *smr, xDataTOM_subAxes *subAxes, int index ) {
134 
135  return( xDataTOM_axes_getUnit( smr, subAxes->axes, index + subAxes->offset ) );
136 }
137 
138 /*
139 c Axis functions.
140 */
141 /*
142 ************************************************************
143 */
144 xDataTOM_axis *xDataTOM_axis_new( statusMessageReporting *smr, int index, char const *label, char const *unit, xDataTOM_interpolation *interpolation ) {
145 
146  xDataTOM_axis *axis = NULL;
147 
148  if( ( axis = (xDataTOM_axis *) smr_malloc2( smr, sizeof( xDataTOM_axis ), 0, "axis" ) ) == NULL ) return( NULL );
149  if( xDataTOM_axis_initialize( smr, axis, index, label, unit, interpolation ) != 0 ) smr_freeMemory( (void **) &axis );
150  return( axis );
151 }
152 /*
153 ************************************************************
154 */
155 int xDataTOM_axis_initialize( statusMessageReporting *smr, xDataTOM_axis *axis, int index, char const *label, char const *unit, xDataTOM_interpolation *interpolation ) {
156 
157  axis->index = index;
158  if( ( axis->label = smr_allocateCopyString2( smr, label, "label" ) ) == NULL ) goto err;
159  if( ( axis->unit = smr_allocateCopyString2( smr, unit, "unit" ) ) == NULL ) goto err;
160  if( xDataTOM_interpolation_copy( smr, &(axis->interpolation), interpolation ) != 0 ) goto err;
161 
162  return( 0 );
163 
164 err:
165  smr_freeMemory( (void **) &(axis->label) );
166  smr_freeMemory( (void **) &(axis->unit) );
167  return( 1 );
168 }
169 /*
170 ************************************************************
171 */
172 xDataTOM_axis *xDataTOM_axis_release( statusMessageReporting * /*smr*/, xDataTOM_axis *axis ) {
173 
174  axis->index = -1;
175  smr_freeMemory( (void **) &(axis->label) );
176  smr_freeMemory( (void **) &(axis->unit) );
177  return( NULL );
178 }
179 /*
180 ************************************************************
181 */
182 enum xDataTOM_frame xDataTOM_axis_stringToFrame( statusMessageReporting * /*smr*/, char const *frame ) {
183 
184  if( strcmp( "lab", frame ) == 0 ) return( xDataTOM_frame_lab );
185  if( strcmp( "centerOfMass", frame ) == 0 ) return( xDataTOM_frame_centerOfMass );
186  return( xDataTOM_frame_invalid );
187 }
188 /*
189 ************************************************************
190 */
191 char const *xDataTOM_axis_frameToString( statusMessageReporting * /*smr*/, enum xDataTOM_frame frame ) {
192 
193  switch( frame ) {
194  case xDataTOM_frame_lab : return( xDataTOM_frame_labString );
195  case xDataTOM_frame_centerOfMass : return( xDataTOM_frame_centerOfMassString );
196  default :
197  break;
198  }
199  return( xDataTOM_frame_invalidString );
200 }
201 
202 #if defined __cplusplus
203 }
204 #endif
int xDataTOM_interpolation_copy(statusMessageReporting *smr, xDataTOM_interpolation *desc, xDataTOM_interpolation *src)
enum xDataTOM_frame xDataTOM_axis_stringToFrame(statusMessageReporting *, char const *frame)
char const * xDataTOM_axis_frameToString(statusMessageReporting *, enum xDataTOM_frame frame)
static char const * xDataTOM_frame_labString
char const * xDataTOM_axes_getLabel(statusMessageReporting *smr, xDataTOM_axes *axes, int index)
int xDataTOM_smrLibraryID
Definition: xDataTOM.cc:34
int xDataTOM_subAxes_initialize(statusMessageReporting *smr, xDataTOM_subAxes *subAxes, enum xDataTOM_subAxesType type, int offset, xDataTOM_axes *axes, xDataTOM_interpolation *interpolation)
static char const * xDataTOM_frame_invalidString
xDataTOM_axis * xDataTOM_axis_release(statusMessageReporting *, xDataTOM_axis *axis)
int xDataTOM_axes_release(xDataTOM_axes *axes)
int xDataTOM_axes_initialize(statusMessageReporting *smr, xDataTOM_axes *axes, int numberOfAxes)
int xDataTOM_subAxes_release(xDataTOM_subAxes *subAxes)
int xDataTOM_axes_getInterpolation(statusMessageReporting *smr, xDataTOM_axes *axes, int index, enum xDataTOM_interpolationFlag *independent, enum xDataTOM_interpolationFlag *dependent, enum xDataTOM_interpolationQualifier *qualifier)
char const * xDataTOM_subAxes_getUnit(statusMessageReporting *smr, xDataTOM_subAxes *subAxes, int index)
void * smr_freeMemory(void **p)
char const * xDataTOM_axes_getUnit(statusMessageReporting *smr, xDataTOM_axes *axes, int index)
static char const * xDataTOM_frame_centerOfMassString
xDataTOM_axis * xDataTOM_axis_new(statusMessageReporting *smr, int index, char const *label, char const *unit, xDataTOM_interpolation *interpolation)
char const * xDataTOM_subAxes_getLabel(statusMessageReporting *smr, xDataTOM_subAxes *subAxes, int index)
int xDataTOM_axis_initialize(statusMessageReporting *smr, xDataTOM_axis *axis, int index, char const *label, char const *unit, xDataTOM_interpolation *interpolation)
int xDataTOM_interpolation_set(statusMessageReporting *smr, xDataTOM_interpolation *interpolation, enum xDataTOM_interpolationFlag independent, enum xDataTOM_interpolationFlag dependent, enum xDataTOM_interpolationQualifier qualifier)