Changes in / [1661cd5:f15da54] in sasview
- Files:
-
- 1 added
- 1 deleted
- 15 edited
Legend:
- Unmodified
- Added
- Removed
-
LICENSE.TXT
ra3e3ef5 r7c05b63 1 Copyright (c) 2009-201 7, SasView Developers1 Copyright (c) 2009-2016, SasView Developers 2 2 All rights reserved. 3 3 -
sasview/README.txt
r311d00a r220b1e7 4 4 1- Features 5 5 =========== 6 - New in Version 4.1.07 ------------------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 an14 adsorbed polymer/surfactant layer.15 16 A correlation function may be interpreted in terms of an imaginary rod moving17 through the structure of the material. Î1D(R) is the probability that a rod of18 length R moving through the material has equal electron/neutron scattering19 length density at either end. Hence a frequently occurring spacing within a20 structure manifests itself as a peak.21 22 A volume fraction profile \Phi(z) describes how the density of polymer23 segments/surfactant molecules varies with distance from an (assumed locally flat)24 interface.25 26 - Fitting of SESANS Data27 Data from Spin-Echo SANS measurements can now be loaded and fitted. The data will28 be plotted against the correct axes and models will automatically perform a Hankel29 transform in order to calculate SESANS from a SANS model.30 31 - Documentation32 The documentation has undergone significant checking and updating.33 34 - Improvements35 - Correlation function (corfunc) analysis of 1D SAS data added from CCP1336 - File converter tool for multi-file single column data sets37 - SESANS data loading and direct fitting using the Hankel transformation38 - Saving and loading of simultaneous and constrained fits now supported39 - Save states from SasView v3.x.y now loaded using sasmodel model names40 - Saving and loading of projects with 2D fits now supported41 - Loading a project removes all existing data, fits, and plots42 - Structure factor and form factor can be plotted independently43 - OpenCL is disabled by default and can be enabled through a fit menu44 - Data and theory fields are now independently expandable45 - Bug Fixes46 - Fixes #667: Models computed multiple times on parameters changes47 - Fixes #673: Custom models override built in models of same name48 - Fixes #678: Hard crash when running complex models on GPU49 - Fixes $774: Old style plugin models unloadable50 - Fixes #789: stacked disk scale doesn't match cylinder model51 - Fixes #792: core_shell_fractal uses wrong effective radius52 - Fixes #800: Plot range reset on plot redraws53 - Fixes #811 and #825: 2D smearing broken54 - Fixes #815: Integer model parameter handling55 - Fixes #824: Cannot apply sector averaging when no detector data present56 - Fixes #830: Cansas HDF5 reader fully compliant with NXCanSAS v1.0 format57 - Fixes #835: Fractal model breaks with negative Q values58 - Fixes #843: Multilayer vesicle does not define effective radius59 - Fixes #858: Hayter MSA S(Q) returns errors60 - Numerous grammatical and contexual errors in documention61 62 63 6 - New in Version 4.0.1 64 7 ------------------ … … 483 426 =============== 484 427 485 486 4.1- All systems:487 The conversion to sasmodels infrastructure is ongoing and should be488 completed in the next release. In the meantime this leads to a few known489 issues:490 - The way that orientation is defined is being refactored to address491 long standing issues and comments. In release 4.1 however only models492 with symmetry (e.g. a=b) have been converted to the new definitions.493 The rest (a <> b <> c - e.g. parellelepiped) maintain the same494 definition as before and will be converted in 4.2. Note that495 orientational distribution also makes much more sense in the new496 framework. The documentation should indicate which definition is being497 used for a given model.498 - The infrastructure currently handles internal conversion of old style499 models so that user created models in previous versions should continue500 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 be502 relatively straight forward and provides a number of benefits.503 - In that vein, the distributed models and those generated by the new504 plugin model editor are in the new format, however those generated by505 sum|multiply models are the old style sum|multiply models. This should506 also disappear in the near future507 - The on the fly discovery of plugin models and changes thereto behave508 inconsistently. If a change to a plugin model does not seem to509 register, the Load Plugin Models (under fitting -> Plugin Model510 Operations) can be used. However, after calling Load Plugin Models, the511 active plugin will no longer be loaded (even though the GUI looks like512 it is) unless it is a sum|multiply model which works properly. All513 others will need to be recalled from the model dropdown menu to reload514 the model into the calculation engine. While it might be annoying it515 does not appear to prevent SasView from working..516 - The model code and documentation review is ongoing. At this time the517 core shell parellelepiped is known to have the C shell effectively fixed518 at 0 (noted in documentation) while the triaxial ellipsoid does not seem519 to reproduce the limit of the oblate or prolate ellipsoid. If errors are520 found and corrected, corrected versions will be uploaded to the521 marketplace.522 523 428 3.1- All systems: 524 429 - The documentation window may take a few seconds to load the first time -
sasview/local_config.py
rf9d1f60 r73cbeec 33 33 ''' remember to:''' 34 34 _acknowledgement_preamble_bullet1 =\ 35 '''Acknowledge its use in your publications as :'''35 '''Acknowledge its use in your publications as suggested below;''' 36 36 _acknowledgement_preamble_bullet2 =\ 37 '''Reference SasView as:''' 37 '''Reference SasView as : M. Doucet, et al. SasView Version 4.0, Zenodo''' +\ 38 ''', http://doi.org/10.5281/zenodo.159083;''' 38 39 _acknowledgement_preamble_bullet3 =\ 39 '''Reference the model you used if appropriate (see documentation for refs) '''40 '''Reference the model you used if appropriate (see documentation for refs);''' 40 41 _acknowledgement_preamble_bullet4 =\ 41 42 '''Send us your reference for our records: developers@sasview.org''' 42 43 _acknowledgement_publications = \ 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'''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.''' 46 47 47 48 _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 49 ''' 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).''' 50 52 51 53 _homepage = "http://www.sasview.org" … … 87 89 _corner_image = os.path.join(icon_path, "angles_flat.png") 88 90 _welcome_image = os.path.join(icon_path, "SVwelcome.png") 89 _copyright = "(c) 2009 - 201 7, UTK, UMD, NIST, ORNL, ISIS, ESS, ILL, ANSTO and TU Delft"91 _copyright = "(c) 2009 - 2016, UTK, UMD, NIST, ORNL, ISIS, ESS, ILL, ANSTO and TU Delft" 90 92 marketplace_url = "http://marketplace.sasview.org/" 91 93 -
setup.py
r27109e5 r1e13b53 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/*',322 317 'test/save_states/*', 323 'test/ sesans_data/*'324 ]318 'test/upcoming_formats/*', 319 'default_categories.json'] 325 320 packages.append("sas.sasview") 326 321 -
src/sas/sascalc/calculator/slit_length_calculator.py
rbfba720 rb699768 16 16 # y data 17 17 self.y = None 18 # 18 #default slit length 19 19 self.slit_length = 0.0 20 20 … … 42 42 """ 43 43 # None data do nothing 44 if self.y is None or self.x isNone:44 if self.y == None or self.x == None: 45 45 return 46 46 # set local variable … … 54 54 y_sum = 0.0 55 55 y_max = 0.0 56 ind = 0 56 ind = 0.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 72 ind = 0.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/readers/cansas_reader.py
r8434365 rc221349 930 930 self._write_data(datainfo, entry_node) 931 931 # Transmission Spectrum Info 932 # TODO: fix the writer to linearize all data, including T_spectrum 933 # self._write_trans_spectrum(datainfo, entry_node) 932 self._write_trans_spectrum(datainfo, entry_node) 934 933 # Sample info 935 934 self._write_sample_info(datainfo, entry_node) -
src/sas/sascalc/dataloader/readers/cansas_reader_HDF5.py
rc94280c rbbd0f37 9 9 import sys 10 10 11 from sas.sascalc.dataloader.data_info import plottable_1D, plottable_2D,\ 12 Data1D, Data2D, DataInfo, Process, Aperture, Collimation, \ 13 TransmissionSpectrum, Detector 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 14 13 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 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). 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). 27 25 28 26 Also supports reading NXcanSAS formatted HDF5 files … … 32 30 """ 33 31 34 # CanSAS version32 ## CanSAS version 35 33 cansas_version = 2.0 36 # Logged warnings or messages34 ## Logged warnings or messages 37 35 logging = None 38 # List of errors for the current data set36 ## List of errors for the current data set 39 37 errors = None 40 # Raw file contents to be processed38 ## Raw file contents to be processed 41 39 raw_data = None 42 # Data info currently being read in40 ## Data info currently being read in 43 41 current_datainfo = None 44 # SASdata set currently being read in42 ## SASdata set currently being read in 45 43 current_dataset = None 46 # List of plottable1D objects that should be linked to the current_datainfo44 ## List of plottable1D objects that should be linked to the current_datainfo 47 45 data1d = None 48 # List of plottable2D objects that should be linked to the current_datainfo46 ## List of plottable2D objects that should be linked to the current_datainfo 49 47 data2d = None 50 # Data type name48 ## Data type name 51 49 type_name = "CanSAS 2.0" 52 # Wildcards50 ## Wildcards 53 51 type = ["CanSAS 2.0 HDF5 Files (*.h5)|*.h5"] 54 # List of allowed extensions52 ## List of allowed extensions 55 53 ext = ['.h5', '.H5'] 56 # Flag to bypass extension check57 allow_all = True58 # List of files to return54 ## Flag to bypass extension check 55 allow_all = False 56 ## List of files to return 59 57 output = None 60 58 … … 66 64 :return: List of Data1D/2D objects and/or a list of errors. 67 65 """ 68 # Reinitializewhen loading a new data file to reset all class variables66 ## Reinitialize the class when loading a new data file to reset all class variables 69 67 self.reset_class_variables() 70 # Check that the file exists68 ## Check that the file exists 71 69 if os.path.isfile(filename): 72 70 basename = os.path.basename(filename) … … 74 72 # If the file type is not allowed, return empty list 75 73 if extension in self.ext or self.allow_all: 76 # Load the data file74 ## Load the data file 77 75 self.raw_data = h5py.File(filename, 'r') 78 # Read in all child elements of top level SASroot76 ## Read in all child elements of top level SASroot 79 77 self.read_children(self.raw_data, []) 80 # Add the last data set to the list of outputs78 ## Add the last data set to the list of outputs 81 79 self.add_data_set() 82 # Close the data file80 ## Close the data file 83 81 self.raw_data.close() 84 # Return data set(s)82 ## Return data set(s) 85 83 return self.output 86 84 … … 112 110 """ 113 111 114 # Loop through each element of the parent and process accordingly112 ## Loop through each element of the parent and process accordingly 115 113 for key in data.keys(): 116 # Get all information for the current key114 ## Get all information for the current key 117 115 value = data.get(key) 118 116 if value.attrs.get(u'canSAS_class') is not None: … … 128 126 self.parent_class = class_name 129 127 parent_list.append(key) 130 # If a new sasentry, store the current data sets and create 131 # a fresh Data1D/2D object 128 ## If this is a new sasentry, store the current data sets and create a fresh Data1D/2D object 132 129 if class_prog.match(u'SASentry'): 133 130 self.add_data_set(key) 134 131 elif class_prog.match(u'SASdata'): 135 132 self._initialize_new_data_set(parent_list) 136 # Recursion step to access data within the group133 ## Recursion step to access data within the group 137 134 self.read_children(value, parent_list) 138 135 self.add_intermediate() … … 140 137 141 138 elif isinstance(value, h5py.Dataset): 142 # If this is a dataset, store the data appropriately139 ## If this is a dataset, store the data appropriately 143 140 data_set = data[key][:] 144 141 unit = self._get_unit(value) 145 142 146 # I and Q Data143 ## I and Q Data 147 144 if key == u'I': 148 if isinstance(self.current_dataset, plottable_2D):145 if type(self.current_dataset) is plottable_2D: 149 146 self.current_dataset.data = data_set 150 147 self.current_dataset.zaxis("Intensity", unit) … … 154 151 continue 155 152 elif key == u'Idev': 156 if isinstance(self.current_dataset, plottable_2D):153 if type(self.current_dataset) is plottable_2D: 157 154 self.current_dataset.err_data = data_set.flatten() 158 155 else: … … 161 158 elif key == u'Q': 162 159 self.current_dataset.xaxis("Q", unit) 163 if isinstance(self.current_dataset, plottable_2D):160 if type(self.current_dataset) is plottable_2D: 164 161 self.current_dataset.q = data_set.flatten() 165 162 else: … … 169 166 self.current_dataset.dx = data_set.flatten() 170 167 continue 171 elif key == u'dQw':172 self.current_dataset.dxw = data_set.flatten()173 continue174 elif key == u'dQl':175 self.current_dataset.dxl = data_set.flatten()176 continue177 168 elif key == u'Qy': 178 169 self.current_dataset.yaxis("Q_y", unit) … … 192 183 self.current_dataset.mask = data_set.flatten() 193 184 continue 194 # Transmission Spectrum195 elif (key == u'T'196 and self.parent_class == u'SAStransmission_spectrum'):197 self.trans_spectrum.transmission = data_set.flatten()198 continue199 elif (key == u'Tdev'200 and self.parent_class == u'SAStransmission_spectrum'):201 self.trans_spectrum.transmission_deviation = \202 data_set.flatten()203 continue204 elif (key == u'lambda'205 and self.parent_class == u'SAStransmission_spectrum'):206 self.trans_spectrum.wavelength = data_set.flatten()207 continue208 185 209 186 for data_point in data_set: 210 # Top Level Meta Data187 ## Top Level Meta Data 211 188 if key == u'definition': 212 189 self.current_datainfo.meta_data['reader'] = data_point … … 224 201 self.current_datainfo.notes.append(data_point) 225 202 226 # Sample Information 227 # CanSAS 2.0 format 228 elif key == u'Title' and self.parent_class == u'SASsample': 203 ## Sample Information 204 elif key == u'Title' and self.parent_class == u'SASsample': # CanSAS 2.0 format 229 205 self.current_datainfo.sample.name = data_point 230 # NXcanSAS format 231 elif key == u'name' and self.parent_class == u'SASsample': 206 elif key == u'ID' and self.parent_class == u'SASsample': # NXcanSAS format 232 207 self.current_datainfo.sample.name = data_point 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'): 208 elif key == u'thickness' and self.parent_class == u'SASsample': 238 209 self.current_datainfo.sample.thickness = data_point 239 elif (key == u'temperature' 240 and self.parent_class == u'SASsample'): 210 elif key == u'temperature' and self.parent_class == u'SASsample': 241 211 self.current_datainfo.sample.temperature = data_point 242 elif (key == u'transmission' 243 and self.parent_class == u'SASsample'): 212 elif key == u'transmission' and self.parent_class == u'SASsample': 244 213 self.current_datainfo.sample.transmission = data_point 245 elif (key == u'x_position' 246 and self.parent_class == u'SASsample'): 214 elif key == u'x_position' and self.parent_class == u'SASsample': 247 215 self.current_datainfo.sample.position.x = data_point 248 elif (key == u'y_position' 249 and self.parent_class == u'SASsample'): 216 elif key == u'y_position' and self.parent_class == u'SASsample': 250 217 self.current_datainfo.sample.position.y = data_point 251 elif key == u'p itch' and self.parent_class == u'SASsample':218 elif key == u'polar_angle' and self.parent_class == u'SASsample': 252 219 self.current_datainfo.sample.orientation.x = data_point 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': 220 elif key == u'azimuthal_angle' and self.parent_class == u'SASsample': 256 221 self.current_datainfo.sample.orientation.z = data_point 257 elif (key == u'details' 258 and self.parent_class == u'SASsample'): 222 elif key == u'details' and self.parent_class == u'SASsample': 259 223 self.current_datainfo.sample.details.append(data_point) 260 224 261 # Instrumental Information 262 elif (key == u'name' 263 and self.parent_class == u'SASinstrument'): 225 ## Instrumental Information 226 elif key == u'name' and self.parent_class == u'SASinstrument': 264 227 self.current_datainfo.instrument = data_point 265 228 elif key == u'name' and self.parent_class == u'SASdetector': … … 268 231 self.detector.distance = float(data_point) 269 232 self.detector.distance_unit = unit 270 elif (key == u'slit_length' 271 and self.parent_class == u'SASdetector'): 233 elif key == u'slit_length' and self.parent_class == u'SASdetector': 272 234 self.detector.slit_length = float(data_point) 273 235 self.detector.slit_length_unit = unit 274 elif (key == u'x_position' 275 and self.parent_class == u'SASdetector'): 236 elif key == u'x_position' and self.parent_class == u'SASdetector': 276 237 self.detector.offset.x = float(data_point) 277 238 self.detector.offset_unit = unit 278 elif (key == u'y_position' 279 and self.parent_class == u'SASdetector'): 239 elif key == u'y_position' and self.parent_class == u'SASdetector': 280 240 self.detector.offset.y = float(data_point) 281 241 self.detector.offset_unit = unit 282 elif (key == u'pitch' 283 and self.parent_class == u'SASdetector'): 242 elif key == u'polar_angle' and self.parent_class == u'SASdetector': 284 243 self.detector.orientation.x = float(data_point) 285 244 self.detector.orientation_unit = unit 286 elif key == u' roll' and self.parent_class == u'SASdetector':245 elif key == u'azimuthal_angle' and self.parent_class == u'SASdetector': 287 246 self.detector.orientation.z = float(data_point) 288 247 self.detector.orientation_unit = unit 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'): 248 elif key == u'beam_center_x' and self.parent_class == u'SASdetector': 294 249 self.detector.beam_center.x = float(data_point) 295 250 self.detector.beam_center_unit = unit 296 elif (key == u'beam_center_y' 297 and self.parent_class == u'SASdetector'): 251 elif key == u'beam_center_y' and self.parent_class == u'SASdetector': 298 252 self.detector.beam_center.y = float(data_point) 299 253 self.detector.beam_center_unit = unit 300 elif (key == u'x_pixel_size' 301 and self.parent_class == u'SASdetector'): 254 elif key == u'x_pixel_size' and self.parent_class == u'SASdetector': 302 255 self.detector.pixel_size.x = float(data_point) 303 256 self.detector.pixel_size_unit = unit 304 elif (key == u'y_pixel_size' 305 and self.parent_class == u'SASdetector'): 257 elif key == u'y_pixel_size' and self.parent_class == u'SASdetector': 306 258 self.detector.pixel_size.y = float(data_point) 307 259 self.detector.pixel_size_unit = unit 308 elif (key == u'distance' 309 and self.parent_class == u'SAScollimation'): 260 elif key == u'SSD' and self.parent_class == u'SAScollimation': 310 261 self.collimation.length = data_point 311 262 self.collimation.length_unit = unit 312 elif (key == u'name' 313 and self.parent_class == u'SAScollimation'): 263 elif key == u'name' and self.parent_class == u'SAScollimation': 314 264 self.collimation.name = data_point 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 265 266 ## Process Information 267 elif key == u'name' and self.parent_class == u'SASprocess': 328 268 self.process.name = data_point 329 elif (key == u'name' 330 and self.parent_class == u'SASprocess'): # NXcanSAS 269 elif key == u'Title' and self.parent_class == u'SASprocess': # CanSAS 2.0 format 331 270 self.process.name = data_point 332 elif (key == u'description' 333 and self.parent_class == u'SASprocess'): 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': 334 274 self.process.description = data_point 335 275 elif key == u'date' and self.parent_class == u'SASprocess': 336 276 self.process.date = data_point 337 elif key == u'term' and self.parent_class == u'SASprocess':338 self.process.term = data_point339 277 elif self.parent_class == u'SASprocess': 340 278 self.process.notes.append(data_point) 341 279 342 # Source 343 elif (key == u'wavelength' 344 and self.parent_class == u'SASdata'): 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': 345 290 self.current_datainfo.source.wavelength = data_point 346 291 self.current_datainfo.source.wavelength_unit = unit 347 elif (key == u'incident_wavelength' 348 and self.parent_class == 'SASsource'): 292 elif key == u'incident_wavelength' and self.parent_class == u'SASsource': 349 293 self.current_datainfo.source.wavelength = data_point 350 294 self.current_datainfo.source.wavelength_unit = unit 351 elif (key == u'wavelength_max' 352 and self.parent_class == u'SASsource'): 295 elif key == u'wavelength_max' and self.parent_class == u'SASsource': 353 296 self.current_datainfo.source.wavelength_max = data_point 354 297 self.current_datainfo.source.wavelength_max_unit = unit 355 elif (key == u'wavelength_min' 356 and self.parent_class == u'SASsource'): 298 elif key == u'wavelength_min' and self.parent_class == u'SASsource': 357 299 self.current_datainfo.source.wavelength_min = data_point 358 300 self.current_datainfo.source.wavelength_min_unit = unit 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'): 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': 367 305 self.current_datainfo.source.beam_size.x = data_point 368 306 self.current_datainfo.source.beam_size_unit = unit 369 elif (key == u'beam_size_y' 370 and self.parent_class == u'SASsource'): 307 elif key == u'beam_size_y' and self.parent_class == u'SASsource': 371 308 self.current_datainfo.source.beam_size.y = data_point 372 309 self.current_datainfo.source.beam_size_unit = unit 373 elif (key == u'beam_shape' 374 and self.parent_class == u'SASsource'): 310 elif key == u'beam_shape' and self.parent_class == u'SASsource': 375 311 self.current_datainfo.source.beam_shape = data_point 376 elif (key == u'radiation' 377 and self.parent_class == u'SASsource'): 312 elif key == u'radiation' and self.parent_class == u'SASsource': 378 313 self.current_datainfo.source.radiation = data_point 379 elif (key == u'transmission' 380 and self.parent_class == u'SASdata'): 314 elif key == u'transmission' and self.parent_class == u'SASdata': 381 315 self.current_datainfo.sample.transmission = data_point 382 316 383 # Everything else goes in meta_data317 ## Everything else goes in meta_data 384 318 else: 385 new_key = self._create_unique_key( 386 self.current_datainfo.meta_data, key) 319 new_key = self._create_unique_key(self.current_datainfo.meta_data, key) 387 320 self.current_datainfo.meta_data[new_key] = data_point 388 321 389 322 else: 390 # I don't know if this reachable code323 ## I don't know if this reachable code 391 324 self.errors.add("ShouldNeverHappenException") 392 325 393 326 def add_intermediate(self): 394 327 """ 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 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 400 331 """ 401 332 … … 416 347 self.aperture = Aperture() 417 348 elif self.parent_class == u'SASdata': 418 if isinstance(self.current_dataset, plottable_2D):349 if type(self.current_dataset) is plottable_2D: 419 350 self.data2d.append(self.current_dataset) 420 elif isinstance(self.current_dataset, plottable_1D):351 elif type(self.current_dataset) is plottable_1D: 421 352 self.data1d.append(self.current_dataset) 422 353 423 354 def final_data_cleanup(self): 424 355 """ 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 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 431 361 if len(self.current_datainfo.trans_spectrum) > 0: 432 362 spectrum_list = [] … … 434 364 spectrum.transmission = np.delete(spectrum.transmission, [0]) 435 365 spectrum.transmission = spectrum.transmission.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) 366 spectrum.transmission_deviation = np.delete(spectrum.transmission_deviation, [0]) 367 spectrum.transmission_deviation = spectrum.transmission_deviation.astype(np.float64) 440 368 spectrum.wavelength = np.delete(spectrum.wavelength, [0]) 441 369 spectrum.wavelength = spectrum.wavelength.astype(np.float64) … … 444 372 self.current_datainfo.trans_spectrum = spectrum_list 445 373 446 # Append errors to dataset and reset class errors374 ## Append errors to dataset and reset class errors 447 375 self.current_datainfo.errors = self.errors 448 376 self.errors.clear() 449 377 450 # Combine all plottables with datainfo and append each to output451 # Type cast data arrays to float64 and find min/max as appropriate378 ## Combine all plottables with datainfo and append each to output 379 ## Type cast data arrays to float64 and find min/max as appropriate 452 380 for dataset in self.data2d: 453 381 dataset.data = dataset.data.astype(np.float64) … … 469 397 zeros = np.ones(dataset.data.size, dtype=bool) 470 398 try: 471 for i in range (0, dataset.mask.size - 1):399 for i in range (0, dataset.mask.size - 1): 472 400 zeros[i] = dataset.mask[i] 473 401 except: 474 402 self.errors.add(sys.exc_value) 475 403 dataset.mask = zeros 476 # Calculate the actual Q matrix404 ## Calculate the actual Q matrix 477 405 try: 478 406 if dataset.q_data.size <= 1: 479 dataset.q_data = np.sqrt(dataset.qx_data 480 * dataset.qx_data 481 + dataset.qy_data 482 * dataset.qy_data) 407 dataset.q_data = np.sqrt(dataset.qx_data * dataset.qx_data + dataset.qy_data * dataset.qy_data) 483 408 except: 484 409 dataset.q_data = None … … 490 415 dataset.data = dataset.data.flatten() 491 416 492 final_dataset = combine_data_info_with_plottable( 493 dataset, self.current_datainfo) 417 final_dataset = combine_data_info_with_plottable(dataset, self.current_datainfo) 494 418 self.output.append(final_dataset) 495 419 … … 511 435 if dataset.dy is not None: 512 436 dataset.dy = dataset.dy.astype(np.float64) 513 final_dataset = combine_data_info_with_plottable( 514 dataset, self.current_datainfo) 437 final_dataset = combine_data_info_with_plottable(dataset, self.current_datainfo) 515 438 self.output.append(final_dataset) 516 439 517 440 def add_data_set(self, key=""): 518 441 """ 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. 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. 522 444 523 445 :param key: NeXus group name for current tree level … … 531 453 532 454 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. 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. 538 459 539 460 :param parent_list: List of names of parent elements … … 552 473 def _find_intermediate(self, parent_list, basename=""): 553 474 """ 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 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 558 478 :param basename: Approximate name of an entry to search for 559 479 :return: … … 566 486 top = top.get(parent) 567 487 for key in top.keys(): 568 if key_prog.match(key):488 if (key_prog.match(key)): 569 489 entry = True 570 490 break … … 596 516 """ 597 517 unit = value.attrs.get(u'units') 598 if unit isNone:518 if unit == None: 599 519 unit = value.attrs.get(u'unit') 600 # Convert the unit formats520 ## Convert the unit formats 601 521 if unit == "1/A": 602 522 unit = "A^{-1}" -
src/sas/sascalc/fit/BumpsFitting.py
r1a30720 r345e7e4 352 352 except Exception as exc: 353 353 best, fbest = None, numpy.NaN 354 errors = [str(exc), traceback. format_exc()]354 errors = [str(exc), traceback.traceback.format_exc()] 355 355 finally: 356 356 mapper.stop_mapper(fitdriver.mapper) -
src/sas/sasgui/guiframe/acknowledgebox.py
r74c8cd0 rc1fdf84 11 11 import wx.richtext 12 12 import wx.lib.hyperlink 13 from wx.lib.expando import ExpandoTextCtrl14 13 import random 15 14 import os.path … … 37 36 Shows the current method for acknowledging SasView in 38 37 scholarly publications. 38 39 39 """ 40 40 … … 44 44 wx.Dialog.__init__(self, *args, **kwds) 45 45 46 self.ack = ExpandoTextCtrl(self, style=wx.TE_LEFT|wx.TE_MULTILINE|wx.TE_BESTWRAP|wx.TE_READONLY|wx.TE_NO_VSCROLL)46 self.ack = wx.TextCtrl(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)) 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) 48 self.ack.SetMinSize((-1, 55)) 51 49 self.preamble = wx.StaticText(self, -1, config._acknowledgement_preamble) 52 50 items = [config._acknowledgement_preamble_bullet1, … … 54 52 config._acknowledgement_preamble_bullet3, 55 53 config._acknowledgement_preamble_bullet4] 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])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]) 60 58 self.static_line = wx.StaticLine(self, 0) 61 59 self.__set_properties() … … 71 69 self.SetTitle("Acknowledging SasView") 72 70 #Increased size of box from (525, 225), SMK, 04/10/16 73 self.Set ClientSize((600, 320))71 self.SetSize((600, 300)) 74 72 # end wxGlade 75 73 … … 83 81 sizer_titles.Add(self.preamble, 0, wx.ALL|wx.EXPAND, 5) 84 82 sizer_titles.Add(self.list1, 0, wx.ALL|wx.EXPAND, 5) 83 sizer_titles.Add(self.list2, 0, wx.ALL|wx.EXPAND, 5) 84 sizer_titles.Add(self.list3, 0, wx.ALL|wx.EXPAND, 5) 85 sizer_titles.Add(self.list4, 0, wx.ALL|wx.EXPAND, 5) 86 sizer_titles.Add(self.static_line, 0, wx.ALL|wx.EXPAND, 0) 85 87 sizer_titles.Add(self.ack, 0, wx.ALL|wx.EXPAND, 5) 86 sizer_titles.Add(self.list2, 0, wx.ALL|wx.EXPAND, 5)87 sizer_titles.Add(self.citation, 0, wx.ALL|wx.EXPAND, 5)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)90 sizer_titles.Add(self.list4, 0, wx.ALL|wx.EXPAND, 5)91 88 sizer_main.Add(sizer_titles, -1, wx.ALL|wx.EXPAND, 5) 92 89 self.SetAutoLayout(True) … … 94 91 self.Layout() 95 92 self.Centre() 96 #self.SetClientSize(sizer_main.GetSize())97 93 # end wxGlade 98 94 -
src/sas/sasgui/guiframe/config.py
rf9d1f60 rd85c194 1 1 """ 2 2 Application settings 3 3 """ 4 import os 4 5 import time 5 import os6 6 from sas.sasgui.guiframe.gui_style import GUIFRAME 7 import sas.sasview8 import logging9 10 7 # Version of the application 11 __appname__ = " SasView"12 __version__ = sas.sasview.__version__13 __build__ = sas.sasview.__build__8 __appname__ = "DummyView" 9 __version__ = '0.0.0' 10 __build__ = '1' 14 11 __download_page__ = 'https://github.com/SasView/sasview/releases' 15 12 __update_URL__ = 'http://www.sasview.org/latestversion.json' 16 13 14 17 15 # Debug message flag 18 __EVT_DEBUG__ = False16 __EVT_DEBUG__ = True 19 17 20 18 # Flag for automated testing … … 31 29 _acknowledgement_preamble =\ 32 30 '''To ensure the long term support and development of this software please''' +\ 33 ''' remember to :'''31 ''' remember to do the following.''' 34 32 _acknowledgement_preamble_bullet1 =\ 35 '''Acknowledge its use in your publications as :'''33 '''Acknowledge its use in your publications as suggested below''' 36 34 _acknowledgement_preamble_bullet2 =\ 37 '''Reference SasView as:'''35 '''Reference the following website: http://www.sasview.org''' 38 36 _acknowledgement_preamble_bullet3 =\ 39 37 '''Reference the model you used if appropriate (see documentation for refs)''' … … 41 39 '''Send us your reference for our records: developers@sasview.org''' 42 40 _acknowledgement_publications = \ 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''' 41 '''This work benefited from the use of the SasView application, originally 42 developed under NSF award DMR-0520547. 43 ''' 44 _acknowledgement = \ 45 '''This work originally developed as part of the DANSE project funded by the NSF 46 under grant DMR-0520547, and currently maintained by NIST, UMD, ORNL, ISIS, ESS 47 and ILL. 46 48 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/people49 49 ''' 50 51 50 _homepage = "http://www.sasview.org" 52 _download = __download_page__51 _download = "http://sourceforge.net/projects/sasview/files/" 53 52 _authors = [] 54 53 _paper = "http://sourceforge.net/p/sasview/tickets/" 55 54 _license = "mailto:help@sasview.org" 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") 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" 75 64 _nist_url = "http://www.nist.gov/" 76 65 _umd_url = "http://www.umd.edu/" 77 66 _sns_url = "http://neutrons.ornl.gov/" 78 _ornl_url = "http://neutrons.ornl.gov/"79 67 _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" 80 70 _isis_url = "http://www.isis.stfc.ac.uk/" 81 71 _ess_url = "http://ess-scandinavia.eu/" 82 72 _ill_url = "http://www.ill.eu/" 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 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" 104 105 DATAPANEL_WIDTH = 235 105 106 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_ON110 SPLASH_SCREEN_WIDTH = 512111 SPLASH_SCREEN_HEIGHT = 366112 SS_MAX_DISPLAY_TIME = 2000113 WELCOME_PANEL_ON = True114 WELCOME_PANEL_SHOW = False115 CLEANUP_PLOT = False116 # OPEN and SAVE project menu117 OPEN_SAVE_PROJECT_MENU = True118 #VIEW MENU119 VIEW_MENU = True120 #EDIT MENU121 EDIT_MENU = True122 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 128 107 FIXED_PANEL = True 129 108 DATALOADER_SHOW = True … … 134 113 # set a default perspective 135 114 DEFAULT_PERSPECTIVE = 'None' 136 137 # Time out for updating sasview 138 UPDATE_TIMEOUT = 2 139 140 #OpenCL option 141 SAS_OPENCL = 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() 142 126 143 127 def printEVT(message): 128 """ 129 :TODO - need method documentation 130 """ 144 131 if __EVT_DEBUG__: 145 """146 :TODO - Need method doc string147 """148 132 print "%g: %s" % (time.clock(), message) 149 133 150 134 if __EVT_DEBUG_2_FILE__: 151 135 out = open(__EVT_DEBUG_FILENAME__, 'a') 152 136 out.write("%10g: %s\n" % (time.clock(), message)) 153 137 out.close() 138 -
src/sas/sasgui/perspectives/fitting/basepage.py
rb301db9 r7a5aedd 120 120 self.dxw = None 121 121 # pinhole smear 122 self.dx_percent = None 122 self.dx_min = None 123 self.dx_max = None 123 124 # smear attrbs 124 125 self.enable_smearer = None … … 848 849 self.state.pinhole_smearer = \ 849 850 copy.deepcopy(self.pinhole_smearer.GetValue()) 850 self.state.dx_percent = copy.deepcopy(self.dx_percent) 851 self.state.dx_max = copy.deepcopy(self.dx_max) 852 self.state.dx_min = copy.deepcopy(self.dx_min) 851 853 self.state.dxl = copy.deepcopy(self.dxl) 852 854 self.state.dxw = copy.deepcopy(self.dxw) … … 1245 1247 # we have two more options for smearing 1246 1248 if self.pinhole_smearer.GetValue(): 1247 self.dx_percent = state.dx_percent 1248 if self.dx_percent is not None: 1249 if state.dx_old: 1250 self.dx_percent = 100 * (self.dx_percent / self.data.x[0]) 1251 self.smear_pinhole_percent.SetValue("%.2f" % self.dx_percent) 1249 self.dx_min = state.dx_min 1250 self.dx_max = state.dx_max 1251 if self.dx_min is not None: 1252 self.smear_pinhole_min.SetValue(str(self.dx_min)) 1253 if self.dx_max is not None: 1254 self.smear_pinhole_max.SetValue(str(self.dx_max)) 1252 1255 self.onPinholeSmear(event=None) 1253 1256 elif self.slit_smearer.GetValue(): -
src/sas/sasgui/perspectives/fitting/fitpage.py
rd85f1d8a r2d568f6 29 29 _BOX_WIDTH = 76 30 30 _DATA_BOX_WIDTH = 300 31 SMEAR_SIZE_L = 0.00 31 32 SMEAR_SIZE_H = 0.00 32 33 CUSTOM_MODEL = 'Plugin Models' … … 209 210 "Please enter only the value of interest to customize smearing..." 210 211 smear_message_new_psmear = \ 211 "Please enter a fixed percentage to be applied to all Q values..."212 "Please enter both; the dQ will be generated by interpolation..." 212 213 smear_message_2d_x_title = "<dQp>[1/A]:" 213 214 smear_message_2d_y_title = "<dQs>[1/A]:" 214 smear_message_pinhole_percent_title = "dQ[%]:" 215 smear_message_pinhole_min_title = "dQ_low[1/A]:" 216 smear_message_pinhole_max_title = "dQ_high[1/A]:" 215 217 smear_message_slit_height_title = "Slit height[1/A]:" 216 218 smear_message_slit_width_title = "Slit width[1/A]:" … … 305 307 306 308 # textcntrl for custom resolution 307 self.smear_pinhole_percent = ModelTextCtrl(self, wx.ID_ANY, 308 size=(_BOX_WIDTH - 25, 20), 309 style=wx.TE_PROCESS_ENTER, 310 text_enter_callback= 311 self.onPinholeSmear) 309 self.smear_pinhole_max = ModelTextCtrl(self, wx.ID_ANY, 310 size=(_BOX_WIDTH - 25, 20), 311 style=wx.TE_PROCESS_ENTER, 312 text_enter_callback=self.onPinholeSmear) 313 self.smear_pinhole_min = ModelTextCtrl(self, wx.ID_ANY, 314 size=(_BOX_WIDTH - 25, 20), 315 style=wx.TE_PROCESS_ENTER, 316 text_enter_callback=self.onPinholeSmear) 312 317 self.smear_slit_height = ModelTextCtrl(self, wx.ID_ANY, 313 318 size=(_BOX_WIDTH - 25, 20), … … 328 333 329 334 # set default values for smear 330 self.smear_pinhole_percent.SetValue(str(self.dx_percent)) 335 self.smear_pinhole_max.SetValue(str(self.dx_max)) 336 self.smear_pinhole_min.SetValue(str(self.dx_min)) 331 337 self.smear_slit_height.SetValue(str(self.dxl)) 332 338 self.smear_slit_width.SetValue(str(self.dxw)) … … 420 426 self.smear_description_2d_y.SetToolTipString( 421 427 " dQs(perpendicular) in q_phi direction.") 422 self.smear_description_pin_percent = wx.StaticText(self, wx.ID_ANY, 423 smear_message_pinhole_percent_title, 424 style=wx.ALIGN_LEFT) 428 self.smear_description_pin_min = wx.StaticText(self, wx.ID_ANY, 429 smear_message_pinhole_min_title, style=wx.ALIGN_LEFT) 430 self.smear_description_pin_max = wx.StaticText(self, wx.ID_ANY, 431 smear_message_pinhole_max_title, style=wx.ALIGN_LEFT) 425 432 self.smear_description_slit_height = wx.StaticText(self, wx.ID_ANY, 426 433 smear_message_slit_height_title, style=wx.ALIGN_LEFT) … … 446 453 self.sizer_new_smear.Add((15, -1)) 447 454 self.sizer_new_smear.Add(self.smear_description_2d_x, 0, wx.CENTER, 10) 455 self.sizer_new_smear.Add(self.smear_description_pin_min, 456 0, wx.CENTER, 10) 448 457 self.sizer_new_smear.Add(self.smear_description_slit_height, 449 458 0, wx.CENTER, 10) 450 459 460 self.sizer_new_smear.Add(self.smear_pinhole_min, 0, wx.CENTER, 10) 451 461 self.sizer_new_smear.Add(self.smear_slit_height, 0, wx.CENTER, 10) 452 462 self.sizer_new_smear.Add(self.smear_data_left, 0, wx.CENTER, 10) … … 454 464 self.sizer_new_smear.Add(self.smear_description_2d_y, 455 465 0, wx.CENTER, 10) 456 self.sizer_new_smear.Add(self.smear_description_pin_ percent,466 self.sizer_new_smear.Add(self.smear_description_pin_max, 457 467 0, wx.CENTER, 10) 458 468 self.sizer_new_smear.Add(self.smear_description_slit_width, 459 469 0, wx.CENTER, 10) 460 470 461 self.sizer_new_smear.Add(self.smear_pinhole_ percent, 0, wx.CENTER, 10)471 self.sizer_new_smear.Add(self.smear_pinhole_max, 0, wx.CENTER, 10) 462 472 self.sizer_new_smear.Add(self.smear_slit_width, 0, wx.CENTER, 10) 463 473 self.sizer_new_smear.Add(self.smear_data_right, 0, wx.CENTER, 10) … … 1571 1581 if self.dxw is None: 1572 1582 self.dxw = "" 1573 if self.dx_percent is None: 1574 self.dx_percent = SMEAR_SIZE_H 1583 if self.dx_min is None: 1584 self.dx_min = SMEAR_SIZE_L 1585 if self.dx_max is None: 1586 self.dx_max = SMEAR_SIZE_H 1575 1587 1576 1588 def _get_smear_info(self): … … 1634 1646 self.smear_description_2d_y.Show(True) 1635 1647 if self.pinhole_smearer.GetValue(): 1636 self.smear_pinhole_percent.Show(True) 1648 self.smear_pinhole_min.Show(True) 1649 self.smear_pinhole_max.Show(True) 1637 1650 # smear from data 1638 1651 elif self.enable_smearer.GetValue(): … … 1645 1658 self.smear_description_slit_width.Show(True) 1646 1659 elif self.smear_type == 'Pinhole': 1647 self.smear_description_pin_percent.Show(True) 1660 self.smear_description_pin_min.Show(True) 1661 self.smear_description_pin_max.Show(True) 1648 1662 self.smear_description_smear_type.Show(True) 1649 1663 self.smear_description_type.Show(True) … … 1654 1668 if self.smear_type == 'Pinhole': 1655 1669 self.smear_message_new_p.Show(True) 1656 self.smear_description_pin_percent.Show(True) 1657 1658 self.smear_pinhole_percent.Show(True) 1670 self.smear_description_pin_min.Show(True) 1671 self.smear_description_pin_max.Show(True) 1672 1673 self.smear_pinhole_min.Show(True) 1674 self.smear_pinhole_max.Show(True) 1659 1675 # custom slit smear 1660 1676 elif self.slit_smearer.GetValue(): … … 1681 1697 self.smear_data_left.Hide() 1682 1698 self.smear_data_right.Hide() 1683 self.smear_description_pin_percent.Hide() 1684 self.smear_pinhole_percent.Hide() 1699 self.smear_description_pin_min.Hide() 1700 self.smear_pinhole_min.Hide() 1701 self.smear_description_pin_max.Hide() 1702 self.smear_pinhole_max.Hide() 1685 1703 self.smear_description_slit_height.Hide() 1686 1704 self.smear_slit_height.Hide() … … 2231 2249 # event case of radio button 2232 2250 if tcrtl.GetValue(): 2233 self.dx_percent = 0.0 2251 self.dx_min = 0.0 2252 self.dx_max = 0.0 2234 2253 is_new_pinhole = True 2235 2254 else: … … 2268 2287 """ 2269 2288 # get the values 2270 pin_percent = self.smear_pinhole_percent.GetValue() 2289 pin_min = self.smear_pinhole_min.GetValue() 2290 pin_max = self.smear_pinhole_max.GetValue() 2291 2292 # Check changes in slit width 2293 try: 2294 dx_min = float(pin_min) 2295 except: 2296 return True 2297 if self.dx_min != dx_min: 2298 return True 2271 2299 2272 2300 # Check changes in slit heigth 2273 2301 try: 2274 dx_ percent = float(pin_percent)2302 dx_max = float(pin_max) 2275 2303 except: 2276 2304 return True 2277 if self.dx_ percent != dx_percent:2305 if self.dx_max != dx_max: 2278 2306 return True 2279 2307 return False … … 2301 2329 msg = None 2302 2330 2303 get_pin_percent = self.smear_pinhole_percent 2304 2305 if not check_float(get_pin_percent): 2306 get_pin_percent.SetBackgroundColour("pink") 2331 get_pin_min = self.smear_pinhole_min 2332 get_pin_max = self.smear_pinhole_max 2333 2334 if not check_float(get_pin_min): 2335 get_pin_min.SetBackgroundColour("pink") 2336 msg = "Model Error:wrong value entered!!!" 2337 elif not check_float(get_pin_max): 2338 get_pin_max.SetBackgroundColour("pink") 2307 2339 msg = "Model Error:wrong value entered!!!" 2308 2340 else: 2309 2341 if len_data < 2: 2310 2342 len_data = 2 2311 self.dx_percent = float(get_pin_percent.GetValue()) 2312 if self.dx_percent < 0: 2313 get_pin_percent.SetBackgroundColour("pink") 2343 self.dx_min = float(get_pin_min.GetValue()) 2344 self.dx_max = float(get_pin_max.GetValue()) 2345 if self.dx_min < 0: 2346 get_pin_min.SetBackgroundColour("pink") 2314 2347 msg = "Model Error:This value can not be negative!!!" 2315 elif self.dx_percent is not None: 2316 percent = self.dx_percent/100 2348 elif self.dx_max < 0: 2349 get_pin_max.SetBackgroundColour("pink") 2350 msg = "Model Error:This value can not be negative!!!" 2351 elif self.dx_min is not None and self.dx_max is not None: 2317 2352 if self._is_2D(): 2318 data.dqx_data[data.dqx_data == 0] = percent * data.qx_data 2319 data.dqy_data[data.dqy_data == 0] = percent * data.qy_data 2353 data.dqx_data[data.dqx_data == 0] = self.dx_min 2354 data.dqy_data[data.dqy_data == 0] = self.dx_max 2355 elif self.dx_min == self.dx_max: 2356 data.dx[data.dx == 0] = self.dx_min 2320 2357 else: 2321 data.dx = percent * data.x 2358 step = (self.dx_max - self.dx_min) / (len_data - 1) 2359 data.dx = numpy.arange(self.dx_min, 2360 self.dx_max + step / 1.1, 2361 step) 2362 elif self.dx_min is not None: 2363 if self._is_2D(): 2364 data.dqx_data[data.dqx_data == 0] = self.dx_min 2365 else: 2366 data.dx[data.dx == 0] = self.dx_min 2367 elif self.dx_max is not None: 2368 if self._is_2D(): 2369 data.dqy_data[data.dqy_data == 0] = self.dx_max 2370 else: 2371 data.dx[data.dx == 0] = self.dx_max 2322 2372 self.current_smearer = smear_selection(data, self.model) 2323 2373 # 2D need to set accuracy … … 2329 2379 wx.PostEvent(self._manager.parent, StatusEvent(status=msg)) 2330 2380 else: 2331 get_pin_percent.SetBackgroundColour("white") 2381 get_pin_min.SetBackgroundColour("white") 2382 get_pin_max.SetBackgroundColour("white") 2332 2383 # set smearing value whether or not the data contain the smearing info 2333 2384 -
src/sas/sasgui/perspectives/fitting/fitting.py
r4c5098c rddbac66 1755 1755 data_id="Data " + data.name + " unsmeared", 1756 1756 dy=unsmeared_error) 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)") 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 1765 1766 1766 1767 current_pg = self.fit_panel.get_page_by_id(page_id) -
src/sas/sasgui/perspectives/fitting/media/plugin.rst
r984f3fc r5295cf5 364 364 - the limits will show up as the default limits for the fit making it easy, 365 365 for example, to force the radius to always be greater than zero. 366 367 - these are hard limits defining the valid range of parameter values;368 polydisperity distributions will be truncated at the limits.369 366 370 367 - **"type"** can be one of: "", "sld", "volume", or "orientation". -
src/sas/sasgui/perspectives/fitting/pagestate.py
r27109e5 r71601312 74 74 ["dq_l", "dq_l", "float"], 75 75 ["dq_r", "dq_r", "float"], 76 ["dx_percent", "dx_percent", "float"], 76 ["dx_max", "dx_max", "float"], 77 ["dx_min", "dx_min", "float"], 77 78 ["dxl", "dxl", "float"], 78 79 ["dxw", "dxw", "float"]] … … 214 215 self.dq_l = None 215 216 self.dq_r = None 216 self.dx_ percent= None217 self.dx_ old = False217 self.dx_max = None 218 self.dx_min = None 218 219 self.dxl = None 219 220 self.dxw = None … … 342 343 obj.dq_l = copy.deepcopy(self.dq_l) 343 344 obj.dq_r = copy.deepcopy(self.dq_r) 344 obj.dx_ percent = copy.deepcopy(self.dx_percent)345 obj.dx_ old = copy.deepcopy(self.dx_old)345 obj.dx_max = copy.deepcopy(self.dx_max) 346 obj.dx_min = copy.deepcopy(self.dx_min) 346 347 obj.dxl = copy.deepcopy(self.dxl) 347 348 obj.dxw = copy.deepcopy(self.dxw) … … 561 562 rep += "dq_l : %s\n" % self.dq_l 562 563 rep += "dq_r : %s\n" % self.dq_r 563 rep += "dx_percent : %s\n" % str(self.dx_percent) 564 rep += "dx_max : %s\n" % str(self.dx_max) 565 rep += "dx_min : %s\n" % str(self.dx_min) 564 566 rep += "dxl : %s\n" % str(self.dxl) 565 567 rep += "dxw : %s\n" % str(self.dxw) … … 819 821 820 822 attr = newdoc.createAttribute("version") 821 from sasimport sasview823 import sasview 822 824 attr.nodeValue = sasview.__version__ 823 825 # attr.nodeValue = '1.0' … … 1046 1048 setattr(self, item[0], parse_entry_helper(node, item)) 1047 1049 1048 dx_old_node = get_content('ns:%s' % 'dx_min', entry)1049 1050 for item in LIST_OF_STATE_ATTRIBUTES: 1050 if item[0] == "dx_percent" and dx_old_node is not None: 1051 dxmin = ["dx_min", "dx_min", "float"] 1052 setattr(self, item[0], parse_entry_helper(dx_old_node, 1053 dxmin)) 1054 self.dx_old = True 1055 else: 1056 node = get_content('ns:%s' % item[0], entry) 1057 setattr(self, item[0], parse_entry_helper(node, item)) 1051 node = get_content('ns:%s' % item[0], entry) 1052 setattr(self, item[0], parse_entry_helper(node, item)) 1058 1053 1059 1054 for item in LIST_OF_STATE_PARAMETERS:
Note: See TracChangeset
for help on using the changeset viewer.