コード例 #1
0
ファイル: CitcomHDFThread.py プロジェクト: QuLogic/citcoms
class CitcomSHdf2UGridThread(Thread):
    
   hdf2ugrid = None
   filename = ''
   current_timestep=0
   nx_redu = 0
   ny_redu = 0
   nz_redu = 0
   
   callback_function = None
   
   def __init__ (self):
       Thread.__init__(self)
       self.hdf2ugrid = CitcomSHDFUgrid()
  
   def set_citcomsreader(self,filename,current_timestep,nx_redu,ny_redu,nz_redu,callback_function):
       self.filename = filename
       self.current_timestep = current_timestep
       self.nx_redu = nx_redu
       self.ny_redu = ny_redu
       self.nz_redu = nz_redu
       self.callback_function = callback_function
       
   def get_ref(self):
       return weakref.ref(self.hdf2ugrid)
   
   def run(self):
       hexagrid = self.hdf2ugrid.initialize(self.filename,self.current_timestep,self.nx_redu,self.ny_redu,self.nz_redu)
       vtk_viscosity = self.hdf2ugrid.get_vtk_viscosity()
       vtk_temperature = self.hdf2ugrid.get_vtk_temperature()
       self.callback_function(hexagrid,vtk_viscosity,vtk_temperature)
コード例 #2
0
class CitcomSHdf2UGridThread(Thread):

    hdf2ugrid = None
    filename = ''
    current_timestep = 0
    nx_redu = 0
    ny_redu = 0
    nz_redu = 0

    callback_function = None

    def __init__(self):
        Thread.__init__(self)
        self.hdf2ugrid = CitcomSHDFUgrid()

    def set_citcomsreader(self, filename, current_timestep, nx_redu, ny_redu,
                          nz_redu, callback_function):
        self.filename = filename
        self.current_timestep = current_timestep
        self.nx_redu = nx_redu
        self.ny_redu = ny_redu
        self.nz_redu = nz_redu
        self.callback_function = callback_function

    def get_ref(self):
        return weakref.ref(self.hdf2ugrid)

    def run(self):
        hexagrid = self.hdf2ugrid.initialize(self.filename,
                                             self.current_timestep,
                                             self.nx_redu, self.ny_redu,
                                             self.nz_redu)
        vtk_viscosity = self.hdf2ugrid.get_vtk_viscosity()
        vtk_temperature = self.hdf2ugrid.get_vtk_temperature()
        self.callback_function(hexagrid, vtk_viscosity, vtk_temperature)
コード例 #3
0
ファイル: CitcomHDFThread.py プロジェクト: QuLogic/citcoms
 def __init__ (self):
     Thread.__init__(self)
     self.hdf2ugrid = CitcomSHDFUgrid()
コード例 #4
0
 def __init__(self):
     Thread.__init__(self)
     self.hdf2ugrid = CitcomSHDFUgrid()
コード例 #5
0
class CitcomSHDFFileReader(Source):
    """This source manages a CitcomS Hdf file given to it. """

    # The version of this class.  Used for persistence.
    __version__ = 0

    # The VTK dataset to manage.
    data = Instance(tvtk.DataSet)
    # Class to convert Hdf to Vtk Unstructured Grid Objects
    citcomshdftougrid = CitcomSHDFUgrid()

    timestep = Int(0)

    #To support changing the Scalar values in Mayavi2
    temperature = Instance(tvtk.FloatArray())
    viscosity = Instance(tvtk.FloatArray())

    #Resolution comming from Hdf file
    nx = Int()
    ny = Int()
    nz = Int()

    #Current reduced resolution. User defined
    nx_redu = Int()
    ny_redu = Int()
    nz_redu = Int()

    #Number of timesteps in Hdf
    #timesteps = Int()

    #Button to trigger the process of reading a timestep
    read_data = Button('Read data')
    filename = Str()

    ########################################
    # Dynamic traits: These traits are dummies and are dynamically
    # updated depending on the contents of the file.

    # The active point scalar name.
    point_scalars_name = Trait('', TraitPrefixList(['']))
    # The active point vector name.
    point_vectors_name = Trait('', TraitPrefixList(['']))
    # The active point tensor name.
    point_tensors_name = Trait('', TraitPrefixList(['']))

    # The active cell scalar name.
    cell_scalars_name = Trait('', TraitPrefixList(['']))
    # The active cell vector name.
    cell_vectors_name = Trait('', TraitPrefixList(['']))
    # The active cell tensor name.
    cell_tensors_name = Trait('', TraitPrefixList(['']))
    ########################################

    # Our view.
    view = View(
        Group(  #Item(name='current_timestep'),
            #Item(name='filename'), # how to disable editing?
            Item(name='nx_redu', label='Grid Size in X'),
            Item(name='ny_redu', label='Grid Size in Y'),
            Item(name='nz_redu', label='Grid Size in Z'),
            Item(name='read_data', style='simple', label='Simple'),
            Item(name='point_scalars_name'),
            Item(name='point_vectors_name'),
            Item(name='point_tensors_name'),
            #Item(name='cell_scalars_name'),
            #Item(name='cell_vectors_name'),
            #Item(name='cell_tensors_name'),
        ), )

    ######################################################################
    # `object` interface
    ######################################################################
    #Invoked during process of saving the visualization to a file
    def __get_pure_state__(self):
        d = super(CitcomSHDFFileReader, self).__get_pure_state__()
        output = "Filename: " + self.filename + "NX:%d NY:%d NZ:%d" % (
            self.nx_redu, self.ny_redu, self.nz_redu)
        z = gzip_string(output)
        d['data'] = z
        return d

    #When the Visualisation is opened again this Method is called
    def __set_pure_state__(self, state):
        z = state.data
        if z:
            d = gunzip_string(z)
            m = re.search('(?<=Filename:)\w+', header)
            file_name = m.group(0)
            m = re.search('(?<=NX:)\w+', d)
            self.nx_redu = int(m.group(0))
            m = re.search('(?<=NX:)\w+', d)
            self.ny_redu = int(m.group(0))
            m = re.search('(?<=NX:)\w+', d)
            self.nz_redu = int(m.group(0))

            if not isfile(file_name):
                msg = 'Could not find file at %s\n' % file_name
                msg += 'Please move the file there and try again.'
                raise IOError, msg

            (step, modelname, metafilepath, filepath) = parsemodel(file_name)
            file_name = metafilepath

            self.filename = file_name

            #self.data = self.citcomshdftougrid.initialize(self.filename,0,0,0,0,False,False)
            f = tables.openFile(file_name, 'r')
            self.nx = int(f.root.input._v_attrs.nodex)
            self.ny = int(f.root.input._v_attrs.nodey)
            self.nz = int(f.root.input._v_attrs.nodez)

            #self.timesteps = int(f.root.time.nrows)

            f.close()
            self.data = self.citcomshdftougrid.initialize(
                self.filename, self.current_timestep, self.nx_redu,
                self.ny_redu, self.nz_redu)
            self.data_changed = True
            self._update_data()
            # Now set the remaining state without touching the children.
            set_state(self, state, ignore=['children', '_file_path'])
            # Setup the children.
            handle_children_state(self.children, state.children)
            # Setup the children's state.
            set_state(self, state, first=['children'], ignore=['*'])

    ######################################################################
    # `Base` interface
    ######################################################################
    def start(self):
        """This is invoked when this object is added to the mayavi
        pipeline.
        """
        # Do nothing if we are already running.
        if self.running:
            return

        # Update the data just in case.
        self._update_data()

        # Call the parent method to do its thing.  This will typically
        # start all our children.
        super(CitcomSHDFFileReader, self).start()

    def update(self):
        """Invoke this to flush data changes downstream."""
        self.data_changed = True

    def initialize(self, file_name):
        """This Methods initializes the reader and reads the meta-information from the Hdf file """
        self.filename = file_name

        #self.data = self.citcomshdftougrid.initialize(self.filename,0,0,0,0,False,False)
        from citcoms_plugins.utils import parsemodel

        (step, modelname, coordpath, filepath) = parsemodel(file_name)
        if step is None:
            step = 0

        f = tables.openFile(coordpath, 'r')
        self.nx = int(f.root.input._v_attrs.nodex)
        self.ny = int(f.root.input._v_attrs.nodey)
        self.nz = int(f.root.input._v_attrs.nodez)

        self.nx_redu = self.nx
        self.ny_redu = self.ny
        self.nz_redu = self.nz

        self.timestep = step
        #self.timesteps = int(f.root.time.nrows)
        f.close()

    ######################################################################
    # `TreeNodeObject` interface
    ######################################################################
    def tno_get_label(self, node):
        """ Gets the label to display for a specified object.
        """
        import os.path
        par, file = os.path.split(self.filename)
        if self.data:
            msg = "ready"
        else:
            msg = "not initialized"
        return "%s (%s)" % (file, msg)

    ######################################################################
    # Non-public interface
    ######################################################################
    def _data_changed(self, data):
        """Invoked when the upsteam data sends an data_changed event"""
        self._update_data()
        self.outputs = [data]
        self.data_changed = True
        # Fire an event so that our label on the tree is updated.
        self.trait_property_changed('name', '', self.tno_get_label(None))

    ##Callbacks for our traits
    def _current_timestep_changed(self, new_value):
        """Callback for the current timestep input box"""
        if new_value < 0:
            self.current_timestep = 0
        #if new_value > self.timesteps:
        #    self.current_timestep = self.timesteps-1

    def _read_data_fired(self):
        """Callback for the Button to read the data"""

        self.data = self.citcomshdftougrid.initialize(self.filename,
                                                      self.timestep,
                                                      self.nx_redu,
                                                      self.ny_redu,
                                                      self.nz_redu)
        self.temperature = self.citcomshdftougrid.get_vtk_temperature()
        self.viscosity = self.citcomshdftougrid.get_vtk_viscosity()

        self.data_changed = True
        self._update_data()

    def _nx_redu_changed(self, new_value):
        """callback for the nx_redu input box"""
        if new_value < 1:
            self.nx_redu = 1
        if new_value > self.nx:
            self.nx_redu = self.nx

    def _ny_redu_changed(self, new_value):
        """callback for the ny_redu input box"""
        if new_value < 1:
            self.ny_redu = 1
        if new_value > self.ny:
            self.ny_redu = self.ny

    def _nz_redu_changed(self, new_value):
        """callback for the nz_redu input box"""
        if new_value < 1:
            self.nz_redu = 1
        if new_value > self.nz:
            self.nz_redu = self.nz

    def _point_scalars_name_changed(self, value):
        if value == "Temperature":
            self.data.point_data.scalars = self.temperature
        if value == "Viscosity":
            self.data.point_data.scalars = self.viscosity
        self.data_changed = True
        self._set_data_name('scalars', 'point', value)

    def _point_vectors_name_changed(self, value):
        self._set_data_name('vectors', 'point', value)

    def _point_tensors_name_changed(self, value):
        self._set_data_name('tensors', 'point', value)

    ########################Non Public##############################
    def _set_data_name(self, data_type, attr_type, value):
        if not value:
            return
        dataset = self.data
        data = None
        if attr_type == 'point':
            data = dataset.point_data
        elif attr_type == 'cell':
            data = dataset.cell_data
        meth = getattr(data, 'set_active_%s' % data_type)
        meth(value)
        self.update()
        # Fire an event, so the changes propagate.
        self.data_changed = True

    def _update_data(self):
        if not self.data:
            return
        else:
            trait = Trait('Temperature',
                          TraitPrefixList('Temperature', 'Viscosity'))
            self.add_trait('point_scalars_name', trait)
            trait = Trait('Velocity', TraitPrefixList('Velocity'))
            self.add_trait('point_vectors_name', trait)

    def thread_callback(self, hexagrid, vtk_viscosity, vtk_temperature):
        hexagrid.print_traits()
        self.data = hexagrid
        self.temperature = vtk_temperature
        self.viscosity = vtk_temperature