Source code for plugins.loaders.mapping_loaders.mm_loader

# Copyright 2014 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:: mm_loader
   :platform: Unix
   :synopsis: A class for loading multi-modal data

.. moduleauthor:: Nicola Wadeson <scientificsoftware@diamond.ac.uk>

"""

from savu.plugins.loaders.base_loader import BaseLoader
from savu.plugins.loaders.mapping_loaders.nxfluo_loader \
    import NxfluoLoader as fluo
from savu.plugins.loaders.mapping_loaders.nxxrd_loader \
    import NxxrdLoader as xrd
from savu.plugins.loaders.mapping_loaders.nxstxm_loader \
    import NxstxmLoader as stxm
from savu.plugins.loaders.mapping_loaders.nxmonitor_loader \
    import NxmonitorLoader as mon
import logging

from savu.plugins.utils import register_plugin


[docs]@register_plugin class MmLoader(BaseLoader): def __init__(self, name='MmLoader'): super(MmLoader, self).__init__(name) self.fluo_keys = self.add_default_params(fluo(), 'fluo') self.xrd_keys = self.add_default_params(xrd(), 'xrd') self.stxm_keys = self.add_default_params(stxm(), 'stxm') self.mon_keys = self.add_default_params(mon(), 'monitor')
[docs] def add_default_params(self, inst, name): ptools = self.get_plugin_tools() inst_keys = inst.parameters.keys() copy_keys = list(inst_keys - self.parameters.keys()) if 'name' in copy_keys: copy_keys.remove('name') for key in copy_keys: ptools.param.set(key, inst.get_plugin_tools().param.get(key)) ptools.parameters[key] = inst.get_plugin_tools().parameters[key] return inst_keys
[docs] def separate_params(self, name, keys): mm_loader_keys = self.get_plugin_tools()._load_param_from_doc( self.get_plugin_tools()).keys() all_keys = keys - mm_loader_keys new_dict = {} for key in [k for k in all_keys if k != 'name']: new_dict[key] = self.parameters[key] new_dict['name'] = self.name_dict[name] new_dict['preview'] = self.parameters['preview'][new_dict['name']] return new_dict
def __set_names(self): fluo, xrd, stxm, monitor = self.parameters['dataset_names'] self.name_dict = {'fluo': fluo, 'xrd': xrd, 'stxm': stxm, 'monitor': monitor} def __set_preview(self): preview_dict = {} preview = self.parameters['preview'] for name in list(self.name_dict.values()): preview_dict[name] = preview[name] if isinstance(preview, dict) \ and name in list(preview.keys()) else preview if \ isinstance(preview, list) else [] self.parameters['preview'] = preview_dict
[docs] def setup(self): self.__set_names() self.__set_preview() self._data_loader(fluo(), 'fluo', self.fluo_keys) self._data_loader(xrd(), 'xrd', self.xrd_keys) self._data_loader(stxm(), 'stxm', self.stxm_keys) self._data_loader(mon(), 'monitor', self.mon_keys)
def _data_loader(self, inst, name, key): debug_str = 'This file contains an ' + name warn_str = 'This file does not contain a ' + name try: params = self.separate_params(name, key) inst.initialise(params, self.exp) logging.debug(debug_str) except IndexError: # Delete the data object if it has already been created. if name in self.exp.index['in_data']: del self.exp.index['in_data'][name] logging.warning(warn_str) except: raise
[docs] def final_parameter_updates(self): # names of individual datasets are not required self.delete_parameter_entry('name')