Example programs and data files¶
An example MIR data file, filled with random data, is available on our
GitHub repository, under
examples/random-data.mir
.
Creating a MIR data file¶
The following Python program creates a MIR data file, filled with random data:
#!/usr/bin/env python
from datetime import datetime
import os
import numpy as np # $ pip install numpy
import tables as tb # $ pip install tables
from tzlocal import get_localzone # $ pip install tzlocal
filename = 'random-data.mir'
sample_num_rows = 100
geometry_primitives = [
# dataset_name , num_vertices
('lines' , 2),
('triangles' , 3),
('quads' , 4),
('hexagons' , 6),
('tetrahedrons', 4),
('cuboids' , 8),
]
filters = tb.Filters(complib='zlib', complevel=1, shuffle=True, fletcher32=True)
with tb.open_file(filename, 'w', filters=filters) as fp:
geometry_layer = fp.create_group(where='/', name='geometry')
for dataset_name, num_vertices in geometry_primitives:
num_coordinates = num_vertices * 3 # num_coordinates_per_vertex
dataset = fp.create_earray(
where=geometry_layer,
name=dataset_name,
atom=tb.Float64Atom(),
shape=(0, num_coordinates),
)
dataset._v_attrs.num_vertices = num_vertices
dataset._v_attrs.num_coordinates = num_coordinates
dataset.append(np.random.rand(sample_num_rows, num_coordinates))
metadata_layer = fp.create_group(where='/', name='metadata')
metadata_layer._v_attrs.generator_name = __file__
metadata_layer._v_attrs.generator_version = '1.0'
metadata_layer._v_attrs.mir_version = '0.1'
metadata_layer._v_attrs.created_at = datetime.now(get_localzone()).replace(
microsecond=0
).isoformat()
Note
The geometry
layer, while structurally valid, may not contain valid
geometry primitives due to randomly generated coordinates.
Reading from a MIR data file¶
The following Python program reads some data from a MIR data file:
#!/usr/bin/env python
import tables as tb # $ pip install tables
filename = 'random-data.mir'
with tb.open_file(filename) as fp:
print 'Loading the `/geometry/quads` dataset...'
dataset = fp.root.geometry.quads
print '\nFirst 5 geometry primitives in the dataset:'
print dataset[:5]
print '\nLast vertex of the first 5 geometry primitives in the dataset:'
print dataset[:5, -3:]
print '\n`num_vertices` dataset attribute:',
print dataset._v_attrs.num_vertices