Changeset 063dd44 in sasview
- Timestamp:
- Apr 4, 2017 9:26:15 AM (8 years ago)
- Branches:
- master, ESS_GUI, ESS_GUI_Docs, ESS_GUI_batch_fitting, ESS_GUI_bumps_abstraction, ESS_GUI_iss1116, ESS_GUI_iss879, ESS_GUI_iss959, ESS_GUI_opencl, ESS_GUI_ordering, ESS_GUI_sync_sascalc, costrafo411, magnetic_scatt, release-4.2.2, ticket-1009, ticket-1094-headless, ticket-1242-2d-resolution, ticket-1243, ticket-1249, ticket885, unittest-saveload
- Children:
- a8d79fd, ce9e0b5
- Parents:
- ba22344 (diff), f433e6a (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent. - git-author:
- Andrew Jackson <andrew.jackson@…> (04/04/17 09:26:15)
- git-committer:
- GitHub <noreply@…> (04/04/17 09:26:15)
- Files:
-
- 17 edited
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
check_packages.py
r131d94b rf433e6a 2 2 Checking and reinstalling the external packages 3 3 """ 4 import os 4 from __future__ import print_function 5 5 6 import sys 6 7 … … 14 15 sys.modules['Image'] = PIL.Image 15 16 17 if sys.version_info[0] > 2: 18 print("To use the sasview GUI you must use Python 2\n") 16 19 17 20 common_required_package_list = { 18 'setuptools': {'version':'0.6c11','import_name':'setuptools','test':'__version__'},19 'pyparsing': {'version':'1.5.5','import_name':'pyparsing','test':'__version__'},20 'html5lib': {'version':'0.95','import_name':'html5lib','test':'__version__'},21 'reportlab': {'version':'2.5','import_name':'reportlab','test':'Version'},22 'h5py': {'version':'2.5','import_name':'h5py','test':'__version__'},23 'lxml': {'version':'2.3','import_name':'lxml.etree','test':'LXML_VERSION'},24 'PIL': {'version':'1.1.7','import_name':'Image','test':'VERSION'},25 'pylint': {'version':None,'import_name':'pylint','test':None},26 'periodictable': {'version':'1.3.0','import_name':'periodictable','test':'__version__'},27 'bumps': {'version':'0.7.5.9','import_name':'bumps','test':'__version__'},28 'numpy': {'version':'1.7.1','import_name':'numpy','test':'__version__'},29 'scipy': {'version':'0.18.0','import_name':'scipy','test':'__version__'},30 'wx': {'version':'2.8.12.1','import_name':'wx','test':'__version__'},31 'matplotlib': {'version':'1.1.0','import_name':'matplotlib','test':'__version__'},32 'xhtml2pdf': {'version':'3.0.33','import_name':'xhtml2pdf','test':'__version__'},33 'sphinx': {'version':'1.2.1','import_name':'sphinx','test':'__version__'},34 'unittest-xml-reporting': {'version':'1.10.0','import_name':'xmlrunner','test':'__version__'},35 'pyopencl': {'version':'2015.1','import_name':'pyopencl','test':'VERSION_TEXT'},21 'setuptools': {'version': '0.6c11', 'import_name': 'setuptools', 'test': '__version__'}, 22 'pyparsing': {'version': '1.5.5', 'import_name': 'pyparsing', 'test': '__version__'}, 23 'html5lib': {'version': '0.95', 'import_name': 'html5lib', 'test': '__version__'}, 24 'reportlab': {'version': '2.5', 'import_name': 'reportlab', 'test': 'Version'}, 25 'h5py': {'version': '2.5', 'import_name': 'h5py', 'test': '__version__'}, 26 'lxml': {'version': '2.3', 'import_name': 'lxml.etree', 'test': 'LXML_VERSION'}, 27 'PIL': {'version': '1.1.7', 'import_name': 'Image', 'test': 'VERSION'}, 28 'pylint': {'version': None, 'import_name': 'pylint', 'test': None}, 29 'periodictable': {'version': '1.3.0', 'import_name': 'periodictable', 'test': '__version__'}, 30 'bumps': {'version': '0.7.5.9', 'import_name': 'bumps', 'test': '__version__'}, 31 'numpy': {'version': '1.7.1', 'import_name': 'numpy', 'test': '__version__'}, 32 'scipy': {'version': '0.18.0', 'import_name': 'scipy', 'test': '__version__'}, 33 'wx': {'version': '2.8.12.1', 'import_name': 'wx', 'test': '__version__'}, 34 'matplotlib': {'version': '1.1.0', 'import_name': 'matplotlib', 'test': '__version__'}, 35 'xhtml2pdf': {'version': '3.0.33', 'import_name': 'xhtml2pdf', 'test': '__version__'}, 36 'sphinx': {'version': '1.2.1', 'import_name': 'sphinx', 'test': '__version__'}, 37 'unittest-xml-reporting': {'version': '1.10.0', 'import_name': 'xmlrunner', 'test': '__version__'}, 38 'pyopencl': {'version': '2015.1', 'import_name': 'pyopencl', 'test': 'VERSION_TEXT'}, 36 39 } 37 40 win_required_package_list = { 38 'comtypes': {'version':'0.6.2','import_name':'comtypes','test':'__version__'},39 'pywin': {'version':'217','import_name':'pywin','test':'__version__'},40 'py2exe': {'version':'0.6.9','import_name':'py2exe','test':'__version__'},41 'comtypes': {'version': '0.6.2', 'import_name': 'comtypes', 'test': '__version__'}, 42 'pywin': {'version': '217', 'import_name': 'pywin', 'test': '__version__'}, 43 'py2exe': {'version': '0.6.9', 'import_name': 'py2exe', 'test': '__version__'}, 41 44 } 42 45 mac_required_package_list = { 43 'py2app': {'version':None,'import_name':'py2app','test':'__version__'},46 'py2app': {'version': None, 'import_name': 'py2app', 'test': '__version__'}, 44 47 } 45 48 46 49 deprecated_package_list = { 47 'pyPdf': {'version':'1.13','import_name':'pyPdf','test':'__version__'},50 'pyPdf': {'version': '1.13', 'import_name': 'pyPdf', 'test': '__version__'}, 48 51 } 49 52 50 print "Checking Required Package Versions...."51 print 52 print "Common Packages" 53 for package_name, test_vals in common_required_package_list.iteritems():53 print("Checking Required Package Versions....\n") 54 print("Common Packages") 55 56 for package_name, test_vals in common_required_package_list.items(): 54 57 try: 55 i = __import__(test_vals['import_name'], fromlist=[''])58 i = __import__(test_vals['import_name'], fromlist=['']) 56 59 if test_vals['test'] == None: 57 print "%s Installed (Unknown version)" % package_name60 print("%s Installed (Unknown version)" % package_name) 58 61 elif package_name == 'lxml': 59 verstring = str(getattr(i, 'LXML_VERSION'))60 print "%s Version Installed: %s"% (package_name,verstring.replace(', ','.').lstrip('(').rstrip(')'))62 verstring = str(getattr(i, 'LXML_VERSION')) 63 print("%s Version Installed: %s"% (package_name, verstring.replace(', ', '.').lstrip('(').rstrip(')'))) 61 64 else: 62 print "%s Version Installed: %s"% (package_name,getattr(i,test_vals['test']))63 except :64 print '%s NOT INSTALLED'% package_name65 print("%s Version Installed: %s"% (package_name, getattr(i, test_vals['test']))) 66 except ImportError: 67 print('%s NOT INSTALLED'% package_name) 65 68 66 69 if sys.platform == 'win32': 67 print 68 print "Windows Specific Packages:"69 for package_name, test_vals in win_required_package_list.iteritems():70 print("") 71 print("Windows Specific Packages:") 72 for package_name, test_vals in win_required_package_list.items(): 70 73 try: 71 74 if package_name == "pywin": 72 75 import win32api 73 fixed_file_info = win32api.GetFileVersionInfo(win32api.__file__, '\\')74 print "%s Version Installed: %s"% (package_name,fixed_file_info['FileVersionLS'] >> 16)76 fixed_file_info = win32api.GetFileVersionInfo(win32api.__file__, '\\') 77 print("%s Version Installed: %s"% (package_name, fixed_file_info['FileVersionLS'] >> 16)) 75 78 else: 76 i = __import__(test_vals['import_name'], fromlist=[''])77 print "%s Version Installed: %s"% (package_name,getattr(i,test_vals['test']))78 except :79 print '%s NOT INSTALLED'% package_name79 i = __import__(test_vals['import_name'], fromlist=['']) 80 print("%s Version Installed: %s"% (package_name, getattr(i, test_vals['test']))) 81 except ImportError: 82 print('%s NOT INSTALLED'% package_name) 80 83 81 84 if sys.platform == 'darwin': 82 print 83 print "MacOS Specific Packages:"84 for package_name, test_vals in mac_required_package_list.iteritems():85 print("") 86 print("MacOS Specific Packages:") 87 for package_name, test_vals in mac_required_package_list.items(): 85 88 try: 86 i = __import__(test_vals['import_name'], fromlist=[''])87 print "%s Version Installed: %s"% (package_name,getattr(i,test_vals['test']))88 except :89 print '%s NOT INSTALLED'% package_name89 i = __import__(test_vals['import_name'], fromlist=['']) 90 print("%s Version Installed: %s"% (package_name, getattr(i, test_vals['test']))) 91 except ImportError: 92 print('%s NOT INSTALLED'% package_name) 90 93 91 94 92 print 93 print "Deprecated Packages"94 print "You can remove these unless you need them for other reasons!"95 for package_name, test_vals in deprecated_package_list.iteritems():95 print("") 96 print("Deprecated Packages") 97 print("You can remove these unless you need them for other reasons!") 98 for package_name, test_vals in deprecated_package_list.items(): 96 99 try: 97 i = __import__(test_vals['import_name'], fromlist=[''])100 i = __import__(test_vals['import_name'], fromlist=['']) 98 101 if package_name == 'pyPdf': 99 # pyPdf doesn't have the version number internally100 print 'pyPDF Installed (Version unknown)'102 # pyPdf doesn't have the version number internally 103 print('pyPDF Installed (Version unknown)') 101 104 else: 102 print "%s Version Installed: %s"% (package_name,getattr(i,test_vals['test']))103 except :104 print '%s NOT INSTALLED'% package_name105 print("%s Version Installed: %s"% (package_name, getattr(i, test_vals['test']))) 106 except ImportError: 107 print('%s NOT INSTALLED'% package_name) -
INSTALL.txt
rd09f0ae1 r26c9b85 2 2 ================================ 3 3 4 Note - at the current time sasview will only run in gui form under Python 2. 4 5 5 The build works in the usualy pythonic way: 6 Before trying to install and run sasview you'll need to check what 7 dependencies are required: 8 9 $ python check_packages.py 10 11 Many of these are available from PyPi, but some (e.g. h5py) may require more 12 involvement to build and install. If you use the conda package manager then 13 many of the pre-built dependencies are available there. This may be the easiest 14 route if you are on windows. 15 16 The build works in the pythonic way: 6 17 7 18 $ python setup.py build # will build the package underneath 'build/' 8 $ python setup.py install # will install the package 9 19 $ python setup.py install # will install the package into site-packages 10 20 11 21 … … 14 24 $ python run.py # will run the code in place (building the C code once, if required) 15 25 26 On OSX or windows you may need to use: 16 27 17 18 To check all dependencies are met: 19 20 $ python deps.py 21 $ python check_packages.py 22 23 Both tell you different parts of the story, unfortunately. 24 28 $ pythonw run.py 25 29 26 30 -
LICENSE.TXT
r7c05b63 ra3e3ef5 1 Copyright (c) 2009-201 6, SasView Developers1 Copyright (c) 2009-2017, SasView Developers 2 2 All rights reserved. 3 3 -
sasview/README.txt
r220b1e7 r9146ed9 4 4 1- Features 5 5 =========== 6 - New in Version 4.1.0 7 ------------------ 8 This incremental release brings a series of new features and improvements, 9 and a host of bug fixes. Of particular note are: 10 11 - Correlation Function Analysis (Corfunc) 12 This performs a correlation function analysis of one-dimensional SAXS/SANS data, 13 or generates a model-independent volume fraction profile from the SANS from an 14 adsorbed polymer/surfactant layer. 15 16 A correlation function may be interpreted in terms of an imaginary rod moving 17 through the structure of the material. Î1D(R) is the probability that a rod of 18 length R moving through the material has equal electron/neutron scattering 19 length density at either end. Hence a frequently occurring spacing within a 20 structure manifests itself as a peak. 21 22 A volume fraction profile \Phi(z) describes how the density of polymer 23 segments/surfactant molecules varies with distance from an (assumed locally flat) 24 interface. 25 26 - Fitting of SESANS Data 27 Data from Spin-Echo SANS measurements can now be loaded and fitted. The data will 28 be plotted against the correct axes and models will automatically perform a Hankel 29 transform in order to calculate SESANS from a SANS model. 30 31 - Documentation 32 The documentation has undergone significant checking and updating. 33 34 - Improvements 35 - Correlation function (corfunc) analysis of 1D SAS data added from CCP13 36 - File converter tool for multi-file single column data sets 37 - SESANS data loading and direct fitting using the Hankel transformation 38 - Saving and loading of simultaneous and constrained fits now supported 39 - Save states from SasView v3.x.y now loaded using sasmodel model names 40 - Saving and loading of projects with 2D fits now supported 41 - Loading a project removes all existing data, fits, and plots 42 - Structure factor and form factor can be plotted independently 43 - OpenCL is disabled by default and can be enabled through a fit menu 44 - Data and theory fields are now independently expandable 45 - Bug Fixes 46 - Fixes #667: Models computed multiple times on parameters changes 47 - Fixes #673: Custom models override built in models of same name 48 - Fixes #678: Hard crash when running complex models on GPU 49 - Fixes $774: Old style plugin models unloadable 50 - Fixes #789: stacked disk scale doesn't match cylinder model 51 - Fixes #792: core_shell_fractal uses wrong effective radius 52 - Fixes #800: Plot range reset on plot redraws 53 - Fixes #811 and #825: 2D smearing broken 54 - Fixes #815: Integer model parameter handling 55 - Fixes #824: Cannot apply sector averaging when no detector data present 56 - Fixes #830: Cansas HDF5 reader fully compliant with NXCanSAS v1.0 format 57 - Fixes #835: Fractal model breaks with negative Q values 58 - Fixes #843: Multilayer vesicle does not define effective radius 59 - Fixes #858: Hayter MSA S(Q) returns errors 60 - Numerous grammatical and contexual errors in documention 61 62 6 63 - New in Version 4.0.1 7 64 ------------------ … … 426 483 =============== 427 484 485 486 4.1- All systems: 487 The conversion to sasmodels infrastructure is ongoing and should be 488 completed in the next release. In the meantime this leads to a few known 489 issues: 490 - The way that orientation is defined is being refactored to address 491 long standing issues and comments. In release 4.1 however only models 492 with symmetry (e.g. a=b) have been converted to the new definitions. 493 The rest (a <> b <> c - e.g. parellelepiped) maintain the same 494 definition as before and will be converted in 4.2. Note that 495 orientational distribution also makes much more sense in the new 496 framework. The documentation should indicate which definition is being 497 used for a given model. 498 - The infrastructure currently handles internal conversion of old style 499 models so that user created models in previous versions should continue 500 to work for now. At some point in the future such support will go away. 501 Everyone is encouraged to convert to the new structure which should be 502 relatively straight forward and provides a number of benefits. 503 - In that vein, the distributed models and those generated by the new 504 plugin model editor are in the new format, however those generated by 505 sum|multiply models are the old style sum|multiply models. This should 506 also disappear in the near future 507 - The on the fly discovery of plugin models and changes thereto behave 508 inconsistently. If a change to a plugin model does not seem to 509 register, the Load Plugin Models (under fitting -> Plugin Model 510 Operations) can be used. However, after calling Load Plugin Models, the 511 active plugin will no longer be loaded (even though the GUI looks like 512 it is) unless it is a sum|multiply model which works properly. All 513 others will need to be recalled from the model dropdown menu to reload 514 the model into the calculation engine. While it might be annoying it 515 does not appear to prevent SasView from working.. 516 - The model code and documentation review is ongoing. At this time the 517 core shell parellelepiped is known to have the C shell effectively fixed 518 at 0 (noted in documentation) while the triaxial ellipsoid does not seem 519 to reproduce the limit of the oblate or prolate ellipsoid. If errors are 520 found and corrected, corrected versions will be uploaded to the 521 marketplace. 522 428 523 3.1- All systems: 429 524 - The documentation window may take a few seconds to load the first time -
sasview/local_config.py
r73cbeec rf9d1f60 33 33 ''' remember to:''' 34 34 _acknowledgement_preamble_bullet1 =\ 35 '''Acknowledge its use in your publications as suggested below;'''35 '''Acknowledge its use in your publications as :''' 36 36 _acknowledgement_preamble_bullet2 =\ 37 '''Reference SasView as : M. Doucet, et al. SasView Version 4.0, Zenodo''' +\ 38 ''', http://doi.org/10.5281/zenodo.159083;''' 37 '''Reference SasView as:''' 39 38 _acknowledgement_preamble_bullet3 =\ 40 '''Reference the model you used if appropriate (see documentation for refs) ;'''39 '''Reference the model you used if appropriate (see documentation for refs)''' 41 40 _acknowledgement_preamble_bullet4 =\ 42 41 '''Send us your reference for our records: developers@sasview.org''' 43 42 _acknowledgement_publications = \ 44 '''This work benefited from the use of the SasView application, originally developed under NSF Award 45 DMR-0520547. SasView also contains code developed with funding from the EU Horizon 2020 programme 46 under the SINE2020 project Grant No 654000, and by Patrick O'Brien & Adam Washington.'''43 '''This work benefited from the use of the SasView application, originally developed under NSF Award DMR-0520547. SasView also contains code developed with funding from the EU Horizon 2020 programme under the SINE2020 project Grant No 654000.''' 44 _acknowledgement_citation = \ 45 '''M. Doucet et al. SasView Version 4.1, Zenodo, 10.5281/zenodo.438138''' 47 46 48 47 _acknowledgement = \ 49 '''This work was originally developed as part of the DANSE project funded by the US NSF under Award DMR-0520547, but is currently maintained 50 by a collaboration between UTK, UMD, NIST, ORNL, ISIS, ESS, ILL, ANSTO and TU Delft. SasView also contains code developed with funding from the 51 EU Horizon 2020 programme under the SINE2020 project (Grant No 654000), and by Patrick O'Brien (pycrust) and Adam Washington (corfunc-py).''' 48 '''This work was originally developed as part of the DANSE project funded by the US NSF under Award DMR-0520547,\n but is currently maintained by a collaboration between UTK, UMD, NIST, ORNL, ISIS, ESS, ILL, ANSTO and TU Delft and the scattering community.\n\n SasView also contains code developed with funding from the EU Horizon 2020 programme under the SINE2020 project (Grant No 654000).\nA list of individual contributors can be found at: https://github.com/orgs/SasView/people 49 ''' 52 50 53 51 _homepage = "http://www.sasview.org" … … 89 87 _corner_image = os.path.join(icon_path, "angles_flat.png") 90 88 _welcome_image = os.path.join(icon_path, "SVwelcome.png") 91 _copyright = "(c) 2009 - 201 6, UTK, UMD, NIST, ORNL, ISIS, ESS, ILL, ANSTO and TU Delft"89 _copyright = "(c) 2009 - 2017, UTK, UMD, NIST, ORNL, ISIS, ESS, ILL, ANSTO and TU Delft" 92 90 marketplace_url = "http://marketplace.sasview.org/" 93 91 -
setup.py
r1e13b53 r27109e5 315 315 'test/1d_data/*', 316 316 'test/2d_data/*', 317 'test/convertible_files/*', 318 'test/coordinate_data/*', 319 'test/image_data/*', 320 'test/media/*', 321 'test/other_files/*', 317 322 'test/save_states/*', 318 'test/ upcoming_formats/*',319 'default_categories.json']323 'test/sesans_data/*' 324 ] 320 325 packages.append("sas.sasview") 321 326 -
src/sas/sascalc/calculator/slit_length_calculator.py
rb699768 rbfba720 16 16 # y data 17 17 self.y = None 18 # default slit length18 # default slit length 19 19 self.slit_length = 0.0 20 20 … … 42 42 """ 43 43 # None data do nothing 44 if self.y == None or self.x ==None:44 if self.y is None or self.x is None: 45 45 return 46 46 # set local variable … … 54 54 y_sum = 0.0 55 55 y_max = 0.0 56 ind = 0 .056 ind = 0 57 57 58 58 # sum 10 or more y values until getting max_y, … … 70 70 # defaults 71 71 y_half_d = 0.0 72 ind = 0 .072 ind = 0 73 73 # find indices where it crosses y = y_half. 74 74 while True: … … 81 81 82 82 # y value and ind just before passed the spot of the half height 83 y_half_u = y[ind -1]83 y_half_u = y[ind - 1] 84 84 85 85 # get corresponding x values 86 86 x_half_d = x[ind] 87 x_half_u = x[ind -1]87 x_half_u = x[ind - 1] 88 88 89 89 # calculate x at y = y_half using linear interpolation … … 91 91 x_half = (x_half_d + x_half_u)/2.0 92 92 else: 93 x_half = ( x_half_u * (y_half - y_half_d) \94 + x_half_d * (y_half_u - y_half)) \95 / (y_half_u - y_half_d)93 x_half = ((x_half_u * (y_half - y_half_d) 94 + x_half_d * (y_half_u - y_half)) 95 / (y_half_u - y_half_d)) 96 96 97 97 # Our slit length is half width, so just give half beam value -
src/sas/sascalc/dataloader/manipulations.py
rb2b36932 r36d69e1 80 80 81 81 """ 82 if data2d.data == None or data2d.x_bins == None or data2d.y_bins ==None:82 if data2d.data is None or data2d.x_bins is None or data2d.y_bins is None: 83 83 raise ValueError, "Can't convert this data: data=None..." 84 84 new_x = numpy.tile(data2d.x_bins, (len(data2d.y_bins), 1)) … … 90 90 qy_data = new_y.flatten() 91 91 q_data = numpy.sqrt(qx_data * qx_data + qy_data * qy_data) 92 if data2d.err_data ==None or numpy.any(data2d.err_data <= 0):92 if data2d.err_data is None or numpy.any(data2d.err_data <= 0): 93 93 new_err_data = numpy.sqrt(numpy.abs(new_data)) 94 94 else: -
src/sas/sascalc/dataloader/readers/IgorReader.py
rb699768 r36d69e1 13 13 ############################################################################# 14 14 import os 15 import numpy 16 import math 17 #import logging 15 18 16 from sas.sascalc.dataloader.data_info import Data2D 19 17 from sas.sascalc.dataloader.data_info import Detector 20 18 from sas.sascalc.dataloader.manipulations import reader2D_converter 19 import numpy as np 21 20 22 21 # Look for unit converter … … 40 39 """ Read file """ 41 40 if not os.path.isfile(filename): 42 raise ValueError, \ 43 "Specified file %s is not a regular file" % filename 44 45 # Read file 46 f = open(filename, 'r') 47 buf = f.read() 48 49 # Instantiate data object 41 raise ValueError("Specified file %s is not a regular " 42 "file" % filename) 43 50 44 output = Data2D() 45 51 46 output.filename = os.path.basename(filename) 52 47 detector = Detector() 53 if len(output.detector) > 0:54 print str(output.detector[0])48 if len(output.detector): 49 print(str(output.detector[0])) 55 50 output.detector.append(detector) 56 57 # Get content 58 dataStarted = False 59 60 lines = buf.split('\n') 61 itot = 0 62 x = [] 63 y = [] 64 65 ncounts = 0 66 67 xmin = None 68 xmax = None 69 ymin = None 70 ymax = None 71 72 i_x = 0 73 i_y = -1 74 i_tot_row = 0 75 76 isInfo = False 77 isCenter = False 78 79 data_conv_q = None 80 data_conv_i = None 81 82 if has_converter == True and output.Q_unit != '1/A': 51 52 data_conv_q = data_conv_i = None 53 54 if has_converter and output.Q_unit != '1/A': 83 55 data_conv_q = Converter('1/A') 84 56 # Test it 85 57 data_conv_q(1.0, output.Q_unit) 86 58 87 if has_converter == Trueand output.I_unit != '1/cm':59 if has_converter and output.I_unit != '1/cm': 88 60 data_conv_i = Converter('1/cm') 89 61 # Test it 90 62 data_conv_i(1.0, output.I_unit) 91 92 for line in lines: 93 94 # Find setup info line 95 if isInfo: 96 isInfo = False 97 line_toks = line.split() 98 # Wavelength in Angstrom 99 try: 100 wavelength = float(line_toks[1]) 101 except: 102 msg = "IgorReader: can't read this file, missing wavelength" 103 raise ValueError, msg 104 105 #Find # of bins in a row assuming the detector is square. 106 if dataStarted == True: 107 try: 108 value = float(line) 109 except: 110 # Found a non-float entry, skip it 111 continue 112 113 # Get total bin number 114 115 i_tot_row += 1 116 i_tot_row = math.ceil(math.sqrt(i_tot_row)) - 1 117 #print "i_tot", i_tot_row 118 size_x = i_tot_row # 192#128 119 size_y = i_tot_row # 192#128 120 output.data = numpy.zeros([size_x, size_y]) 121 output.err_data = numpy.zeros([size_x, size_y]) 122 123 #Read Header and 2D data 124 for line in lines: 125 # Find setup info line 126 if isInfo: 127 isInfo = False 128 line_toks = line.split() 129 # Wavelength in Angstrom 130 try: 131 wavelength = float(line_toks[1]) 132 except: 133 msg = "IgorReader: can't read this file, missing wavelength" 134 raise ValueError, msg 135 # Distance in meters 136 try: 137 distance = float(line_toks[3]) 138 except: 139 msg = "IgorReader: can't read this file, missing distance" 140 raise ValueError, msg 141 142 # Distance in meters 143 try: 144 transmission = float(line_toks[4]) 145 except: 146 msg = "IgorReader: can't read this file, " 147 msg += "missing transmission" 148 raise ValueError, msg 149 150 if line.count("LAMBDA") > 0: 151 isInfo = True 152 153 # Find center info line 154 if isCenter: 155 isCenter = False 156 line_toks = line.split() 157 158 # Center in bin number: Must substrate 1 because 159 #the index starts from 1 160 center_x = float(line_toks[0]) - 1 161 center_y = float(line_toks[1]) - 1 162 163 if line.count("BCENT") > 0: 164 isCenter = True 165 166 # Find data start 167 if line.count("***")>0: 168 dataStarted = True 169 170 # Check that we have all the info 171 if wavelength == None \ 172 or distance == None \ 173 or center_x == None \ 174 or center_y == None: 175 msg = "IgorReader:Missing information in data file" 176 raise ValueError, msg 177 178 if dataStarted == True: 179 try: 180 value = float(line) 181 except: 182 # Found a non-float entry, skip it 183 continue 184 185 # Get bin number 186 if math.fmod(itot, i_tot_row) == 0: 187 i_x = 0 188 i_y += 1 189 else: 190 i_x += 1 191 192 output.data[i_y][i_x] = value 193 ncounts += 1 194 195 # Det 640 x 640 mm 196 # Q = 4pi/lambda sin(theta/2) 197 # Bin size is 0.5 cm 198 #REmoved +1 from theta = (i_x-center_x+1)*0.5 / distance 199 # / 100.0 and 200 #REmoved +1 from theta = (i_y-center_y+1)*0.5 / 201 # distance / 100.0 202 #ToDo: Need complete check if the following 203 # covert process is consistent with fitting.py. 204 theta = (i_x - center_x) * 0.5 / distance / 100.0 205 qx = 4.0 * math.pi / wavelength * math.sin(theta/2.0) 206 207 if has_converter == True and output.Q_unit != '1/A': 208 qx = data_conv_q(qx, units=output.Q_unit) 209 210 if xmin == None or qx < xmin: 211 xmin = qx 212 if xmax == None or qx > xmax: 213 xmax = qx 214 215 theta = (i_y - center_y) * 0.5 / distance / 100.0 216 qy = 4.0 * math.pi / wavelength * math.sin(theta / 2.0) 217 218 if has_converter == True and output.Q_unit != '1/A': 219 qy = data_conv_q(qy, units=output.Q_unit) 220 221 if ymin == None or qy < ymin: 222 ymin = qy 223 if ymax == None or qy > ymax: 224 ymax = qy 225 226 if not qx in x: 227 x.append(qx) 228 if not qy in y: 229 y.append(qy) 230 231 itot += 1 232 233 63 64 data_row = 0 65 wavelength = distance = center_x = center_y = None 66 dataStarted = isInfo = isCenter = False 67 68 with open(filename, 'r') as f: 69 for line in f: 70 data_row += 1 71 # Find setup info line 72 if isInfo: 73 isInfo = False 74 line_toks = line.split() 75 # Wavelength in Angstrom 76 try: 77 wavelength = float(line_toks[1]) 78 except ValueError: 79 msg = "IgorReader: can't read this file, missing wavelength" 80 raise ValueError(msg) 81 # Distance in meters 82 try: 83 distance = float(line_toks[3]) 84 except ValueError: 85 msg = "IgorReader: can't read this file, missing distance" 86 raise ValueError(msg) 87 88 # Distance in meters 89 try: 90 transmission = float(line_toks[4]) 91 except: 92 msg = "IgorReader: can't read this file, " 93 msg += "missing transmission" 94 raise ValueError(msg) 95 96 if line.count("LAMBDA"): 97 isInfo = True 98 99 # Find center info line 100 if isCenter: 101 isCenter = False 102 line_toks = line.split() 103 104 # Center in bin number: Must subtract 1 because 105 # the index starts from 1 106 center_x = float(line_toks[0]) - 1 107 center_y = float(line_toks[1]) - 1 108 109 if line.count("BCENT"): 110 isCenter = True 111 112 # Find data start 113 if line.count("***"): 114 # now have to continue to blank line 115 dataStarted = True 116 117 # Check that we have all the info 118 if (wavelength is None 119 or distance is None 120 or center_x is None 121 or center_y is None): 122 msg = "IgorReader:Missing information in data file" 123 raise ValueError(msg) 124 125 if dataStarted: 126 if len(line.rstrip()): 127 continue 128 else: 129 break 130 131 # The data is loaded in row major order (last index changing most 132 # rapidly). However, the original data is in column major order (first 133 # index changing most rapidly). The swap to column major order is done 134 # in reader2D_converter at the end of this method. 135 data = np.loadtxt(filename, skiprows=data_row) 136 size_x = size_y = int(np.rint(np.sqrt(data.size))) 137 output.data = np.reshape(data, (size_x, size_y)) 138 output.err_data = np.zeros_like(output.data) 139 140 # Det 640 x 640 mm 141 # Q = 4 * pi/lambda * sin(theta/2) 142 # Bin size is 0.5 cm 143 # Removed +1 from theta = (i_x - center_x + 1)*0.5 / distance 144 # / 100.0 and 145 # Removed +1 from theta = (i_y - center_y + 1)*0.5 / 146 # distance / 100.0 147 # ToDo: Need complete check if the following 148 # convert process is consistent with fitting.py. 149 150 # calculate qx, qy bin centers of each pixel in the image 151 theta = (np.arange(size_x) - center_x) * 0.5 / distance / 100. 152 qx = 4 * np.pi / wavelength * np.sin(theta/2) 153 154 theta = (np.arange(size_y) - center_y) * 0.5 / distance / 100. 155 qy = 4 * np.pi / wavelength * np.sin(theta/2) 156 157 if has_converter and output.Q_unit != '1/A': 158 qx = data_conv_q(qx, units=output.Q_unit) 159 qy = data_conv_q(qx, units=output.Q_unit) 160 161 xmax = np.max(qx) 162 xmin = np.min(qx) 163 ymax = np.max(qy) 164 ymin = np.min(qy) 165 166 # calculate edge offset in q. 234 167 theta = 0.25 / distance / 100.0 235 xstep = 4.0 * math.pi / wavelength * math.sin(theta / 2.0)168 xstep = 4.0 * np.pi / wavelength * np.sin(theta / 2.0) 236 169 237 170 theta = 0.25 / distance / 100.0 238 ystep = 4.0 * math.pi/ wavelength * math.sin(theta / 2.0)171 ystep = 4.0 * np.pi/ wavelength * np.sin(theta / 2.0) 239 172 240 173 # Store all data ###################################### 241 174 # Store wavelength 242 if has_converter == Trueand output.source.wavelength_unit != 'A':175 if has_converter and output.source.wavelength_unit != 'A': 243 176 conv = Converter('A') 244 177 wavelength = conv(wavelength, units=output.source.wavelength_unit) … … 246 179 247 180 # Store distance 248 if has_converter == Trueand detector.distance_unit != 'm':181 if has_converter and detector.distance_unit != 'm': 249 182 conv = Converter('m') 250 183 distance = conv(distance, units=detector.distance_unit) … … 254 187 output.sample.transmission = transmission 255 188 256 # Store pixel size 189 # Store pixel size (mm) 257 190 pixel = 5.0 258 if has_converter == Trueand detector.pixel_size_unit != 'mm':191 if has_converter and detector.pixel_size_unit != 'mm': 259 192 conv = Converter('mm') 260 193 pixel = conv(pixel, units=detector.pixel_size_unit) … … 267 200 268 201 # Store limits of the image (2D array) 269 xmin = xmin -xstep / 2.0270 xmax = xmax +xstep / 2.0271 ymin = ymin -ystep / 2.0272 ymax = ymax +ystep / 2.0273 if has_converter == Trueand output.Q_unit != '1/A':202 xmin -= xstep / 2.0 203 xmax += xstep / 2.0 204 ymin -= ystep / 2.0 205 ymax += ystep / 2.0 206 if has_converter and output.Q_unit != '1/A': 274 207 xmin = data_conv_q(xmin, units=output.Q_unit) 275 208 xmax = data_conv_q(xmax, units=output.Q_unit) … … 282 215 283 216 # Store x and y axis bin centers 284 output.x_bins = x285 output.y_bins = y217 output.x_bins = qx.tolist() 218 output.y_bins = qy.tolist() 286 219 287 220 # Units -
src/sas/sascalc/dataloader/readers/cansas_reader.py
rc221349 r8434365 930 930 self._write_data(datainfo, entry_node) 931 931 # Transmission Spectrum Info 932 self._write_trans_spectrum(datainfo, entry_node) 932 # TODO: fix the writer to linearize all data, including T_spectrum 933 # self._write_trans_spectrum(datainfo, entry_node) 933 934 # Sample info 934 935 self._write_sample_info(datainfo, entry_node) -
src/sas/sascalc/dataloader/readers/cansas_reader_HDF5.py
rbbd0f37 rc94280c 9 9 import sys 10 10 11 from sas.sascalc.dataloader.data_info import plottable_1D, plottable_2D, Data1D, Data2D, DataInfo, Process, Aperture 12 from sas.sascalc.dataloader.data_info import Collimation, TransmissionSpectrum, Detector 11 from sas.sascalc.dataloader.data_info import plottable_1D, plottable_2D,\ 12 Data1D, Data2D, DataInfo, Process, Aperture, Collimation, \ 13 TransmissionSpectrum, Detector 13 14 from sas.sascalc.dataloader.data_info import combine_data_info_with_plottable 14 15 15 16 16 17 17 class Reader(): 18 18 """ 19 A class for reading in CanSAS v2.0 data files. The existing iteration opens Mantid generated HDF5 formatted files 20 with file extension .h5/.H5. Any number of data sets may be present within the file and any dimensionality of data 21 may be used. Currently 1D and 2D SAS data sets are supported, but future implementations will include 1D and 2D 22 SESANS data. 23 24 Any number of SASdata sets may be present in a SASentry and the data within can be either 1D I(Q) or 2D I(Qx, Qy). 19 A class for reading in CanSAS v2.0 data files. The existing iteration opens 20 Mantid generated HDF5 formatted files with file extension .h5/.H5. Any 21 number of data sets may be present within the file and any dimensionality 22 of data may be used. Currently 1D and 2D SAS data sets are supported, but 23 future implementations will include 1D and 2D SESANS data. 24 25 Any number of SASdata sets may be present in a SASentry and the data within 26 can be either 1D I(Q) or 2D I(Qx, Qy). 25 27 26 28 Also supports reading NXcanSAS formatted HDF5 files … … 30 32 """ 31 33 32 # #CanSAS version34 # CanSAS version 33 35 cansas_version = 2.0 34 # #Logged warnings or messages36 # Logged warnings or messages 35 37 logging = None 36 # #List of errors for the current data set38 # List of errors for the current data set 37 39 errors = None 38 # #Raw file contents to be processed40 # Raw file contents to be processed 39 41 raw_data = None 40 # #Data info currently being read in42 # Data info currently being read in 41 43 current_datainfo = None 42 # #SASdata set currently being read in44 # SASdata set currently being read in 43 45 current_dataset = None 44 # #List of plottable1D objects that should be linked to the current_datainfo46 # List of plottable1D objects that should be linked to the current_datainfo 45 47 data1d = None 46 # #List of plottable2D objects that should be linked to the current_datainfo48 # List of plottable2D objects that should be linked to the current_datainfo 47 49 data2d = None 48 # #Data type name50 # Data type name 49 51 type_name = "CanSAS 2.0" 50 # #Wildcards52 # Wildcards 51 53 type = ["CanSAS 2.0 HDF5 Files (*.h5)|*.h5"] 52 # #List of allowed extensions54 # List of allowed extensions 53 55 ext = ['.h5', '.H5'] 54 # #Flag to bypass extension check55 allow_all = False56 # #List of files to return56 # Flag to bypass extension check 57 allow_all = True 58 # List of files to return 57 59 output = None 58 60 … … 64 66 :return: List of Data1D/2D objects and/or a list of errors. 65 67 """ 66 # # Reinitialize the classwhen loading a new data file to reset all class variables68 # Reinitialize when loading a new data file to reset all class variables 67 69 self.reset_class_variables() 68 # #Check that the file exists70 # Check that the file exists 69 71 if os.path.isfile(filename): 70 72 basename = os.path.basename(filename) … … 72 74 # If the file type is not allowed, return empty list 73 75 if extension in self.ext or self.allow_all: 74 # #Load the data file76 # Load the data file 75 77 self.raw_data = h5py.File(filename, 'r') 76 # #Read in all child elements of top level SASroot78 # Read in all child elements of top level SASroot 77 79 self.read_children(self.raw_data, []) 78 # #Add the last data set to the list of outputs80 # Add the last data set to the list of outputs 79 81 self.add_data_set() 80 # #Close the data file82 # Close the data file 81 83 self.raw_data.close() 82 # #Return data set(s)84 # Return data set(s) 83 85 return self.output 84 86 … … 110 112 """ 111 113 112 # #Loop through each element of the parent and process accordingly114 # Loop through each element of the parent and process accordingly 113 115 for key in data.keys(): 114 # #Get all information for the current key116 # Get all information for the current key 115 117 value = data.get(key) 116 118 if value.attrs.get(u'canSAS_class') is not None: … … 126 128 self.parent_class = class_name 127 129 parent_list.append(key) 128 ## If this is a new sasentry, store the current data sets and create a fresh Data1D/2D object 130 # If a new sasentry, store the current data sets and create 131 # a fresh Data1D/2D object 129 132 if class_prog.match(u'SASentry'): 130 133 self.add_data_set(key) 131 134 elif class_prog.match(u'SASdata'): 132 135 self._initialize_new_data_set(parent_list) 133 # #Recursion step to access data within the group136 # Recursion step to access data within the group 134 137 self.read_children(value, parent_list) 135 138 self.add_intermediate() … … 137 140 138 141 elif isinstance(value, h5py.Dataset): 139 # #If this is a dataset, store the data appropriately142 # If this is a dataset, store the data appropriately 140 143 data_set = data[key][:] 141 144 unit = self._get_unit(value) 142 145 143 # #I and Q Data146 # I and Q Data 144 147 if key == u'I': 145 if type(self.current_dataset) is plottable_2D:148 if isinstance(self.current_dataset, plottable_2D): 146 149 self.current_dataset.data = data_set 147 150 self.current_dataset.zaxis("Intensity", unit) … … 151 154 continue 152 155 elif key == u'Idev': 153 if type(self.current_dataset) is plottable_2D:156 if isinstance(self.current_dataset, plottable_2D): 154 157 self.current_dataset.err_data = data_set.flatten() 155 158 else: … … 158 161 elif key == u'Q': 159 162 self.current_dataset.xaxis("Q", unit) 160 if type(self.current_dataset) is plottable_2D:163 if isinstance(self.current_dataset, plottable_2D): 161 164 self.current_dataset.q = data_set.flatten() 162 165 else: … … 166 169 self.current_dataset.dx = data_set.flatten() 167 170 continue 171 elif key == u'dQw': 172 self.current_dataset.dxw = data_set.flatten() 173 continue 174 elif key == u'dQl': 175 self.current_dataset.dxl = data_set.flatten() 176 continue 168 177 elif key == u'Qy': 169 178 self.current_dataset.yaxis("Q_y", unit) … … 183 192 self.current_dataset.mask = data_set.flatten() 184 193 continue 194 # Transmission Spectrum 195 elif (key == u'T' 196 and self.parent_class == u'SAStransmission_spectrum'): 197 self.trans_spectrum.transmission = data_set.flatten() 198 continue 199 elif (key == u'Tdev' 200 and self.parent_class == u'SAStransmission_spectrum'): 201 self.trans_spectrum.transmission_deviation = \ 202 data_set.flatten() 203 continue 204 elif (key == u'lambda' 205 and self.parent_class == u'SAStransmission_spectrum'): 206 self.trans_spectrum.wavelength = data_set.flatten() 207 continue 185 208 186 209 for data_point in data_set: 187 # #Top Level Meta Data210 # Top Level Meta Data 188 211 if key == u'definition': 189 212 self.current_datainfo.meta_data['reader'] = data_point … … 201 224 self.current_datainfo.notes.append(data_point) 202 225 203 ## Sample Information 204 elif key == u'Title' and self.parent_class == u'SASsample': # CanSAS 2.0 format 226 # Sample Information 227 # CanSAS 2.0 format 228 elif key == u'Title' and self.parent_class == u'SASsample': 205 229 self.current_datainfo.sample.name = data_point 206 elif key == u'ID' and self.parent_class == u'SASsample': # NXcanSAS format 230 # NXcanSAS format 231 elif key == u'name' and self.parent_class == u'SASsample': 207 232 self.current_datainfo.sample.name = data_point 208 elif key == u'thickness' and self.parent_class == u'SASsample': 233 # NXcanSAS format 234 elif key == u'ID' and self.parent_class == u'SASsample': 235 self.current_datainfo.sample.name = data_point 236 elif (key == u'thickness' 237 and self.parent_class == u'SASsample'): 209 238 self.current_datainfo.sample.thickness = data_point 210 elif key == u'temperature' and self.parent_class == u'SASsample': 239 elif (key == u'temperature' 240 and self.parent_class == u'SASsample'): 211 241 self.current_datainfo.sample.temperature = data_point 212 elif key == u'transmission' and self.parent_class == u'SASsample': 242 elif (key == u'transmission' 243 and self.parent_class == u'SASsample'): 213 244 self.current_datainfo.sample.transmission = data_point 214 elif key == u'x_position' and self.parent_class == u'SASsample': 245 elif (key == u'x_position' 246 and self.parent_class == u'SASsample'): 215 247 self.current_datainfo.sample.position.x = data_point 216 elif key == u'y_position' and self.parent_class == u'SASsample': 248 elif (key == u'y_position' 249 and self.parent_class == u'SASsample'): 217 250 self.current_datainfo.sample.position.y = data_point 218 elif key == u'p olar_angle' and self.parent_class == u'SASsample':251 elif key == u'pitch' and self.parent_class == u'SASsample': 219 252 self.current_datainfo.sample.orientation.x = data_point 220 elif key == u'azimuthal_angle' and self.parent_class == u'SASsample': 253 elif key == u'yaw' and self.parent_class == u'SASsample': 254 self.current_datainfo.sample.orientation.y = data_point 255 elif key == u'roll' and self.parent_class == u'SASsample': 221 256 self.current_datainfo.sample.orientation.z = data_point 222 elif key == u'details' and self.parent_class == u'SASsample': 257 elif (key == u'details' 258 and self.parent_class == u'SASsample'): 223 259 self.current_datainfo.sample.details.append(data_point) 224 260 225 ## Instrumental Information 226 elif key == u'name' and self.parent_class == u'SASinstrument': 261 # Instrumental Information 262 elif (key == u'name' 263 and self.parent_class == u'SASinstrument'): 227 264 self.current_datainfo.instrument = data_point 228 265 elif key == u'name' and self.parent_class == u'SASdetector': … … 231 268 self.detector.distance = float(data_point) 232 269 self.detector.distance_unit = unit 233 elif key == u'slit_length' and self.parent_class == u'SASdetector': 270 elif (key == u'slit_length' 271 and self.parent_class == u'SASdetector'): 234 272 self.detector.slit_length = float(data_point) 235 273 self.detector.slit_length_unit = unit 236 elif key == u'x_position' and self.parent_class == u'SASdetector': 274 elif (key == u'x_position' 275 and self.parent_class == u'SASdetector'): 237 276 self.detector.offset.x = float(data_point) 238 277 self.detector.offset_unit = unit 239 elif key == u'y_position' and self.parent_class == u'SASdetector': 278 elif (key == u'y_position' 279 and self.parent_class == u'SASdetector'): 240 280 self.detector.offset.y = float(data_point) 241 281 self.detector.offset_unit = unit 242 elif key == u'polar_angle' and self.parent_class == u'SASdetector': 282 elif (key == u'pitch' 283 and self.parent_class == u'SASdetector'): 243 284 self.detector.orientation.x = float(data_point) 244 285 self.detector.orientation_unit = unit 245 elif key == u' azimuthal_angle' and self.parent_class == u'SASdetector':286 elif key == u'roll' and self.parent_class == u'SASdetector': 246 287 self.detector.orientation.z = float(data_point) 247 288 self.detector.orientation_unit = unit 248 elif key == u'beam_center_x' and self.parent_class == u'SASdetector': 289 elif key == u'yaw' and self.parent_class == u'SASdetector': 290 self.detector.orientation.y = float(data_point) 291 self.detector.orientation_unit = unit 292 elif (key == u'beam_center_x' 293 and self.parent_class == u'SASdetector'): 249 294 self.detector.beam_center.x = float(data_point) 250 295 self.detector.beam_center_unit = unit 251 elif key == u'beam_center_y' and self.parent_class == u'SASdetector': 296 elif (key == u'beam_center_y' 297 and self.parent_class == u'SASdetector'): 252 298 self.detector.beam_center.y = float(data_point) 253 299 self.detector.beam_center_unit = unit 254 elif key == u'x_pixel_size' and self.parent_class == u'SASdetector': 300 elif (key == u'x_pixel_size' 301 and self.parent_class == u'SASdetector'): 255 302 self.detector.pixel_size.x = float(data_point) 256 303 self.detector.pixel_size_unit = unit 257 elif key == u'y_pixel_size' and self.parent_class == u'SASdetector': 304 elif (key == u'y_pixel_size' 305 and self.parent_class == u'SASdetector'): 258 306 self.detector.pixel_size.y = float(data_point) 259 307 self.detector.pixel_size_unit = unit 260 elif key == u'SSD' and self.parent_class == u'SAScollimation': 308 elif (key == u'distance' 309 and self.parent_class == u'SAScollimation'): 261 310 self.collimation.length = data_point 262 311 self.collimation.length_unit = unit 263 elif key == u'name' and self.parent_class == u'SAScollimation': 312 elif (key == u'name' 313 and self.parent_class == u'SAScollimation'): 264 314 self.collimation.name = data_point 265 266 ## Process Information 267 elif key == u'name' and self.parent_class == u'SASprocess': 315 elif (key == u'shape' 316 and self.parent_class == u'SASaperture'): 317 self.aperture.shape = data_point 318 elif (key == u'x_gap' 319 and self.parent_class == u'SASaperture'): 320 self.aperture.size.x = data_point 321 elif (key == u'y_gap' 322 and self.parent_class == u'SASaperture'): 323 self.aperture.size.y = data_point 324 325 # Process Information 326 elif (key == u'Title' 327 and self.parent_class == u'SASprocess'): # CanSAS 2.0 268 328 self.process.name = data_point 269 elif key == u'Title' and self.parent_class == u'SASprocess': # CanSAS 2.0 format 329 elif (key == u'name' 330 and self.parent_class == u'SASprocess'): # NXcanSAS 270 331 self.process.name = data_point 271 elif key == u'name' and self.parent_class == u'SASprocess': # NXcanSAS format 272 self.process.name = data_point 273 elif key == u'description' and self.parent_class == u'SASprocess': 332 elif (key == u'description' 333 and self.parent_class == u'SASprocess'): 274 334 self.process.description = data_point 275 335 elif key == u'date' and self.parent_class == u'SASprocess': 276 336 self.process.date = data_point 337 elif key == u'term' and self.parent_class == u'SASprocess': 338 self.process.term = data_point 277 339 elif self.parent_class == u'SASprocess': 278 340 self.process.notes.append(data_point) 279 341 280 ## Transmission Spectrum 281 elif key == u'T' and self.parent_class == u'SAStransmission_spectrum': 282 self.trans_spectrum.transmission.append(data_point) 283 elif key == u'Tdev' and self.parent_class == u'SAStransmission_spectrum': 284 self.trans_spectrum.transmission_deviation.append(data_point) 285 elif key == u'lambda' and self.parent_class == u'SAStransmission_spectrum': 286 self.trans_spectrum.wavelength.append(data_point) 287 288 ## Source 289 elif key == u'wavelength' and self.parent_class == u'SASdata': 342 # Source 343 elif (key == u'wavelength' 344 and self.parent_class == u'SASdata'): 290 345 self.current_datainfo.source.wavelength = data_point 291 346 self.current_datainfo.source.wavelength_unit = unit 292 elif key == u'incident_wavelength' and self.parent_class == u'SASsource': 347 elif (key == u'incident_wavelength' 348 and self.parent_class == 'SASsource'): 293 349 self.current_datainfo.source.wavelength = data_point 294 350 self.current_datainfo.source.wavelength_unit = unit 295 elif key == u'wavelength_max' and self.parent_class == u'SASsource': 351 elif (key == u'wavelength_max' 352 and self.parent_class == u'SASsource'): 296 353 self.current_datainfo.source.wavelength_max = data_point 297 354 self.current_datainfo.source.wavelength_max_unit = unit 298 elif key == u'wavelength_min' and self.parent_class == u'SASsource': 355 elif (key == u'wavelength_min' 356 and self.parent_class == u'SASsource'): 299 357 self.current_datainfo.source.wavelength_min = data_point 300 358 self.current_datainfo.source.wavelength_min_unit = unit 301 elif key == u'wavelength_spread' and self.parent_class == u'SASsource': 302 self.current_datainfo.source.wavelength_spread = data_point 303 self.current_datainfo.source.wavelength_spread_unit = unit 304 elif key == u'beam_size_x' and self.parent_class == u'SASsource': 359 elif (key == u'incident_wavelength_spread' 360 and self.parent_class == u'SASsource'): 361 self.current_datainfo.source.wavelength_spread = \ 362 data_point 363 self.current_datainfo.source.wavelength_spread_unit = \ 364 unit 365 elif (key == u'beam_size_x' 366 and self.parent_class == u'SASsource'): 305 367 self.current_datainfo.source.beam_size.x = data_point 306 368 self.current_datainfo.source.beam_size_unit = unit 307 elif key == u'beam_size_y' and self.parent_class == u'SASsource': 369 elif (key == u'beam_size_y' 370 and self.parent_class == u'SASsource'): 308 371 self.current_datainfo.source.beam_size.y = data_point 309 372 self.current_datainfo.source.beam_size_unit = unit 310 elif key == u'beam_shape' and self.parent_class == u'SASsource': 373 elif (key == u'beam_shape' 374 and self.parent_class == u'SASsource'): 311 375 self.current_datainfo.source.beam_shape = data_point 312 elif key == u'radiation' and self.parent_class == u'SASsource': 376 elif (key == u'radiation' 377 and self.parent_class == u'SASsource'): 313 378 self.current_datainfo.source.radiation = data_point 314 elif key == u'transmission' and self.parent_class == u'SASdata': 379 elif (key == u'transmission' 380 and self.parent_class == u'SASdata'): 315 381 self.current_datainfo.sample.transmission = data_point 316 382 317 # #Everything else goes in meta_data383 # Everything else goes in meta_data 318 384 else: 319 new_key = self._create_unique_key(self.current_datainfo.meta_data, key) 385 new_key = self._create_unique_key( 386 self.current_datainfo.meta_data, key) 320 387 self.current_datainfo.meta_data[new_key] = data_point 321 388 322 389 else: 323 # #I don't know if this reachable code390 # I don't know if this reachable code 324 391 self.errors.add("ShouldNeverHappenException") 325 392 326 393 def add_intermediate(self): 327 394 """ 328 This method stores any intermediate objects within the final data set after fully reading the set. 329 330 :param parent: The NXclass name for the h5py Group object that just finished being processed 395 This method stores any intermediate objects within the final data set 396 after fully reading the set. 397 398 :param parent: The NXclass name for the h5py Group object that just 399 finished being processed 331 400 """ 332 401 … … 347 416 self.aperture = Aperture() 348 417 elif self.parent_class == u'SASdata': 349 if type(self.current_dataset) is plottable_2D:418 if isinstance(self.current_dataset, plottable_2D): 350 419 self.data2d.append(self.current_dataset) 351 elif type(self.current_dataset) is plottable_1D:420 elif isinstance(self.current_dataset, plottable_1D): 352 421 self.data1d.append(self.current_dataset) 353 422 354 423 def final_data_cleanup(self): 355 424 """ 356 Does some final cleanup and formatting on self.current_datainfo and all data1D and data2D objects and then 357 combines the data and info into Data1D and Data2D objects 358 """ 359 360 ## Type cast data arrays to float64 425 Does some final cleanup and formatting on self.current_datainfo and 426 all data1D and data2D objects and then combines the data and info into 427 Data1D and Data2D objects 428 """ 429 430 # Type cast data arrays to float64 361 431 if len(self.current_datainfo.trans_spectrum) > 0: 362 432 spectrum_list = [] … … 364 434 spectrum.transmission = np.delete(spectrum.transmission, [0]) 365 435 spectrum.transmission = spectrum.transmission.astype(np.float64) 366 spectrum.transmission_deviation = np.delete(spectrum.transmission_deviation, [0]) 367 spectrum.transmission_deviation = spectrum.transmission_deviation.astype(np.float64) 436 spectrum.transmission_deviation = np.delete( 437 spectrum.transmission_deviation, [0]) 438 spectrum.transmission_deviation = \ 439 spectrum.transmission_deviation.astype(np.float64) 368 440 spectrum.wavelength = np.delete(spectrum.wavelength, [0]) 369 441 spectrum.wavelength = spectrum.wavelength.astype(np.float64) … … 372 444 self.current_datainfo.trans_spectrum = spectrum_list 373 445 374 # #Append errors to dataset and reset class errors446 # Append errors to dataset and reset class errors 375 447 self.current_datainfo.errors = self.errors 376 448 self.errors.clear() 377 449 378 # #Combine all plottables with datainfo and append each to output379 # #Type cast data arrays to float64 and find min/max as appropriate450 # Combine all plottables with datainfo and append each to output 451 # Type cast data arrays to float64 and find min/max as appropriate 380 452 for dataset in self.data2d: 381 453 dataset.data = dataset.data.astype(np.float64) … … 397 469 zeros = np.ones(dataset.data.size, dtype=bool) 398 470 try: 399 for i in range 471 for i in range(0, dataset.mask.size - 1): 400 472 zeros[i] = dataset.mask[i] 401 473 except: 402 474 self.errors.add(sys.exc_value) 403 475 dataset.mask = zeros 404 # #Calculate the actual Q matrix476 # Calculate the actual Q matrix 405 477 try: 406 478 if dataset.q_data.size <= 1: 407 dataset.q_data = np.sqrt(dataset.qx_data * dataset.qx_data + dataset.qy_data * dataset.qy_data) 479 dataset.q_data = np.sqrt(dataset.qx_data 480 * dataset.qx_data 481 + dataset.qy_data 482 * dataset.qy_data) 408 483 except: 409 484 dataset.q_data = None … … 415 490 dataset.data = dataset.data.flatten() 416 491 417 final_dataset = combine_data_info_with_plottable(dataset, self.current_datainfo) 492 final_dataset = combine_data_info_with_plottable( 493 dataset, self.current_datainfo) 418 494 self.output.append(final_dataset) 419 495 … … 435 511 if dataset.dy is not None: 436 512 dataset.dy = dataset.dy.astype(np.float64) 437 final_dataset = combine_data_info_with_plottable(dataset, self.current_datainfo) 513 final_dataset = combine_data_info_with_plottable( 514 dataset, self.current_datainfo) 438 515 self.output.append(final_dataset) 439 516 440 517 def add_data_set(self, key=""): 441 518 """ 442 Adds the current_dataset to the list of outputs after preforming final processing on the data and then calls a 443 private method to generate a new data set. 519 Adds the current_dataset to the list of outputs after preforming final 520 processing on the data and then calls a private method to generate a 521 new data set. 444 522 445 523 :param key: NeXus group name for current tree level … … 453 531 454 532 455 def _initialize_new_data_set(self, parent_list = None): 456 """ 457 A private class method to generate a new 1D or 2D data object based on the type of data within the set. 458 Outside methods should call add_data_set() to be sure any existing data is stored properly. 533 def _initialize_new_data_set(self, parent_list=None): 534 """ 535 A private class method to generate a new 1D or 2D data object based on 536 the type of data within the set. Outside methods should call 537 add_data_set() to be sure any existing data is stored properly. 459 538 460 539 :param parent_list: List of names of parent elements … … 473 552 def _find_intermediate(self, parent_list, basename=""): 474 553 """ 475 A private class used to find an entry by either using a direct key or knowing the approximate basename. 476 477 :param parent_list: List of parents to the current level in the HDF5 file 554 A private class used to find an entry by either using a direct key or 555 knowing the approximate basename. 556 557 :param parent_list: List of parents nodes in the HDF5 file 478 558 :param basename: Approximate name of an entry to search for 479 559 :return: … … 486 566 top = top.get(parent) 487 567 for key in top.keys(): 488 if (key_prog.match(key)):568 if key_prog.match(key): 489 569 entry = True 490 570 break … … 516 596 """ 517 597 unit = value.attrs.get(u'units') 518 if unit ==None:598 if unit is None: 519 599 unit = value.attrs.get(u'unit') 520 # #Convert the unit formats600 # Convert the unit formats 521 601 if unit == "1/A": 522 602 unit = "A^{-1}" -
src/sas/sascalc/fit/BumpsFitting.py
r345e7e4 r1a30720 352 352 except Exception as exc: 353 353 best, fbest = None, numpy.NaN 354 errors = [str(exc), traceback. traceback.format_exc()]354 errors = [str(exc), traceback.format_exc()] 355 355 finally: 356 356 mapper.stop_mapper(fitdriver.mapper) -
src/sas/sasgui/guiframe/acknowledgebox.py
rc1fdf84 r74c8cd0 11 11 import wx.richtext 12 12 import wx.lib.hyperlink 13 from wx.lib.expando import ExpandoTextCtrl 13 14 import random 14 15 import os.path … … 36 37 Shows the current method for acknowledging SasView in 37 38 scholarly publications. 38 39 39 """ 40 40 … … 44 44 wx.Dialog.__init__(self, *args, **kwds) 45 45 46 self.ack = wx.TextCtrl(self, style=wx.TE_LEFT|wx.TE_MULTILINE|wx.TE_BESTWRAP|wx.TE_READONLY|wx.TE_NO_VSCROLL)46 self.ack = ExpandoTextCtrl(self, style=wx.TE_LEFT|wx.TE_MULTILINE|wx.TE_BESTWRAP|wx.TE_READONLY|wx.TE_NO_VSCROLL) 47 47 self.ack.SetValue(config._acknowledgement_publications) 48 self.ack.SetMinSize((-1, 55)) 48 #self.ack.SetMinSize((-1, 55)) 49 self.citation = ExpandoTextCtrl(self, style=wx.TE_LEFT|wx.TE_MULTILINE|wx.TE_BESTWRAP|wx.TE_READONLY|wx.TE_NO_VSCROLL) 50 self.citation.SetValue(config._acknowledgement_citation) 49 51 self.preamble = wx.StaticText(self, -1, config._acknowledgement_preamble) 50 52 items = [config._acknowledgement_preamble_bullet1, … … 52 54 config._acknowledgement_preamble_bullet3, 53 55 config._acknowledgement_preamble_bullet4] 54 self.list1 = wx.StaticText(self, -1, " \t(1) " + items[0])55 self.list2 = wx.StaticText(self, -1, " \t(2) " + items[1])56 self.list3 = wx.StaticText(self, -1, " \t(3) " + items[2])57 self.list4 = wx.StaticText(self, -1, " \t(4) " + items[3])56 self.list1 = wx.StaticText(self, -1, "(1) " + items[0]) 57 self.list2 = wx.StaticText(self, -1, "(2) " + items[1]) 58 self.list3 = wx.StaticText(self, -1, "(3) " + items[2]) 59 self.list4 = wx.StaticText(self, -1, "(4) " + items[3]) 58 60 self.static_line = wx.StaticLine(self, 0) 59 61 self.__set_properties() … … 69 71 self.SetTitle("Acknowledging SasView") 70 72 #Increased size of box from (525, 225), SMK, 04/10/16 71 self.Set Size((600, 300))73 self.SetClientSize((600, 320)) 72 74 # end wxGlade 73 75 … … 81 83 sizer_titles.Add(self.preamble, 0, wx.ALL|wx.EXPAND, 5) 82 84 sizer_titles.Add(self.list1, 0, wx.ALL|wx.EXPAND, 5) 85 sizer_titles.Add(self.ack, 0, wx.ALL|wx.EXPAND, 5) 83 86 sizer_titles.Add(self.list2, 0, wx.ALL|wx.EXPAND, 5) 87 sizer_titles.Add(self.citation, 0, wx.ALL|wx.EXPAND, 5) 84 88 sizer_titles.Add(self.list3, 0, wx.ALL|wx.EXPAND, 5) 89 #sizer_titles.Add(self.static_line, 0, wx.ALL|wx.EXPAND, 0) 85 90 sizer_titles.Add(self.list4, 0, wx.ALL|wx.EXPAND, 5) 86 sizer_titles.Add(self.static_line, 0, wx.ALL|wx.EXPAND, 0)87 sizer_titles.Add(self.ack, 0, wx.ALL|wx.EXPAND, 5)88 91 sizer_main.Add(sizer_titles, -1, wx.ALL|wx.EXPAND, 5) 89 92 self.SetAutoLayout(True) … … 91 94 self.Layout() 92 95 self.Centre() 96 #self.SetClientSize(sizer_main.GetSize()) 93 97 # end wxGlade 94 98 -
src/sas/sasgui/guiframe/config.py
rd85c194 rf9d1f60 1 1 """ 2 Application settings2 Application settings 3 3 """ 4 import time 4 5 import os 5 import time6 6 from sas.sasgui.guiframe.gui_style import GUIFRAME 7 import sas.sasview 8 import logging 9 7 10 # Version of the application 8 __appname__ = " DummyView"9 __version__ = '0.0.0'10 __build__ = '1'11 __appname__ = "SasView" 12 __version__ = sas.sasview.__version__ 13 __build__ = sas.sasview.__build__ 11 14 __download_page__ = 'https://github.com/SasView/sasview/releases' 12 15 __update_URL__ = 'http://www.sasview.org/latestversion.json' 13 16 14 15 17 # Debug message flag 16 __EVT_DEBUG__ = True18 __EVT_DEBUG__ = False 17 19 18 20 # Flag for automated testing … … 29 31 _acknowledgement_preamble =\ 30 32 '''To ensure the long term support and development of this software please''' +\ 31 ''' remember to do the following.'''33 ''' remember to:''' 32 34 _acknowledgement_preamble_bullet1 =\ 33 '''Acknowledge its use in your publications as suggested below'''35 '''Acknowledge its use in your publications as :''' 34 36 _acknowledgement_preamble_bullet2 =\ 35 '''Reference the following website: http://www.sasview.org'''37 '''Reference SasView as:''' 36 38 _acknowledgement_preamble_bullet3 =\ 37 39 '''Reference the model you used if appropriate (see documentation for refs)''' … … 39 41 '''Send us your reference for our records: developers@sasview.org''' 40 42 _acknowledgement_publications = \ 41 '''This work benefited from the use of the SasView application, originally 42 developed under NSF award DMR-0520547. 43 '''This work benefited from the use of the SasView application, originally developed under NSF Award DMR-0520547. SasView also contains code developed with funding from the EU Horizon 2020 programme under the SINE2020 project Grant No 654000.''' 44 _acknowledgement_citation = \ 45 '''M. Doucet et al. SasView Version 4.1, Zenodo, 10.5281/zenodo.438138''' 46 47 _acknowledgement = \ 48 '''This work was originally developed as part of the DANSE project funded by the US NSF under Award DMR-0520547,\n but is currently maintained by a collaboration between UTK, UMD, NIST, ORNL, ISIS, ESS, ILL, ANSTO and TU Delft and the scattering community.\n\n SasView also contains code developed with funding from the EU Horizon 2020 programme under the SINE2020 project (Grant No 654000).\nA list of individual contributors can be found at: https://github.com/orgs/SasView/people 43 49 ''' 44 _acknowledgement = \45 '''This work originally developed as part of the DANSE project funded by the NSF46 under grant DMR-0520547, and currently maintained by NIST, UMD, ORNL, ISIS, ESS47 and ILL.48 50 49 '''50 51 _homepage = "http://www.sasview.org" 51 _download = "http://sourceforge.net/projects/sasview/files/"52 _download = __download_page__ 52 53 _authors = [] 53 54 _paper = "http://sourceforge.net/p/sasview/tickets/" 54 55 _license = "mailto:help@sasview.org" 55 _nsf_logo = "images/nsf_logo.png" 56 _danse_logo = "images/danse_logo.png" 57 _inst_logo = "images/utlogo.gif" 58 _nist_logo = "images/nist_logo.png" 59 _umd_logo = "images/umd_logo.png" 60 _sns_logo = "images/sns_logo.png" 61 _isis_logo = "images/isis_logo.png" 62 _ess_logo = "images/ess_logo.png" 63 _ill_logo = "images/ill_logo.png" 56 57 58 icon_path = os.path.abspath(os.path.join(os.path.dirname(__file__), "images")) 59 logging.info("icon path: %s" % icon_path) 60 media_path = os.path.abspath(os.path.join(os.path.dirname(__file__), "media")) 61 test_path = os.path.abspath(os.path.join(os.path.dirname(__file__), "test")) 62 63 _nist_logo = os.path.join(icon_path, "nist_logo.png") 64 _umd_logo = os.path.join(icon_path, "umd_logo.png") 65 _sns_logo = os.path.join(icon_path, "sns_logo.png") 66 _ornl_logo = os.path.join(icon_path, "ornl_logo.png") 67 _isis_logo = os.path.join(icon_path, "isis_logo.png") 68 _ess_logo = os.path.join(icon_path, "ess_logo.png") 69 _ill_logo = os.path.join(icon_path, "ill_logo.png") 70 _ansto_logo = os.path.join(icon_path, "ansto_logo.png") 71 _tudelft_logo = os.path.join(icon_path, "tudelft_logo.png") 72 _nsf_logo = os.path.join(icon_path, "nsf_logo.png") 73 _danse_logo = os.path.join(icon_path, "danse_logo.png") 74 _inst_logo = os.path.join(icon_path, "utlogo.gif") 64 75 _nist_url = "http://www.nist.gov/" 65 76 _umd_url = "http://www.umd.edu/" 66 77 _sns_url = "http://neutrons.ornl.gov/" 78 _ornl_url = "http://neutrons.ornl.gov/" 67 79 _nsf_url = "http://www.nsf.gov" 68 _danse_url = "http://www.cacr.caltech.edu/projects/danse/release/index.html"69 _inst_url = "http://www.utk.edu"70 80 _isis_url = "http://www.isis.stfc.ac.uk/" 71 81 _ess_url = "http://ess-scandinavia.eu/" 72 82 _ill_url = "http://www.ill.eu/" 73 _corner_image = "images/angles_flat.png" 74 _welcome_image = "images/SVwelcome.png" 75 _copyright = "(c) 2008, University of Tennessee" 76 #edit the lists below of file state your plugin can read 77 #for sasview this how you can edit these lists 78 #PLUGIN_STATE_EXTENSIONS = ['.prv','.fitv', '.inv'] 79 #APPLICATION_STATE_EXTENSION = '.svs' 80 #PLUGINS_WLIST = ['P(r) files (*.prv)|*.prv', 81 # 'Fitting files (*.fitv)|*.fitv', 82 # 'Invariant files (*.inv)|*.inv'] 83 #APPLICATION_WLIST = 'SasView files (*.svs)|*.svs' 84 APPLICATION_WLIST = '' 85 APPLICATION_STATE_EXTENSION = None 86 PLUGINS_WLIST = [] 87 PLUGIN_STATE_EXTENSIONS = [] 88 SPLASH_SCREEN_PATH = "images/danse_logo.png" 89 DEFAULT_STYLE = GUIFRAME.SINGLE_APPLICATION 90 SPLASH_SCREEN_WIDTH = 500 91 SPLASH_SCREEN_HEIGHT = 300 92 WELCOME_PANEL_ON = False 93 TUTORIAL_PATH = None 94 SS_MAX_DISPLAY_TIME = 1500 95 PLOPANEL_WIDTH = 350 96 PLOPANEL_HEIGTH = 350 97 GUIFRAME_WIDTH = 1000 98 GUIFRAME_HEIGHT = 800 99 CONTROL_WIDTH = -1 100 CONTROL_HEIGHT = -1 101 SetupIconFile_win = os.path.join("images", "ball.ico") 102 SetupIconFile_mac = os.path.join("images", "ball.icns") 103 DefaultGroupName = "DANSE" 104 OutputBaseFilename = "setupGuiFrame" 83 _ansto_url = "http://www.ansto.gov.au/" 84 _tudelft_url = "http://www.tnw.tudelft.nl/en/cooperation/facilities/reactor-instituut-delft/" 85 _danse_url = "http://www.cacr.caltech.edu/projects/danse/release/index.html" 86 _inst_url = "http://www.utk.edu" 87 _corner_image = os.path.join(icon_path, "angles_flat.png") 88 _welcome_image = os.path.join(icon_path, "SVwelcome.png") 89 _copyright = "(c) 2009 - 2017, UTK, UMD, NIST, ORNL, ISIS, ESS, ILL, ANSTO and TU Delft" 90 marketplace_url = "http://marketplace.sasview.org/" 91 92 #edit the list of file state your plugin can read 93 APPLICATION_WLIST = 'SasView files (*.svs)|*.svs' 94 APPLICATION_STATE_EXTENSION = '.svs' 95 GUIFRAME_WIDTH = 1150 96 GUIFRAME_HEIGHT = 840 97 PLUGIN_STATE_EXTENSIONS = ['.fitv', '.inv', '.prv', '.crf'] 98 PLUGINS_WLIST = ['Fitting files (*.fitv)|*.fitv', 99 'Invariant files (*.inv)|*.inv', 100 'P(r) files (*.prv)|*.prv', 101 'Corfunc files (*.crf)|*.crf'] 102 PLOPANEL_WIDTH = 415 103 PLOPANEL_HEIGTH = 370 105 104 DATAPANEL_WIDTH = 235 106 105 DATAPANEL_HEIGHT = 700 106 SPLASH_SCREEN_PATH = os.path.join(icon_path, "SVwelcome_mini.png") 107 TUTORIAL_PATH = os.path.join(media_path, "Tutorial.pdf") 108 DEFAULT_STYLE = GUIFRAME.MULTIPLE_APPLICATIONS|GUIFRAME.MANAGER_ON\ 109 |GUIFRAME.CALCULATOR_ON|GUIFRAME.TOOLBAR_ON 110 SPLASH_SCREEN_WIDTH = 512 111 SPLASH_SCREEN_HEIGHT = 366 112 SS_MAX_DISPLAY_TIME = 2000 113 WELCOME_PANEL_ON = True 114 WELCOME_PANEL_SHOW = False 115 CLEANUP_PLOT = False 116 # OPEN and SAVE project menu 117 OPEN_SAVE_PROJECT_MENU = True 118 #VIEW MENU 119 VIEW_MENU = True 120 #EDIT MENU 121 EDIT_MENU = True 122 123 SetupIconFile_win = os.path.join(icon_path, "ball.ico") 124 SetupIconFile_mac = os.path.join(icon_path, "ball.icns") 125 DefaultGroupName = "." 126 OutputBaseFilename = "setupSasView" 127 107 128 FIXED_PANEL = True 108 129 DATALOADER_SHOW = True … … 113 134 # set a default perspective 114 135 DEFAULT_PERSPECTIVE = 'None' 115 # OPEN and SAVE project menu 116 OPEN_SAVE_PROJECT_MENU = True 117 CLEANUP_PLOT = False 118 # OPEN and SAVE project menu 119 OPEN_SAVE_PROJECT_MENU = False 120 #VIEW MENU 121 VIEW_MENU = False 122 #EDIT MENU 123 EDIT_MENU = False 124 import wx.lib.newevent 125 (StatusBarEvent, EVT_STATUS) = wx.lib.newevent.NewEvent() 136 137 # Time out for updating sasview 138 UPDATE_TIMEOUT = 2 139 140 #OpenCL option 141 SAS_OPENCL = None 126 142 127 143 def printEVT(message): 128 """129 :TODO - need method documentation130 """131 144 if __EVT_DEBUG__: 145 """ 146 :TODO - Need method doc string 147 """ 132 148 print "%g: %s" % (time.clock(), message) 133 149 134 150 if __EVT_DEBUG_2_FILE__: 135 151 out = open(__EVT_DEBUG_FILENAME__, 'a') 136 152 out.write("%10g: %s\n" % (time.clock(), message)) 137 153 out.close() 138 -
src/sas/sasgui/perspectives/fitting/fitting.py
rddbac66 r4c5098c 1755 1755 data_id="Data " + data.name + " unsmeared", 1756 1756 dy=unsmeared_error) 1757 1758 if sq_model is not None and pq_model is not None: 1759 self.create_theory_1D(x, sq_model, page_id, model, data, state, 1760 data_description=model.name + " S(q)", 1761 data_id=str(page_id) + " " + data.name + " S(q)") 1762 self.create_theory_1D(x, pq_model, page_id, model, data, state, 1763 data_description=model.name + " P(q)", 1764 data_id=str(page_id) + " " + data.name + " P(q)") 1765 1757 # Comment this out until we can get P*S models with correctly populated parameters 1758 #if sq_model is not None and pq_model is not None: 1759 # self.create_theory_1D(x, sq_model, page_id, model, data, state, 1760 # data_description=model.name + " S(q)", 1761 # data_id=str(page_id) + " " + data.name + " S(q)") 1762 # self.create_theory_1D(x, pq_model, page_id, model, data, state, 1763 # data_description=model.name + " P(q)", 1764 # data_id=str(page_id) + " " + data.name + " P(q)") 1766 1765 1767 1766 current_pg = self.fit_panel.get_page_by_id(page_id) -
src/sas/sasgui/perspectives/fitting/pagestate.py
rd5aff7f r27109e5 819 819 820 820 attr = newdoc.createAttribute("version") 821 import sasview821 from sas import sasview 822 822 attr.nodeValue = sasview.__version__ 823 823 # attr.nodeValue = '1.0' -
test/corfunc/test/utest_corfunc.py
racefa2b r253eb6c6 8 8 from sas.sascalc.corfunc.corfunc_calculator import CorfuncCalculator 9 9 from sas.sascalc.dataloader.data_info import Data1D 10 import matplotlib.pyplot as plt 10 11 11 12 12 class TestCalculator(unittest.TestCase): … … 69 69 self.assertLess(abs(params['max']-75), 2.5) # L_p ~= 75 70 70 71 72 71 # Ensure tests are ran in correct order; 73 72 # Each test depends on the one before it -
test/sasdataloader/test/utest_abs_reader.py
r5f26aa4 r36d69e1 4 4 5 5 import unittest 6 import numpy, math 7 from sas.sascalc.dataloader.loader import Loader 6 import math 7 import numpy as np 8 from sas.sascalc.dataloader.loader import Loader 9 from sas.sascalc.dataloader.readers.IgorReader import Reader as IgorReader 8 10 from sas.sascalc.dataloader.data_info import Data1D 9 11 … … 86 88 87 89 def setUp(self): 88 self.data = Loader().load("MAR07232_rest.ASC") 89 90 # the IgorReader should be able to read this filetype 91 # if it can't, stop here. 92 reader = IgorReader() 93 self.data = reader.read("MAR07232_rest.ASC") 94 90 95 def test_igor_checkdata(self): 91 96 """ … … 108 113 109 114 self.assertEqual(self.data.detector[0].beam_center_unit, 'mm') 110 center_x = (68.76 -1)*5.0111 center_y = (62.47 -1)*5.0115 center_x = (68.76 - 1)*5.0 116 center_y = (62.47 - 1)*5.0 112 117 self.assertEqual(self.data.detector[0].beam_center.x, center_x) 113 118 self.assertEqual(self.data.detector[0].beam_center.y, center_y) 114 119 115 120 self.assertEqual(self.data.I_unit, '1/cm') 116 self.assertEqual(self.data.data[0], 0.279783) 117 self.assertEqual(self.data.data[1], 0.28951) 118 self.assertEqual(self.data.data[2], 0.167634) 119 121 # 3 points should be suffcient to check that the data is in column 122 # major order. 123 np.testing.assert_almost_equal(self.data.data[0:3], 124 [0.279783, 0.28951, 0.167634]) 125 np.testing.assert_almost_equal(self.data.qx_data[0:3], 126 [-0.01849072, -0.01821785, -0.01794498]) 127 np.testing.assert_almost_equal(self.data.qy_data[0:3], 128 [-0.01677435, -0.01677435, -0.01677435]) 129 130 def test_generic_loader(self): 131 # the generic loader should direct the file to IgorReader as well 132 data = Loader().load("MAR07232_rest.ASC") 133 self.assertEqual(data.meta_data['loader'], "IGOR 2D") 134 135 120 136 class danse_reader(unittest.TestCase): 121 137 … … 313 329 from sas.sascalc.dataloader.readers.cansas_reader import Reader 314 330 r = Reader() 315 x = n umpy.ones(5)316 y = n umpy.ones(5)317 dy = n umpy.ones(5)331 x = np.ones(5) 332 y = np.ones(5) 333 dy = np.ones(5) 318 334 319 335 filename = "write_test.xml"
Note: See TracChangeset
for help on using the changeset viewer.