Changeset 1230
- Timestamp:
- 14/04/09 18:56:40 (3 years ago)
- Location:
- branches/4.2
- Files:
-
- 20 edited
-
Windows_extra/libNeXus-0.def (modified) (2 diffs)
-
bindings/cpp/NeXusFile.hpp (modified) (4 diffs)
-
bindings/cpp/NeXusStream.cpp (modified) (2 diffs)
-
bindings/cpp/NeXusStream.hpp (modified) (7 diffs)
-
bindings/idl/NXtest.h5 (modified) (previous)
-
bindings/idl/NXtest.hdf (modified) (previous)
-
bindings/idl/NXtest.xml (modified) (1 diff)
-
bindings/idl/data/dmc01.hdf (modified) (previous)
-
bindings/idl/nxext.h5 (modified) (previous)
-
bindings/idl/nxext.hdf (modified) (previous)
-
bindings/idl/nxext.xml (modified) (previous)
-
bindings/python/nxs/napi.py (modified) (22 diffs)
-
bindings/python/nxstest.py (modified) (4 diffs)
-
doc/doxygen/Doxyfile.in (modified) (2 diffs)
-
include/napi.h (modified) (41 diffs)
-
src/napi.c (modified) (2 diffs)
-
src/napi4.c (modified) (1 diff)
-
src/napi5.c (modified) (1 diff)
-
src/napi_exports.h (modified) (1 diff)
-
src/nexus_symbols_win.txt (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
branches/4.2/Windows_extra/libNeXus-0.def
r1104 r1230 22 22 _NXIGETGROUPINFO@16 23 23 _NXIGETINFO@16 24 _NXIGETRAWINFO@16 24 25 _NXIGETNEXTATTR@16 25 26 _NXIGETNEXTENTRY@16 … … 81 82 nxigetgroupid_ 82 83 nxigetgroupinfo_ 84 nxigetrawinfo_ 83 85 nxigetinfo_ 84 86 nxigetnextattr_ -
branches/4.2/bindings/cpp/NeXusFile.hpp
r1108 r1230 22 22 * Documentation for the NeXus C++ API. 23 23 * 2000-2008 the NeXus group. 24 * \defgroup cpp_types C++ Types 25 * \ingroup cpp_main 26 * \defgroup cpp_core C++ Core 27 * \ingroup cpp_main 24 28 */ 25 29 … … 37 41 * \li INT64 int8_t if available on the machine 38 42 * \li UINT64 uint8_t if available on the machine 43 * \ingroup cpp_types 39 44 */ 40 45 enum NXnumtype { … … 60 65 * \li RLE Run length encoding (only HDF-4) 61 66 * \li HUF Huffmann encoding (only HDF-4) 67 * \ingroup cpp_types 62 68 */ 63 69 enum NXcompression { … … 90 96 /** 91 97 * The Object that allows access to the information in the file. 98 * \ingroup cpp_core 92 99 */ 93 100 class NXDLL_EXPORT File -
branches/4.2/bindings/cpp/NeXusStream.cpp
r1108 r1230 30 30 // Revision of last commit $LastChangedRevision$ 31 31 // Date of last commit $LastChangedDate$ 32 // Author of last commit$LastChangedBy$32 // Last changed by $LastChangedBy$ 33 33 ////////////////////////////////////////////////////////////////////////// 34 34 … … 36 36 * \file NeXusStream.cpp 37 37 * Implementation of IOStream like interface to NeXus files 38 * \author Freddie Akeroyd, STFC ISIS Facility, GB 38 39 * \version $LastChangedRevision$ 39 40 * \date $LastChangedDate$ -
branches/4.2/bindings/cpp/NeXusStream.hpp
r1108 r1230 31 31 // Revision of last commit $LastChangedRevision$ 32 32 // Date of last commit $LastChangedDate$ 33 // Author of last commit$LastChangedBy$33 // Last changed by $LastChangedBy$ 34 34 ////////////////////////////////////////////////////////////////////////// 35 35 … … 37 37 * \file NeXusStream.hpp 38 38 * Header for IOStream like interface to NeXus files 39 * \author Freddie Akeroyd, STFC ISIS Facility, GB 39 40 * \version $LastChangedRevision$ 40 41 * \date $LastChangedDate$ 42 * \defgroup cpp_stream IOstream like interface 43 * \ingroup cpp_main 41 44 */ 42 45 … … 57 60 }; 58 61 62 /// \ingroup cpp_stream 59 63 enum StreamModifier { Close=0 }; 60 64 … … 95 99 }; 96 100 101 /// \ingroup cpp_stream 97 102 class NXDLL_EXPORT Attr : public ISerialisable 98 103 { … … 164 169 }; 165 170 171 /// \ingroup cpp_stream 166 172 class NXDLL_EXPORT Group : public ObjectWithAttr 167 173 { … … 214 220 }; 215 221 222 /// \ingroup cpp_stream 216 223 class NXDLL_EXPORT Data : public ObjectWithAttr 217 224 { … … 245 252 }; 246 253 254 /// \ingroup cpp_stream 247 255 NXDLL_EXPORT File& operator<<(File& nf, const ISerialisable& obj); 256 257 /// \ingroup cpp_stream 248 258 NXDLL_EXPORT File& operator>>(File& nf, const ISerialisable& obj); 249 259 260 /// \ingroup cpp_stream 250 261 NXDLL_EXPORT File& operator<<(File& nf, const StreamModifier sm); 262 263 /// \ingroup cpp_stream 251 264 NXDLL_EXPORT File& operator>>(File& nf, const StreamModifier sm); 252 265 -
branches/4.2/bindings/idl/NXtest.xml
r1180 r1230 4 4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 5 5 xsi:schemaLocation="http://definition.nexusformat.org/schema/3.0 http://definition.nexusformat.org/schema/3.0/BASE.xsd" 6 file_time="2009-0 1-20T08:33:43+01:00">6 file_time="2009-02-20T10:05:53+01:00"> 7 7 <NXentry name="entry" hugo="namenlos" cucumber="passion"> 8 8 <ch_data NAPItype="NX_CHAR[10]">NeXus Data</ch_data> -
branches/4.2/bindings/python/nxs/napi.py
r1205 r1230 419 419 Corresponds to NXmakegroup(handle, name, nxclass) 420 420 """ 421 #print "makegroup",self._loc(),name,nxclass 421 422 status = nxlib.nximakegroup_(self.handle, name, nxclass) 422 423 if status == ERROR: … … 556 557 Corresponds to NXopengroup(handle, name, nxclass) 557 558 """ 558 #print "open group",nxclass,name559 #print "opengroup",self._loc(),name,nxclass 559 560 if nxclass is None: 560 561 nxclass = self.__getnxclass(name) … … 575 576 Corresponds to NXclosegroup(handle) 576 577 """ 577 #print "close group" 578 #print "closegroup" 579 if self._indata: 580 raise NeXusError, "Close data before group at %s"%(self._loc()) 578 581 status = nxlib.nxiclosegroup_(self.handle) 579 582 if status == ERROR: 580 raise NeXusError, "Could not close group at %s"%( name,self._loc())583 raise NeXusError, "Could not close group at %s"%(self._loc()) 581 584 self._path.pop() 582 585 … … 603 606 if status == ERROR: 604 607 raise ValueError, "Could not get group info: %s"%(self._loc()) 605 #print "g roup info",nxclass.value,name.value,n.value608 #print "getgroupinfo",self._loc(),nxclass.value,name.value,n.value 606 609 name = path.value.split('/')[-1] # Protect against HDF5 returning path 607 610 return n.value,name,nxclass.value … … 655 658 #if nxclass == 'SDS': 656 659 # dtype = _pytype_code(storage.value) 657 #print " group next",nxclass.value, name.value, storage.value660 #print "nextentry",nxclass.value, name.value, storage.value 658 661 return name.value,nxclass.value 659 662 … … 728 731 729 732 # ==== Data ==== 730 nxlib.nxiget info_.restype = c_int731 nxlib.nxiget info_.argtypes = [c_void_p, c_int_p, c_void_p, c_int_p]732 def get info(self):733 nxlib.nxigetrawinfo_.restype = c_int 734 nxlib.nxigetrawinfo_.argtypes = [c_void_p, c_int_p, c_void_p, c_int_p] 735 def getrawinfo(self): 733 736 """ 734 737 Returns the tuple dimensions,type for the currently open dataset. … … 740 743 complex values. 741 744 745 Unlike getinfo(), the size of the string storage area is 746 returned rather than the length of the stored string. 747 748 Raises NeXusError if this fails. 749 750 Corresponds to NXgetrawinfo(handle, &rank, dims, &storage), 751 but with storage converted from HDF values to numpy compatible 752 strings, and rank implicit in the length of the returned dimensions. 753 """ 754 rank = c_int(0) 755 shape = numpy.zeros(MAXRANK, 'i') 756 storage = c_int(0) 757 status = nxlib.nxigetrawinfo_(self.handle, _ref(rank), shape.ctypes.data, 758 _ref(storage)) 759 if status == ERROR: 760 raise NeXusError, "Could not get data info: %s"%(self._loc()) 761 shape = shape[:rank.value]+0 762 dtype = _pytype_code[storage.value] 763 #print "getrawinfo",self._loc(),"->",shape,dtype 764 return shape,dtype 765 766 nxlib.nxigetinfo_.restype = c_int 767 nxlib.nxigetinfo_.argtypes = [c_void_p, c_int_p, c_void_p, c_int_p] 768 def getinfo(self): 769 """ 770 Returns the tuple dimensions,type for the currently open dataset. 771 Dimensions is an integer array whose length corresponds to the rank 772 of the dataset and whose elements are the size of the individual 773 dimensions. Storage type is returned as a string, with 'char' for 774 a stored string, '[u]int[8|16|32]' for various integer values or 775 'float[32|64]' for floating point values. No support for 776 complex values. 777 778 Unlike getrawinfo(), the length of the stored string is 779 returned rather than the size of the string storage area. 780 742 781 Raises NeXusError if this fails. 743 782 … … 758 797 shape = shape[:rank.value]+0 759 798 dtype = _pytype_code[storage.value] 760 #print " data info",shape,dtype799 #print "getinfo",self._loc(),"->",shape,dtype 761 800 return shape,dtype 762 801 … … 771 810 Corresponds to NXopendata(handle, name) 772 811 """ 773 #print "opening data",name 774 status = nxlib.nxiopendata_(self.handle, name) 812 #print "opendata",self._loc(),name 813 if self._indata: 814 status = ERROR 815 else: 816 status = nxlib.nxiopendata_(self.handle, name) 775 817 if status == ERROR: 776 818 raise ValueError, "Could not open data %s: %s"%(name, self._loc()) … … 789 831 Corresponds to NXclosedata(handle) 790 832 """ 791 #print "clos ingdata"833 #print "closedata" 792 834 status = nxlib.nxiclosedata_(self.handle) 793 835 if status == ERROR: 794 836 raise NeXusError,\ 795 "Could not close data at %s"%( name,self._loc())837 "Could not close data at %s"%(self._loc()) 796 838 self._path.pop() 797 839 self._indata = False … … 815 857 # TODO: With keywords for value and attr, this can be used for 816 858 # TODO: makedata, opendata, putdata, putattr, putattr, ..., closedata 817 #print " Data",name,dtype,shape859 #print "makedata",self._loc(),name,shape,dtype 818 860 storage = _nxtype_code[str(dtype)] 819 861 shape = numpy.array(shape,'i') … … 865 907 Return the data. If data is a string (1-D char array), a python 866 908 string is returned. If data is a scalar (1-D numeric array of 867 length 1), a python numeric scalar is returned. 909 length 1), a python scalar is returned. If data is a string 910 array, a numpy array of type 'S#' where # is the maximum string 911 length is returned. If data is a numeric array, a numpy array 912 is returned. 868 913 869 914 Raises ValueError if this fails. … … 873 918 # TODO: consider accepting preallocated data so we don't thrash memory 874 919 shape,dtype = self.getinfo() 875 data fn,pdata,size= self._poutput(dtype,shape)920 data,pdata,size,datafn = self._poutput(dtype,shape) 876 921 status = nxlib.nxigetdata_(self.handle,pdata) 877 922 if status == ERROR: 878 923 raise ValueError, "Could not read data: %s"%(self._loc()) 879 #print " data",ret()924 #print "getdata",self._loc(),shape,dtype 880 925 return datafn() 881 926 … … 894 939 """ 895 940 # TODO: consider accepting preallocated data so we don't thrash memory 896 shape,dtype = self.get info()897 data fn,pdata,size= self._poutput(dtype,slab_shape)941 shape,dtype = self.getrawinfo() 942 data,pdata,size,datafn = self._poutput(dtype,slab_shape) 898 943 slab_offset = numpy.array(slab_offset,'i') 899 944 slab_shape = numpy.array(slab_shape,'i') … … 916 961 Corresponds to NXputdata(handle, data) 917 962 """ 918 shape,dtype = self.getinfo() 963 shape,dtype = self.getrawinfo() 964 #print "putdata",self._loc(),shape,dtype 919 965 data,pdata = self._pinput(data,dtype,shape) 920 966 status = nxlib.nxiputdata_(self.handle,pdata) … … 935 981 Corresponds to NXputslab(handle,data,offset,shape) 936 982 """ 937 shape,dtype = self.get info()983 shape,dtype = self.getrawinfo() 938 984 data,pdata = self._pinput(data,dtype,slab_shape) 939 985 slab_offset = numpy.array(slab_offset,'i') … … 1011 1057 raise NeXusError, "Could not get next attr: %s"%(self._loc()) 1012 1058 dtype = _pytype_code[storage.value] 1013 #print " nextattr",name.value,length.value,dtype1059 #print "getnextattr",name.value,length.value,dtype 1014 1060 return name.value, length.value, dtype 1015 1061 … … 1027 1073 """ 1028 1074 if dtype is 'char': length += 1 # HDF4 needs zero-terminator 1029 data fn,pdata,size= self._poutput(str(dtype),[length])1075 data,pdata,size,datafn = self._poutput(str(dtype),[length]) 1030 1076 storage = c_int(_nxtype_code[str(dtype)]) 1031 #print " retrieving",name,length,dtype,size1077 #print "getattr",self._loc(),name,length,size,dtype 1032 1078 size = c_int(size) 1033 1079 status = nxlib.nxigetattr_(self.handle,name,pdata,_ref(size),_ref(storage)) 1034 1080 if status == ERROR: 1035 1081 raise ValueError, "Could not read attr %s: %s" % (name,self._loc()) 1036 #print " attr",name,datafn(),size1082 #print "getattr",self._loc(),name,datafn() 1037 1083 return datafn() 1038 1084 … … 1304 1350 """ 1305 1351 Build space to collect a nexus data element. 1306 Returns data fn,data,sizewhere1307 - data fn is a lamba expression to extract the value out of the element.1308 - pdata is the value to pass to C (effectively a void *)1352 Returns data,pdata,size,datafn where 1353 - data is a python type to hold the returned data 1354 - pdata is the pointer to the start of the data 1309 1355 - size is the number of bytes in the data block 1310 Note that ret can return a string, a scalar or an array depending 1356 - datafn is a lamba expression to extract the return value from data 1357 Note that datafn can return a string, a scalar or an array depending 1311 1358 on the data type and shape of the data group. 1312 1359 """ … … 1314 1361 # string - use ctypes allocator 1315 1362 size = int(shape[0]) 1316 pdata = ctypes.create_string_buffer(size) 1317 datafn = lambda: pdata.value 1363 data = ctypes.create_string_buffer(size) 1364 pdata = data 1365 datafn = lambda: data.value 1318 1366 else: 1319 # numeric - use numpy array 1320 if dtype=='char': dtype = 'uint8' 1321 data = numpy.zeros(shape,dtype) 1367 # scalar, array or string list - use numpy array 1368 if dtype=='char': 1369 data = numpy.zeros(shape[:-1], dtype='S%i'%shape[-1]) 1370 else: 1371 data = numpy.zeros(shape, dtype) 1322 1372 if len(shape) == 1 and shape[0] == 1: 1323 1373 datafn = lambda: data[0] … … 1326 1376 pdata = data.ctypes.data 1327 1377 size = data.nbytes 1328 return data fn,pdata,size1378 return data,pdata,size,datafn 1329 1379 1330 1380 def _pinput(self, data, dtype, shape): 1331 1381 """ 1332 Convert an input array to a C pointer to a dense array. This may 1333 require conversion of the array, so the new array is returned along 1334 with its pointer. 1382 Convert an input array to a C pointer to a dense array. 1383 1384 Returns data, pdata where 1385 - data is a possibly new copy of the array 1386 - pdata is a pointer to the beginning of the array. 1387 Note that you must hold a reference to data for as long 1388 as you need pdata to keep the memory from being released to the heap. 1335 1389 """ 1336 1390 if dtype == "char": 1337 # Character data - pad with zeros to the right length 1338 if not _is_string_like(data): 1339 raise ValueError,"Expected character data: %s"%(self._loc()) 1340 if len(data) < shape[0]: 1341 data += '\000'*(shape[0]-len(data)) 1391 data = numpy.asarray(data, dtype='S%d'%(shape[-1])) 1342 1392 else: 1343 1393 # Convert scalars to vectors of length one 1344 1394 if numpy.prod(shape) == 1 and not hasattr(data,'shape'): 1345 data = numpy.array([data], dtype=dtype)1395 data = numpy.array([data], dtype=dtype) 1346 1396 # Check that dimensions match 1347 1397 # Ick! need to exclude dimensions of length 1 in order to catch … … 1349 1399 input_shape = numpy.array([i for i in data.shape if i != 1]) 1350 1400 target_shape = numpy.array([i for i in shape if i != 1]) 1351 if len(input_shape) != len(target_shape) or (input_shape != target_shape).any(): 1401 if len(input_shape) != len(target_shape) \ 1402 or (input_shape != target_shape).any(): 1352 1403 raise ValueError,\ 1353 "Shape mismatch %s!=%s: %s"%(data.shape,shape,self.filename) 1404 "Shape mismatch %s!=%s: %s"%(data_shape,shape,self._loc()) 1405 # Check data type 1354 1406 if str(data.dtype) != dtype: 1355 1407 raise ValueError,\ 1356 1408 "Type mismatch %s!=%s: %s"%(dtype,data.dtype,self._loc()) 1357 1409 1358 if dtype == 'char': 1359 # String: hand it over as usual for strings. Assumes the string 1360 # is the correct length for the storage area. 1361 pdata = data 1362 else: 1363 # Vector: assume it is of the correct storage class and size 1364 data = numpy.ascontiguousarray(data) 1365 pdata = data.ctypes.data 1366 1410 data = numpy.ascontiguousarray(data) 1411 pdata = data.ctypes.data 1412 1367 1413 return data,pdata 1368 1414 -
branches/4.2/bindings/python/nxstest.py
r1180 r1230 132 132 # .. demonstrate extensible data 133 133 file.makedata('flush_data','int32',[nxs.UNLIMITED]) 134 file.opendata('flush_data') 134 135 for i in range(7): 135 file.opendata('flush_data')136 136 file.putslab(i,[i],[1]) 137 file.flush()138 # Oops... why isn't there a closedata()?137 file.closedata() 138 file.flush() 139 139 file.closegroup() 140 140 … … 142 142 file.makegroup('sample','NXsample') 143 143 file.opengroup('sample','NXsample') 144 file.makedata('ch_data','char',[ 12])144 file.makedata('ch_data','char',[20]) 145 145 file.opendata('ch_data') 146 146 file.putdata('NeXus sample') … … 231 231 fail("%s retrieved %s"%(dtype,get)) 232 232 233 233 234 # Check attribute types 234 235 file.opendata('r8_data') … … 255 256 for i in range(100): comp_array[i,:] *= i 256 257 expected = comp_array 257 file.opengroup('data','NXdata') 258 file.opendata('comp_data') 258 file.opengroup('data','NXdata') #/entry/data 259 file.opendata('comp_data') #/entry/data/comp_data 259 260 get = file.getdata() 260 file.closedata() #/entry/data/comp_data261 file.closegroup() #/entry/data261 file.closedata() #/entry/data/comp_data 262 file.closegroup() #/entry/data 262 263 if not (get == expected).all(): 263 264 fail("compressed data differs") 264 265 print get 266 267 # Check strings 268 file.opengroup('sample','NXsample') #/entry/sample 269 file.opendata('ch_data') #/entry/sample/ch_data 270 rawshape,rawdtype = file.getrawinfo() 271 shape,dtype = file.getinfo() 272 get = file.getdata() 273 file.closedata() #/entry/sample/ch_data 274 file.closegroup() #/entry/sample 275 if not (shape[0]==12 and dtype=='char'): 276 fail("returned string info is incorrect") 277 print shape,dtype 278 if not (rawshape[0]==20 and rawdtype=='char'): 279 fail("returned string storage info is incorrect") 280 print shape,dtype 281 if not (get == "NeXus sample"): 282 fail("returned string is incorrect") 283 print shape,dtype 284 285 265 286 file.closegroup() #/entry 266 287 267 288 # Check read slab (e.g., from extensible) 268 289 -
branches/4.2/doc/doxygen/Doxyfile.in
r1058 r1230 407 407 # by doxygen. Possible values are YES and NO. If left blank NO is used. 408 408 409 QUIET = NO409 QUIET = YES 410 410 411 411 # The WARNINGS tag can be used to turn on/off the warning messages that are … … 1007 1007 1008 1008 PREDEFINED = \ 1009 HDF4 \ 1010 HDF5 \ 1011 NXXML 1009 HDF4=1 \ 1010 HDF5=1 \ 1011 NXXML=1 \ 1012 NXDLL_EXPORT= 1012 1013 1013 1014 # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then -
branches/4.2/include/napi.h
r1206 r1230 27 27 /** \file 28 28 * Documentation for the NeXus-API version 4.2 29 * 2000-2007, the NeXus group 29 * 2000-2007, the NeXus group 30 * \defgroup c_main C API 31 * \defgroup c_types Data Types 32 * \ingroup c_main 33 * \defgroup c_init General Initialisation and shutdown 34 * \ingroup c_main 35 * \defgroup c_readwrite Reading and Writing 36 * \ingroup c_main 37 * \defgroup c_metadata Meta data routines 38 * \ingroup c_main 39 * \defgroup c_linking Linking and Group hierarchy 40 * \ingroup c_main 41 * \defgroup c_memory Memory allocation 42 * \ingroup c_main 43 * \defgroup c_external External linking 44 * \ingroup c_main 45 * \defgroup cpp_main C++ API 30 46 */ 31 47 … … 95 111 96 112 /** \var NeXus data types 113 * \ingroup c_types 97 114 * \li NX_FLOAT32 32 bit float 98 115 * \li NX_FLOAT64 64 nit float == double … … 182 199 183 200 # define NXgetinfo MANGLE(nxigetinfo) 201 # define NXgetrawinfo MANGLE(nxigetrawinfo) 184 202 # define NXgetnextentry MANGLE(nxigetnextentry) 185 203 # define NXgetdata MANGLE(nxigetdata) … … 243 261 * \param pHandle A file handle which will be initialized upon successfull completeion of NXopen. 244 262 * \return NX_OK on success, NX_ERROR in the case of an error. 263 * \ingroup c_init 245 264 */ 246 265 extern NXstatus NXopen(CONSTCHAR * filename, NXaccess access_method, NXhandle* pHandle); 266 247 267 /** 248 268 * close a NeXus file … … 250 270 * call. 251 271 * \return NX_OK on success, NX_ERROR in the case of an error. 272 * \ingroup c_init 252 273 */ 253 274 extern NXstatus NXclose(NXhandle* pHandle); 275 254 276 /** 255 277 * flush data to disk 256 278 * \param pHandle A NeXus file handle as initialized by NXopen. 257 279 * \return NX_OK on success, NX_ERROR in the case of an error. 280 * \ingroup c_readwrite 258 281 */ 259 282 extern NXstatus NXflush(NXhandle* pHandle); … … 266 289 * \param NXclass the class name of the group. Should start with the prefix NX 267 290 * \return NX_OK on success, NX_ERROR in the case of an error. 291 * \ingroup c_init 268 292 */ 269 293 extern NXstatus NXmakegroup (NXhandle handle, CONSTCHAR *name, CONSTCHAR* NXclass); 294 270 295 /** 271 296 * Step into a group. All further access will be within the opened group. … … 274 299 * \param NXclass the class name of the group. Should start with the prefix NX 275 300 * \return NX_OK on success, NX_ERROR in the case of an error. 301 * \ingroup c_init 276 302 */ 277 303 extern NXstatus NXopengroup (NXhandle handle, CONSTCHAR *name, CONSTCHAR* NXclass); 304 278 305 /** 279 306 * Open the NeXus object with the path specified … … 283 310 * Example: /entry1/sample/name 284 311 * \return NX_OK on success, NX_ERROR in the case of an error. 312 * \ingroup c_init 285 313 */ 286 314 extern NXstatus NXopenpath (NXhandle handle, CONSTCHAR *path); 315 287 316 /** 288 317 * Opens the group in which the NeXus object with the specified path exists … … 292 321 * Example: /entry1/sample/name 293 322 * \return NX_OK on success, NX_ERROR in the case of an error. 323 * \ingroup c_readwrite 294 324 */ 295 325 extern NXstatus NXopengrouppath (NXhandle handle, CONSTCHAR *path); 326 296 327 /** 297 328 * Closes the currently open group and steps one step down in the NeXus file 298 329 * hierarchy. 299 330 * \return NX_OK on success, NX_ERROR in the case of an error. 331 * \ingroup c_init 300 332 */ 301 333 extern NXstatus NXclosegroup(NXhandle handle); 334 302 335 /** 303 336 * Create a multi dimensional data array or dataset. The dataset is NOT opened. … … 309 342 * can be NX_UNLIMITED. Data can be appended to such a dimension using NXputslab. 310 343 * \return NX_OK on success, NX_ERROR in the case of an error. 344 * \ingroup c_init 311 345 */ 312 346 extern NXstatus NXmakedata (NXhandle handle, CONSTCHAR* label, int datatype, int rank, int dim[]); 347 313 348 /** 314 349 * Create a compressed dataset. The dataset is NOT opened. Data from this set will automatically be compressed when … … 329 364 * should be the same as the data dimension. If you write it in slabs, this is your preferred slab size. 330 365 * \return NX_OK on success, NX_ERROR in the case of an error. 366 * \ingroup c_init 331 367 */ 332 368 extern NXstatus NXcompmakedata (NXhandle handle, CONSTCHAR* label, int datatype, int rank, int dim[], int comp_typ, int bufsize[]); 369 333 370 /** 334 371 * Switch compression on. This routine is superseeded by NXcompmakedata and thus … … 340 377 * \li NX_COMP_RLE run length encoding (only HDF-4) 341 378 * \li NX_COMP_HUF Huffmann encoding (only HDF-4) 379 * \ingroup c_init 342 380 */ 343 381 extern NXstatus NXcompress (NXhandle handle, int compr_type); 382 344 383 /** 345 384 * Open access to a dataset. After this call it is possible to write and read data or … … 348 387 * \param label The name of the dataset 349 388 * \return NX_OK on success, NX_ERROR in the case of an error. 389 * \ingroup c_init 350 390 */ 351 391 extern NXstatus NXopendata (NXhandle handle, CONSTCHAR* label); 392 352 393 /** 353 394 * Close access to a dataset. 354 395 * \param handle A NeXus file handle as initialized by NXopen. 355 396 * \return NX_OK on success, NX_ERROR in the case of an error. 397 * \ingroup c_readwrite 356 398 */ 357 399 extern NXstatus NXclosedata(NXhandle handle); 400 358 401 /** 359 402 * Write data to a datset which has previouly been opened with NXopendata. … … 363 406 * \param data Pointer to data to write. 364 407 * \return NX_OK on success, NX_ERROR in the case of an error. 408 * \ingroup c_init 365 409 */ 366 410 extern NXstatus NXputdata(NXhandle handle, void* data); 411 367 412 /** 368 413 * Write an attribute. The kind of attribute written depends on the … … 376 421 * \param iType The NeXus data type of the attribute. 377 422 * \return NX_OK on success, NX_ERROR in the case of an error. 423 * \ingroup c_readwrite 378 424 */ 379 425 extern NXstatus NXputattr(NXhandle handle, CONSTCHAR* name, void* data, int iDataLen, int iType); 426 380 427 /** 381 428 * Write a subset of a multi dimensional dataset. … … 385 432 * \param size An array holding the size of the data subset to write in each dimension. 386 433 * \return NX_OK on success, NX_ERROR in the case of an error. 434 * \ingroup c_readwrite 387 435 */ 388 436 extern NXstatus NXputslab(NXhandle handle, void* data, int start[], int size[]); 437 389 438 /** 390 439 * Retrieve link data for a dataset. This link data can later on be used to link this … … 394 443 * for linking. 395 444 * \return NX_OK on success, NX_ERROR in the case of an error. 445 * \ingroup c_readwrite 396 446 */ 397 447 extern NXstatus NXgetdataID(NXhandle handle, NXlink* pLink); 448 398 449 /** 399 450 * Create a link to the group or dataset described by pLink in the currently open … … 403 454 * by either a call to NXgetdataID or NXgetgroupID. 404 455 * \return NX_OK on success, NX_ERROR in the case of an error. 456 * \ingroup c_readwrite 405 457 */ 406 458 extern NXstatus NXmakelink(NXhandle handle, NXlink* pLink); 459 407 460 /** 408 461 * Create a link to the group or dataset described by pLink in the currently open … … 413 466 * by either a call to NXgetdataID or NXgetgroupID. 414 467 * \return NX_OK on success, NX_ERROR in the case of an error. 468 * \ingroup c_linking 415 469 */ 416 470 extern NXstatus NXmakenamedlink(NXhandle handle, CONSTCHAR* newname, NXlink* pLink); 471 417 472 /** 418 473 * Open the source group of a linked group or dataset. Returns an error when the item is … … 420 475 * \param handle A NeXus file handle as initialized by NXopen. 421 476 * \return NX_OK on success, NX_ERROR in the case of an error. 477 * \ingroup c_linking 422 478 */ 423 479 extern NXstatus NXopensourcegroup(NXhandle handle); 480 424 481 /** 425 482 * Read a complete dataset from the currently open dataset into memory. … … 429 486 * and unwelcome ways. 430 487 * \return NX_OK on success, NX_ERROR in the case of an error. 488 * \ingroup c_readwrite 431 489 */ 432 490 extern NXstatus NXgetdata(NXhandle handle, void* data); 491 433 492 /** 434 493 * Retrieve information about the curretly open dataset. … … 440 499 * \param datatype A pointer to an integer which be set to the NeXus data type code for this dataset. 441 500 * \return NX_OK on success, NX_ERROR in the case of an error. 501 * \ingroup c_metadata 442 502 */ 443 503 extern NXstatus NXgetinfo(NXhandle handle, int* rank, int dimension[], int* datatype); 504 444 505 /** 445 506 * Get the next entry in the currently open group. This is for retrieving infromation about the … … 451 512 * \param datatype The NeXus data type if the item is a SDS. 452 513 * \return NX_OK on success, NX_ERROR in the case of an error, NX_EOD when there are no more items. 514 * \ingroup c_readwrite 453 515 */ 454 516 extern NXstatus NXgetnextentry(NXhandle handle, NXname name, NXname nxclass, int* datatype); 517 455 518 /** 456 519 * Read a subset of data from file into memory. … … 461 524 * \param size An array holding the size of the data subset to read for each dimension. 462 525 * \return NX_OK on success, NX_ERROR in the case of an error. 526 * \ingroup c_readwrite 463 527 */ 464 528 extern NXstatus NXgetslab(NXhandle handle, void* data, int start[], int size[]); 529 465 530 /** 466 531 * Iterate over global, group or dataset attributes depending on the currently open group or … … 472 537 * \param iType A pointer to an integer which be set to the NeXus data type of the attribute. 473 538 * \return NX_OK on success, NX_ERROR in the case of an error, NX_EOD when there are no more items. 539 * \ingroup c_readwrite 474 540 */ 475 541 extern NXstatus NXgetnextattr(NXhandle handle, NXname pName, int *iLength, int *iType); 542 476 543 /** 477 544 * Read an attribute. … … 482 549 * \param iType A pointer to an integer which will had been set to the NeXus data type of the attribute. 483 550 * \return NX_OK on success, NX_ERROR in the case of an error. 551 * \ingroup c_readwrite 484 552 */ 485 553 extern NXstatus NXgetattr(NXhandle handle, char* name, void* data, int* iDataLen, int* iType); 554 486 555 /** 487 556 * Get the count of attributes in the currently open dataset, group or global attributes when at root level. … … 489 558 * \param no_items A pointer to an integer which be set to the number of attributes available. 490 559 * \return NX_OK on success, NX_ERROR in the case of an error. 560 * \ingroup c_readwrite 491 561 */ 492 562 extern NXstatus NXgetattrinfo(NXhandle handle, int* no_items); 563 493 564 /** 494 565 * Retrieve link data for the currently open group. This link data can later on be used to link this … … 498 569 * for linking. 499 570 * \return NX_OK on success, NX_ERROR in the case of an error. 571 * \ingroup c_readwrite 500 572 */ 501 573 extern NXstatus NXgetgroupID(NXhandle handle, NXlink* pLink); 574 502 575 /** 503 576 * Retrieve information about the currently open group. … … 509 582 * \param nxclass The NeXus class name of the group. 510 583 * \return NX_OK on success, NX_ERROR in the case of an error. 584 * \ingroup c_readwrite 511 585 */ 512 586 extern NXstatus NXgetgroupinfo(NXhandle handle, int* no_items, NXname name, NXname nxclass); 587 513 588 /** 514 589 * Tests if two link data structures describe the same item. … … 517 592 * \param pSecondID The second link data structure. 518 593 * \return NX_OK when both link data structures describe the same item, NX_ERROR else. 594 * \ingroup c_readwrite 519 595 */ 520 596 extern NXstatus NXsameID(NXhandle handle, NXlink* pFirstID, NXlink* pSecondID); … … 524 600 * \param handle A NeXus file handle as initialized by NXopen. 525 601 * \return NX_OK on success, NX_ERROR in the case of an error. 602 * \ingroup c_readwrite 526 603 */ 527 604 extern NXstatus NXinitgroupdir(NXhandle handle); 605 528 606 /** 529 607 * Resets a pending attribute search to the start again. To be called in a Nxgetnextattr loop when … … 531 609 * \param handle A NeXus file handle as initialized by NXopen. 532 610 * \return NX_OK on success, NX_ERROR in the case of an error. 611 * \ingroup c_readwrite 533 612 */ 534 613 extern NXstatus NXinitattrdir(NXhandle handle); 614 535 615 /** 536 616 * Sets the format for number printing. This call has only an effect when using the XML physical file … … 540 620 * \param format The C-language format string to use for this data type. 541 621 * \return NX_OK on success, NX_ERROR in the case of an error. 622 * \ingroup c_readwrite 542 623 */ 543 624 extern NXstatus NXsetnumberformat(NXhandle handle, int type, char *format); 625 544 626 /** 545 627 * Inquire the filename of the currently open file. FilenameBufferLength of the file name … … 549 631 * \param filenameBufferLength The length of the filename buffer. 550 632 * \return NX_OK on success, NX_ERROR in the case of an error. 633 * \ingroup c_readwrite 551 634 */ 552 635 extern NXstatus NXinquirefile(NXhandle handle, char *filename, int filenameBufferLength); 636 553 637 /** 554 638 * Test if a group is actually pointing to an external file. If so, retrieve the URL of the … … 560 644 * \param urlLen The length of the Url buffer. At maximum urlLen bytes will be copied to url. 561 645 * \return NX_OK when the group is pointing to an external file, NX_ERROR else. 646 * \ingroup c_readwrite 562 647 */ 563 648 extern NXstatus NXisexternalgroup(NXhandle handle, CONSTCHAR *name, CONSTCHAR *nxclass, char *url, int urlLen); 649 564 650 /** 565 651 * Create a link to an external file. This works by creating a NeXus group under the current level in … … 572 658 * path to the group in the external file which appears in the first file. 573 659 * \return NX_OK on success, NX_ERROR in the case of an error. 660 * \ingroup c_readwrite 574 661 */ 575 662 extern NXstatus NXlinkexternal(NXhandle handle, CONSTCHAR *name, CONSTCHAR *nxclass, CONSTCHAR *url); 663 576 664 /** 577 665 * Utility function which allocates a suitably sized memory area for the dataset characteristics specified. … … 581 669 * \param datatype The NeXus data type of the data. 582 670 * \return NX_OK when allocation succeeds, NX_ERROR in the case of an error. 671 * \ingroup c_memory 583 672 */ 584 673 extern NXstatus NXmalloc(void** data, int rank, int dimensions[], int datatype); 674 585 675 /** 586 676 * Utility function to release the memory for data. 587 677 * \param data A pointer to a pointer to free. 588 678 * \return NX_OK on success, NX_ERROR in the case of an error. 679 * \ingroup c_memory 589 680 */ 590 681 extern NXstatus NXfree(void** data); … … 594 685 NAPI internals 595 686 ------------------------------------------------------------------------*/ 687 /** 688 * Retrieve information about the currently open dataset. In contrast to the main function below, 689 * this function does not try to find out about the size of strings properly. 690 * \param handle A NeXus file handle as initialized by NXopen. 691 * \param rank A pointer to an integer which will be filled with the rank of 692 * the dataset. 693 * \param dimension An array which will be initialized with the size of the dataset in any of its 694 * dimensions. The array must have at least the size of rank. 695 * \param datatype A pointer to an integer which be set to the NeXus data type code for this dataset. 696 * \return NX_OK on success, NX_ERROR in the case of an error. 697 * \ingroup c_metadata 698 */ 699 extern NXstatus NXgetrawinfo(NXhandle handle, int* rank, int dimension[], int* datatype); 700 596 701 /** \typedef void (*ErrFunc)(void *data, char *text) 597 702 * All NeXus error reporting happens through this special function, the … … 603 708 */ 604 709 typedef void (*ErrFunc)(void *data, char *text); 710 605 711 /** 606 712 * Set an error function. … … 610 716 */ 611 717 extern void NXMSetError(void *pData, ErrFunc newErr); 718 612 719 /** 613 720 * Retrieve the current error display function … … 615 722 */ 616 723 extern ErrFunc NXMGetError(); 724 617 725 /** 618 726 * Suppress error reports from the NeXus-API 619 727 */ 620 728 extern void NXMDisableErrorReporting(); 729 621 730 /** 622 731 * Enable error reports from the NeXus-API -
branches/4.2/src/napi.c
r1104 r1230 35 35 #include "napi.h" 36 36 #include "nxstack.h" 37 38 /** 39 * \mainpage NeXus API documentation 40 * \section sec_purpose Purpose of API 41 * The NeXus Application Program Interface is a suite of subroutines, written in C but with wrappers in Fortran 77 and 90. 42 * The subroutines call HDF routines to read and write the NeXus files with the correct structure. 43 * An API serves a number of useful purposes: 44 * - It simplifies the reading and writing of NeXus files. 45 * - It ensures a certain degree of compliance with the NeXus standard. 46 * - It allows the development of sophisticated input/output features such as automatic unit conversion. This has not been implemented yet. 47 * - It hides the implementation details of the format. In particular, the API can read and write HDF4, 48 HDF5 (and shortly XML) files using the same routines. 49 * For these reasons, we request that all NeXus files are written using the supplied API. We cannot be 50 * sure that anything written using the underlying HDF API will be recognized by NeXus-aware utilities. 51 * 52 * \section sec_core Core API 53 * The core API provides the basic routines for reading, writing and navigating NeXus files. It is designed to be modal; 54 * there is a hidden state that determines which groups and data sets are open at any given moment, and 55 * subsequent operations are implicitly performed on these entities. This cuts down the number of parameters 56 * to pass around in API calls, at the cost of forcing a certain pre-approved mode d'emploi. This mode d'emploi 57 * will be familiar to most: it is very similar to navigating a directory hierarchy; in our case, NeXus groups are the 58 * directories, which contain data sets and/or other directories. 59 * 60 * The core API comprises several functional groups which are listed on the \b Modules tab 61 * 62 * C programs that call the above routines should include the following header file: 63 * \code 64 * #include "napi.h" 65 * \endcode 66 */ 67 68 37 69 38 70 /*--------------------------------------------------------------------- … … 825 857 return status; 826 858 } 827 859 /*---------------------------------------------------------------------------*/ 860 NXstatus NXgetrawinfo (NXhandle fid, int *rank, 861 int dimension[], int *iType) 862 { 863 int status; 864 char *pPtr = NULL; 865 866 pNexusFunction pFunc = handleToNexusFunc(fid); 867 status = pFunc->nxgetinfo(pFunc->pNexusData, rank, dimension, iType); 868 return status; 869 } 828 870 /*-------------------------------------------------------------------------*/ 829 871 -
branches/4.2/src/napi4.c
r1085 r1230 1145 1145 iRet = SDwritedata (pFile->iCurrentSDS, iStart, iStride, iSize, data); 1146 1146 if (iRet < 0) { 1147 /* HEprint(stdout,0); */ 1147 1148 sprintf (pError, "ERROR: failure to write data to %s", pBuffer); 1148 1149 NXIReportError (NXpData, pError); -
branches/4.2/src/napi5.c
r1111 r1230 1798 1798 vid = getAttVID(pFile); 1799 1799 1800 pName[0] = '\0'; 1800 1801 idx=pFile->iAtt5.iCurrentIDX; 1801 1802 iRet=0; -
branches/4.2/src/napi_exports.h
r942 r1230 256 256 return NXmakenamedlink(fid, newname, pLink); 257 257 } 258 259 NXstatus CALL_MODE NXIGETRAWINFO(NXhandle handle, int* rank, int dimension[], int* datatype) 260 { 261 return NXgetrawinfo(handle, rank, dimension, datatype); 262 } 263 -
branches/4.2/src/nexus_symbols_win.txt
r942 r1230 22 22 NXIGETNEXTATTR@16 23 23 NXIGETNEXTENTRY@16 24 NXIGETRAWINFO@16 24 25 NXIGETSLAB@16 25 26 NXIINITATTRDIR@4
Note: See TracChangeset
for help on using the changeset viewer.
