diff --git a/conda-recipe/build.sh b/conda-recipe/build.sh new file mode 100644 index 0000000..11b8851 --- /dev/null +++ b/conda-recipe/build.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +$PYTHON setup.py install +cp -r vt_config/NSLS-II $SP_DIR/vistrails/packages/ diff --git a/conda-recipe/meta.yaml b/conda-recipe/meta.yaml new file mode 100644 index 0000000..d34e24c --- /dev/null +++ b/conda-recipe/meta.yaml @@ -0,0 +1,33 @@ +package: + name: vttools + version: {{ environ['GIT_DESCRIBE_TAG'] }}.post{{ environ['GIT_DESCRIBE_NUMBER'] }} + +source: + git_url: ../ + + +build: + number: 0 + string: {{ environ.get('GIT_BUILD_STR', '') }}_np{{ np }}py{{ py }} + +requirements: + build: + - python + - setuptools + - vistrails + run: + - python + - vistrails + - numpy + - scikit-xray + - pyyaml + - numpydoc + - tifffile + - bubblegum + +test: + imports: + - vttools + +about: + license: 3-Clause BSD diff --git a/setup.py b/setup.py index 2da8e09..f3acbf0 100644 --- a/setup.py +++ b/setup.py @@ -1,13 +1,6 @@ -#!/usr/bin/env python import setuptools -from distutils.core import setup, Extension - -import numpy as np -import os -import shutil -from subprocess import call -import sys +from distutils.core import setup setup( name='vttools', @@ -15,17 +8,8 @@ author='Brookhaven National Lab', packages=["vttools", 'vttools.vtmods', - 'vttools.vtmods.import_lists' + 'vttools.vtmods.import_lists', + 'vttools.to_wrap' ], - include_dirs=[np.get_include()], package_data = {'vttools.vtmods.import_lists': ['*.yaml']} ) - - -src = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'vt_config', - 'NSLS-II') -dst = os.path.join(os.path.expanduser('~'), '.vistrails', 'userpackages', - 'NSLS-II') - -from vttools.utils import make_symlink -make_symlink(dst=dst, src=src) diff --git a/vt_config/NSLS-II/init.py b/vt_config/NSLS-II/init.py index 00b60ce..3cf2229 100644 --- a/vt_config/NSLS-II/init.py +++ b/vt_config/NSLS-II/init.py @@ -36,7 +36,7 @@ Created on Apr 29, 2014 ''' from __future__ import (absolute_import, division, print_function, - unicode_literals) + ) import six import logging import sys diff --git a/vttools/__init__.py b/vttools/__init__.py index 7b143b7..cfe6149 100644 --- a/vttools/__init__.py +++ b/vttools/__init__.py @@ -34,7 +34,7 @@ ######################################################################## from __future__ import (absolute_import, division, print_function, - unicode_literals) + ) import six import logging diff --git a/vttools/func_wrap_smoketest.py b/vttools/func_wrap_smoketest.py index a63fdfa..2fe6827 100644 --- a/vttools/func_wrap_smoketest.py +++ b/vttools/func_wrap_smoketest.py @@ -36,7 +36,7 @@ This module is for spectroscopy specific tools (spectrum fitting etc). """ from __future__ import (absolute_import, division, print_function, - unicode_literals) + ) import six from six.moves import zip diff --git a/vttools/tests/test_fitting.py b/vttools/tests/test_fitting.py index c7559c2..56e24e0 100644 --- a/vttools/tests/test_fitting.py +++ b/vttools/tests/test_fitting.py @@ -33,7 +33,7 @@ # POSSIBILITY OF SUCH DAMAGE. # ######################################################################## from __future__ import (absolute_import, division, print_function, - unicode_literals) + ) import numpy as np import six @@ -43,7 +43,7 @@ from skxray.testing.decorators import known_fail_if from vttools.to_wrap.fitting import (gaussian_model, lorentzian_model, lorentzian2_model, quadratic_model, - fit_engine) + fit_engine, fit_engine_list, expression_model) from nose.tools import (assert_equal, assert_true, raises) @@ -114,6 +114,7 @@ def test_lorentzian2_fit(): fitted_val = (out['area'], out['center'], out['sigma']) assert_array_almost_equal(true_val, fitted_val) + def test_quadratic_fit(): x = np.arange(-1, 1, .01) a = 1 @@ -133,3 +134,31 @@ def test_quadratic_fit(): out = result.values fitted_val = (out['a'], out['b'], out['c']) assert_array_almost_equal(true_val, fitted_val) + + +def test_fit_engine_list(): + a = 1 + b = 2 + c = 3 + m = quadratic_model('', + a, 'free', [-1, 1], + b, 'free', [-1, 1], + c, 'free', [-1, 1]) + x = np.arange(-1, 1, 0.01) + y = x**2 + 1 + + datav = [(x, y), (x, y+2)] + out = fit_engine_list(m, datav) + assert_equal(len(out), 2) + + +def test_expression_model(): + + inputv = 'exp(-a*x)' + + x = np.arange(-1, 1, 0.01) + y = np.exp(-x) + + mod = expression_model(inputv) + out = mod.fit(y, x=x, a=0.1) + assert_equal(1, out.values['a']) diff --git a/vttools/tests/test_wrap_lib.py b/vttools/tests/test_wrap_lib.py index d5cffab..e599deb 100644 --- a/vttools/tests/test_wrap_lib.py +++ b/vttools/tests/test_wrap_lib.py @@ -34,7 +34,7 @@ ######################################################################## from __future__ import (absolute_import, division, print_function, - unicode_literals) + ) import six import logging diff --git a/vttools/to_wrap/fitting.py b/vttools/to_wrap/fitting.py index 545bd2c..874d594 100644 --- a/vttools/to_wrap/fitting.py +++ b/vttools/to_wrap/fitting.py @@ -34,7 +34,8 @@ ######################################################################## import sys from skxray.fitting.api import (QuadraticModel, GaussianModel, - LorentzianModel, Lorentzian2Model) + LorentzianModel, Lorentzian2Model, + ExpressionModel) import logging logger = logging.getLogger(__name__) @@ -150,6 +151,24 @@ def fit_engine_list(g, data): return result_list +def expression_model(model_exp): + """ + This function creates a Model from a user-supplied expression. + + Parameters + ---------- + model_exp : str + expression of the model + + Returns + ------- + mod : array_like + object of fitting results + """ + mod = ExpressionModel(model_exp) + return mod + + def set_range(model_name, parameter_name, parameter_value, parameter_vary, parameter_range): @@ -265,9 +284,3 @@ def inner(prefix, amplitude, amplitude_vary, amplitude_range, func_name.amplitude_vary = ['fixed', 'free', 'bounded'] func_name.center_vary = ['fixed', 'free', 'bounded'] func_name.sigma_vary = ['fixed', 'free', 'bounded'] - - -function_list = [fit_engine, fit_engine_list, quadratic_model] - -for func_name in function_list: - setattr(mod, func_name.__name__, func_name) \ No newline at end of file diff --git a/vttools/utils.py b/vttools/utils.py index c380d0a..654e141 100644 --- a/vttools/utils.py +++ b/vttools/utils.py @@ -34,7 +34,7 @@ ######################################################################## from __future__ import (absolute_import, division, - print_function, unicode_literals) + print_function, ) import six import os import shutil diff --git a/vttools/vtmods/broker.py b/vttools/vtmods/broker.py index 619a0a5..15453e5 100644 --- a/vttools/vtmods/broker.py +++ b/vttools/vtmods/broker.py @@ -36,7 +36,7 @@ Created on Apr 29, 2014 ''' from __future__ import (absolute_import, division, print_function, - unicode_literals) + ) import six from PyQt4 import QtCore, QtGui from vistrails.core.modules.vistrails_module import Module, ModuleSettings diff --git a/vttools/vtmods/fitting.py b/vttools/vtmods/fitting.py index f0c9b10..e1b02df 100644 --- a/vttools/vtmods/fitting.py +++ b/vttools/vtmods/fitting.py @@ -34,7 +34,7 @@ ######################################################################## from __future__ import (absolute_import, division, print_function, - unicode_literals) + ) import six from vistrails.core.modules.vistrails_module import Module, ModuleSettings from vistrails.core.modules.config import IPort, OPort diff --git a/vttools/vtmods/import_lists/__init__.py b/vttools/vtmods/import_lists/__init__.py index edd1808..1275cfd 100644 --- a/vttools/vtmods/import_lists/__init__.py +++ b/vttools/vtmods/import_lists/__init__.py @@ -34,7 +34,7 @@ ######################################################################## from __future__ import (absolute_import, division, print_function, - unicode_literals) + ) import six import os import yaml diff --git a/vttools/vtmods/import_lists/modules.yaml b/vttools/vtmods/import_lists/modules.yaml index 87e8bd4..0c5e27f 100644 --- a/vttools/vtmods/import_lists/modules.yaml +++ b/vttools/vtmods/import_lists/modules.yaml @@ -74,6 +74,9 @@ autowrap_func: - func_name: fit_engine_list module_path: vttools.to_wrap.fitting namespace: fitting +- func_name: expression_model + module_path: vttools.to_wrap.fitting + namespace: fitting # CALIBRATION - func_name: refine_center module_path: skxray.calibration diff --git a/vttools/vtmods/utils.py b/vttools/vtmods/utils.py index 110fdce..7e61a5c 100644 --- a/vttools/vtmods/utils.py +++ b/vttools/vtmods/utils.py @@ -33,7 +33,7 @@ # POSSIBILITY OF SUCH DAMAGE. # ######################################################################## from __future__ import (absolute_import, division, print_function, - unicode_literals) + ) import six from bubblegum.qt_widgets import query_widget from logging import Handler @@ -44,6 +44,8 @@ from .broker import search import numpy as np from metadataStore.utilities.utility import get_data_keys +import enaml +from enaml.qt.qt_application import QtApplication import logging logger = logging.getLogger(__name__) @@ -153,6 +155,13 @@ def search_databroker(search_dict): # unique_id_func=gen_unique_id) +from bubblegum.xrf.model.xrf_model import XRF +with enaml.imports(): + from bubblegum.xrf.view.xrf_view import XrfGui + +xrf_view = XrfGui() +xrf_view.xrf_model = XRF() + def setup_bnl_menu(): """ Creates and hooks up a BNL specific menu in the main window @@ -162,10 +171,14 @@ def setup_bnl_menu(): menu_bar = bw.menuBar() bnl_menu = menu_bar.addMenu("BNL") + print('\n\n\n\n\n\nBNL Menu Added\n\n\n\n\n\n\n\n\n') def foo(): print('menu bar clicked!') # query_window.show() + xrf_view.show() + + bnl_menu.addAction("demo", foo) diff --git a/vttools/vtmods/vis.py b/vttools/vtmods/vis.py index 9b373da..3aa3271 100644 --- a/vttools/vtmods/vis.py +++ b/vttools/vtmods/vis.py @@ -36,7 +36,7 @@ Created on Apr 29, 2014 ''' from __future__ import (absolute_import, division, print_function, - unicode_literals) + ) import six from PyQt4 import QtCore, QtGui from vistrails.core.modules.vistrails_module import (Module, ModuleSettings, diff --git a/vttools/wrap_lib.py b/vttools/wrap_lib.py index 71ff776..ec3725a 100644 --- a/vttools/wrap_lib.py +++ b/vttools/wrap_lib.py @@ -34,7 +34,7 @@ ######################################################################## from __future__ import (absolute_import, division, - print_function, unicode_literals) + print_function) import six import inspect import importlib @@ -487,11 +487,11 @@ def define_input_ports(docstring, func): port_is_enum = is_enum port_enum_list = enum_list # start with the easy ones - pdict = {'name': port_name, - 'label': short_description, + pdict = {'name': str(port_name), + 'label': str(short_description), 'optional': is_optional, - 'signature': pytype_to_vtsig(param_type=port_type, - param_name=port_name)} + 'signature': str(pytype_to_vtsig(param_type=port_type, + param_name=port_name))} # deal with if the function as an enum attribute if hasattr(func, port_name): @@ -518,8 +518,8 @@ def define_input_ports(docstring, func): port_enum_list = f_enums port_is_enum = True if port_is_enum: - pdict['entry_type'] = 'enum' - pdict['values'] = port_enum_list + pdict['entry_type'] = str('enum') + pdict['values'] = [str(x) for x in port_enum_list] logger.debug('port_param_dict: {0}'.format(pdict)) input_ports.append(IPort(**pdict)) @@ -576,7 +576,7 @@ def define_output_ports(docstring): if the_type == '': continue the_type = _check_alt_types(the_type) - output_ports.append(OPort(name=the_name, + output_ports.append(OPort(name=str(the_name), signature=pytype_to_vtsig( param_type=the_type, param_name=the_name)))