Source code for savu.core.transports.basic_transport

# Copyright 2015 Diamond Light Source Ltd.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""
.. module:: basic_transport
   :platform: Unix
   :synopsis: Transports data to and from file at the beginning and end of the\
   process list respectively.

.. moduleauthor:: Mark Basham <scientificsoftware@diamond.ac.uk>

"""

import os

from savu.core.transport_setup import MPI_setup
from savu.plugins.savers.utils.hdf5_utils import Hdf5Utils
from savu.core.transports.hdf5_transport import Hdf5Transport
from savu.core.transports.base_transport import BaseTransport


[docs]class BasicTransport(BaseTransport): def __init__(self): super(BasicTransport, self).__init__() self.global_data = True self.h5trans = Hdf5Transport() self.data_flow = None self.count = 0 self.hdf5_flag = True def _transport_initialise(self, options): MPI_setup(options) # initially reading from a hdf5 file so Hdf5TransportData will be used # for all datasets created in a loader options['transport'] = 'hdf5' os.environ['savu_mode'] = 'basic' def _transport_pre_plugin_list_run(self): # loaders have completed now revert back to BasicTransport, so any # output datasets created by a plugin will use this. self.hdf5 = Hdf5Utils(self.exp) self.data_flow = self.exp.meta_data.plugin_list._get_dataset_flow() plist = self.exp.meta_data.plugin_list self.n_plugins = plist._get_n_processing_plugins() self.final_dict = plist.plugin_list[-1] if self.n_plugins != 1: self.exp.meta_data.set('transport', 'basic') def _transport_pre_plugin(self): trans = self.exp.meta_data.get('transport') if self.count == self.n_plugins - 1 or trans == 'hdf5': self.__set_hdf5_transport() def _transport_post_plugin(self): # revert back to basic if a temporary transport mechanism was used if self.hdf5_flag: self.__unset_hdf5_transport() if self.count == self.n_plugins - 2: self.exp.meta_data.set('transport', 'hdf5') if self.count == self.n_plugins - 1: # final plugin self.h5trans.exp = self.exp self.h5trans.hdf5 = Hdf5Utils(self.exp) self.h5trans._transport_post_plugin() self.count += 1 def __set_hdf5_transport(self): self.hdf5_flag = True self.exp.meta_data.set('transport', 'hdf5') files = self._get_filenames(self.final_dict) self._set_file_details(files) self._setup_h5_files() def __unset_hdf5_transport(self): self.exp.meta_data.set('transport', 'basic') self.hdf5_flag = False def _transport_terminate_dataset(self, data): if data.backing_file: self.hdf5._close_file(data)