def testWriteNamedCompoundAttribute(self): a=_pyhl.nodelist() rinfo_obj =_rave_info_type.object() rinfo_type=_rave_info_type.type() rinfo_obj.xsize = 98 rinfo_obj.ysize = 97 rinfo_obj.xscale = 120.0 rinfo_obj.yscale = 130.0 rinfo_obj.area_extent = (33.0,32.0,31.0,30.0) self.addTypeNode(a, "/RaveType", rinfo_type.hid()) self.addScalarValueNode(a, _pyhl.ATTRIBUTE_ID, "/attribute", rinfo_type.size(), rinfo_obj.tostring(), "compound", rinfo_type.hid()) a.write(self.TESTFILE) #verify a=_pyhl.read_nodelist(self.TESTFILE) b=a.fetchNode("/RaveType") self.assertEqual("UNDEFINED", b.format()) self.assertEqual(_pyhl.TYPE_ID, b.type()) b=a.fetchNode("/attribute") self.assertEqual("compound", b.format()) self.assertEqual(_pyhl.ATTRIBUTE_ID, b.type()) result = b.compound_data() self.assertEqual(98, result['xsize']) self.assertEqual(97, result['ysize']) self.assertEqual(120, result['xscale']) self.assertEqual(130, result['yscale']) self.assertTrue(numpy.all([33.0,32.0,31.0,30.0]==result['area_extent']))
def testReadCompoundAttribute2_byType(self): rinfo_type = _rave_info_type.type() rinfo_obj = _rave_info_type.object() node = self.h5nodelist.fetchNode("/compoundgroup/attribute2") self.assertEqual("/compoundgroup/attribute2", node.name()) self.assertEqual("compound", node.format()) self.assertEqual(_pyhl.ATTRIBUTE_ID, node.type()) b = node.rawdata() rinfo_obj.fromstring(node.rawdata()) self.assertEqual(99, rinfo_obj.xsize) self.assertEqual(109, rinfo_obj.ysize) self.assertEqual(150.0, rinfo_obj.xscale) self.assertEqual(150.0, rinfo_obj.yscale) self.assertTrue( numpy.all(rinfo_obj.area_extent == (10.0, 20.0, 30.0, 40.0)))
def writeFile(): # Create the rave info HDF5 type typedef = _rave_info_type.type() # Create the rave info HDF5 object obj = _rave_info_type.object() # Set the values obj.xsize = 10 obj.ysize = 10 obj.xscale = 150.0 obj.yscale = 150.0 aList = _pyhl.nodelist() # Create a datatype node aNode = _pyhl.node(_pyhl.TYPE_ID, "/MyDatatype") # Make the datatype named aNode.commit(typedef.hid()) aList.addNode(aNode) # Create an attribute containing the compound type aNode = _pyhl.node(_pyhl.ATTRIBUTE_ID, "/myCompoundAttribute") # Note that I use both itemSize and lhid # Also note how I translate the compound object to a string aNode.setScalarValue(typedef.size(), obj.tostring(), "compound", typedef.hid()) aList.addNode(aNode) # Better create a dataset also with the compound type obj.xsize = 1 obj.ysize = 1 aNode = _pyhl.node(_pyhl.DATASET_ID, "/myCompoundDataset") # I use setArrayValue instead aNode.setArrayValue(typedef.size(), [1], obj.tostring(), "compound", typedef.hid()) aList.addNode(aNode) # And finally write the HDF5 file. aList.write("compound_test.hdf")
def createVHLHDF_READ_DATAFILE(self): a=_pyhl.nodelist() b=_pyhl.node(_pyhl.ATTRIBUTE_ID,"/stringvalue") b.setScalarValue(-1,"My String","string",-1) a.addNode(b) b=_pyhl.node(_pyhl.ATTRIBUTE_ID,"/charvalue") b.setScalarValue(-1,123,"char",-1) a.addNode(b) b=_pyhl.node(_pyhl.ATTRIBUTE_ID,"/scharvalue") b.setScalarValue(-1,45,"schar",-1) a.addNode(b) b=_pyhl.node(_pyhl.ATTRIBUTE_ID,"/ucharvalue") b.setScalarValue(-1,99,"uchar",-1) a.addNode(b) b=_pyhl.node(_pyhl.ATTRIBUTE_ID,"/shortvalue") b.setScalarValue(-1,4321,"short",-1) a.addNode(b) b=_pyhl.node(_pyhl.ATTRIBUTE_ID,"/ushortvalue") b.setScalarValue(-1,9999,"ushort",-1) a.addNode(b) b=_pyhl.node(_pyhl.ATTRIBUTE_ID,"/intvalue") b.setScalarValue(-1,989898,"int",-1) a.addNode(b) b=_pyhl.node(_pyhl.ATTRIBUTE_ID,"/uintvalue") b.setScalarValue(-1,987654,"uint",-1) a.addNode(b) b=_pyhl.node(_pyhl.ATTRIBUTE_ID,"/longvalue") b.setScalarValue(-1,-123456789,"long",-1) a.addNode(b) b=_pyhl.node(_pyhl.ATTRIBUTE_ID,"/ulongvalue") b.setScalarValue(-1,123456789,"ulong",-1) a.addNode(b) b=_pyhl.node(_pyhl.ATTRIBUTE_ID,"/llongvalue") b.setScalarValue(-1,-123456789012,"llong",-1) a.addNode(b) b=_pyhl.node(_pyhl.ATTRIBUTE_ID,"/ullongvalue") b.setScalarValue(-1,123456789012,"ullong",-1) a.addNode(b) b=_pyhl.node(_pyhl.ATTRIBUTE_ID,"/floatvalue") b.setScalarValue(-1,12.65,"float",-1) a.addNode(b) b=_pyhl.node(_pyhl.ATTRIBUTE_ID,"/doublevalue") b.setScalarValue(-1,12999.8989,"double",-1) a.addNode(b) #Not supported yet #b=_pyhl.node(_pyhl.ATTRIBUTE_ID,"/ldoublevalue") #b.setScalarValue(-1,65765.762525,"ldouble",-1) #a.addNode(b) b=_pyhl.node(_pyhl.ATTRIBUTE_ID,"/hsizevalue") b.setScalarValue(-1,65765,"hsize",-1) a.addNode(b) b=_pyhl.node(_pyhl.ATTRIBUTE_ID,"/herrvalue") b.setScalarValue(-1,12,"herr",-1) a.addNode(b) b=_pyhl.node(_pyhl.ATTRIBUTE_ID,"/hboolvalue") b.setScalarValue(-1,0,"herr",-1) a.addNode(b) b=_pyhl.node(_pyhl.GROUP_ID, "/group1") a.addNode(b) b=_pyhl.node(_pyhl.GROUP_ID, "/group1/group11") a.addNode(b) # #DATASETS FOR char, schar, uchar, short, ushort, int, uint, long, float, double # b=_pyhl.node(_pyhl.DATASET_ID, "/group1/chardset") c = self.createDataset([5,5],numpy.character) b.setArrayValue(1,[5,5],c,"char",-1) a.addNode(b) b=_pyhl.node(_pyhl.DATASET_ID, "/group1/schardset") c = self.createDataset([5,5],numpy.int8) b.setArrayValue(1,[5,5],c,"schar",-1) a.addNode(b) b=_pyhl.node(_pyhl.DATASET_ID, "/group1/uchardset") c = self.createDataset([5,5],numpy.uint8) b.setArrayValue(1,[5,5],c,"uchar",-1) a.addNode(b) b=_pyhl.node(_pyhl.DATASET_ID, "/group1/shortdset") c = self.createDataset([5,5],numpy.int16) b.setArrayValue(1,[5,5],c,"short",-1) a.addNode(b) b=_pyhl.node(_pyhl.DATASET_ID, "/group1/ushortdset") c = self.createDataset([5,5],numpy.uint16) b.setArrayValue(1,[5,5],c,"ushort",-1) a.addNode(b) b=_pyhl.node(_pyhl.DATASET_ID, "/group1/intdset") c = self.createDataset([5,5],numpy.int32) b.setArrayValue(1,[5,5],c,"int",-1) a.addNode(b) b=_pyhl.node(_pyhl.DATASET_ID, "/group1/uintdset") c = self.createDataset([5,5],numpy.uint32) b.setArrayValue(1,[5,5],c,"uint",-1) a.addNode(b) b=_pyhl.node(_pyhl.DATASET_ID, "/group1/longdset") c = self.createDataset([5,5],numpy.int64) b.setArrayValue(1,[5,5],c,"long",-1) a.addNode(b) b=_pyhl.node(_pyhl.DATASET_ID, "/group1/floatdset") c = self.createDataset([5,5],numpy.float32) b.setArrayValue(1,[5,5],c,"float",-1) a.addNode(b) b=_pyhl.node(_pyhl.DATASET_ID, "/group1/doubledset") c = self.createDataset([5,5],numpy.float64) b.setArrayValue(1,[5,5],c,"double",-1) a.addNode(b) # ARRAYS OF TYPE string, double, float, int and long b=_pyhl.node(_pyhl.DATASET_ID, "/stringarray") c = ["ABC", "def", "EFG"] b.setArrayValue(1,[len(c)],c,"string",-1) a.addNode(b) b=_pyhl.node(_pyhl.DATASET_ID, "/doublearray") c = [1.0, 2.1, 3.2] b.setArrayValue(1,[len(c)],c,"double",-1) a.addNode(b) b=_pyhl.node(_pyhl.DATASET_ID, "/floatarray") c = [1.1, 2.2, 3.3] b.setArrayValue(1,[len(c)],c,"float",-1) a.addNode(b) b=_pyhl.node(_pyhl.DATASET_ID, "/intarray") c = [1, 2, 3, 4] b.setArrayValue(1,[len(c)],c,"int",-1) a.addNode(b) b=_pyhl.node(_pyhl.DATASET_ID, "/longarray") c = [2, 3, 4, 5, 6] b.setArrayValue(1,[len(c)],c,"long",-1) a.addNode(b) # Create a dataset with an attribute and a reference in it b=_pyhl.node(_pyhl.DATASET_ID, "/dataset1") c = [1, 2, 3, 4] b.setArrayValue(1,[len(c)],c,"int",-1) a.addNode(b) b=_pyhl.node(_pyhl.ATTRIBUTE_ID,"/dataset1/attribute1") b.setScalarValue(-1,989898,"int",-1) a.addNode(b) b=_pyhl.node(_pyhl.REFERENCE_ID,"/dataset1/doublearray") b.setScalarValue(-1,"/doublearray","string",-1) a.addNode(b) # REFERENCES POINTING AT DIFFERENT PLACES b=_pyhl.node(_pyhl.GROUP_ID, "/references") a.addNode(b) b=_pyhl.node(_pyhl.REFERENCE_ID,"/references/doublearray") b.setScalarValue(-1,"/doublearray","string",-1) a.addNode(b) b=_pyhl.node(_pyhl.REFERENCE_ID,"/references/floatdset") b.setScalarValue(-1,"/group1/floatdset","string",-1) a.addNode(b) b=_pyhl.node(_pyhl.REFERENCE_ID,"/references/group1") b.setScalarValue(-1,"/group1","string",-1) a.addNode(b) #b=_pyhl.node(_pyhl.REFERENCE_ID,"/references/tosomethingdefinedafterthis") #b.setScalarValue(-1,"/groupdefinedafterreferences","string",-1) #a.addNode(b) #b=_pyhl.node(_pyhl.GROUP_ID, "/groupdefinedafterreferences") #a.addNode(b) b=_pyhl.node(_pyhl.REFERENCE_ID,"/rootreferencetolongarray") b.setScalarValue(-1,"/longarray","string",-1) a.addNode(b) #Add a compound type as well rinfo_type=_rave_info_type.type() rinfo_obj=_rave_info_type.object() rinfo_obj.xsize=10 rinfo_obj.ysize=10 rinfo_obj.xscale=150.0 rinfo_obj.yscale=150.0 b=_pyhl.node(_pyhl.TYPE_ID,"/RaveDatatype") b.commit(rinfo_type.hid()) a.addNode(b) b=_pyhl.node(_pyhl.GROUP_ID, "/compoundgroup") a.addNode(b) b=_pyhl.node(_pyhl.ATTRIBUTE_ID,"/compoundgroup/attribute") b.setScalarValue(rinfo_type.size(),rinfo_obj.tostring(),"compound",rinfo_type.hid()) a.addNode(b) rinfo_obj.xsize=99 rinfo_obj.ysize=109 rinfo_obj.area_extent=(10.0, 20.0, 30.0, 40.0) b=_pyhl.node(_pyhl.ATTRIBUTE_ID,"/compoundgroup/attribute2") b.setScalarValue(rinfo_type.size(),rinfo_obj.tostring(),"compound",rinfo_type.hid()) a.addNode(b) rinfo_obj.xscale=170.0 rinfo_obj.area_extent=(10.0, 20.0, 35.0, 40.0) b=_pyhl.node(_pyhl.DATASET_ID,"/compoundgroup/dataset") b.setArrayValue(rinfo_type.size(),[1],rinfo_obj.tostring(),"compound",rinfo_type.hid()) a.addNode(b) # Create a compund array containing 2x2 items rinfo_obj2 =_rave_info_type.object() rinfo_obj2.xsize = 98 rinfo_obj2.ysize = 97 rinfo_obj2.xscale = 120.0 rinfo_obj2.yscale = 130.0 rinfo_obj2.area_extent = (33.0,32.0,31.0,30.0) rinfo_obj3 =_rave_info_type.object() rinfo_obj3.xsize = 88 rinfo_obj3.ysize = 87 rinfo_obj3.xscale = 100.0 rinfo_obj3.yscale = 110.0 rinfo_obj3.area_extent = (43.0,42.0,41.0,40.0) rinfo_obj4 =_rave_info_type.object() rinfo_obj4.xsize = 78 rinfo_obj4.ysize = 77 rinfo_obj4.xscale = 90.0 rinfo_obj4.yscale = 91.0 rinfo_obj4.area_extent = (53.0,52.0,51.0,50.0) b=_pyhl.node(_pyhl.DATASET_ID,"/compoundgroup/dataset2") str = rinfo_obj.tostring() + rinfo_obj2.tostring() + rinfo_obj3.tostring() + rinfo_obj4.tostring() b.setArrayValue(rinfo_type.size(),[2,2],str,"compound",rinfo_type.hid()) a.addNode(b) # Create an unamed compound value rinfo_unnamed_type=_rave_info_type.type() rinfo_unnamed_obj=_rave_info_type.object() rinfo_unnamed_obj.xsize = 1 rinfo_unnamed_obj.ysize = 2 rinfo_unnamed_obj.xscale = 10.0 rinfo_unnamed_obj.yscale = 20.0 rinfo_unnamed_obj.area_extent = (1.0, 2.0, 3.0, 4.0) b=_pyhl.node(_pyhl.ATTRIBUTE_ID,"/compoundgroup/unnamed_type_attribute") b.setScalarValue(rinfo_unnamed_type.size(),rinfo_unnamed_obj.tostring(),"compound",rinfo_unnamed_type.hid()) a.addNode(b) a.write(self.VHLHDF_READ_DATAFILE)