Source code for lib_dd.decomposition.ccd_single

"""

"""
import os
from multiprocessing import Pool
import logging

import lib_dd.decomposition.ccd_single_stateless as decomp_single_sl
import lib_dd.interface as lDDi
import lib_dd.config.cfg_single as cfg_single
import lib_dd.io.io_general as iog


[docs]class ccd_single(object): """Cole-Cole decomposition object """ def __init__(self, config=None): if config is None: config = cfg_single.cfg_single() self.config = config # this will be filled by self.get_data_dd_single self.data = None self.results = None
[docs] def fit_data(self): """This is the central fit function, which prepares the data, fits each spectrum, plots (if requested), and then saves the results. """ if self.data is None: self.get_data_dd_single() # prepare data for multiprocessing by sorting it into individual dicts # note that this process duplicated a lot of data! fit_datas = decomp_single_sl._get_fit_datas(self.data) # fit if(self.data['prep_opts']['nr_cores'] == 1): logging.info('single processing') # single processing results = list(map(decomp_single_sl.fit_one_spectrum, fit_datas)) else: # multi processing logging.info('multi processing') p = Pool(self.data['prep_opts']['nr_cores']) results = p.map(decomp_single_sl.fit_one_spectrum, fit_datas) # results now contains one or more ND objects self.results = results
[docs] def get_data_dd_single(self): """ Load frequencies and data and return a data dict Parameters ---------- options: cmd options Returns ------- data: dict with entries "raw_data", "cr_data", "options", "inv_opts", "prep_opts" """ # make sure we deal with an absolute path outdir = os.path.abspath(self.config['output_dir']) data, self.config = lDDi.load_frequencies_and_data(self.config) # we need list of spectra size_y = int(data['raw_data'].shape[1] / 2) cr_data = [x.reshape((size_y, 2), order='F') for x in data['raw_data']] data['cr_data'] = cr_data # we distinguish two sets of options: # prep_opts : all settings we need to prepare the inversion (i.e. set # regularization objects) # inv_opts : options that are directly looped through to the NDimInv # object prep_opts, inv_opts = self.config.split_options() data['outdir'] = outdir data['options'] = self.config data['prep_opts'] = prep_opts data['inv_opts'] = inv_opts self.data = data return data
[docs] def save_to_directory(self, directory=None): """Save the fit results to a directory. The output directory can either be set in the initial configuration object, or directly via the directory parameter """ if self.data is None or self.results is None: logging.info('No fit results present!') return if directory is not None: outdir = directory else: outdir = os.path.abspath(self.config['output_dir']) if not os.path.isdir(outdir): os.makedirs(outdir) pwd = os.getcwd() os.chdir(outdir) iog.save_fit_results( self.data, self.results ) os.chdir(pwd)