Changeset c5251f6 in sasview


Ignore:
Timestamp:
Apr 1, 2017 4:43:32 PM (2 years ago)
Author:
gonzalezm
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:
80a49c2
Parents:
51335d7 (diff), 7cbbacd (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.
Message:

Merge branch 'master' of https://github.com/SasView/sasview

Files:
2 added
2 deleted
40 edited
1 moved

Legend:

Unmodified
Added
Removed
  • .gitignore

    r5dd7499 r51f1c347  
    1414.vagrant 
    1515.idea 
     16.settings/ 
    1617build 
    1718dist 
  • INSTALL.txt

    rd09f0ae1 r26c9b85  
    22================================ 
    33 
     4Note - at the current time sasview will only run in gui form under Python 2. 
    45 
    5 The build works in the usualy pythonic way: 
     6Before trying to install and run sasview you'll need to check what 
     7dependencies are required: 
     8 
     9$ python check_packages.py 
     10 
     11Many of these are available from PyPi, but some (e.g. h5py) may require more 
     12involvement to build and install. If you use the conda package manager then 
     13many of the pre-built dependencies are available there. This may be the easiest 
     14route if you are on windows. 
     15 
     16The build works in the pythonic way: 
    617 
    718$ 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 
    1020 
    1121 
     
    1424$ python run.py              # will run the code in place (building the C code once, if required) 
    1525 
     26On OSX or windows you may need to use: 
    1627 
    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 
    2529 
    2630 
  • LICENSE.TXT

    r7c05b63 ra3e3ef5  
    1 Copyright (c) 2009-2016, SasView Developers 
     1Copyright (c) 2009-2017, SasView Developers 
    22All rights reserved. 
    33 
  • docs/sphinx-docs/source/conf.py

    r9a182b2 r220b1e7  
    5353# General information about the project. 
    5454project = u'SasView' 
    55 copyright = u'2015, The SasView Project' 
     55copyright = u'2017, The SasView Project' 
    5656 
    5757# The version info for the project you're documenting, acts as replacement for 
     
    6060# 
    6161# The short X.Y version. 
    62 version = '4.0' 
     62version = '4.1' 
    6363# The full version, including alpha/beta/rc tags. 
    64 release = '4.0.0' 
     64release = '4.1.0' 
    6565 
    6666# The language for content autogenerated by Sphinx. Refer to documentation 
  • sasview/README.txt

    r9a182b2 r9146ed9  
    441- Features 
    55=========== 
     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 
     63    - New in Version 4.0.1 
     64      ------------------ 
     65      This release fixes the critical bug #750 in P(Q)*S(Q).  Most damaging 
     66      it appears that the background term was being added to S(Q) prior to 
     67      multiplication by P(Q). 
     68 
     69 
    670    - New in Version 4.0 
    771      ------------------ 
     
    419483=============== 
    420484 
     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    
    421523   3.1- All systems: 
    422524        - The documentation window may take a few seconds to load the first time 
  • sasview/__init__.py

    r9a182b2 r220b1e7  
    1 __version__ = "4.0" 
     1__version__ = "4.1" 
    22__build__ = "GIT_COMMIT" 
    33try: 
  • sasview/local_config.py

    r73cbeec rf9d1f60  
    3333''' remember to:''' 
    3434_acknowledgement_preamble_bullet1 =\ 
    35 '''Acknowledge its use in your publications as suggested below;''' 
     35'''Acknowledge its use in your publications as :''' 
    3636_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:''' 
    3938_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)''' 
    4140_acknowledgement_preamble_bullet4 =\ 
    4241'''Send us your reference for our records: developers@sasview.org''' 
    4342_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''' 
    4746 
    4847_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''' 
    5250 
    5351_homepage = "http://www.sasview.org" 
     
    8987_corner_image = os.path.join(icon_path, "angles_flat.png") 
    9088_welcome_image = os.path.join(icon_path, "SVwelcome.png") 
    91 _copyright = "(c) 2009 - 2016, 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" 
    9290marketplace_url = "http://marketplace.sasview.org/" 
    9391 
  • sasview/test/save_states/fitstate.fitv

    rbbb8a56 r406644a  
    22<SASroot version="1.0" xmlns="cansas1d/1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="cansas1d/1.0 http://svn.smallangles.net/svn/canSAS/1dwg/trunk/cansas1d.xsd"> 
    33        <SASentry> 
    4                 <Title> 
    5                         1000A Sphere Desmeared Simulated USANS Data 
    6                 </Title> 
    7                 <Run> 
    8                         1000A_sphere_dsm.xml 
    9                 </Run> 
     4                <Title>latex particles 0.5micron diameter in D2O slit</Title> 
     5                <Run>latex_smeared.xml </Run> 
    106                <SASdata> 
    117                        <Idata> 
    12                                 <Q unit="1/A"> 
    13                                         3.0525e-005 
    14                                 </Q> 
    15                                 <I unit="1/cm"> 
    16                                         165100000.0 
    17                                 </I> 
    18                                 <Qdev unit="1/A"> 
    19                                         3.0525e-007 
    20                                 </Qdev> 
    21                                 <Idev unit="1/cm"> 
    22                                         1794400.0 
    23                                 </Idev> 
    24                         </Idata> 
    25                         <Idata> 
    26                                 <Q unit="1/A"> 
    27                                         3.33e-005 
    28                                 </Q> 
    29                                 <I unit="1/cm"> 
    30                                         190450000.0 
    31                                 </I> 
    32                                 <Qdev unit="1/A"> 
    33                                         3.33e-007 
    34                                 </Qdev> 
    35                                 <Idev unit="1/cm"> 
    36                                         2040000.0 
    37                                 </Idev> 
    38                         </Idata> 
    39                         <Idata> 
    40                                 <Q unit="1/A"> 
    41                                         3.885e-005 
    42                                 </Q> 
    43                                 <I unit="1/cm"> 
    44                                         179720000.0 
    45                                 </I> 
    46                                 <Qdev unit="1/A"> 
    47                                         3.885e-007 
    48                                 </Qdev> 
    49                                 <Idev unit="1/cm"> 
    50                                         975310.0 
    51                                 </Idev> 
    52                         </Idata> 
    53                         <Idata> 
    54                                 <Q unit="1/A"> 
    55                                         4.44e-005 
    56                                 </Q> 
    57                                 <I unit="1/cm"> 
    58                                         164980000.0 
    59                                 </I> 
    60                                 <Qdev unit="1/A"> 
    61                                         4.44e-007 
    62                                 </Qdev> 
    63                                 <Idev unit="1/cm"> 
    64                                         908780.0 
    65                                 </Idev> 
    66                         </Idata> 
    67                         <Idata> 
    68                                 <Q unit="1/A"> 
    69                                         4.995e-005 
    70                                 </Q> 
    71                                 <I unit="1/cm"> 
    72                                         163980000.0 
    73                                 </I> 
    74                                 <Qdev unit="1/A"> 
    75                                         4.995e-007 
    76                                 </Qdev> 
    77                                 <Idev unit="1/cm"> 
    78                                         907320.0 
    79                                 </Idev> 
    80                         </Idata> 
    81                         <Idata> 
    82                                 <Q unit="1/A"> 
    83                                         5.55e-005 
    84                                 </Q> 
    85                                 <I unit="1/cm"> 
    86                                         156350000.0 
    87                                 </I> 
    88                                 <Qdev unit="1/A"> 
    89                                         5.55e-007 
    90                                 </Qdev> 
    91                                 <Idev unit="1/cm"> 
    92                                         872480.0 
    93                                 </Idev> 
    94                         </Idata> 
    95                         <Idata> 
    96                                 <Q unit="1/A"> 
    97                                         6.105e-005 
    98                                 </Q> 
    99                                 <I unit="1/cm"> 
    100                                         172440000.0 
    101                                 </I> 
    102                                 <Qdev unit="1/A"> 
    103                                         6.105e-007 
    104                                 </Qdev> 
    105                                 <Idev unit="1/cm"> 
    106                                         9556000.0 
    107                                 </Idev> 
    108                         </Idata> 
    109                         <Idata> 
    110                                 <Q unit="1/A"> 
    111                                         6.66e-005 
    112                                 </Q> 
    113                                 <I unit="1/cm"> 
    114                                         158680000.0 
    115                                 </I> 
    116                                 <Qdev unit="1/A"> 
    117                                         6.66e-007 
    118                                 </Qdev> 
    119                                 <Idev unit="1/cm"> 
    120                                         894190.0 
    121                                 </Idev> 
    122                         </Idata> 
    123                         <Idata> 
    124                                 <Q unit="1/A"> 
    125                                         7.215e-005 
    126                                 </Q> 
    127                                 <I unit="1/cm"> 
    128                                         168260000.0 
    129                                 </I> 
    130                                 <Qdev unit="1/A"> 
    131                                         7.215e-007 
    132                                 </Qdev> 
    133                                 <Idev unit="1/cm"> 
    134                                         948630.0 
    135                                 </Idev> 
    136                         </Idata> 
    137                         <Idata> 
    138                                 <Q unit="1/A"> 
    139                                         7.77e-005 
    140                                 </Q> 
    141                                 <I unit="1/cm"> 
    142                                         147240000.0 
    143                                 </I> 
    144                                 <Qdev unit="1/A"> 
    145                                         7.77e-007 
    146                                 </Qdev> 
    147                                 <Idev unit="1/cm"> 
    148                                         850120.0 
    149                                 </Idev> 
    150                         </Idata> 
    151                         <Idata> 
    152                                 <Q unit="1/A"> 
    153                                         8.325e-005 
    154                                 </Q> 
    155                                 <I unit="1/cm"> 
    156                                         154710000.0 
    157                                 </I> 
    158                                 <Qdev unit="1/A"> 
    159                                         8.325e-007 
    160                                 </Qdev> 
    161                                 <Idev unit="1/cm"> 
    162                                         892610.0 
    163                                 </Idev> 
    164                         </Idata> 
    165                         <Idata> 
    166                                 <Q unit="1/A"> 
    167                                         8.88e-005 
    168                                 </Q> 
    169                                 <I unit="1/cm"> 
    170                                         154150000.0 
    171                                 </I> 
    172                                 <Qdev unit="1/A"> 
    173                                         8.88e-007 
    174                                 </Qdev> 
    175                                 <Idev unit="1/cm"> 
    176                                         897530.0 
    177                                 </Idev> 
    178                         </Idata> 
    179                         <Idata> 
    180                                 <Q unit="1/A"> 
    181                                         9.435e-005 
    182                                 </Q> 
    183                                 <I unit="1/cm"> 
    184                                         150060000.0 
    185                                 </I> 
    186                                 <Qdev unit="1/A"> 
    187                                         9.435e-007 
    188                                 </Qdev> 
    189                                 <Idev unit="1/cm"> 
    190                                         885510.0 
    191                                 </Idev> 
    192                         </Idata> 
    193                         <Idata> 
    194                                 <Q unit="1/A"> 
    195                                         9.99e-005 
    196                                 </Q> 
    197                                 <I unit="1/cm"> 
    198                                         141700000.0 
    199                                 </I> 
    200                                 <Qdev unit="1/A"> 
    201                                         9.99e-007 
    202                                 </Qdev> 
    203                                 <Idev unit="1/cm"> 
    204                                         8498900.0 
    205                                 </Idev> 
    206                         </Idata> 
    207                         <Idata> 
    208                                 <Q unit="1/A"> 
    209                                         0.00010545 
    210                                 </Q> 
    211                                 <I unit="1/cm"> 
    212                                         145840000.0 
    213                                 </I> 
    214                                 <Qdev unit="1/A"> 
    215                                         1.0545e-006 
    216                                 </Qdev> 
    217                                 <Idev unit="1/cm"> 
    218                                         880320.0 
    219                                 </Idev> 
    220                         </Idata> 
    221                         <Idata> 
    222                                 <Q unit="1/A"> 
    223                                         0.000111 
    224                                 </Q> 
    225                                 <I unit="1/cm"> 
    226                                         137260000.0 
    227                                 </I> 
    228                                 <Qdev unit="1/A"> 
    229                                         1.11e-006 
    230                                 </Qdev> 
    231                                 <Idev unit="1/cm"> 
    232                                         487940.0 
    233                                 </Idev> 
    234                         </Idata> 
    235                         <Idata> 
    236                                 <Q unit="1/A"> 
    237                                         0.0001221 
    238                                 </Q> 
    239                                 <I unit="1/cm"> 
    240                                         126900000.0 
    241                                 </I> 
    242                                 <Qdev unit="1/A"> 
    243                                         1.221e-006 
    244                                 </Qdev> 
    245                                 <Idev unit="1/cm"> 
    246                                         465360.0 
    247                                 </Idev> 
    248                         </Idata> 
    249                         <Idata> 
    250                                 <Q unit="1/A"> 
    251                                         0.0001332 
    252                                 </Q> 
    253                                 <I unit="1/cm"> 
    254                                         125450000.0 
    255                                 </I> 
    256                                 <Qdev unit="1/A"> 
    257                                         1.332e-006 
    258                                 </Qdev> 
    259                                 <Idev unit="1/cm"> 
    260                                         471620.0 
    261                                 </Idev> 
    262                         </Idata> 
    263                         <Idata> 
    264                                 <Q unit="1/A"> 
    265                                         0.0001443 
    266                                 </Q> 
    267                                 <I unit="1/cm"> 
    268                                         112110000.0 
    269                                 </I> 
    270                                 <Qdev unit="1/A"> 
    271                                         1.443e-006 
    272                                 </Qdev> 
    273                                 <Idev unit="1/cm"> 
    274                                         439800.0 
    275                                 </Idev> 
    276                         </Idata> 
    277                         <Idata> 
    278                                 <Q unit="1/A"> 
    279                                         0.0001554 
    280                                 </Q> 
    281                                 <I unit="1/cm"> 
    282                                         109740000.0 
    283                                 </I> 
    284                                 <Qdev unit="1/A"> 
    285                                         1.554e-006 
    286                                 </Qdev> 
    287                                 <Idev unit="1/cm"> 
    288                                         444060.0 
    289                                 </Idev> 
    290                         </Idata> 
    291                         <Idata> 
    292                                 <Q unit="1/A"> 
    293                                         0.0001665 
    294                                 </Q> 
    295                                 <I unit="1/cm"> 
    296                                         97546000.0 
    297                                 </I> 
    298                                 <Qdev unit="1/A"> 
    299                                         1.665e-006 
    300                                 </Qdev> 
    301                                 <Idev unit="1/cm"> 
    302                                         4150700.0 
    303                                 </Idev> 
    304                         </Idata> 
    305                         <Idata> 
    306                                 <Q unit="1/A"> 
    307                                         0.0001776 
    308                                 </Q> 
    309                                 <I unit="1/cm"> 
    310                                         88127000.0 
    311                                 </I> 
    312                                 <Qdev unit="1/A"> 
    313                                         1.776e-006 
    314                                 </Qdev> 
    315                                 <Idev unit="1/cm"> 
    316                                         392070.0 
    317                                 </Idev> 
    318                         </Idata> 
    319                         <Idata> 
    320                                 <Q unit="1/A"> 
    321                                         0.0001887 
    322                                 </Q> 
    323                                 <I unit="1/cm"> 
    324                                         82576000.0 
    325                                 </I> 
    326                                 <Qdev unit="1/A"> 
    327                                         1.887e-006 
    328                                 </Qdev> 
    329                                 <Idev unit="1/cm"> 
    330                                         382470.0 
    331                                 </Idev> 
    332                         </Idata> 
    333                         <Idata> 
    334                                 <Q unit="1/A"> 
    335                                         0.0001998 
    336                                 </Q> 
    337                                 <I unit="1/cm"> 
    338                                         77312000.0 
    339                                 </I> 
    340                                 <Qdev unit="1/A"> 
    341                                         1.998e-006 
    342                                 </Qdev> 
    343                                 <Idev unit="1/cm"> 
    344                                         375780.0 
    345                                 </Idev> 
    346                         </Idata> 
    347                         <Idata> 
    348                                 <Q unit="1/A"> 
    349                                         0.0002109 
    350                                 </Q> 
    351                                 <I unit="1/cm"> 
    352                                         66194000.0 
    353                                 </I> 
    354                                 <Qdev unit="1/A"> 
    355                                         2.109e-006 
    356                                 </Qdev> 
    357                                 <Idev unit="1/cm"> 
    358                                         343090.0 
    359                                 </Idev> 
    360                         </Idata> 
    361                         <Idata> 
    362                                 <Q unit="1/A"> 
    363                                         0.000222 
    364                                 </Q> 
    365                                 <I unit="1/cm"> 
    366                                         61870000.0 
    367                                 </I> 
    368                                 <Qdev unit="1/A"> 
    369                                         2.22e-006 
    370                                 </Qdev> 
    371                                 <Idev unit="1/cm"> 
    372                                         337290.0 
    373                                 </Idev> 
    374                         </Idata> 
    375                         <Idata> 
    376                                 <Q unit="1/A"> 
    377                                         0.0002331 
    378                                 </Q> 
    379                                 <I unit="1/cm"> 
    380                                         54257000.0 
    381                                 </I> 
    382                                 <Qdev unit="1/A"> 
    383                                         2.331e-006 
    384                                 </Qdev> 
    385                                 <Idev unit="1/cm"> 
    386                                         316830.0 
    387                                 </Idev> 
    388                         </Idata> 
    389                         <Idata> 
    390                                 <Q unit="1/A"> 
    391                                         0.0002442 
    392                                 </Q> 
    393                                 <I unit="1/cm"> 
    394                                         47924000.0 
    395                                 </I> 
    396                                 <Qdev unit="1/A"> 
    397                                         2.442e-006 
    398                                 </Qdev> 
    399                                 <Idev unit="1/cm"> 
    400                                         3004000.0 
    401                                 </Idev> 
    402                         </Idata> 
    403                         <Idata> 
    404                                 <Q unit="1/A"> 
    405                                         0.0002553 
    406                                 </Q> 
    407                                 <I unit="1/cm"> 
    408                                         40953000.0 
    409                                 </I> 
    410                                 <Qdev unit="1/A"> 
    411                                         2.553e-006 
    412                                 </Qdev> 
    413                                 <Idev unit="1/cm"> 
    414                                         278010.0 
    415                                 </Idev> 
    416                         </Idata> 
    417                         <Idata> 
    418                                 <Q unit="1/A"> 
    419                                         0.0002664 
    420                                 </Q> 
    421                                 <I unit="1/cm"> 
    422                                         34975000.0 
    423                                 </I> 
    424                                 <Qdev unit="1/A"> 
    425                                         2.664e-006 
    426                                 </Qdev> 
    427                                 <Idev unit="1/cm"> 
    428                                         257230.0 
    429                                 </Idev> 
    430                         </Idata> 
    431                         <Idata> 
    432                                 <Q unit="1/A"> 
    433                                         0.0002775 
    434                                 </Q> 
    435                                 <I unit="1/cm"> 
    436                                         29218000.0 
    437                                 </I> 
    438                                 <Qdev unit="1/A"> 
    439                                         2.775e-006 
    440                                 </Qdev> 
    441                                 <Idev unit="1/cm"> 
    442                                         165020.0 
    443                                 </Idev> 
    444                         </Idata> 
    445                         <Idata> 
    446                                 <Q unit="1/A"> 
    447                                         0.00030525 
    448                                 </Q> 
    449                                 <I unit="1/cm"> 
    450                                         19276000.0 
    451                                 </I> 
    452                                 <Qdev unit="1/A"> 
    453                                         3.0525e-006 
    454                                 </Qdev> 
    455                                 <Idev unit="1/cm"> 
    456                                         135210.0 
    457                                 </Idev> 
    458                         </Idata> 
    459                         <Idata> 
    460                                 <Q unit="1/A"> 
    461                                         0.000333 
    462                                 </Q> 
    463                                 <I unit="1/cm"> 
    464                                         10557000.0 
    465                                 </I> 
    466                                 <Qdev unit="1/A"> 
    467                                         3.33e-006 
    468                                 </Qdev> 
    469                                 <Idev unit="1/cm"> 
    470                                         98308.0 
    471                                 </Idev> 
    472                         </Idata> 
    473                         <Idata> 
    474                                 <Q unit="1/A"> 
    475                                         0.00036075 
    476                                 </Q> 
    477                                 <I unit="1/cm"> 
    478                                         5664700.0 
    479                                 </I> 
    480                                 <Qdev unit="1/A"> 
    481                                         3.6075e-006 
    482                                 </Qdev> 
    483                                 <Idev unit="1/cm"> 
    484                                         69421.0 
    485                                 </Idev> 
    486                         </Idata> 
    487                         <Idata> 
    488                                 <Q unit="1/A"> 
    489                                         0.0003885 
    490                                 </Q> 
    491                                 <I unit="1/cm"> 
    492                                         1947500.0 
    493                                 </I> 
    494                                 <Qdev unit="1/A"> 
    495                                         3.885e-006 
    496                                 </Qdev> 
    497                                 <Idev unit="1/cm"> 
    498                                         313730.0 
    499                                 </Idev> 
    500                         </Idata> 
    501                         <Idata> 
    502                                 <Q unit="1/A"> 
    503                                         0.00041625 
    504                                 </Q> 
    505                                 <I unit="1/cm"> 
    506                                         241770.0 
    507                                 </I> 
    508                                 <Qdev unit="1/A"> 
    509                                         4.1625e-006 
    510                                 </Qdev> 
    511                                 <Idev unit="1/cm"> 
    512                                         4755.1 
    513                                 </Idev> 
    514                         </Idata> 
    515                         <Idata> 
    516                                 <Q unit="1/A"> 
    517                                         0.000444 
    518                                 </Q> 
    519                                 <I unit="1/cm"> 
    520                                         114540.0 
    521                                 </I> 
    522                                 <Qdev unit="1/A"> 
    523                                         4.44e-006 
    524                                 </Qdev> 
    525                                 <Idev unit="1/cm"> 
    526                                         2326.3 
    527                                 </Idev> 
    528                         </Idata> 
    529                         <Idata> 
    530                                 <Q unit="1/A"> 
    531                                         0.00047175 
    532                                 </Q> 
    533                                 <I unit="1/cm"> 
    534                                         208800.0 
    535                                 </I> 
    536                                 <Qdev unit="1/A"> 
    537                                         4.7175e-006 
    538                                 </Qdev> 
    539                                 <Idev unit="1/cm"> 
    540                                         4001.1 
    541                                 </Idev> 
    542                         </Idata> 
    543                         <Idata> 
    544                                 <Q unit="1/A"> 
    545                                         0.0004995 
    546                                 </Q> 
    547                                 <I unit="1/cm"> 
    548                                         670290.0 
    549                                 </I> 
    550                                 <Qdev unit="1/A"> 
    551                                         4.995e-006 
    552                                 </Qdev> 
    553                                 <Idev unit="1/cm"> 
    554                                         11420.0 
    555                                 </Idev> 
    556                         </Idata> 
    557                         <Idata> 
    558                                 <Q unit="1/A"> 
    559                                         0.00052725 
    560                                 </Q> 
    561                                 <I unit="1/cm"> 
    562                                         1137400.0 
    563                                 </I> 
    564                                 <Qdev unit="1/A"> 
    565                                         5.2725e-006 
    566                                 </Qdev> 
    567                                 <Idev unit="1/cm"> 
    568                                         18885.0 
    569                                 </Idev> 
    570                         </Idata> 
    571                         <Idata> 
    572                                 <Q unit="1/A"> 
    573                                         0.000555 
    574                                 </Q> 
    575                                 <I unit="1/cm"> 
    576                                         1278100.0 
    577                                 </I> 
    578                                 <Qdev unit="1/A"> 
    579                                         5.55e-006 
    580                                 </Qdev> 
    581                                 <Idev unit="1/cm"> 
    582                                         15763.0 
    583                                 </Idev> 
    584                         </Idata> 
    585                         <Idata> 
    586                                 <Q unit="1/A"> 
    587                                         0.0006105 
    588                                 </Q> 
    589                                 <I unit="1/cm"> 
    590                                         1225600.0 
    591                                 </I> 
    592                                 <Qdev unit="1/A"> 
    593                                         6.105e-006 
    594                                 </Qdev> 
    595                                 <Idev unit="1/cm"> 
    596                                         176810.0 
    597                                 </Idev> 
    598                         </Idata> 
    599                         <Idata> 
    600                                 <Q unit="1/A"> 
    601                                         0.000666 
    602                                 </Q> 
    603                                 <I unit="1/cm"> 
    604                                         583310.0 
    605                                 </I> 
    606                                 <Qdev unit="1/A"> 
    607                                         6.66e-006 
    608                                 </Qdev> 
    609                                 <Idev unit="1/cm"> 
    610                                         11772.0 
    611                                 </Idev> 
    612                         </Idata> 
    613                         <Idata> 
    614                                 <Q unit="1/A"> 
    615                                         0.0007215 
    616                                 </Q> 
    617                                 <I unit="1/cm"> 
    618                                         69003.0 
    619                                 </I> 
    620                                 <Qdev unit="1/A"> 
    621                                         7.215e-006 
    622                                 </Qdev> 
    623                                 <Idev unit="1/cm"> 
    624                                         1907.7 
    625                                 </Idev> 
    626                         </Idata> 
    627                         <Idata> 
    628                                 <Q unit="1/A"> 
    629                                         0.000777 
    630                                 </Q> 
    631                                 <I unit="1/cm"> 
    632                                         23263.0 
    633                                 </I> 
    634                                 <Qdev unit="1/A"> 
    635                                         7.77e-006 
    636                                 </Qdev> 
    637                                 <Idev unit="1/cm"> 
    638                                         683.84 
    639                                 </Idev> 
    640                         </Idata> 
    641                         <Idata> 
    642                                 <Q unit="1/A"> 
    643                                         0.0008325 
    644                                 </Q> 
    645                                 <I unit="1/cm"> 
    646                                         97644.0 
    647                                 </I> 
    648                                 <Qdev unit="1/A"> 
    649                                         8.325e-006 
    650                                 </Qdev> 
    651                                 <Idev unit="1/cm"> 
    652                                         2565.3 
    653                                 </Idev> 
    654                         </Idata> 
    655                         <Idata> 
    656                                 <Q unit="1/A"> 
    657                                         0.000888 
    658                                 </Q> 
    659                                 <I unit="1/cm"> 
    660                                         233120.0 
    661                                 </I> 
    662                                 <Qdev unit="1/A"> 
    663                                         8.88e-006 
    664                                 </Qdev> 
    665                                 <Idev unit="1/cm"> 
    666                                         5864.3 
    667                                 </Idev> 
    668                         </Idata> 
    669                         <Idata> 
    670                                 <Q unit="1/A"> 
    671                                         0.0009435 
    672                                 </Q> 
    673                                 <I unit="1/cm"> 
    674                                         202080.0 
    675                                 </I> 
    676                                 <Qdev unit="1/A"> 
    677                                         9.435e-006 
    678                                 </Qdev> 
    679                                 <Idev unit="1/cm"> 
    680                                         6035.5 
    681                                 </Idev> 
    682                         </Idata> 
    683                         <Idata> 
    684                                 <Q unit="1/A"> 
    685                                         0.000999 
    686                                 </Q> 
    687                                 <I unit="1/cm"> 
    688                                         80861.0 
    689                                 </I> 
    690                                 <Qdev unit="1/A"> 
    691                                         9.99e-006 
    692                                 </Qdev> 
    693                                 <Idev unit="1/cm"> 
    694                                         30528.0 
    695                                 </Idev> 
    696                         </Idata> 
    697                         <Idata> 
    698                                 <Q unit="1/A"> 
    699                                         0.0010545 
    700                                 </Q> 
    701                                 <I unit="1/cm"> 
    702                                         7683.4 
    703                                 </I> 
    704                                 <Qdev unit="1/A"> 
    705                                         1.0545e-005 
    706                                 </Qdev> 
    707                                 <Idev unit="1/cm"> 
    708                                         354.56 
    709                                 </Idev> 
    710                         </Idata> 
    711                         <Idata> 
    712                                 <Q unit="1/A"> 
    713                                         0.00111 
    714                                 </Q> 
    715                                 <I unit="1/cm"> 
    716                                         11329.0 
    717                                 </I> 
    718                                 <Qdev unit="1/A"> 
    719                                         1.11e-005 
    720                                 </Qdev> 
    721                                 <Idev unit="1/cm"> 
    722                                         382.48 
    723                                 </Idev> 
    724                         </Idata> 
    725                         <Idata> 
    726                                 <Q unit="1/A"> 
    727                                         0.001221 
    728                                 </Q> 
    729                                 <I unit="1/cm"> 
    730                                         87375.0 
    731                                 </I> 
    732                                 <Qdev unit="1/A"> 
    733                                         1.221e-005 
    734                                 </Qdev> 
    735                                 <Idev unit="1/cm"> 
    736                                         2658.0 
    737                                 </Idev> 
    738                         </Idata> 
    739                         <Idata> 
    740                                 <Q unit="1/A"> 
    741                                         0.001332 
    742                                 </Q> 
    743                                 <I unit="1/cm"> 
    744                                         10915.0 
    745                                 </I> 
    746                                 <Qdev unit="1/A"> 
    747                                         1.332e-005 
    748                                 </Qdev> 
    749                                 <Idev unit="1/cm"> 
    750                                         517.94 
    751                                 </Idev> 
    752                         </Idata> 
    753                         <Idata> 
    754                                 <Q unit="1/A"> 
    755                                         0.001443 
    756                                 </Q> 
    757                                 <I unit="1/cm"> 
    758                                         7683.6 
    759                                 </I> 
    760                                 <Qdev unit="1/A"> 
    761                                         1.443e-005 
    762                                 </Qdev> 
    763                                 <Idev unit="1/cm"> 
    764                                         376.72 
    765                                 </Idev> 
    766                         </Idata> 
    767                         <Idata> 
    768                                 <Q unit="1/A"> 
    769                                         0.001554 
    770                                 </Q> 
    771                                 <I unit="1/cm"> 
    772                                         31538.0 
    773                                 </I> 
    774                                 <Qdev unit="1/A"> 
    775                                         1.554e-005 
    776                                 </Qdev> 
    777                                 <Idev unit="1/cm"> 
    778                                         1461.6 
    779                                 </Idev> 
    780                         </Idata> 
    781                         <Idata> 
    782                                 <Q unit="1/A"> 
    783                                         0.001665 
    784                                 </Q> 
    785                                 <I unit="1/cm"> 
    786                                         2991.0 
    787                                 </I> 
    788                                 <Qdev unit="1/A"> 
    789                                         1.665e-005 
    790                                 </Qdev> 
    791                                 <Idev unit="1/cm"> 
    792                                         2025.4 
    793                                 </Idev> 
    794                         </Idata> 
    795                         <Idata> 
    796                                 <Q unit="1/A"> 
    797                                         0.001776 
    798                                 </Q> 
    799                                 <I unit="1/cm"> 
    800                                         6126.4 
    801                                 </I> 
    802                                 <Qdev unit="1/A"> 
    803                                         1.776e-005 
    804                                 </Qdev> 
    805                                 <Idev unit="1/cm"> 
    806                                         413.24 
    807                                 </Idev> 
    808                         </Idata> 
    809                         <Idata> 
    810                                 <Q unit="1/A"> 
    811                                         0.001887 
    812                                 </Q> 
    813                                 <I unit="1/cm"> 
    814                                         9246.2 
    815                                 </I> 
    816                                 <Qdev unit="1/A"> 
    817                                         1.887e-005 
    818                                 </Qdev> 
    819                                 <Idev unit="1/cm"> 
    820                                         642.09 
    821                                 </Idev> 
    822                         </Idata> 
    823                         <Idata> 
    824                                 <Q unit="1/A"> 
    825                                         0.001998 
    826                                 </Q> 
    827                                 <I unit="1/cm"> 
    828                                         861.73 
    829                                 </I> 
    830                                 <Qdev unit="1/A"> 
    831                                         1.998e-005 
    832                                 </Qdev> 
    833                                 <Idev unit="1/cm"> 
    834                                         67.504 
    835                                 </Idev> 
    836                         </Idata> 
    837                         <Idata> 
    838                                 <Q unit="1/A"> 
    839                                         0.002109 
    840                                 </Q> 
    841                                 <I unit="1/cm"> 
    842                                         8017.5 
    843                                 </I> 
    844                                 <Qdev unit="1/A"> 
    845                                         2.109e-005 
    846                                 </Qdev> 
    847                                 <Idev unit="1/cm"> 
    848                                         550.7 
    849                                 </Idev> 
    850                         </Idata> 
    851                         <Idata> 
    852                                 <Q unit="1/A"> 
    853                                         0.00222 
    854                                 </Q> 
    855                                 <I unit="1/cm"> 
    856                                         5502.9 
    857                                 </I> 
    858                                 <Qdev unit="1/A"> 
    859                                         2.22e-005 
    860                                 </Qdev> 
    861                                 <Idev unit="1/cm"> 
    862                                         494.11 
    863                                 </Idev> 
    864                         </Idata> 
    865                         <Idata> 
    866                                 <Q unit="1/A"> 
    867                                         0.002331 
    868                                 </Q> 
    869                                 <I unit="1/cm"> 
    870                                         741.32 
    871                                 </I> 
    872                                 <Qdev unit="1/A"> 
    873                                         2.331e-005 
    874                                 </Qdev> 
    875                                 <Idev unit="1/cm"> 
    876                                         83.931 
    877                                 </Idev> 
    878                         </Idata> 
    879                         <Idata> 
    880                                 <Q unit="1/A"> 
    881                                         0.002442 
    882                                 </Q> 
    883                                 <I unit="1/cm"> 
    884                                         2919.8 
    885                                 </I> 
    886                                 <Qdev unit="1/A"> 
    887                                         2.442e-005 
    888                                 </Qdev> 
    889                                 <Idev unit="1/cm"> 
    890                                         3303.4 
    891                                 </Idev> 
    892                         </Idata> 
    893                         <Idata> 
    894                                 <Q unit="1/A"> 
    895                                         0.002553 
    896                                 </Q> 
    897                                 <I unit="1/cm"> 
    898                                         1667.6 
    899                                 </I> 
    900                                 <Qdev unit="1/A"> 
    901                                         2.553e-005 
    902                                 </Qdev> 
    903                                 <Idev unit="1/cm"> 
    904                                         206.1 
    905                                 </Idev> 
    906                         </Idata> 
    907                         <Idata> 
    908                                 <Q unit="1/A"> 
    909                                         0.002664 
    910                                 </Q> 
    911                                 <I unit="1/cm"> 
    912                                         584.11 
    913                                 </I> 
    914                                 <Qdev unit="1/A"> 
    915                                         2.664e-005 
    916                                 </Qdev> 
    917                                 <Idev unit="1/cm"> 
    918                                         74.745 
    919                                 </Idev> 
    920                         </Idata> 
    921                         <Idata> 
    922                                 <Q unit="1/A"> 
    923                                         0.002775 
    924                                 </Q> 
    925                                 <I unit="1/cm"> 
    926                                         1585.4 
    927                                 </I> 
    928                                 <Qdev unit="1/A"> 
    929                                         2.775e-005 
    930                                 </Qdev> 
    931                                 <Idev unit="1/cm"> 
    932                                         167.96 
    933                                 </Idev> 
    934                         </Idata> 
    935                         <Idata> 
    936                                 <Q unit="1/A"> 
    937                                         0.0030525 
    938                                 </Q> 
    939                                 <I unit="1/cm"> 
    940                                         1422.7 
    941                                 </I> 
    942                                 <Qdev unit="1/A"> 
    943                                         3.0525e-005 
    944                                 </Qdev> 
    945                                 <Idev unit="1/cm"> 
    946                                         183.59 
    947                                 </Idev> 
    948                         </Idata> 
    949                         <Idata> 
    950                                 <Q unit="1/A"> 
    951                                         0.00333 
    952                                 </Q> 
    953                                 <I unit="1/cm"> 
    954                                         70.932 
    955                                 </I> 
    956                                 <Qdev unit="1/A"> 
    957                                         3.33e-005 
    958                                 </Qdev> 
    959                                 <Idev unit="1/cm"> 
    960                                         16.5 
    961                                 </Idev> 
    962                         </Idata> 
    963                         <Idata> 
    964                                 <Q unit="1/A"> 
    965                                         0.0036075 
    966                                 </Q> 
    967                                 <I unit="1/cm"> 
    968                                         400.33 
    969                                 </I> 
    970                                 <Qdev unit="1/A"> 
    971                                         3.6075e-005 
    972                                 </Qdev> 
    973                                 <Idev unit="1/cm"> 
    974                                         63.21 
    975                                 </Idev> 
    976                         </Idata> 
    977                         <Idata> 
    978                                 <Q unit="1/A"> 
    979                                         0.003885 
    980                                 </Q> 
    981                                 <I unit="1/cm"> 
    982                                         393.52 
    983                                 </I> 
    984                                 <Qdev unit="1/A"> 
    985                                         3.885e-005 
    986                                 </Qdev> 
    987                                 <Idev unit="1/cm"> 
    988                                         659.6 
    989                                 </Idev> 
    990                         </Idata> 
    991                         <Idata> 
    992                                 <Q unit="1/A"> 
    993                                         0.0041625 
    994                                 </Q> 
    995                                 <I unit="1/cm"> 
    996                                         212.31 
    997                                 </I> 
    998                                 <Qdev unit="1/A"> 
    999                                         4.1625e-005 
    1000                                 </Qdev> 
    1001                                 <Idev unit="1/cm"> 
    1002                                         47.277 
    1003                                 </Idev> 
    1004                         </Idata> 
    1005                         <Idata> 
    1006                                 <Q unit="1/A"> 
    1007                                         0.00444 
    1008                                 </Q> 
    1009                                 <I unit="1/cm"> 
    1010                                         39.89 
    1011                                 </I> 
    1012                                 <Qdev unit="1/A"> 
    1013                                         4.44e-005 
    1014                                 </Qdev> 
    1015                                 <Idev unit="1/cm"> 
    1016                                         11.694 
    1017                                 </Idev> 
    1018                         </Idata> 
    1019                         <Idata> 
    1020                                 <Q unit="1/A"> 
    1021                                         0.0047175 
    1022                                 </Q> 
    1023                                 <I unit="1/cm"> 
    1024                                         71.693 
    1025                                 </I> 
    1026                                 <Qdev unit="1/A"> 
    1027                                         4.7175e-005 
    1028                                 </Qdev> 
    1029                                 <Idev unit="1/cm"> 
    1030                                         18.86 
    1031                                 </Idev> 
    1032                         </Idata> 
    1033                         <Idata> 
    1034                                 <Q unit="1/A"> 
    1035                                         0.004995 
    1036                                 </Q> 
    1037                                 <I unit="1/cm"> 
    1038                                         2.5476 
    1039                                 </I> 
    1040                                 <Qdev unit="1/A"> 
    1041                                         4.995e-005 
    1042                                 </Qdev> 
    1043                                 <Idev unit="1/cm"> 
    1044                                         0.77203 
    1045                                 </Idev> 
    1046                         </Idata> 
    1047                         <Idata> 
    1048                                 <Q unit="1/A"> 
    1049                                         0.0052725 
    1050                                 </Q> 
    1051                                 <I unit="1/cm"> 
    1052                                         157.13 
    1053                                 </I> 
    1054                                 <Qdev unit="1/A"> 
    1055                                         5.2725e-005 
    1056                                 </Qdev> 
    1057                                 <Idev unit="1/cm"> 
    1058                                         30.429 
    1059                                 </Idev> 
     8                                <Q unit="1/A">7.7457e-05</Q> 
     9                                <I unit="1/cm">8432.04</I> 
     10                                <Idev unit="1/cm">153.745</Idev> 
     11                                <dQw unit="1/A">0.0</dQw> 
     12                                <dQl unit="1/A">0.117</dQl> 
     13                        </Idata> 
     14                        <Idata> 
     15                                <Q unit="1/A">8.3007e-05</Q> 
     16                                <I unit="1/cm">8298.38</I> 
     17                                <Idev unit="1/cm">152.01</Idev> 
     18                                <dQw unit="1/A">0.0</dQw> 
     19                                <dQl unit="1/A">0.117</dQl> 
     20                        </Idata> 
     21                        <Idata> 
     22                                <Q unit="1/A">8.8557e-05</Q> 
     23                                <I unit="1/cm">8091.51</I> 
     24                                <Idev unit="1/cm">149.908</Idev> 
     25                                <dQw unit="1/A">0.0</dQw> 
     26                                <dQl unit="1/A">0.117</dQl> 
     27                        </Idata> 
     28                        <Idata> 
     29                                <Q unit="1/A">9.4107e-05</Q> 
     30                                <I unit="1/cm">7947.7</I> 
     31                                <Idev unit="1/cm">148.184</Idev> 
     32                                <dQw unit="1/A">0.0</dQw> 
     33                                <dQl unit="1/A">0.117</dQl> 
     34                        </Idata> 
     35                        <Idata> 
     36                                <Q unit="1/A">9.9657e-05</Q> 
     37                                <I unit="1/cm">8174.04</I> 
     38                                <Idev unit="1/cm">149.824</Idev> 
     39                                <dQw unit="1/A">0.0</dQw> 
     40                                <dQl unit="1/A">0.117</dQl> 
     41                        </Idata> 
     42                        <Idata> 
     43                                <Q unit="1/A">0.000105207</Q> 
     44                                <I unit="1/cm">7890.52</I> 
     45                                <Idev unit="1/cm">147.061</Idev> 
     46                                <dQw unit="1/A">0.0</dQw> 
     47                                <dQl unit="1/A">0.117</dQl> 
     48                        </Idata> 
     49                        <Idata> 
     50                                <Q unit="1/A">0.000110757</Q> 
     51                                <I unit="1/cm">8067.04</I> 
     52                                <Idev unit="1/cm">74.9155</Idev> 
     53                                <dQw unit="1/A">0.0</dQw> 
     54                                <dQl unit="1/A">0.117</dQl> 
     55                        </Idata> 
     56                        <Idata> 
     57                                <Q unit="1/A">0.000121857</Q> 
     58                                <I unit="1/cm">7995.24</I> 
     59                                <Idev unit="1/cm">74.0244</Idev> 
     60                                <dQw unit="1/A">0.0</dQw> 
     61                                <dQl unit="1/A">0.117</dQl> 
     62                        </Idata> 
     63                        <Idata> 
     64                                <Q unit="1/A">0.000132957</Q> 
     65                                <I unit="1/cm">7969.3</I> 
     66                                <Idev unit="1/cm">73.7818</Idev> 
     67                                <dQw unit="1/A">0.0</dQw> 
     68                                <dQl unit="1/A">0.117</dQl> 
     69                        </Idata> 
     70                        <Idata> 
     71                                <Q unit="1/A">0.000144057</Q> 
     72                                <I unit="1/cm">7953.56</I> 
     73                                <Idev unit="1/cm">73.6532</Idev> 
     74                                <dQw unit="1/A">0.0</dQw> 
     75                                <dQl unit="1/A">0.117</dQl> 
     76                        </Idata> 
     77                        <Idata> 
     78                                <Q unit="1/A">0.000155157</Q> 
     79                                <I unit="1/cm">7896.35</I> 
     80                                <Idev unit="1/cm">73.3392</Idev> 
     81                                <dQw unit="1/A">0.0</dQw> 
     82                                <dQl unit="1/A">0.117</dQl> 
     83                        </Idata> 
     84                        <Idata> 
     85                                <Q unit="1/A">0.000166257</Q> 
     86                                <I unit="1/cm">7877.91</I> 
     87                                <Idev unit="1/cm">73.1936</Idev> 
     88                                <dQw unit="1/A">0.0</dQw> 
     89                                <dQl unit="1/A">0.117</dQl> 
     90                        </Idata> 
     91                        <Idata> 
     92                                <Q unit="1/A">0.000177357</Q> 
     93                                <I unit="1/cm">7769.46</I> 
     94                                <Idev unit="1/cm">72.6739</Idev> 
     95                                <dQw unit="1/A">0.0</dQw> 
     96                                <dQl unit="1/A">0.117</dQl> 
     97                        </Idata> 
     98                        <Idata> 
     99                                <Q unit="1/A">0.000188457</Q> 
     100                                <I unit="1/cm">7746.93</I> 
     101                                <Idev unit="1/cm">72.5899</Idev> 
     102                                <dQw unit="1/A">0.0</dQw> 
     103                                <dQl unit="1/A">0.117</dQl> 
     104                        </Idata> 
     105                        <Idata> 
     106                                <Q unit="1/A">0.000199557</Q> 
     107                                <I unit="1/cm">7820.8</I> 
     108                                <Idev unit="1/cm">72.9063</Idev> 
     109                                <dQw unit="1/A">0.0</dQw> 
     110                                <dQl unit="1/A">0.117</dQl> 
     111                        </Idata> 
     112                        <Idata> 
     113                                <Q unit="1/A">0.000210657</Q> 
     114                                <I unit="1/cm">7656.83</I> 
     115                                <Idev unit="1/cm">72.1007</Idev> 
     116                                <dQw unit="1/A">0.0</dQw> 
     117                                <dQl unit="1/A">0.117</dQl> 
     118                        </Idata> 
     119                        <Idata> 
     120                                <Q unit="1/A">0.000221757</Q> 
     121                                <I unit="1/cm">7777.33</I> 
     122                                <Idev unit="1/cm">72.6551</Idev> 
     123                                <dQw unit="1/A">0.0</dQw> 
     124                                <dQl unit="1/A">0.117</dQl> 
     125                        </Idata> 
     126                        <Idata> 
     127                                <Q unit="1/A">0.000232857</Q> 
     128                                <I unit="1/cm">7613.01</I> 
     129                                <Idev unit="1/cm">71.8768</Idev> 
     130                                <dQw unit="1/A">0.0</dQw> 
     131                                <dQl unit="1/A">0.117</dQl> 
     132                        </Idata> 
     133                        <Idata> 
     134                                <Q unit="1/A">0.000243957</Q> 
     135                                <I unit="1/cm">7498.28</I> 
     136                                <Idev unit="1/cm">71.316</Idev> 
     137                                <dQw unit="1/A">0.0</dQw> 
     138                                <dQl unit="1/A">0.117</dQl> 
     139                        </Idata> 
     140                        <Idata> 
     141                                <Q unit="1/A">0.000255057</Q> 
     142                                <I unit="1/cm">7494.75</I> 
     143                                <Idev unit="1/cm">71.2836</Idev> 
     144                                <dQw unit="1/A">0.0</dQw> 
     145                                <dQl unit="1/A">0.117</dQl> 
     146                        </Idata> 
     147                        <Idata> 
     148                                <Q unit="1/A">0.000266157</Q> 
     149                                <I unit="1/cm">7266.92</I> 
     150                                <Idev unit="1/cm">70.182</Idev> 
     151                                <dQw unit="1/A">0.0</dQw> 
     152                                <dQl unit="1/A">0.117</dQl> 
     153                        </Idata> 
     154                        <Idata> 
     155                                <Q unit="1/A">0.000277257</Q> 
     156                                <I unit="1/cm">7292.37</I> 
     157                                <Idev unit="1/cm">57.4236</Idev> 
     158                                <dQw unit="1/A">0.0</dQw> 
     159                                <dQl unit="1/A">0.117</dQl> 
     160                        </Idata> 
     161                        <Idata> 
     162                                <Q unit="1/A">0.000305007</Q> 
     163                                <I unit="1/cm">7214.55</I> 
     164                                <Idev unit="1/cm">57.0526</Idev> 
     165                                <dQw unit="1/A">0.0</dQw> 
     166                                <dQl unit="1/A">0.117</dQl> 
     167                        </Idata> 
     168                        <Idata> 
     169                                <Q unit="1/A">0.000332757</Q> 
     170                                <I unit="1/cm">7103.18</I> 
     171                                <Idev unit="1/cm">56.5915</Idev> 
     172                                <dQw unit="1/A">0.0</dQw> 
     173                                <dQl unit="1/A">0.117</dQl> 
     174                        </Idata> 
     175                        <Idata> 
     176                                <Q unit="1/A">0.000360507</Q> 
     177                                <I unit="1/cm">6883.81</I> 
     178                                <Idev unit="1/cm">55.7205</Idev> 
     179                                <dQw unit="1/A">0.0</dQw> 
     180                                <dQl unit="1/A">0.117</dQl> 
     181                        </Idata> 
     182                        <Idata> 
     183                                <Q unit="1/A">0.000388257</Q> 
     184                                <I unit="1/cm">6818.14</I> 
     185                                <Idev unit="1/cm">55.4232</Idev> 
     186                                <dQw unit="1/A">0.0</dQw> 
     187                                <dQl unit="1/A">0.117</dQl> 
     188                        </Idata> 
     189                        <Idata> 
     190                                <Q unit="1/A">0.000416007</Q> 
     191                                <I unit="1/cm">6591.98</I> 
     192                                <Idev unit="1/cm">54.4991</Idev> 
     193                                <dQw unit="1/A">0.0</dQw> 
     194                                <dQl unit="1/A">0.117</dQl> 
     195                        </Idata> 
     196                        <Idata> 
     197                                <Q unit="1/A">0.000443757</Q> 
     198                                <I unit="1/cm">6420.5</I> 
     199                                <Idev unit="1/cm">53.7756</Idev> 
     200                                <dQw unit="1/A">0.0</dQw> 
     201                                <dQl unit="1/A">0.117</dQl> 
     202                        </Idata> 
     203                        <Idata> 
     204                                <Q unit="1/A">0.000471507</Q> 
     205                                <I unit="1/cm">6120.15</I> 
     206                                <Idev unit="1/cm">52.5042</Idev> 
     207                                <dQw unit="1/A">0.0</dQw> 
     208                                <dQl unit="1/A">0.117</dQl> 
     209                        </Idata> 
     210                        <Idata> 
     211                                <Q unit="1/A">0.000499257</Q> 
     212                                <I unit="1/cm">5950.12</I> 
     213                                <Idev unit="1/cm">51.7582</Idev> 
     214                                <dQw unit="1/A">0.0</dQw> 
     215                                <dQl unit="1/A">0.117</dQl> 
     216                        </Idata> 
     217                        <Idata> 
     218                                <Q unit="1/A">0.000527007</Q> 
     219                                <I unit="1/cm">5792.76</I> 
     220                                <Idev unit="1/cm">51.0591</Idev> 
     221                                <dQw unit="1/A">0.0</dQw> 
     222                                <dQl unit="1/A">0.117</dQl> 
     223                        </Idata> 
     224                        <Idata> 
     225                                <Q unit="1/A">0.000554757</Q> 
     226                                <I unit="1/cm">5524.39</I> 
     227                                <Idev unit="1/cm">43.2058</Idev> 
     228                                <dQw unit="1/A">0.0</dQw> 
     229                                <dQl unit="1/A">0.117</dQl> 
     230                        </Idata> 
     231                        <Idata> 
     232                                <Q unit="1/A">0.000610257</Q> 
     233                                <I unit="1/cm">5127.92</I> 
     234                                <Idev unit="1/cm">41.599</Idev> 
     235                                <dQw unit="1/A">0.0</dQw> 
     236                                <dQl unit="1/A">0.117</dQl> 
     237                        </Idata> 
     238                        <Idata> 
     239                                <Q unit="1/A">0.000665757</Q> 
     240                                <I unit="1/cm">4753.49</I> 
     241                                <Idev unit="1/cm">40.0733</Idev> 
     242                                <dQw unit="1/A">0.0</dQw> 
     243                                <dQl unit="1/A">0.117</dQl> 
     244                        </Idata> 
     245                        <Idata> 
     246                                <Q unit="1/A">0.000721257</Q> 
     247                                <I unit="1/cm">4355.25</I> 
     248                                <Idev unit="1/cm">38.3487</Idev> 
     249                                <dQw unit="1/A">0.0</dQw> 
     250                                <dQl unit="1/A">0.117</dQl> 
     251                        </Idata> 
     252                        <Idata> 
     253                                <Q unit="1/A">0.000776757</Q> 
     254                                <I unit="1/cm">3878.25</I> 
     255                                <Idev unit="1/cm">36.2076</Idev> 
     256                                <dQw unit="1/A">0.0</dQw> 
     257                                <dQl unit="1/A">0.117</dQl> 
     258                        </Idata> 
     259                        <Idata> 
     260                                <Q unit="1/A">0.000832257</Q> 
     261                                <I unit="1/cm">3471.25</I> 
     262                                <Idev unit="1/cm">34.2637</Idev> 
     263                                <dQw unit="1/A">0.0</dQw> 
     264                                <dQl unit="1/A">0.117</dQl> 
     265                        </Idata> 
     266                        <Idata> 
     267                                <Q unit="1/A">0.000887757</Q> 
     268                                <I unit="1/cm">3022.77</I> 
     269                                <Idev unit="1/cm">31.9597</Idev> 
     270                                <dQw unit="1/A">0.0</dQw> 
     271                                <dQl unit="1/A">0.117</dQl> 
     272                        </Idata> 
     273                        <Idata> 
     274                                <Q unit="1/A">0.000943257</Q> 
     275                                <I unit="1/cm">2600.33</I> 
     276                                <Idev unit="1/cm">29.6463</Idev> 
     277                                <dQw unit="1/A">0.0</dQw> 
     278                                <dQl unit="1/A">0.117</dQl> 
     279                        </Idata> 
     280                        <Idata> 
     281                                <Q unit="1/A">0.000998757</Q> 
     282                                <I unit="1/cm">2309.11</I> 
     283                                <Idev unit="1/cm">27.9459</Idev> 
     284                                <dQw unit="1/A">0.0</dQw> 
     285                                <dQl unit="1/A">0.117</dQl> 
     286                        </Idata> 
     287                        <Idata> 
     288                                <Q unit="1/A">0.00105426</Q> 
     289                                <I unit="1/cm">1975.45</I> 
     290                                <Idev unit="1/cm">25.8603</Idev> 
     291                                <dQw unit="1/A">0.0</dQw> 
     292                                <dQl unit="1/A">0.117</dQl> 
     293                        </Idata> 
     294                        <Idata> 
     295                                <Q unit="1/A">0.00110976</Q> 
     296                                <I unit="1/cm">1701.57</I> 
     297                                <Idev unit="1/cm">21.4532</Idev> 
     298                                <dQw unit="1/A">0.0</dQw> 
     299                                <dQl unit="1/A">0.117</dQl> 
     300                        </Idata> 
     301                        <Idata> 
     302                                <Q unit="1/A">0.00122076</Q> 
     303                                <I unit="1/cm">1156.72</I> 
     304                                <Idev unit="1/cm">17.7038</Idev> 
     305                                <dQw unit="1/A">0.0</dQw> 
     306                                <dQl unit="1/A">0.117</dQl> 
     307                        </Idata> 
     308                        <Idata> 
     309                                <Q unit="1/A">0.00133176</Q> 
     310                                <I unit="1/cm">748.659</I> 
     311                                <Idev unit="1/cm">14.2685</Idev> 
     312                                <dQw unit="1/A">0.0</dQw> 
     313                                <dQl unit="1/A">0.117</dQl> 
     314                        </Idata> 
     315                        <Idata> 
     316                                <Q unit="1/A">0.00144276</Q> 
     317                                <I unit="1/cm">465.515</I> 
     318                                <Idev unit="1/cm">11.2799</Idev> 
     319                                <dQw unit="1/A">0.0</dQw> 
     320                                <dQl unit="1/A">0.117</dQl> 
     321                        </Idata> 
     322                        <Idata> 
     323                                <Q unit="1/A">0.00155376</Q> 
     324                                <I unit="1/cm">252.307</I> 
     325                                <Idev unit="1/cm">8.35705</Idev> 
     326                                <dQw unit="1/A">0.0</dQw> 
     327                                <dQl unit="1/A">0.117</dQl> 
     328                        </Idata> 
     329                        <Idata> 
     330                                <Q unit="1/A">0.00166476</Q> 
     331                                <I unit="1/cm">157.822</I> 
     332                                <Idev unit="1/cm">6.66382</Idev> 
     333                                <dQw unit="1/A">0.0</dQw> 
     334                                <dQl unit="1/A">0.117</dQl> 
     335                        </Idata> 
     336                        <Idata> 
     337                                <Q unit="1/A">0.00177576</Q> 
     338                                <I unit="1/cm">117.146</I> 
     339                                <Idev unit="1/cm">5.78352</Idev> 
     340                                <dQw unit="1/A">0.0</dQw> 
     341                                <dQl unit="1/A">0.117</dQl> 
     342                        </Idata> 
     343                        <Idata> 
     344                                <Q unit="1/A">0.00188676</Q> 
     345                                <I unit="1/cm">93.1465</I> 
     346                                <Idev unit="1/cm">5.19397</Idev> 
     347                                <dQw unit="1/A">0.0</dQw> 
     348                                <dQl unit="1/A">0.117</dQl> 
     349                        </Idata> 
     350                        <Idata> 
     351                                <Q unit="1/A">0.00199776</Q> 
     352                                <I unit="1/cm">103.864</I> 
     353                                <Idev unit="1/cm">5.46342</Idev> 
     354                                <dQw unit="1/A">0.0</dQw> 
     355                                <dQl unit="1/A">0.117</dQl> 
     356                        </Idata> 
     357                        <Idata> 
     358                                <Q unit="1/A">0.00210876</Q> 
     359                                <I unit="1/cm">128.147</I> 
     360                                <Idev unit="1/cm">6.0333</Idev> 
     361                                <dQw unit="1/A">0.0</dQw> 
     362                                <dQl unit="1/A">0.117</dQl> 
     363                        </Idata> 
     364                        <Idata> 
     365                                <Q unit="1/A">0.00221976</Q> 
     366                                <I unit="1/cm">135.96</I> 
     367                                <Idev unit="1/cm">6.20529</Idev> 
     368                                <dQw unit="1/A">0.0</dQw> 
     369                                <dQl unit="1/A">0.117</dQl> 
     370                        </Idata> 
     371                        <Idata> 
     372                                <Q unit="1/A">0.00233076</Q> 
     373                                <I unit="1/cm">138.712</I> 
     374                                <Idev unit="1/cm">6.26599</Idev> 
     375                                <dQw unit="1/A">0.0</dQw> 
     376                                <dQl unit="1/A">0.117</dQl> 
     377                        </Idata> 
     378                        <Idata> 
     379                                <Q unit="1/A">0.00244176</Q> 
     380                                <I unit="1/cm">126.272</I> 
     381                                <Idev unit="1/cm">5.99155</Idev> 
     382                                <dQw unit="1/A">0.0</dQw> 
     383                                <dQl unit="1/A">0.117</dQl> 
     384                        </Idata> 
     385                        <Idata> 
     386                                <Q unit="1/A">0.00255276</Q> 
     387                                <I unit="1/cm">114.46</I> 
     388                                <Idev unit="1/cm">5.72081</Idev> 
     389                                <dQw unit="1/A">0.0</dQw> 
     390                                <dQl unit="1/A">0.117</dQl> 
     391                        </Idata> 
     392                        <Idata> 
     393                                <Q unit="1/A">0.00266376</Q> 
     394                                <I unit="1/cm">74.2613</I> 
     395                                <Idev unit="1/cm">4.67786</Idev> 
     396                                <dQw unit="1/A">0.0</dQw> 
     397                                <dQl unit="1/A">0.117</dQl> 
     398                        </Idata> 
     399                        <Idata> 
     400                                <Q unit="1/A">0.00277476</Q> 
     401                                <I unit="1/cm">72.3794</I> 
     402                                <Idev unit="1/cm">4.62347</Idev> 
     403                                <dQw unit="1/A">0.0</dQw> 
     404                                <dQl unit="1/A">0.117</dQl> 
     405                        </Idata> 
     406                        <Idata> 
     407                                <Q unit="1/A">0.00288576</Q> 
     408                                <I unit="1/cm">47.3385</I> 
     409                                <Idev unit="1/cm">3.82544</Idev> 
     410                                <dQw unit="1/A">0.0</dQw> 
     411                                <dQl unit="1/A">0.117</dQl> 
     412                        </Idata> 
     413                        <Idata> 
     414                                <Q unit="1/A">0.00299676</Q> 
     415                                <I unit="1/cm">36.0379</I> 
     416                                <Idev unit="1/cm">3.40491</Idev> 
     417                                <dQw unit="1/A">0.0</dQw> 
     418                                <dQl unit="1/A">0.117</dQl> 
     419                        </Idata> 
     420                        <Idata> 
     421                                <Q unit="1/A">0.00310776</Q> 
     422                                <I unit="1/cm">30.3854</I> 
     423                                <Idev unit="1/cm">3.17364</Idev> 
     424                                <dQw unit="1/A">0.0</dQw> 
     425                                <dQl unit="1/A">0.117</dQl> 
     426                        </Idata> 
     427                        <Idata> 
     428                                <Q unit="1/A">0.00321876</Q> 
     429                                <I unit="1/cm">24.7429</I> 
     430                                <Idev unit="1/cm">2.92505</Idev> 
     431                                <dQw unit="1/A">0.0</dQw> 
     432                                <dQl unit="1/A">0.117</dQl> 
     433                        </Idata> 
     434                        <Idata> 
     435                                <Q unit="1/A">0.00332976</Q> 
     436                                <I unit="1/cm">28.5101</I> 
     437                                <Idev unit="1/cm">3.09348</Idev> 
     438                                <dQw unit="1/A">0.0</dQw> 
     439                                <dQl unit="1/A">0.117</dQl> 
     440                        </Idata> 
     441                        <Idata> 
     442                                <Q unit="1/A">0.00344076</Q> 
     443                                <I unit="1/cm">27.9635</I> 
     444                                <Idev unit="1/cm">3.06924</Idev> 
     445                                <dQw unit="1/A">0.0</dQw> 
     446                                <dQl unit="1/A">0.117</dQl> 
     447                        </Idata> 
     448                        <Idata> 
     449                                <Q unit="1/A">0.00355176</Q> 
     450                                <I unit="1/cm">33.3649</I> 
     451                                <Idev unit="1/cm">3.29833</Idev> 
     452                                <dQw unit="1/A">0.0</dQw> 
     453                                <dQl unit="1/A">0.117</dQl> 
     454                        </Idata> 
     455                        <Idata> 
     456                                <Q unit="1/A">0.00366276</Q> 
     457                                <I unit="1/cm">35.237</I> 
     458                                <Idev unit="1/cm">3.37337</Idev> 
     459                                <dQw unit="1/A">0.0</dQw> 
     460                                <dQl unit="1/A">0.117</dQl> 
     461                        </Idata> 
     462                        <Idata> 
     463                                <Q unit="1/A">0.00377376</Q> 
     464                                <I unit="1/cm">29.0365</I> 
     465                                <Idev unit="1/cm">3.11578</Idev> 
     466                                <dQw unit="1/A">0.0</dQw> 
     467                                <dQl unit="1/A">0.117</dQl> 
     468                        </Idata> 
     469                        <Idata> 
     470                                <Q unit="1/A">0.00388476</Q> 
     471                                <I unit="1/cm">32.5455</I> 
     472                                <Idev unit="1/cm">3.26424</Idev> 
     473                                <dQw unit="1/A">0.0</dQw> 
     474                                <dQl unit="1/A">0.117</dQl> 
     475                        </Idata> 
     476                        <Idata> 
     477                                <Q unit="1/A">0.00399576</Q> 
     478                                <I unit="1/cm">23.1284</I> 
     479                                <Idev unit="1/cm">2.84982</Idev> 
     480                                <dQw unit="1/A">0.0</dQw> 
     481                                <dQl unit="1/A">0.117</dQl> 
     482                        </Idata> 
     483                        <Idata> 
     484                                <Q unit="1/A">0.00410676</Q> 
     485                                <I unit="1/cm">23.6642</I> 
     486                                <Idev unit="1/cm">2.87489</Idev> 
     487                                <dQw unit="1/A">0.0</dQw> 
     488                                <dQl unit="1/A">0.117</dQl> 
     489                        </Idata> 
     490                        <Idata> 
     491                                <Q unit="1/A">0.00421776</Q> 
     492                                <I unit="1/cm">19.3575</I> 
     493                                <Idev unit="1/cm">2.66567</Idev> 
     494                                <dQw unit="1/A">0.0</dQw> 
     495                                <dQl unit="1/A">0.117</dQl> 
     496                        </Idata> 
     497                        <Idata> 
     498                                <Q unit="1/A">0.00432876</Q> 
     499                                <I unit="1/cm">12.8971</I> 
     500                                <Idev unit="1/cm">2.31662</Idev> 
     501                                <dQw unit="1/A">0.0</dQw> 
     502                                <dQl unit="1/A">0.117</dQl> 
     503                        </Idata> 
     504                        <Idata> 
     505                                <Q unit="1/A">0.00443976</Q> 
     506                                <I unit="1/cm">12.8958</I> 
     507                                <Idev unit="1/cm">2.31647</Idev> 
     508                                <dQw unit="1/A">0.0</dQw> 
     509                                <dQl unit="1/A">0.117</dQl> 
     510                        </Idata> 
     511                        <Idata> 
     512                                <Q unit="1/A">0.00455076</Q> 
     513                                <I unit="1/cm">9.66256</I> 
     514                                <Idev unit="1/cm">2.12012</Idev> 
     515                                <dQw unit="1/A">0.0</dQw> 
     516                                <dQl unit="1/A">0.117</dQl> 
     517                        </Idata> 
     518                        <Idata> 
     519                                <Q unit="1/A">0.00466176</Q> 
     520                                <I unit="1/cm">9.66792</I> 
     521                                <Idev unit="1/cm">2.1208</Idev> 
     522                                <dQw unit="1/A">0.0</dQw> 
     523                                <dQl unit="1/A">0.117</dQl> 
     524                        </Idata> 
     525                        <Idata> 
     526                                <Q unit="1/A">0.00477276</Q> 
     527                                <I unit="1/cm">9.39793</I> 
     528                                <Idev unit="1/cm">2.10354</Idev> 
     529                                <dQw unit="1/A">0.0</dQw> 
     530                                <dQl unit="1/A">0.117</dQl> 
     531                        </Idata> 
     532                        <Idata> 
     533                                <Q unit="1/A">0.00488376</Q> 
     534                                <I unit="1/cm">13.7138</I> 
     535                                <Idev unit="1/cm">2.36412</Idev> 
     536                                <dQw unit="1/A">0.0</dQw> 
     537                                <dQl unit="1/A">0.117</dQl> 
     538                        </Idata> 
     539                        <Idata> 
     540                                <Q unit="1/A">0.00499476</Q> 
     541                                <I unit="1/cm">14.2495</I> 
     542                                <Idev unit="1/cm">2.39427</Idev> 
     543                                <dQw unit="1/A">0.0</dQw> 
     544                                <dQl unit="1/A">0.117</dQl> 
     545                        </Idata> 
     546                        <Idata> 
     547                                <Q unit="1/A">0.00510576</Q> 
     548                                <I unit="1/cm">9.12935</I> 
     549                                <Idev unit="1/cm">2.08632</Idev> 
     550                                <dQw unit="1/A">0.0</dQw> 
     551                                <dQl unit="1/A">0.117</dQl> 
     552                        </Idata> 
     553                        <Idata> 
     554                                <Q unit="1/A">0.00521676</Q> 
     555                                <I unit="1/cm">11.822</I> 
     556                                <Idev unit="1/cm">2.25339</Idev> 
     557                                <dQw unit="1/A">0.0</dQw> 
     558                                <dQl unit="1/A">0.117</dQl> 
     559                        </Idata> 
     560                        <Idata> 
     561                                <Q unit="1/A">0.00532776</Q> 
     562                                <I unit="1/cm">10.7551</I> 
     563                                <Idev unit="1/cm">2.18935</Idev> 
     564                                <dQw unit="1/A">0.0</dQw> 
     565                                <dQl unit="1/A">0.117</dQl> 
     566                        </Idata> 
     567                        <Idata> 
     568                                <Q unit="1/A">0.00543876</Q> 
     569                                <I unit="1/cm">11.8258</I> 
     570                                <Idev unit="1/cm">2.25385</Idev> 
     571                                <dQw unit="1/A">0.0</dQw> 
     572                                <dQl unit="1/A">0.117</dQl> 
     573                        </Idata> 
     574                        <Idata> 
     575                                <Q unit="1/A">0.00554976</Q> 
     576                                <I unit="1/cm">8.04703</I> 
     577                                <Idev unit="1/cm">2.01492</Idev> 
     578                                <dQw unit="1/A">0.0</dQw> 
     579                                <dQl unit="1/A">0.117</dQl> 
    1060580                        </Idata> 
    1061581                </SASdata> 
    1062                 <SASsample> 
    1063                         <ID> 
    1064                                  
    1065                         </ID> 
     582                <SASsample name=""> 
     583                        <ID/> 
     584                        <thickness unit="mm">1.0</thickness> 
     585                        <transmission>0.84031</transmission> 
    1066586                </SASsample> 
    1067587                <SASinstrument> 
    1068                         <name> 
    1069                                  
    1070                         </name> 
     588                        <name/> 
    1071589                        <SASsource> 
    1072                                 <radiation> 
    1073                                         neutron 
    1074                                 </radiation> 
     590                                <radiation>neutron</radiation> 
     591                                <wavelength unit="A">2.38</wavelength> 
    1075592                        </SASsource> 
    1076593                        <SAScollimation/> 
    1077594                        <SASdetector> 
    1078                                 <name> 
    1079                                         BT5 DETECTOR ARRAY 
    1080                                 </name> 
     595                                <name/> 
    1081596                        </SASdetector> 
    1082597                </SASinstrument> 
    1083                 <SASprocess> 
    1084                         <name> 
    1085                                  
    1086                         </name> 
    1087                         <date> 
    1088                                  
    1089                         </date> 
    1090                         <description> 
    1091                                  
    1092                         </description> 
    1093                         <SASprocessnote> 
    1094                                 Macintosh HD:Users:ajj:Documents:Work:Devel:DANSE:test data:simulated:SIMUL_1000A_sphere_dsm.txt 
    1095 Chi^2 = 0.998099   PowerLaw m = -4.09   Iterations = 17 
    1096 0 box smooth passes and 0 smoothing spline passes 
    1097 CREATED: Wed, May 26, 2010 at  2:43:15 PM 
    1098                         </SASprocessnote> 
    1099                 </SASprocess> 
     598                <SASnote>free form description of processing</SASnote> 
    1100599                <fitting_plug_in version="1.0"> 
    1101                         <filename> 
    1102                                 1000A_sphere_dsm.xml 
    1103                         </filename> 
    1104                         <timestamp epoch="1281367930.14"> 
    1105                                 Mon Aug 09 11:32:10 2010 
    1106                         </timestamp> 
     600                        <filename>latex_smeared.xml [Oct 07 10:40]</filename> 
     601                        <timestamp epoch="1479496054.62">Fri Nov 18 14:07:34 2016</timestamp> 
    1107602                        <Attributes> 
    1108603                                <is_data is_data="True"/> 
    1109                                 <group_id group_id="1000A_sphere_dsm.xml"/> 
    1110                                 <data_name data_name="1000A_sphere_dsm.xml"/> 
    1111                                 <data_id data_id="1000A_sphere_dsm.xml"/> 
     604                                <group_id group_id="latex_smeared.xml [1]"/> 
     605                                <data_name data_name="latex_smeared.xml "/> 
     606                                <data_id data_id="latex_smeared.xml 1479495991.26"/> 
    1112607                                <name name=""/> 
    1113                                 <data_name data_name="1000A_sphere_dsm.xml"/> 
    1114                                 <engine_type engine_type="scipy"/> 
    1115                                 <qmin qmin="3.0525e-005"/> 
    1116                                 <qmax qmax="0.0052725"/> 
    1117                                 <npts npts="None"/> 
    1118                                 <shape_rbutton shape_rbutton="True"/> 
    1119                                 <shape_indep_rbutton shape_indep_rbutton="False"/> 
    1120                                 <plugin_rbutton plugin_rbutton="False"/> 
    1121                                 <struct_rbutton struct_rbutton="False"/> 
    1122                                 <formfactorcombobox formfactorcombobox="0"/> 
    1123                                 <structurecombobox structurecombobox="0"/> 
    1124                                 <disp_box disp_box="2"/> 
    1125                                 <enable_smearer enable_smearer="False"/> 
    1126                                 <disable_smearer disable_smearer="True"/> 
     608                                <data_name data_name="latex_smeared.xml "/> 
     609                                <qmin qmin="7.7457e-05"/> 
     610                                <qmax qmax="0.00554976"/> 
     611                                <npts npts="50"/> 
     612                                <categorycombobox categorycombobox="Sphere"/> 
     613                                <formfactorcombobox formfactorcombobox="sphere"/> 
     614                                <structurecombobox structurecombobox="None"/> 
     615                                <multi_factor multi_factor="None"/> 
     616                                <magnetic_on magnetic_on="False"/> 
     617                                <enable_smearer enable_smearer="True"/> 
     618                                <disable_smearer disable_smearer="False"/> 
    1127619                                <pinhole_smearer pinhole_smearer="False"/> 
    1128620                                <slit_smearer slit_smearer="False"/> 
    1129621                                <enable_disp enable_disp="False"/> 
    1130622                                <disable_disp disable_disp="True"/> 
    1131                                 <slit_smearer slit_smearer="False"/> 
     623                                <dI_noweight dI_noweight="False"/> 
     624                                <dI_didata dI_didata="True"/> 
     625                                <dI_sqrdata dI_sqrdata="False"/> 
     626                                <dI_idata dI_idata="False"/> 
    1132627                                <enable2D enable2D="False"/> 
    1133                                 <cb1 cb1="True"/> 
    1134                                 <tcChi tcChi="86.3"/> 
    1135                                 <smearer smearer="&lt;DataLoader.qsmearing._BaseSmearer object at 0x03665F30&gt;"/> 
     628                                <cb1 cb1="False"/> 
     629                                <tcChi tcChi="24.584"/> 
     630                                <smearer smearer="&lt;sas.sascalc.data_util.qsmearing.PySmear object at 0x18D2ACD0&gt;"/> 
    1136631                                <smear_type smear_type="None"/> 
    1137632                                <dq_l dq_l="None"/> 
    1138                                 <dq_r dq_r="None"/> 
     633                                <dq_r dq_r="0.0"/> 
     634                                <dx_max dx_max="0.0"/> 
     635                                <dx_min dx_min="0.0"/> 
     636                                <dxl dxl="0.0"/> 
     637                                <dxw dxw=""/> 
    1139638                                <values/> 
    1140639                                <weights/> 
     640                                <disp_obj_dict/> 
    1141641                                <parameters> 
    1142                                         <parameter error_displayed="True" error_value="1.57" maximum_displayed="False" maximum_value="" minimum_displayed="False" minimum_value="" name="background" selected_to_fit="True" unit="[1/cm]" value="-214"/> 
    1143                                         <parameter error_displayed="True" error_value="1.64" maximum_displayed="False" maximum_value="" minimum_displayed="False" minimum_value="" name="radius" selected_to_fit="True" unit="[A]" value="1.01e+004"/> 
    1144                                         <parameter error_displayed="False" error_value="" maximum_displayed="False" maximum_value="" minimum_displayed="False" minimum_value="" name="scale" selected_to_fit="True" unit="" value="0.198"/> 
    1145                                         <parameter error_displayed="True" error_value="0.0537" maximum_displayed="False" maximum_value="" minimum_displayed="False" minimum_value="" name="sldSolv" selected_to_fit="True" unit="[1/A^(2)]" value="8.19e-007"/> 
    1146                                         <parameter error_displayed="False" error_value="" maximum_displayed="False" maximum_value="" minimum_displayed="False" minimum_value="" name="sldSph" selected_to_fit="True" unit="[1/A^(2)]" value="2.26e-006"/> 
     642                                        <parameter error_displayed="True" error_value="NaN" maximum_displayed="True" maximum_value="inf" minimum_displayed="True" minimum_value="0" name="scale" selected_to_fit="True" unit="" value="1.7527e-06"/> 
     643                                        <parameter error_displayed="True" error_value="NaN" maximum_displayed="True" maximum_value="inf" minimum_displayed="True" minimum_value="-inf" name="background" selected_to_fit="True" unit="1/cm" value="0.060082"/> 
     644                                        <parameter error_displayed="True" error_value="NaN" maximum_displayed="True" maximum_value="inf" minimum_displayed="True" minimum_value="-inf" name="sld" selected_to_fit="True" unit="1e-6/Ang^2" value="-705.77"/> 
     645                                        <parameter error_displayed="True" error_value="NaN" maximum_displayed="True" maximum_value="inf" minimum_displayed="True" minimum_value="-inf" name="sld_solvent" selected_to_fit="True" unit="1e-6/Ang^2" value="-361.37"/> 
     646                                        <parameter error_displayed="True" error_value="NaN" maximum_displayed="True" maximum_value="inf" minimum_displayed="True" minimum_value="0" name="radius" selected_to_fit="True" unit="Ang" value="2462.1"/> 
    1147647                                </parameters> 
     648                                <str_parameters/> 
    1148649                                <orientation_parameters/> 
    1149650                                <dispersity_parameters/> 
  • setup.py

    r18e7309 r27109e5  
    206206) 
    207207 
    208  
    209208# sas.sascalc.pr 
    210209srcdir  = os.path.join("src", "sas", "sascalc", "pr", "c_extensions") 
     
    229228                              ) ) 
    230229 
     230#sas.sascalc.corfunc 
     231package_dir["sas.sascalc.corfunc"] = os.path.join("src", "sas", "sascalc", "corfunc") 
     232packages.extend(["sas.sascalc.corfunc"]) 
     233 
    231234# sas.sascalc.fit 
    232235package_dir["sas.sascalc.fit"] = os.path.join("src", "sas", "sascalc", "fit") 
     
    237240package_dir["sas.sasgui.perspectives.pr"] = os.path.join("src", "sas", "sasgui", "perspectives", "pr") 
    238241packages.extend(["sas.sasgui.perspectives","sas.sasgui.perspectives.pr"]) 
    239 package_data["sas.sasgui.perspectives.pr"] = ['images/*'] 
     242package_data["sas.sasgui.perspectives.pr"] = ['media/*'] 
    240243 
    241244package_dir["sas.sasgui.perspectives.invariant"] = os.path.join("src", "sas", "sasgui", "perspectives", "invariant") 
     
    250253packages.extend(["sas.sasgui.perspectives", "sas.sasgui.perspectives.calculator"]) 
    251254package_data['sas.sasgui.perspectives.calculator'] = ['images/*', 'media/*'] 
     255 
     256package_dir["sas.sasgui.perspectives.corfunc"] = os.path.join("src", "sas", "sasgui", "perspectives", "corfunc") 
     257packages.extend(["sas.sasgui.perspectives.corfunc"]) 
     258package_data['sas.sasgui.perspectives.corfunc'] = ['media/*'] 
     259 
     260package_dir["sas.sasgui.perspectives.file_converter"] = os.path.join("src", "sas", "sasgui", "perspectives", "file_converter") 
     261packages.extend(["sas.sasgui.perspectives.file_converter"]) 
     262package_data['sas.sasgui.perspectives.file_converter'] = ['media/*'] 
    252263 
    253264# Data util 
     
    304315                               'test/1d_data/*', 
    305316                               'test/2d_data/*', 
     317                               'test/convertible_files/*', 
     318                               'test/coordinate_data/*', 
     319                               'test/image_data/*', 
     320                               'test/media/*', 
     321                               'test/other_files/*', 
    306322                               'test/save_states/*', 
    307                                'test/upcoming_formats/*', 
    308                                  'default_categories.json'] 
     323                               'test/sesans_data/*' 
     324                               ] 
    309325packages.append("sas.sasview") 
    310326 
  • src/sas/sascalc/calculator/slit_length_calculator.py

    rb699768 rbfba720  
    1616        # y data 
    1717        self.y = None 
    18         #default slit length 
     18        # default slit length 
    1919        self.slit_length = 0.0 
    2020 
     
    4242        """ 
    4343        # None data do nothing 
    44         if self.y == None or self.x == None: 
     44        if self.y is None or self.x is None: 
    4545            return 
    4646        # set local variable 
     
    5454        y_sum = 0.0 
    5555        y_max = 0.0 
    56         ind = 0.0 
     56        ind = 0 
    5757 
    5858        # sum 10 or more y values until getting max_y, 
     
    7070        # defaults 
    7171        y_half_d = 0.0 
    72         ind = 0.0 
     72        ind = 0 
    7373        # find indices where it crosses y = y_half. 
    7474        while True: 
     
    8181 
    8282        # 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] 
    8484 
    8585        # get corresponding x values 
    8686        x_half_d = x[ind] 
    87         x_half_u = x[ind-1] 
     87        x_half_u = x[ind - 1] 
    8888 
    8989        # calculate x at y = y_half using linear interpolation 
     
    9191            x_half = (x_half_d + x_half_u)/2.0 
    9292        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)) 
    9696 
    9797        # Our slit length is half width, so just give half beam value 
  • src/sas/sascalc/data_util/qsmearing.py

    rd3911e3 r775e0b7  
    1414import sys 
    1515 
     16import numpy as np  # type: ignore 
     17from numpy import pi, exp # type:ignore 
     18 
    1619from sasmodels.resolution import Slit1D, Pinhole1D 
     20from sasmodels.sesans import SesansTransform 
    1721from sasmodels.resolution2d import Pinhole2D 
     22from .nxsunit import Converter 
    1823 
    1924def smear_selection(data, model = None): 
     
    3641    # Sanity check. If we are not dealing with a SAS Data1D 
    3742    # object, just return None 
     43    # This checks for 2D data (does not throw exception because fail is common) 
    3844    if  data.__class__.__name__ not in ['Data1D', 'Theory1D']: 
    3945        if data == None: 
     
    4147        elif data.dqx_data == None or data.dqy_data == None: 
    4248            return None 
    43         return PySmear2D(data, model) 
    44  
     49        return PySmear2D(data) 
     50    # This checks for 1D data with smearing info in the data itself (again, fail is likely; no exceptions) 
    4551    if  not hasattr(data, "dx") and not hasattr(data, "dxl")\ 
    4652         and not hasattr(data, "dxw"): 
     
    4854 
    4955    # Look for resolution smearing data 
     56    # This is the code that checks for SESANS data; it looks for the file loader 
     57    # TODO: change other sanity checks to check for file loader instead of data structure? 
     58    _found_sesans = False 
     59    #if data.dx is not None and data.meta_data['loader']=='SESANS': 
     60    if data.dx is not None and data.isSesans: 
     61        #if data.dx[0] > 0.0: 
     62        if numpy.size(data.dx[data.dx <= 0]) == 0: 
     63            _found_sesans = True 
     64        # if data.dx[0] <= 0.0: 
     65        if numpy.size(data.dx[data.dx <= 0]) > 0: 
     66            raise ValueError('one or more of your dx values are negative, please check the data file!') 
     67 
     68    if _found_sesans == True: 
     69        #Pre-compute the Hankel matrix (H) 
     70        qmax, qunits = data.sample.zacceptance 
     71        SElength = Converter(data._xunit)(data.x, "A") 
     72        zaccept = Converter(qunits)(qmax, "1/A"), 
     73        Rmax = 10000000 
     74        hankel = SesansTransform(data.x, SElength, zaccept, Rmax) 
     75        # Then return the actual transform, as if it were a smearing function 
     76        return PySmear(hankel, model, offset=0) 
     77 
    5078    _found_resolution = False 
    5179    if data.dx is not None and len(data.dx) == len(data.x): 
     
    89117    Wrapper for pure python sasmodels resolution functions. 
    90118    """ 
    91     def __init__(self, resolution, model): 
     119    def __init__(self, resolution, model, offset=None): 
    92120        self.model = model 
    93121        self.resolution = resolution 
    94         self.offset = numpy.searchsorted(self.resolution.q_calc, self.resolution.q[0]) 
     122        if offset is None: 
     123            offset = numpy.searchsorted(self.resolution.q_calc, self.resolution.q[0]) 
     124        self.offset = offset 
    95125 
    96126    def apply(self, iq_in, first_bin=0, last_bin=None): 
  • src/sas/sascalc/dataloader/data_info.py

    r345e7e4 r2ffe241  
    2525import numpy 
    2626import math 
    27  
    28 class plottable_sesans1D(object): 
    29     """ 
    30     SESANS is a place holder for 1D SESANS plottables. 
    31  
    32     #TODO: This was directly copied from the plottables_1D. Modified Somewhat. 
    33     #Class has been updated. 
    34     """ 
    35     # The presence of these should be mutually 
    36     # exclusive with the presence of Qdev (dx) 
    37     x = None 
    38     y = None 
    39     lam = None 
    40     dx = None 
    41     dy = None 
    42     dlam = None 
    43     ## Slit smearing length 
    44     dxl = None 
    45     ## Slit smearing width 
    46     dxw = None 
    47  
    48     # Units 
    49     _xaxis = '' 
    50     _xunit = '' 
    51     _yaxis = '' 
    52     _yunit = '' 
    53  
    54     def __init__(self, x, y, lam, dx=None, dy=None, dlam=None): 
    55 #        print "SESANS plottable working" 
    56         self.x = numpy.asarray(x) 
    57         self.y = numpy.asarray(y) 
    58         self.lam = numpy.asarray(lam) 
    59         if dx is not None: 
    60             self.dx = numpy.asarray(dx) 
    61         if dy is not None: 
    62             self.dy = numpy.asarray(dy) 
    63         if dlam is not None: 
    64             self.dlam = numpy.asarray(dlam) 
    65  
    66     def xaxis(self, label, unit): 
    67         """ 
    68         set the x axis label and unit 
    69         """ 
    70         self._xaxis = label 
    71         self._xunit = unit 
    72  
    73     def yaxis(self, label, unit): 
    74         """ 
    75         set the y axis label and unit 
    76         """ 
    77         self._yaxis = label 
    78         self._yunit = unit 
    79  
    8027 
    8128class plottable_1D(object): 
     
    9340    ## Slit smearing width 
    9441    dxw = None 
     42    ## SESANS specific params (wavelengths for spin echo length calculation) 
     43    lam = None 
     44    dlam = None 
    9545 
    9646    # Units 
     
    10050    _yunit = '' 
    10151 
    102     def __init__(self, x, y, dx=None, dy=None, dxl=None, dxw=None): 
     52    def __init__(self, x, y, dx=None, dy=None, dxl=None, dxw=None, lam=None, dlam=None): 
    10353        self.x = numpy.asarray(x) 
    10454        self.y = numpy.asarray(y) 
     
    11161        if dxw is not None: 
    11262            self.dxw = numpy.asarray(dxw) 
     63        if lam is not None: 
     64            self.lam = numpy.asarray(lam) 
     65        if dlam is not None: 
     66            self.dlam = numpy.asarray(dlam) 
    11367 
    11468    def xaxis(self, label, unit): 
     
    398352    ## Details 
    399353    details = None 
     354    ## SESANS zacceptance 
     355    zacceptance = None 
    400356 
    401357    def __init__(self): 
     
    535491    ## Loading errors 
    536492    errors = None 
     493    ## SESANS data check 
     494    isSesans = None 
     495 
    537496 
    538497    def __init__(self): 
     
    567526        ## Loading errors 
    568527        self.errors = [] 
     528        ## SESANS data check 
     529        self.isSesans = False 
    569530 
    570531    def append_empty_process(self): 
     
    586547        _str += "Title:           %s\n" % self.title 
    587548        _str += "Run:             %s\n" % str(self.run) 
     549        _str += "SESANS:          %s\n" % str(self.isSesans) 
    588550        _str += "Instrument:      %s\n" % str(self.instrument) 
    589551        _str += "%s\n" % str(self.sample) 
     
    736698        return self._perform_union(other) 
    737699 
    738 class SESANSData1D(plottable_sesans1D, DataInfo): 
    739     """ 
    740     SESANS 1D data class 
    741     """ 
    742     x_unit = 'nm' 
    743     y_unit = 'pol' 
    744  
    745     def __init__(self, x=None, y=None, lam=None, dx=None, dy=None, dlam=None): 
     700class Data1D(plottable_1D, DataInfo): 
     701    """ 
     702    1D data class 
     703    """ 
     704    def __init__(self, x=None, y=None, dx=None, dy=None, lam=None, dlam=None, isSesans=None): 
    746705        DataInfo.__init__(self) 
    747         plottable_sesans1D.__init__(self, x, y, lam, dx, dy, dlam) 
     706        plottable_1D.__init__(self, x, y, dx, dy,None, None, lam, dlam) 
     707        self.isSesans = isSesans 
     708        try: 
     709            if self.isSesans: # the data is SESANS 
     710                self.x_unit = 'A' 
     711                self.y_unit = 'pol' 
     712            elif not self.isSesans: # the data is SANS 
     713                self.x_unit = '1/A' 
     714                self.y_unit = '1/cm' 
     715        except: # the data is not recognized/supported, and the user is notified 
     716            raise(TypeError, 'data not recognized, check documentation for supported 1D data formats') 
    748717 
    749718    def __str__(self): 
     
    759728        return _str 
    760729 
    761     def clone_without_data(self, length=0, clone=None): 
    762         """ 
    763         Clone the current object, without copying the data (which 
    764         will be filled out by a subsequent operation). 
    765         The data arrays will be initialized to zero. 
    766  
    767         :param length: length of the data array to be initialized 
    768         :param clone: if provided, the data will be copied to clone 
    769         """ 
    770         from copy import deepcopy 
    771         if clone is None or not issubclass(clone.__class__, Data1D): 
    772             x = numpy.zeros(length) 
    773             dx = numpy.zeros(length) 
    774             y = numpy.zeros(length) 
    775             dy = numpy.zeros(length) 
    776             clone = Data1D(x, y, dx=dx, dy=dy) 
    777  
    778         clone.title = self.title 
    779         clone.run = self.run 
    780         clone.filename = self.filename 
    781         clone.instrument = self.instrument 
    782         clone.notes = deepcopy(self.notes) 
    783         clone.process = deepcopy(self.process) 
    784         clone.detector = deepcopy(self.detector) 
    785         clone.sample = deepcopy(self.sample) 
    786         clone.source = deepcopy(self.source) 
    787         clone.collimation = deepcopy(self.collimation) 
    788         clone.trans_spectrum = deepcopy(self.trans_spectrum) 
    789         clone.meta_data = deepcopy(self.meta_data) 
    790         clone.errors = deepcopy(self.errors) 
    791  
    792         return clone 
    793  
    794 class Data1D(plottable_1D, DataInfo): 
    795     """ 
    796     1D data class 
    797     """ 
    798     x_unit = '1/A' 
    799     y_unit = '1/cm' 
    800  
    801     def __init__(self, x, y, dx=None, dy=None): 
    802         DataInfo.__init__(self) 
    803         plottable_1D.__init__(self, x, y, dx, dy) 
    804  
    805     def __str__(self): 
    806         """ 
    807         Nice printout 
    808         """ 
    809         _str = "%s\n" % DataInfo.__str__(self) 
    810         _str += "Data:\n" 
    811         _str += "   Type:         %s\n" % self.__class__.__name__ 
    812         _str += "   X-axis:       %s\t[%s]\n" % (self._xaxis, self._xunit) 
    813         _str += "   Y-axis:       %s\t[%s]\n" % (self._yaxis, self._yunit) 
    814         _str += "   Length:       %g\n" % len(self.x) 
    815         return _str 
    816  
    817730    def is_slit_smeared(self): 
    818731        """ 
     
    843756            y = numpy.zeros(length) 
    844757            dy = numpy.zeros(length) 
    845             clone = Data1D(x, y, dx=dx, dy=dy) 
     758            lam = numpy.zeros(length) 
     759            dlam = numpy.zeros(length) 
     760            clone = Data1D(x, y, lam=lam, dx=dx, dy=dy, dlam=dlam) 
    846761 
    847762        clone.title = self.title 
     
    1018933    ## Vector of Q-values at the center of each bin in y 
    1019934    y_bins = None 
     935    ## No 2D SESANS data as of yet. Always set it to False 
     936    isSesans = False 
    1020937 
    1021938    def __init__(self, data=None, err_data=None, qx_data=None, 
    1022939                 qy_data=None, q_data=None, mask=None, 
    1023940                 dqx_data=None, dqy_data=None): 
    1024         self.y_bins = [] 
    1025         self.x_bins = [] 
    1026941        DataInfo.__init__(self) 
    1027942        plottable_2D.__init__(self, data, err_data, qx_data, 
    1028943                              qy_data, q_data, mask, dqx_data, dqy_data) 
     944        self.y_bins = [] 
     945        self.x_bins = [] 
     946 
    1029947        if len(self.detector) > 0: 
    1030948            raise RuntimeError, "Data2D: Detector bank already filled at init" 
     
    12651183    final_dataset.xmin = data.xmin 
    12661184    final_dataset.ymin = data.ymin 
     1185    final_dataset.isSesans = datainfo.isSesans 
    12671186    final_dataset.title = datainfo.title 
    12681187    final_dataset.run = datainfo.run 
  • src/sas/sascalc/dataloader/readers/cansas_constants.py

    r250fec92 rad4632c  
    133133               "variable" : None, 
    134134               "children" : {"Idata" : SASDATA_IDATA, 
     135                             "Sesans": {"storeas": "content"}, 
     136                             "zacceptance": {"storeas": "float"}, 
    135137                             "<any>" : ANY 
    136138                            } 
  • src/sas/sascalc/dataloader/readers/cansas_reader.py

    r0639476 r8434365  
    2020import inspect 
    2121# For saving individual sections of data 
    22 from sas.sascalc.dataloader.data_info import Data1D, DataInfo, plottable_1D 
    23 from sas.sascalc.dataloader.data_info import Collimation, TransmissionSpectrum, Detector, Process, Aperture 
    24 from sas.sascalc.dataloader.data_info import combine_data_info_with_plottable as combine_data 
     22from sas.sascalc.dataloader.data_info import Data1D, Data2D, DataInfo, \ 
     23    plottable_1D, plottable_2D 
     24from sas.sascalc.dataloader.data_info import Collimation, TransmissionSpectrum, \ 
     25    Detector, Process, Aperture 
     26from sas.sascalc.dataloader.data_info import \ 
     27    combine_data_info_with_plottable as combine_data 
    2528import sas.sascalc.dataloader.readers.xml_reader as xml_reader 
    2629from sas.sascalc.dataloader.readers.xml_reader import XMLreader 
     
    5659        The CanSAS reader requires PyXML 0.8.4 or later. 
    5760    """ 
    58     ## CanSAS version - defaults to version 1.0 
     61    # CanSAS version - defaults to version 1.0 
    5962    cansas_version = "1.0" 
    6063    base_ns = "{cansas1d/1.0}" 
     
    6366    invalid = True 
    6467    frm = "" 
    65     ## Log messages and errors 
     68    # Log messages and errors 
    6669    logging = None 
    6770    errors = set() 
    68     ## Namespace hierarchy for current xml_file object 
     71    # Namespace hierarchy for current xml_file object 
    6972    names = None 
    7073    ns_list = None 
    71     ## Temporary storage location for loading multiple data sets in a single file 
     74    # Temporary storage location for loading multiple data sets in a single file 
    7275    current_datainfo = None 
    7376    current_dataset = None 
    7477    current_data1d = None 
    7578    data = None 
    76     ## List of data1D objects to be sent back to SasView 
     79    # List of data1D objects to be sent back to SasView 
    7780    output = None 
    78     ## Wildcards 
     81    # Wildcards 
    7982    type = ["XML files (*.xml)|*.xml", "SasView Save Files (*.svs)|*.svs"] 
    80     ## List of allowed extensions 
     83    # List of allowed extensions 
    8184    ext = ['.xml', '.XML', '.svs', '.SVS'] 
    82     ## Flag to bypass extension check 
     85    # Flag to bypass extension check 
    8386    allow_all = True 
    8487 
     
    220223                self.parent_class = tagname_original 
    221224                if tagname == 'SASdata': 
    222                     self._initialize_new_data_set() 
    223                 ## Recursion step to access data within the group 
     225                    self._initialize_new_data_set(node) 
     226                    if isinstance(self.current_dataset, plottable_2D): 
     227                        x_bins = attr.get("x_bins", "") 
     228                        y_bins = attr.get("y_bins", "") 
     229                        if x_bins is not "" and y_bins is not "": 
     230                            self.current_dataset.shape = (x_bins, y_bins) 
     231                        else: 
     232                            self.current_dataset.shape = () 
     233                # Recursion step to access data within the group 
    224234                self._parse_entry(node, True) 
    225235                if tagname == "SASsample": 
     
    234244                self.add_intermediate() 
    235245            else: 
    236                 data_point, unit = self._get_node_value(node, tagname) 
    237  
    238                 ## If this is a dataset, store the data appropriately 
     246                if isinstance(self.current_dataset, plottable_2D): 
     247                    data_point = node.text 
     248                    unit = attr.get('unit', '') 
     249                else: 
     250                    data_point, unit = self._get_node_value(node, tagname) 
     251 
     252                # If this is a dataset, store the data appropriately 
    239253                if tagname == 'Run': 
    240254                    self.current_datainfo.run_name[data_point] = name 
     
    245259                    self.current_datainfo.notes.append(data_point) 
    246260 
    247                 ## I and Q Data 
    248                 elif tagname == 'I': 
    249                     self.current_dataset.yaxis("Intensity", unit) 
     261                # I and Q - 1D data 
     262                elif tagname == 'I' and isinstance(self.current_dataset, plottable_1D): 
     263                    unit_list = unit.split("|") 
     264                    if len(unit_list) > 1: 
     265                        self.current_dataset.yaxis(unit_list[0].strip(), 
     266                                                   unit_list[1].strip()) 
     267                    else: 
     268                        self.current_dataset.yaxis("Intensity", unit) 
    250269                    self.current_dataset.y = np.append(self.current_dataset.y, data_point) 
    251                 elif tagname == 'Idev': 
     270                elif tagname == 'Idev' and isinstance(self.current_dataset, plottable_1D): 
    252271                    self.current_dataset.dy = np.append(self.current_dataset.dy, data_point) 
    253272                elif tagname == 'Q': 
    254                     self.current_dataset.xaxis("Q", unit) 
     273                    unit_list = unit.split("|") 
     274                    if len(unit_list) > 1: 
     275                        self.current_dataset.xaxis(unit_list[0].strip(), 
     276                                                   unit_list[1].strip()) 
     277                    else: 
     278                        self.current_dataset.xaxis("Q", unit) 
    255279                    self.current_dataset.x = np.append(self.current_dataset.x, data_point) 
    256280                elif tagname == 'Qdev': 
     
    264288                elif tagname == 'Shadowfactor': 
    265289                    pass 
    266  
    267                 ## Sample Information 
     290                elif tagname == 'Sesans': 
     291                    self.current_datainfo.isSesans = bool(data_point) 
     292                elif tagname == 'zacceptance': 
     293                    self.current_datainfo.sample.zacceptance = (data_point, unit) 
     294 
     295                # I and Qx, Qy - 2D data 
     296                elif tagname == 'I' and isinstance(self.current_dataset, plottable_2D): 
     297                    self.current_dataset.yaxis("Intensity", unit) 
     298                    self.current_dataset.data = np.fromstring(data_point, dtype=float, sep=",") 
     299                elif tagname == 'Idev' and isinstance(self.current_dataset, plottable_2D): 
     300                    self.current_dataset.err_data = np.fromstring(data_point, dtype=float, sep=",") 
     301                elif tagname == 'Qx': 
     302                    self.current_dataset.xaxis("Qx", unit) 
     303                    self.current_dataset.qx_data = np.fromstring(data_point, dtype=float, sep=",") 
     304                elif tagname == 'Qy': 
     305                    self.current_dataset.yaxis("Qy", unit) 
     306                    self.current_dataset.qy_data = np.fromstring(data_point, dtype=float, sep=",") 
     307                elif tagname == 'Qxdev': 
     308                    self.current_dataset.xaxis("Qxdev", unit) 
     309                    self.current_dataset.dqx_data = np.fromstring(data_point, dtype=float, sep=",") 
     310                elif tagname == 'Qydev': 
     311                    self.current_dataset.yaxis("Qydev", unit) 
     312                    self.current_dataset.dqy_data = np.fromstring(data_point, dtype=float, sep=",") 
     313                elif tagname == 'Mask': 
     314                    inter = [item == "1" for item in data_point.split(",")] 
     315                    self.current_dataset.mask = np.asarray(inter, dtype=bool) 
     316 
     317                # Sample Information 
    268318                elif tagname == 'ID' and self.parent_class == 'SASsample': 
    269319                    self.current_datainfo.sample.ID = data_point 
     
    299349                    self.current_datainfo.sample.orientation_unit = unit 
    300350 
    301                 ## Instrumental Information 
     351                # Instrumental Information 
    302352                elif tagname == 'name' and self.parent_class == 'SASinstrument': 
    303353                    self.current_datainfo.instrument = data_point 
    304                 ## Detector Information 
     354                # Detector Information 
    305355                elif tagname == 'name' and self.parent_class == 'SASdetector': 
    306356                    self.detector.name = data_point 
     
    347397                    self.detector.orientation.z = data_point 
    348398                    self.detector.orientation_unit = unit 
    349                 ## Collimation and Aperture 
     399                # Collimation and Aperture 
    350400                elif tagname == 'length' and self.parent_class == 'SAScollimation': 
    351401                    self.collimation.length = data_point 
     
    366416                    self.collimation.size_unit = unit 
    367417 
    368                 ## Process Information 
     418                # Process Information 
    369419                elif tagname == 'name' and self.parent_class == 'SASprocess': 
    370420                    self.process.name = data_point 
     
    386436                    self.process.term.append(dic) 
    387437 
    388                 ## Transmission Spectrum 
     438                # Transmission Spectrum 
    389439                elif tagname == 'T' and self.parent_class == 'Tdata': 
    390440                    self.transspectrum.transmission = np.append(self.transspectrum.transmission, data_point) 
     
    397447                    self.transspectrum.wavelength_unit = unit 
    398448 
    399                 ## Source Information 
     449                # Source Information 
    400450                elif tagname == 'wavelength' and (self.parent_class == 'SASsource' or self.parent_class == 'SASData'): 
    401451                    self.current_datainfo.source.wavelength = data_point 
     
    424474                    self.current_datainfo.source.beam_shape = data_point 
    425475 
    426                 ## Everything else goes in meta_data 
     476                # Everything else goes in meta_data 
    427477                else: 
    428478                    new_key = self._create_unique_key(self.current_datainfo.meta_data, tagname) 
     
    438488            self.add_data_set() 
    439489            empty = None 
    440             if self.output[0].dx is not None: 
    441                 self.output[0].dxl = np.empty(0) 
    442                 self.output[0].dxw = np.empty(0) 
    443             else: 
    444                 self.output[0].dx = np.empty(0) 
    445490            return self.output[0], empty 
    446491 
     
    514559        self.current_datainfo = DataInfo() 
    515560 
    516     def _initialize_new_data_set(self, parent_list=None): 
     561    def _initialize_new_data_set(self, node=None): 
    517562        """ 
    518563        A private class method to generate a new 1D data object. 
    519564        Outside methods should call add_data_set() to be sure any existing data is stored properly. 
    520565 
    521         :param parent_list: List of names of parent elements 
    522         """ 
    523  
    524         if parent_list is None: 
    525             parent_list = [] 
     566        :param node: XML node to determine if 1D or 2D data 
     567        """ 
    526568        x = np.array(0) 
    527569        y = np.array(0) 
     570        for child in node: 
     571            if child.tag.replace(self.base_ns, "") == "Idata": 
     572                for i_child in child: 
     573                    if i_child.tag.replace(self.base_ns, "") == "Qx": 
     574                        self.current_dataset = plottable_2D() 
     575                        return 
    528576        self.current_dataset = plottable_1D(x, y) 
    529577 
     
    560608        """ 
    561609 
    562         ## Append errors to dataset and reset class errors 
     610        # Append errors to dataset and reset class errors 
    563611        self.current_datainfo.errors = set() 
    564612        for error in self.errors: 
     
    566614        self.errors.clear() 
    567615 
    568         ## Combine all plottables with datainfo and append each to output 
    569         ## Type cast data arrays to float64 and find min/max as appropriate 
     616        # Combine all plottables with datainfo and append each to output 
     617        # Type cast data arrays to float64 and find min/max as appropriate 
    570618        for dataset in self.data: 
    571             if dataset.x is not None: 
    572                 dataset.x = np.delete(dataset.x, [0]) 
    573                 dataset.x = dataset.x.astype(np.float64) 
    574                 dataset.xmin = np.min(dataset.x) 
    575                 dataset.xmax = np.max(dataset.x) 
    576             if dataset.y is not None: 
    577                 dataset.y = np.delete(dataset.y, [0]) 
    578                 dataset.y = dataset.y.astype(np.float64) 
    579                 dataset.ymin = np.min(dataset.y) 
    580                 dataset.ymax = np.max(dataset.y) 
    581             if dataset.dx is not None: 
    582                 dataset.dx = np.delete(dataset.dx, [0]) 
    583                 dataset.dx = dataset.dx.astype(np.float64) 
    584             if dataset.dxl is not None: 
    585                 dataset.dxl = np.delete(dataset.dxl, [0]) 
    586                 dataset.dxl = dataset.dxl.astype(np.float64) 
    587             if dataset.dxw is not None: 
    588                 dataset.dxw = np.delete(dataset.dxw, [0]) 
    589                 dataset.dxw = dataset.dxw.astype(np.float64) 
    590             if dataset.dy is not None: 
    591                 dataset.dy = np.delete(dataset.dy, [0]) 
    592                 dataset.dy = dataset.dy.astype(np.float64) 
    593             np.trim_zeros(dataset.x) 
    594             np.trim_zeros(dataset.y) 
    595             np.trim_zeros(dataset.dy) 
     619            if isinstance(dataset, plottable_1D): 
     620                if dataset.x is not None: 
     621                    dataset.x = np.delete(dataset.x, [0]) 
     622                    dataset.x = dataset.x.astype(np.float64) 
     623                    dataset.xmin = np.min(dataset.x) 
     624                    dataset.xmax = np.max(dataset.x) 
     625                if dataset.y is not None: 
     626                    dataset.y = np.delete(dataset.y, [0]) 
     627                    dataset.y = dataset.y.astype(np.float64) 
     628                    dataset.ymin = np.min(dataset.y) 
     629                    dataset.ymax = np.max(dataset.y) 
     630                if dataset.dx is not None: 
     631                    dataset.dx = np.delete(dataset.dx, [0]) 
     632                    dataset.dx = dataset.dx.astype(np.float64) 
     633                if dataset.dxl is not None: 
     634                    dataset.dxl = np.delete(dataset.dxl, [0]) 
     635                    dataset.dxl = dataset.dxl.astype(np.float64) 
     636                if dataset.dxw is not None: 
     637                    dataset.dxw = np.delete(dataset.dxw, [0]) 
     638                    dataset.dxw = dataset.dxw.astype(np.float64) 
     639                if dataset.dy is not None: 
     640                    dataset.dy = np.delete(dataset.dy, [0]) 
     641                    dataset.dy = dataset.dy.astype(np.float64) 
     642                np.trim_zeros(dataset.x) 
     643                np.trim_zeros(dataset.y) 
     644                np.trim_zeros(dataset.dy) 
     645            elif isinstance(dataset, plottable_2D): 
     646                dataset.data = dataset.data.astype(np.float64) 
     647                dataset.qx_data = dataset.qx_data.astype(np.float64) 
     648                dataset.xmin = np.min(dataset.qx_data) 
     649                dataset.xmax = np.max(dataset.qx_data) 
     650                dataset.qy_data = dataset.qy_data.astype(np.float64) 
     651                dataset.ymin = np.min(dataset.qy_data) 
     652                dataset.ymax = np.max(dataset.qy_data) 
     653                dataset.q_data = np.sqrt(dataset.qx_data * dataset.qx_data 
     654                                         + dataset.qy_data * dataset.qy_data) 
     655                if dataset.err_data is not None: 
     656                    dataset.err_data = dataset.err_data.astype(np.float64) 
     657                if dataset.dqx_data is not None: 
     658                    dataset.dqx_data = dataset.dqx_data.astype(np.float64) 
     659                if dataset.dqy_data is not None: 
     660                    dataset.dqy_data = dataset.dqy_data.astype(np.float64) 
     661                if dataset.mask is not None: 
     662                    dataset.mask = dataset.mask.astype(dtype=bool) 
     663 
     664                if len(dataset.shape) == 2: 
     665                    n_rows, n_cols = dataset.shape 
     666                    dataset.y_bins = dataset.qy_data[0::int(n_cols)] 
     667                    dataset.x_bins = dataset.qx_data[:int(n_cols)] 
     668                    dataset.data = dataset.data.flatten() 
     669                else: 
     670                    dataset.y_bins = [] 
     671                    dataset.x_bins = [] 
     672                    dataset.data = dataset.data.flatten() 
     673 
    596674            final_dataset = combine_data(dataset, self.current_datainfo) 
    597675            self.output.append(final_dataset) 
     
    693771                        and local_unit.lower() != "none": 
    694772                    if HAS_CONVERTER == True: 
    695                         ## Check local units - bad units raise KeyError 
     773                        # Check local units - bad units raise KeyError 
    696774                        data_conv_q = Converter(local_unit) 
    697775                        value_unit = default_unit 
     
    740818        A method to check all resolution data sets are the same size as I and Q 
    741819        """ 
    742         dql_exists = False 
    743         dqw_exists = False 
    744         dq_exists = False 
    745         di_exists = False 
    746         if self.current_dataset.dxl is not None: 
    747             dql_exists = True 
    748         if self.current_dataset.dxw is not None: 
    749             dqw_exists = True 
    750         if self.current_dataset.dx is not None: 
    751             dq_exists = True 
    752         if self.current_dataset.dy is not None: 
    753             di_exists = True 
    754         if dqw_exists and not dql_exists: 
    755             array_size = self.current_dataset.dxw.size - 1 
    756             self.current_dataset.dxl = np.append(self.current_dataset.dxl, np.zeros([array_size])) 
    757         elif dql_exists and not dqw_exists: 
    758             array_size = self.current_dataset.dxl.size - 1 
    759             self.current_dataset.dxw = np.append(self.current_dataset.dxw, np.zeros([array_size])) 
    760         elif not dql_exists and not dqw_exists and not dq_exists: 
    761             array_size = self.current_dataset.x.size - 1 
    762             self.current_dataset.dx = np.append(self.current_dataset.dx, np.zeros([array_size])) 
    763         if not di_exists: 
    764             array_size = self.current_dataset.y.size - 1 
    765             self.current_dataset.dy = np.append(self.current_dataset.dy, np.zeros([array_size])) 
    766  
     820        if isinstance(self.current_dataset, plottable_1D): 
     821            dql_exists = False 
     822            dqw_exists = False 
     823            dq_exists = False 
     824            di_exists = False 
     825            if self.current_dataset.dxl is not None: 
     826                dql_exists = True 
     827            if self.current_dataset.dxw is not None: 
     828                dqw_exists = True 
     829            if self.current_dataset.dx is not None: 
     830                dq_exists = True 
     831            if self.current_dataset.dy is not None: 
     832                di_exists = True 
     833            if dqw_exists and not dql_exists: 
     834                array_size = self.current_dataset.dxw.size - 1 
     835                self.current_dataset.dxl = np.append(self.current_dataset.dxl, 
     836                                                     np.zeros([array_size])) 
     837            elif dql_exists and not dqw_exists: 
     838                array_size = self.current_dataset.dxl.size - 1 
     839                self.current_dataset.dxw = np.append(self.current_dataset.dxw, 
     840                                                     np.zeros([array_size])) 
     841            elif not dql_exists and not dqw_exists and not dq_exists: 
     842                array_size = self.current_dataset.x.size - 1 
     843                self.current_dataset.dx = np.append(self.current_dataset.dx, 
     844                                                    np.zeros([array_size])) 
     845            if not di_exists: 
     846                array_size = self.current_dataset.y.size - 1 
     847                self.current_dataset.dy = np.append(self.current_dataset.dy, 
     848                                                    np.zeros([array_size])) 
     849        elif isinstance(self.current_dataset, plottable_2D): 
     850            dqx_exists = False 
     851            dqy_exists = False 
     852            di_exists = False 
     853            mask_exists = False 
     854            if self.current_dataset.dqx_data is not None: 
     855                dqx_exists = True 
     856            if self.current_dataset.dqy_data is not None: 
     857                dqy_exists = True 
     858            if self.current_dataset.err_data is not None: 
     859                di_exists = True 
     860            if self.current_dataset.mask is not None: 
     861                mask_exists = True 
     862            if not dqy_exists: 
     863                array_size = self.current_dataset.qy_data.size - 1 
     864                self.current_dataset.dqy_data = np.append( 
     865                    self.current_dataset.dqy_data, np.zeros([array_size])) 
     866            if not dqx_exists: 
     867                array_size = self.current_dataset.qx_data.size - 1 
     868                self.current_dataset.dqx_data = np.append( 
     869                    self.current_dataset.dqx_data, np.zeros([array_size])) 
     870            if not di_exists: 
     871                array_size = self.current_dataset.data.size - 1 
     872                self.current_dataset.err_data = np.append( 
     873                    self.current_dataset.err_data, np.zeros([array_size])) 
     874            if not mask_exists: 
     875                array_size = self.current_dataset.data.size - 1 
     876                self.current_dataset.mask = np.append( 
     877                    self.current_dataset.mask, 
     878                    np.ones([array_size] ,dtype=bool)) 
    767879 
    768880    ####### All methods below are for writing CanSAS XML files ####### 
    769  
    770881 
    771882    def write(self, filename, datainfo): 
     
    792903        :param datainfo: Data1D object 
    793904        """ 
    794         if not issubclass(datainfo.__class__, Data1D): 
    795             raise RuntimeError, "The cansas writer expects a Data1D instance" 
     905        is_2d = False 
     906        if issubclass(datainfo.__class__, Data2D): 
     907            is_2d = True 
    796908 
    797909        # Get PIs and create root element 
     
    813925        self._write_run_names(datainfo, entry_node) 
    814926        # Add Data info to SASEntry 
    815         self._write_data(datainfo, entry_node) 
     927        if is_2d: 
     928            self._write_data_2d(datainfo, entry_node) 
     929        else: 
     930            self._write_data(datainfo, entry_node) 
    816931        # Transmission Spectrum Info 
    817         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) 
    818934        # Sample info 
    819935        self._write_sample_info(datainfo, entry_node) 
     
    9071023    def _write_data(self, datainfo, entry_node): 
    9081024        """ 
    909         Writes the I and Q data to the XML file 
     1025        Writes 1D I and Q data to the XML file 
    9101026 
    9111027        :param datainfo: The Data1D object the information is coming from 
     
    9191035            node.append(point) 
    9201036            self.write_node(point, "Q", datainfo.x[i], 
    921                             {'unit': datainfo.x_unit}) 
     1037                            {'unit': datainfo._xaxis + " | " + datainfo._xunit}) 
    9221038            if len(datainfo.y) >= i: 
    9231039                self.write_node(point, "I", datainfo.y[i], 
    924                                 {'unit': datainfo.y_unit}) 
     1040                                {'unit': datainfo._yaxis + " | " + datainfo._yunit}) 
    9251041            if datainfo.dy is not None and len(datainfo.dy) > i: 
    9261042                self.write_node(point, "Idev", datainfo.dy[i], 
    927                                 {'unit': datainfo.y_unit}) 
     1043                                {'unit': datainfo._yaxis + " | " + datainfo._yunit}) 
    9281044            if datainfo.dx is not None and len(datainfo.dx) > i: 
    9291045                self.write_node(point, "Qdev", datainfo.dx[i], 
    930                                 {'unit': datainfo.x_unit}) 
     1046                                {'unit': datainfo._xaxis + " | " + datainfo._xunit}) 
    9311047            if datainfo.dxw is not None and len(datainfo.dxw) > i: 
    9321048                self.write_node(point, "dQw", datainfo.dxw[i], 
    933                                 {'unit': datainfo.x_unit}) 
     1049                                {'unit': datainfo._xaxis + " | " + datainfo._xunit}) 
    9341050            if datainfo.dxl is not None and len(datainfo.dxl) > i: 
    9351051                self.write_node(point, "dQl", datainfo.dxl[i], 
    936                                 {'unit': datainfo.x_unit}) 
     1052                                {'unit': datainfo._xaxis + " | " + datainfo._xunit}) 
     1053        if datainfo.isSesans: 
     1054            sesans = self.create_element("Sesans") 
     1055            sesans.text = str(datainfo.isSesans) 
     1056            node.append(sesans) 
     1057            self.write_node(node, "zacceptance", datainfo.sample.zacceptance[0], 
     1058                             {'unit': datainfo.sample.zacceptance[1]}) 
     1059 
     1060 
     1061    def _write_data_2d(self, datainfo, entry_node): 
     1062        """ 
     1063        Writes 2D data to the XML file 
     1064 
     1065        :param datainfo: The Data2D object the information is coming from 
     1066        :param entry_node: lxml node ElementTree object to be appended to 
     1067        """ 
     1068        attr = {} 
     1069        if datainfo.data.shape: 
     1070            attr["x_bins"] = str(len(datainfo.x_bins)) 
     1071            attr["y_bins"] = str(len(datainfo.y_bins)) 
     1072        node = self.create_element("SASdata", attr) 
     1073        self.append(node, entry_node) 
     1074 
     1075        point = self.create_element("Idata") 
     1076        node.append(point) 
     1077        qx = ','.join([str(datainfo.qx_data[i]) for i in xrange(len(datainfo.qx_data))]) 
     1078        qy = ','.join([str(datainfo.qy_data[i]) for i in xrange(len(datainfo.qy_data))]) 
     1079        intensity = ','.join([str(datainfo.data[i]) for i in xrange(len(datainfo.data))]) 
     1080 
     1081        self.write_node(point, "Qx", qx, 
     1082                        {'unit': datainfo._xunit}) 
     1083        self.write_node(point, "Qy", qy, 
     1084                        {'unit': datainfo._yunit}) 
     1085        self.write_node(point, "I", intensity, 
     1086                        {'unit': datainfo._zunit}) 
     1087        if datainfo.err_data is not None: 
     1088            err = ','.join([str(datainfo.err_data[i]) for i in 
     1089                            xrange(len(datainfo.err_data))]) 
     1090            self.write_node(point, "Idev", err, 
     1091                            {'unit': datainfo._zunit}) 
     1092        if datainfo.dqy_data is not None: 
     1093            dqy = ','.join([str(datainfo.dqy_data[i]) for i in 
     1094                            xrange(len(datainfo.dqy_data))]) 
     1095            self.write_node(point, "Qydev", dqy, 
     1096                            {'unit': datainfo._yunit}) 
     1097        if datainfo.dqx_data is not None: 
     1098            dqx = ','.join([str(datainfo.dqx_data[i]) for i in 
     1099                            xrange(len(datainfo.dqx_data))]) 
     1100            self.write_node(point, "Qxdev", dqx, 
     1101                            {'unit': datainfo._xunit}) 
     1102        if datainfo.mask is not None: 
     1103            mask = ','.join( 
     1104                ["1" if datainfo.mask[i] else "0" 
     1105                 for i in xrange(len(datainfo.mask))]) 
     1106            self.write_node(point, "Mask", mask) 
    9371107 
    9381108    def _write_trans_spectrum(self, datainfo, entry_node): 
  • src/sas/sascalc/dataloader/readers/cansas_reader_HDF5.py

    rbbd0f37 rc94280c  
    99import sys 
    1010 
    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 
     11from sas.sascalc.dataloader.data_info import plottable_1D, plottable_2D,\ 
     12    Data1D, Data2D, DataInfo, Process, Aperture, Collimation, \ 
     13    TransmissionSpectrum, Detector 
    1314from sas.sascalc.dataloader.data_info import combine_data_info_with_plottable 
    14  
    1515 
    1616 
    1717class Reader(): 
    1818    """ 
    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). 
    2527 
    2628    Also supports reading NXcanSAS formatted HDF5 files 
     
    3032    """ 
    3133 
    32     ## CanSAS version 
     34    # CanSAS version 
    3335    cansas_version = 2.0 
    34     ## Logged warnings or messages 
     36    # Logged warnings or messages 
    3537    logging = None 
    36     ## List of errors for the current data set 
     38    # List of errors for the current data set 
    3739    errors = None 
    38     ## Raw file contents to be processed 
     40    # Raw file contents to be processed 
    3941    raw_data = None 
    40     ## Data info currently being read in 
     42    # Data info currently being read in 
    4143    current_datainfo = None 
    42     ## SASdata set currently being read in 
     44    # SASdata set currently being read in 
    4345    current_dataset = None 
    44     ## List of plottable1D objects that should be linked to the current_datainfo 
     46    # List of plottable1D objects that should be linked to the current_datainfo 
    4547    data1d = None 
    46     ## List of plottable2D objects that should be linked to the current_datainfo 
     48    # List of plottable2D objects that should be linked to the current_datainfo 
    4749    data2d = None 
    48     ## Data type name 
     50    # Data type name 
    4951    type_name = "CanSAS 2.0" 
    50     ## Wildcards 
     52    # Wildcards 
    5153    type = ["CanSAS 2.0 HDF5 Files (*.h5)|*.h5"] 
    52     ## List of allowed extensions 
     54    # List of allowed extensions 
    5355    ext = ['.h5', '.H5'] 
    54     ## Flag to bypass extension check 
    55     allow_all = False 
    56     ## List of files to return 
     56    # Flag to bypass extension check 
     57    allow_all = True 
     58    # List of files to return 
    5759    output = None 
    5860 
     
    6466        :return: List of Data1D/2D objects and/or a list of errors. 
    6567        """ 
    66         ## Reinitialize the class when loading a new data file to reset all class variables 
     68        # Reinitialize when loading a new data file to reset all class variables 
    6769        self.reset_class_variables() 
    68         ## Check that the file exists 
     70        # Check that the file exists 
    6971        if os.path.isfile(filename): 
    7072            basename = os.path.basename(filename) 
     
    7274            # If the file type is not allowed, return empty list 
    7375            if extension in self.ext or self.allow_all: 
    74                 ## Load the data file 
     76                # Load the data file 
    7577                self.raw_data = h5py.File(filename, 'r') 
    76                 ## Read in all child elements of top level SASroot 
     78                # Read in all child elements of top level SASroot 
    7779                self.read_children(self.raw_data, []) 
    78                 ## Add the last data set to the list of outputs 
     80                # Add the last data set to the list of outputs 
    7981                self.add_data_set() 
    80                 ## Close the data file 
     82                # Close the data file 
    8183                self.raw_data.close() 
    82         ## Return data set(s) 
     84        # Return data set(s) 
    8385        return self.output 
    8486 
     
    110112        """ 
    111113 
    112         ## Loop through each element of the parent and process accordingly 
     114        # Loop through each element of the parent and process accordingly 
    113115        for key in data.keys(): 
    114             ## Get all information for the current key 
     116            # Get all information for the current key 
    115117            value = data.get(key) 
    116118            if value.attrs.get(u'canSAS_class') is not None: 
     
    126128                self.parent_class = class_name 
    127129                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 
    129132                if class_prog.match(u'SASentry'): 
    130133                    self.add_data_set(key) 
    131134                elif class_prog.match(u'SASdata'): 
    132135                    self._initialize_new_data_set(parent_list) 
    133                 ## Recursion step to access data within the group 
     136                # Recursion step to access data within the group 
    134137                self.read_children(value, parent_list) 
    135138                self.add_intermediate() 
     
    137140 
    138141            elif isinstance(value, h5py.Dataset): 
    139                 ## If this is a dataset, store the data appropriately 
     142                # If this is a dataset, store the data appropriately 
    140143                data_set = data[key][:] 
    141144                unit = self._get_unit(value) 
    142145 
    143                 ## I and Q Data 
     146                # I and Q Data 
    144147                if key == u'I': 
    145                     if type(self.current_dataset) is plottable_2D: 
     148                    if isinstance(self.current_dataset, plottable_2D): 
    146149                        self.current_dataset.data = data_set 
    147150                        self.current_dataset.zaxis("Intensity", unit) 
     
    151154                    continue 
    152155                elif key == u'Idev': 
    153                     if type(self.current_dataset) is plottable_2D: 
     156                    if isinstance(self.current_dataset, plottable_2D): 
    154157                        self.current_dataset.err_data = data_set.flatten() 
    155158                    else: 
     
    158161                elif key == u'Q': 
    159162                    self.current_dataset.xaxis("Q", unit) 
    160                     if type(self.current_dataset) is plottable_2D: 
     163                    if isinstance(self.current_dataset, plottable_2D): 
    161164                        self.current_dataset.q = data_set.flatten() 
    162165                    else: 
     
    166169                    self.current_dataset.dx = data_set.flatten() 
    167170                    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 
    168177                elif key == u'Qy': 
    169178                    self.current_dataset.yaxis("Q_y", unit) 
     
    183192                    self.current_dataset.mask = data_set.flatten() 
    184193                    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 
    185208 
    186209                for data_point in data_set: 
    187                     ## Top Level Meta Data 
     210                    # Top Level Meta Data 
    188211                    if key == u'definition': 
    189212                        self.current_datainfo.meta_data['reader'] = data_point 
     
    201224                        self.current_datainfo.notes.append(data_point) 
    202225 
    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': 
    205229                        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': 
    207232                        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'): 
    209238                        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'): 
    211241                        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'): 
    213244                        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'): 
    215247                        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'): 
    217250                        self.current_datainfo.sample.position.y = data_point 
    218                     elif key == u'polar_angle' and self.parent_class == u'SASsample': 
     251                    elif key == u'pitch' and self.parent_class == u'SASsample': 
    219252                        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': 
    221256                        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'): 
    223259                        self.current_datainfo.sample.details.append(data_point) 
    224260 
    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'): 
    227264                        self.current_datainfo.instrument = data_point 
    228265                    elif key == u'name' and self.parent_class == u'SASdetector': 
     
    231268                        self.detector.distance = float(data_point) 
    232269                        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'): 
    234272                        self.detector.slit_length = float(data_point) 
    235273                        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'): 
    237276                        self.detector.offset.x = float(data_point) 
    238277                        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'): 
    240280                        self.detector.offset.y = float(data_point) 
    241281                        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'): 
    243284                        self.detector.orientation.x = float(data_point) 
    244285                        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': 
    246287                        self.detector.orientation.z = float(data_point) 
    247288                        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'): 
    249294                        self.detector.beam_center.x = float(data_point) 
    250295                        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'): 
    252298                        self.detector.beam_center.y = float(data_point) 
    253299                        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'): 
    255302                        self.detector.pixel_size.x = float(data_point) 
    256303                        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'): 
    258306                        self.detector.pixel_size.y = float(data_point) 
    259307                        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'): 
    261310                        self.collimation.length = data_point 
    262311                        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'): 
    264314                        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 
    268328                        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 
    270331                        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'): 
    274334                        self.process.description = data_point 
    275335                    elif key == u'date' and self.parent_class == u'SASprocess': 
    276336                        self.process.date = data_point 
     337                    elif key == u'term' and self.parent_class == u'SASprocess': 
     338                        self.process.term = data_point 
    277339                    elif self.parent_class == u'SASprocess': 
    278340                        self.process.notes.append(data_point) 
    279341 
    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'): 
    290345                        self.current_datainfo.source.wavelength = data_point 
    291346                        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'): 
    293349                        self.current_datainfo.source.wavelength = data_point 
    294350                        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'): 
    296353                        self.current_datainfo.source.wavelength_max = data_point 
    297354                        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'): 
    299357                        self.current_datainfo.source.wavelength_min = data_point 
    300358                        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'): 
    305367                        self.current_datainfo.source.beam_size.x = data_point 
    306368                        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'): 
    308371                        self.current_datainfo.source.beam_size.y = data_point 
    309372                        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'): 
    311375                        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'): 
    313378                        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'): 
    315381                        self.current_datainfo.sample.transmission = data_point 
    316382 
    317                     ## Everything else goes in meta_data 
     383                    # Everything else goes in meta_data 
    318384                    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) 
    320387                        self.current_datainfo.meta_data[new_key] = data_point 
    321388 
    322389            else: 
    323                 ## I don't know if this reachable code 
     390                # I don't know if this reachable code 
    324391                self.errors.add("ShouldNeverHappenException") 
    325392 
    326393    def add_intermediate(self): 
    327394        """ 
    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 
    331400        """ 
    332401 
     
    347416            self.aperture = Aperture() 
    348417        elif self.parent_class == u'SASdata': 
    349             if type(self.current_dataset) is plottable_2D: 
     418            if isinstance(self.current_dataset, plottable_2D): 
    350419                self.data2d.append(self.current_dataset) 
    351             elif type(self.current_dataset) is plottable_1D: 
     420            elif isinstance(self.current_dataset, plottable_1D): 
    352421                self.data1d.append(self.current_dataset) 
    353422 
    354423    def final_data_cleanup(self): 
    355424        """ 
    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 
    361431        if len(self.current_datainfo.trans_spectrum) > 0: 
    362432            spectrum_list = [] 
     
    364434                spectrum.transmission = np.delete(spectrum.transmission, [0]) 
    365435                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) 
    368440                spectrum.wavelength = np.delete(spectrum.wavelength, [0]) 
    369441                spectrum.wavelength = spectrum.wavelength.astype(np.float64) 
     
    372444            self.current_datainfo.trans_spectrum = spectrum_list 
    373445 
    374         ## Append errors to dataset and reset class errors 
     446        # Append errors to dataset and reset class errors 
    375447        self.current_datainfo.errors = self.errors 
    376448        self.errors.clear() 
    377449 
    378         ## Combine all plottables with datainfo and append each to output 
    379         ## Type cast data arrays to float64 and find min/max as appropriate 
     450        # Combine all plottables with datainfo and append each to output 
     451        # Type cast data arrays to float64 and find min/max as appropriate 
    380452        for dataset in self.data2d: 
    381453            dataset.data = dataset.data.astype(np.float64) 
     
    397469            zeros = np.ones(dataset.data.size, dtype=bool) 
    398470            try: 
    399                 for i in range (0, dataset.mask.size - 1): 
     471                for i in range(0, dataset.mask.size - 1): 
    400472                    zeros[i] = dataset.mask[i] 
    401473            except: 
    402474                self.errors.add(sys.exc_value) 
    403475            dataset.mask = zeros 
    404             ## Calculate the actual Q matrix 
     476            # Calculate the actual Q matrix 
    405477            try: 
    406478                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) 
    408483            except: 
    409484                dataset.q_data = None 
     
    415490                dataset.data = dataset.data.flatten() 
    416491 
    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) 
    418494            self.output.append(final_dataset) 
    419495 
     
    435511            if dataset.dy is not None: 
    436512                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) 
    438515            self.output.append(final_dataset) 
    439516 
    440517    def add_data_set(self, key=""): 
    441518        """ 
    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. 
    444522 
    445523        :param key: NeXus group name for current tree level 
     
    453531 
    454532 
    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. 
    459538 
    460539        :param parent_list: List of names of parent elements 
     
    473552    def _find_intermediate(self, parent_list, basename=""): 
    474553        """ 
    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 
    478558        :param basename: Approximate name of an entry to search for 
    479559        :return: 
     
    486566            top = top.get(parent) 
    487567        for key in top.keys(): 
    488             if (key_prog.match(key)): 
     568            if key_prog.match(key): 
    489569                entry = True 
    490570                break 
     
    516596        """ 
    517597        unit = value.attrs.get(u'units') 
    518         if unit == None: 
     598        if unit is None: 
    519599            unit = value.attrs.get(u'unit') 
    520         ## Convert the unit formats 
     600        # Convert the unit formats 
    521601        if unit == "1/A": 
    522602            unit = "A^{-1}" 
  • src/sas/sascalc/dataloader/readers/schema/cansas1d_invalid_v1_0.xsd

    r250fec92 raf08e55  
    2424 
    2525        <complexType name="IdataType"> 
     26                <xsd:choice> 
    2627                <sequence> 
    2728                        <element name="Q" minOccurs="1" maxOccurs="1"    type="tns:floatUnitType" /> 
     
    4041                        <xsd:any minOccurs="0" maxOccurs="unbounded" processContents="lax" namespace="##other" /> 
    4142                </sequence> 
     43                <sequence> 
     44                        <element name="Qx" minOccurs="1" maxOccurs="1"    type="tns:floatUnitType" /> 
     45                        <element name="Qy" minOccurs="1" maxOccurs="1"    type="tns:floatUnitType" /> 
     46                        <element name="I" minOccurs="1" maxOccurs="1"    type="tns:floatUnitType" /> 
     47                        <element name="Idev" minOccurs="0" maxOccurs="1" type="tns:floatUnitType" default="0" /> 
     48                        <element name="Qydev" minOccurs="0" maxOccurs="1" type="tns:floatUnitType" default="0" /> 
     49                        <element name="Qxdev" minOccurs="0" maxOccurs="1" type="tns:floatUnitType" default="0" /> 
     50                        <element name="Mask" minOccurs="0" maxOccurs="1" type="string" default="0" /> 
     51                </sequence> 
     52                </xsd:choice> 
    4253        </complexType> 
    4354         
     
    5162                <attribute name="name" type="string" use="optional" default="" /> 
    5263                <attribute name="timestamp" type="dateTime" use="optional" /> 
     64                <attribute name="x_bins" type="string" use="optional" /> 
     65                <attribute name="y_bins" type="string" use="optional" /> 
    5366        </complexType> 
    5467 
  • src/sas/sascalc/dataloader/readers/schema/cansas1d_invalid_v1_1.xsd

    r250fec92 raf08e55  
    2424 
    2525        <complexType name="IdataType"> 
     26                <xsd:choice> 
    2627                <sequence> 
    2728                        <element name="Q" minOccurs="1" maxOccurs="1"    type="tns:floatUnitType" /> 
     
    4041                        <xsd:any minOccurs="0" maxOccurs="unbounded" processContents="lax" namespace="##other" /> 
    4142                </sequence> 
     43                <sequence> 
     44                        <element name="Qx" minOccurs="1" maxOccurs="1"    type="tns:floatUnitType" /> 
     45                        <element name="Qy" minOccurs="1" maxOccurs="1"    type="tns:floatUnitType" /> 
     46                        <element name="I" minOccurs="1" maxOccurs="1"    type="tns:floatUnitType" /> 
     47                        <element name="Idev" minOccurs="0" maxOccurs="1" type="tns:floatUnitType" default="0" /> 
     48                        <element name="Qydev" minOccurs="0" maxOccurs="1" type="tns:floatUnitType" default="0" /> 
     49                        <element name="Qxdev" minOccurs="0" maxOccurs="1" type="tns:floatUnitType" default="0" /> 
     50                        <element name="Mask" minOccurs="0" maxOccurs="1" type="string" default="0" /> 
     51                </sequence> 
     52                </xsd:choice> 
    4253        </complexType> 
    4354         
     
    5162                <attribute name="name" type="string" use="optional" default="" /> 
    5263                <attribute name="timestamp" type="dateTime" use="optional" /> 
     64                <attribute name="x_bins" type="string" use="optional" /> 
     65                <attribute name="y_bins" type="string" use="optional" /> 
    5366        </complexType> 
    5467 
  • src/sas/sascalc/dataloader/readers/sesans_reader.py

    r1c0e3b0 r7caf3e5  
    88import numpy 
    99import os 
    10 from sas.sascalc.dataloader.data_info import SESANSData1D 
     10from sas.sascalc.dataloader.data_info import Data1D 
    1111 
    1212# Check whether we have a converter available 
     
    5959                    raise  RuntimeError, "sesans_reader: cannot open %s" % path 
    6060                buff = input_f.read() 
    61 #                print buff 
    6261                lines = buff.splitlines() 
    63 #                print lines 
    64                 #Jae could not find python universal line spliter: 
    65                 #keep the below for now 
    66                 # some ascii data has \r line separator, 
    67                 # try it when the data is on only one long line 
    68 #                if len(lines) < 2 : 
    69 #                    lines = buff.split('\r') 
    70                   
    7162                x  = numpy.zeros(0) 
    7263                y  = numpy.zeros(0) 
     
    8374                tdlam = numpy.zeros(0) 
    8475                tdx = numpy.zeros(0) 
    85 #                print "all good" 
    86                 output = SESANSData1D(x=x, y=y, lam=lam, dy=dy, dx=dx, dlam=dlam) 
    87 #                print output                 
     76                output = Data1D(x=x, y=y, lam=lam, dy=dy, dx=dx, dlam=dlam, isSesans=True) 
    8877                self.filename = output.filename = basename 
    8978 
    90 #                #Initialize counters for data lines and header lines. 
    91 #                is_data = False  # Has more than 5 lines 
    92 #                # More than "5" lines of data is considered as actual 
    93 #                # data unless that is the only data 
    94 #                mum_data_lines = 5 
    95 #                # To count # of current data candidate lines 
    96 #                i = -1 
    97 #                # To count total # of previous data candidate lines 
    98 #                i1 = -1 
    99 #                # To count # of header lines 
    100 #                j = -1 
    101 #                # Helps to count # of header lines 
    102 #                j1 = -1 
    103 #                #minimum required number of columns of data; ( <= 4). 
    104 #                lentoks = 2 
    10579                paramnames=[] 
    10680                paramvals=[] 
     
    11185                Pvals=[] 
    11286                dPvals=[] 
    113 #                print x 
    114 #                print zvals 
     87 
    11588                for line in lines: 
    11689                    # Initial try for CSV (split on ,) 
     
    12295                    if len(toks)>5: 
    12396                        zvals.append(toks[0]) 
    124                         dzvals.append(toks[1]) 
    125                         lamvals.append(toks[2]) 
    126                         dlamvals.append(toks[3]) 
    127                         Pvals.append(toks[4]) 
    128                         dPvals.append(toks[5]) 
     97                        dzvals.append(toks[3]) 
     98                        lamvals.append(toks[4]) 
     99                        dlamvals.append(toks[5]) 
     100                        Pvals.append(toks[1]) 
     101                        dPvals.append(toks[2]) 
    129102                    else: 
    130103                        continue 
     
    140113                default_z_unit = "A" 
    141114                data_conv_P = None 
    142                 default_p_unit = " " 
     115                default_p_unit = " " # Adjust unit for axis (L^-3) 
    143116                lam_unit = lam_header[1].replace("[","").replace("]","") 
     117                if lam_unit == 'AA': 
     118                    lam_unit = 'A' 
    144119                varheader=[zvals[0],dzvals[0],lamvals[0],dlamvals[0],Pvals[0],dPvals[0]] 
    145120                valrange=range(1, len(zvals)) 
     
    161136                output.x, output.x_unit = self._unit_conversion(x, lam_unit, default_z_unit) 
    162137                output.y = y 
     138                output.y_unit = r'\AA^{-2} cm^{-1}'  # output y_unit added 
    163139                output.dx, output.dx_unit = self._unit_conversion(dx, lam_unit, default_z_unit) 
    164140                output.dy = dy 
    165141                output.lam, output.lam_unit = self._unit_conversion(lam, lam_unit, default_z_unit) 
    166142                output.dlam, output.dlam_unit = self._unit_conversion(dlam, lam_unit, default_z_unit) 
     143                 
     144                output.xaxis(r"\rm{z}", output.x_unit) 
     145                output.yaxis(r"\rm{ln(P)/(t \lambda^2)}", output.y_unit)  # Adjust label to ln P/(lam^2 t), remove lam column refs 
    167146 
    168                 output.xaxis("\rm{z}", output.x_unit) 
    169                 output.yaxis("\\rm{P/P0}", output.y_unit) 
    170147                # Store loading process information 
    171148                output.meta_data['loader'] = self.type_name 
    172                 output.sample.thickness = float(paramvals[6]) 
     149                #output.sample.thickness = float(paramvals[6]) 
    173150                output.sample.name = paramvals[1] 
    174151                output.sample.ID = paramvals[0] 
    175152                zaccept_unit_split = paramnames[7].split("[") 
    176153                zaccept_unit = zaccept_unit_split[1].replace("]","") 
    177                 if zaccept_unit.strip() == '\AA^-1': 
     154                if zaccept_unit.strip() == r'\AA^-1' or zaccept_unit.strip() == r'\A^-1': 
    178155                    zaccept_unit = "1/A" 
    179156                output.sample.zacceptance=(float(paramvals[7]),zaccept_unit) 
    180                 output.vars=varheader 
     157                output.vars = varheader 
    181158 
    182159                if len(output.x) < 1: 
  • src/sas/sascalc/file_converter/c_ext/bsl_loader.c

    rdc8a553 r2ab9c432  
    11#include <Python.h> 
     2//#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION 
    23#include <numpy/arrayobject.h> 
    34#include <stdio.h> 
     
    2122static PyObject *CLoader_init(CLoader *self, PyObject *args, PyObject *kwds) { 
    2223    const char *filename; 
    23     const int n_frames; 
    24     const int n_pixels; 
    25     const int n_rasters; 
    26     const int swap_bytes; 
     24    int n_frames; 
     25    int n_pixels; 
     26    int n_rasters; 
     27    int swap_bytes; 
    2728 
    2829    if (self != NULL) { 
  • src/sas/sascalc/fit/AbstractFitEngine.py

    rd3911e3 ra9f579c  
    131131        a way to get residuals from data. 
    132132    """ 
    133     def __init__(self, x, y, dx=None, dy=None, smearer=None, data=None): 
     133    def __init__(self, x, y, dx=None, dy=None, smearer=None, data=None, lam=None, dlam=None): 
    134134        """ 
    135135            :param smearer: is an object of class QSmearer or SlitSmearer 
     
    152152                 
    153153        """ 
    154         Data1D.__init__(self, x=x, y=y, dx=dx, dy=dy) 
     154        Data1D.__init__(self, x=x, y=y, dx=dx, dy=dy, lam=lam, dlam=dlam) 
    155155        self.num_points = len(x) 
    156156        self.sas_data = data 
  • src/sas/sascalc/fit/BumpsFitting.py

    r345e7e4 r1a30720  
    352352    except Exception as exc: 
    353353        best, fbest = None, numpy.NaN 
    354         errors = [str(exc), traceback.traceback.format_exc()] 
     354        errors = [str(exc), traceback.format_exc()] 
    355355    finally: 
    356356        mapper.stop_mapper(fitdriver.mapper) 
  • src/sas/sasgui/guiframe/CategoryInstaller.py

    r212bfc2 rddbac66  
    123123        compile it and install 
    124124        :param homefile: Override the default home directory 
    125         :param model_list: List of model names except customized models 
     125        :param model_list: List of model names except those in Plugin Models 
     126               which are user supplied. 
    126127        """ 
    127128        _model_dict = { model.name: model for model in model_list} 
  • src/sas/sasgui/guiframe/acknowledgebox.py

    rc1fdf84 r74c8cd0  
    1111import wx.richtext 
    1212import wx.lib.hyperlink 
     13from wx.lib.expando import ExpandoTextCtrl 
    1314import random 
    1415import os.path 
     
    3637    Shows the current method for acknowledging SasView in 
    3738    scholarly publications. 
    38  
    3939    """ 
    4040 
     
    4444        wx.Dialog.__init__(self, *args, **kwds) 
    4545 
    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) 
    4747        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) 
    4951        self.preamble = wx.StaticText(self, -1, config._acknowledgement_preamble) 
    5052        items = [config._acknowledgement_preamble_bullet1, 
     
    5254                 config._acknowledgement_preamble_bullet3, 
    5355                 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]) 
    5860        self.static_line = wx.StaticLine(self, 0) 
    5961        self.__set_properties() 
     
    6971        self.SetTitle("Acknowledging SasView") 
    7072        #Increased size of box from (525, 225), SMK, 04/10/16 
    71         self.SetSize((600, 300)) 
     73        self.SetClientSize((600, 320)) 
    7274        # end wxGlade 
    7375 
     
    8183        sizer_titles.Add(self.preamble, 0, wx.ALL|wx.EXPAND, 5) 
    8284        sizer_titles.Add(self.list1, 0, wx.ALL|wx.EXPAND, 5) 
     85        sizer_titles.Add(self.ack, 0, wx.ALL|wx.EXPAND, 5) 
    8386        sizer_titles.Add(self.list2, 0, wx.ALL|wx.EXPAND, 5) 
     87        sizer_titles.Add(self.citation, 0, wx.ALL|wx.EXPAND, 5) 
    8488        sizer_titles.Add(self.list3, 0, wx.ALL|wx.EXPAND, 5) 
     89        #sizer_titles.Add(self.static_line, 0, wx.ALL|wx.EXPAND, 0) 
    8590        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) 
    8891        sizer_main.Add(sizer_titles, -1, wx.ALL|wx.EXPAND, 5) 
    8992        self.SetAutoLayout(True) 
     
    9194        self.Layout() 
    9295        self.Centre() 
     96        #self.SetClientSize(sizer_main.GetSize()) 
    9397        # end wxGlade 
    9498 
  • src/sas/sasgui/guiframe/config.py

    rd85c194 rf9d1f60  
    11""" 
    2 Application settings 
     2    Application settings 
    33""" 
     4import time 
    45import os 
    5 import time 
    66from sas.sasgui.guiframe.gui_style import GUIFRAME 
     7import sas.sasview 
     8import logging 
     9 
    710# 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__ 
    1114__download_page__ = 'https://github.com/SasView/sasview/releases' 
    1215__update_URL__ = 'http://www.sasview.org/latestversion.json' 
    1316 
    14  
    1517# Debug message flag 
    16 __EVT_DEBUG__ = True 
     18__EVT_DEBUG__ = False 
    1719 
    1820# Flag for automated testing 
     
    2931_acknowledgement_preamble =\ 
    3032'''To ensure the long term support and development of this software please''' +\ 
    31 ''' remember to do the following.''' 
     33''' remember to:''' 
    3234_acknowledgement_preamble_bullet1 =\ 
    33 '''Acknowledge its use in your publications as suggested below''' 
     35'''Acknowledge its use in your publications as :''' 
    3436_acknowledgement_preamble_bullet2 =\ 
    35 '''Reference the following website: http://www.sasview.org''' 
     37'''Reference SasView as:''' 
    3638_acknowledgement_preamble_bullet3 =\ 
    3739'''Reference the model you used if appropriate (see documentation for refs)''' 
     
    3941'''Send us your reference for our records: developers@sasview.org''' 
    4042_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 
    4349''' 
    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. 
    4850 
    49 ''' 
    5051_homepage = "http://www.sasview.org" 
    51 _download = "http://sourceforge.net/projects/sasview/files/" 
     52_download = __download_page__ 
    5253_authors = [] 
    5354_paper = "http://sourceforge.net/p/sasview/tickets/" 
    5455_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 
     58icon_path = os.path.abspath(os.path.join(os.path.dirname(__file__), "images")) 
     59logging.info("icon path: %s" % icon_path) 
     60media_path = os.path.abspath(os.path.join(os.path.dirname(__file__), "media")) 
     61test_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") 
    6475_nist_url = "http://www.nist.gov/" 
    6576_umd_url = "http://www.umd.edu/" 
    6677_sns_url = "http://neutrons.ornl.gov/" 
     78_ornl_url = "http://neutrons.ornl.gov/" 
    6779_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" 
    7080_isis_url = "http://www.isis.stfc.ac.uk/" 
    7181_ess_url = "http://ess-scandinavia.eu/" 
    7282_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" 
     90marketplace_url = "http://marketplace.sasview.org/" 
     91 
     92#edit the list of file state your plugin can read 
     93APPLICATION_WLIST = 'SasView files (*.svs)|*.svs' 
     94APPLICATION_STATE_EXTENSION = '.svs' 
     95GUIFRAME_WIDTH = 1150 
     96GUIFRAME_HEIGHT = 840 
     97PLUGIN_STATE_EXTENSIONS = ['.fitv', '.inv', '.prv', '.crf'] 
     98PLUGINS_WLIST = ['Fitting files (*.fitv)|*.fitv', 
     99                 'Invariant files (*.inv)|*.inv', 
     100                 'P(r) files (*.prv)|*.prv', 
     101                 'Corfunc files (*.crf)|*.crf'] 
     102PLOPANEL_WIDTH = 415 
     103PLOPANEL_HEIGTH = 370 
    105104DATAPANEL_WIDTH = 235 
    106105DATAPANEL_HEIGHT = 700 
     106SPLASH_SCREEN_PATH = os.path.join(icon_path, "SVwelcome_mini.png") 
     107TUTORIAL_PATH = os.path.join(media_path, "Tutorial.pdf") 
     108DEFAULT_STYLE = GUIFRAME.MULTIPLE_APPLICATIONS|GUIFRAME.MANAGER_ON\ 
     109                    |GUIFRAME.CALCULATOR_ON|GUIFRAME.TOOLBAR_ON 
     110SPLASH_SCREEN_WIDTH = 512 
     111SPLASH_SCREEN_HEIGHT = 366 
     112SS_MAX_DISPLAY_TIME = 2000 
     113WELCOME_PANEL_ON = True 
     114WELCOME_PANEL_SHOW = False 
     115CLEANUP_PLOT = False 
     116# OPEN and SAVE project menu 
     117OPEN_SAVE_PROJECT_MENU = True 
     118#VIEW MENU 
     119VIEW_MENU = True 
     120#EDIT MENU 
     121EDIT_MENU = True 
     122 
     123SetupIconFile_win = os.path.join(icon_path, "ball.ico") 
     124SetupIconFile_mac = os.path.join(icon_path, "ball.icns") 
     125DefaultGroupName = "." 
     126OutputBaseFilename = "setupSasView" 
     127 
    107128FIXED_PANEL = True 
    108129DATALOADER_SHOW = True 
     
    113134# set a default perspective 
    114135DEFAULT_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 
     138UPDATE_TIMEOUT = 2 
     139 
     140#OpenCL option 
     141SAS_OPENCL = None 
    126142 
    127143def printEVT(message): 
    128     """ 
    129     :TODO - need method documentation 
    130     """ 
    131144    if __EVT_DEBUG__: 
     145        """ 
     146        :TODO - Need method doc string 
     147        """ 
    132148        print "%g:  %s" % (time.clock(), message) 
    133      
     149 
    134150        if __EVT_DEBUG_2_FILE__: 
    135151            out = open(__EVT_DEBUG_FILENAME__, 'a') 
    136152            out.write("%10g:  %s\n" % (time.clock(), message)) 
    137153            out.close() 
    138              
  • src/sas/sasgui/guiframe/dataFitting.py

    r345e7e4 r68adf86  
    1717    """ 
    1818    """ 
    19     def __init__(self, x=None, y=None, dx=None, dy=None): 
     19 
     20    def __init__(self, x=None, y=None, dx=None, dy=None, lam=None, dlam=None, isSesans=False): 
    2021        """ 
    2122        """ 
     
    2425        if y is None: 
    2526            y = [] 
    26         PlotData1D.__init__(self, x, y, dx, dy) 
    27         LoadData1D.__init__(self, x, y, dx, dy) 
     27        self.isSesans = isSesans 
     28        PlotData1D.__init__(self, x, y, dx, dy, lam, dlam) 
     29        LoadData1D.__init__(self, x, y, dx, dy, lam, dlam, isSesans) 
     30 
    2831        self.id = None 
    2932        self.list_group_id = [] 
     
    3235        self.path = None 
    3336        self.xtransform = None 
     37        if self.isSesans: 
     38            self.xtransform = "x" 
    3439        self.ytransform = None 
     40        if self.isSesans: 
     41            self.ytransform = "y" 
    3542        self.title = "" 
    3643        self.scale = None 
     
    6875        # First, check the data compatibility 
    6976        dy, dy_other = self._validity_check(other) 
    70         result = Data1D(x=[], y=[], dx=None, dy=None) 
     77        result = Data1D(x=[], y=[], lam=[], dx=None, dy=None, dlam=None) 
    7178        result.clone_without_data(length=len(self.x), clone=self) 
    7279        result.copy_from_datainfo(data1d=self) 
     
    115122        # First, check the data compatibility 
    116123        self._validity_check_union(other) 
    117         result = Data1D(x=[], y=[], dx=None, dy=None) 
     124        result = Data1D(x=[], y=[], lam=[], dx=None, dy=None, dlam=None) 
    118125        tot_length = len(self.x) + len(other.x) 
    119126        result = self.clone_without_data(length=tot_length, clone=result) 
     127        if self.dlam == None or other.dlam is None: 
     128            result.dlam = None 
     129        else: 
     130            result.dlam = numpy.zeros(tot_length) 
    120131        if self.dy == None or other.dy is None: 
    121132            result.dy = None 
     
    141152        result.y = numpy.append(self.y, other.y) 
    142153        result.y = result.y[ind] 
     154        result.lam = numpy.append(self.lam, other.lam) 
     155        result.lam = result.lam[ind] 
     156        if result.dlam != None: 
     157            result.dlam = numpy.append(self.dlam, other.dlam) 
     158            result.dlam = result.dlam[ind] 
    143159        if result.dy != None: 
    144160            result.dy = numpy.append(self.dy, other.dy) 
     
    260276        # First, check the data compatibility 
    261277        self._validity_check_union(other) 
    262         result = Data1D(x=[], y=[], dx=None, dy=None) 
     278        result = Data1D(x=[], y=[], lam=[], dx=None, dy=None, dlam=[]) 
    263279        tot_length = len(self.x)+len(other.x) 
    264280        result.clone_without_data(length=tot_length, clone=self) 
     281        if self.dlam == None or other.dlam is None: 
     282            result.dlam = None 
     283        else: 
     284            result.dlam = numpy.zeros(tot_length) 
    265285        if self.dy == None or other.dy is None: 
    266286            result.dy = None 
     
    285305        result.y = numpy.append(self.y, other.y) 
    286306        result.y = result.y[ind] 
     307        result.lam = numpy.append(self.lam, other.lam) 
     308        result.lam = result.lam[ind] 
    287309        if result.dy != None: 
    288310            result.dy = numpy.append(self.dy, other.dy) 
  • src/sas/sasgui/guiframe/data_manager.py

    rd85c194 r2ffe241  
    6161         
    6262        if issubclass(Data2D, data.__class__): 
    63             new_plot = Data2D(image=None, err_image=None)  
    64         else:  
    65             new_plot = Data1D(x=[], y=[], dx=None, dy=None) 
    66             
     63            new_plot = Data2D(image=None, err_image=None) # For now, isSesans for 2D data is always false 
     64        else: 
     65            new_plot = Data1D(x=[], y=[], dx=None, dy=None, lam=None, dlam=None, isSesans=data.isSesans) 
     66 
     67 
     68        #elif data.meta_data['loader'] == 'SESANS': 
     69        #    new_plot = Data1D(x=[], y=[], dx=None, dy=None, lam=None, dlam=None, isSesans=True) 
     70        #else: 
     71        #    new_plot = Data1D(x=[], y=[], dx=None, dy=None, lam=None, dlam=None) #SESANS check??? 
     72 
    6773        new_plot.copy_from_datainfo(data) 
    6874        data.clone_without_data(clone=new_plot) 
  • src/sas/sasgui/guiframe/data_panel.py

    rc8e1996 ra45a298  
    6666    IS_MAC = True 
    6767 
    68 STYLE_FLAG = wx.RAISED_BORDER | CT.TR_HAS_BUTTONS | CT.TR_HIDE_ROOT |\ 
    69                     wx.WANTS_CHARS | CT.TR_HAS_VARIABLE_ROW_HEIGHT 
     68STYLE_FLAG = (wx.RAISED_BORDER | CT.TR_HAS_BUTTONS | 
     69                    wx.WANTS_CHARS | CT.TR_HAS_VARIABLE_ROW_HEIGHT) 
    7070 
    7171 
     
    7474    Check list control to be used for Data Panel 
    7575    """ 
    76     def __init__(self, parent, *args, **kwds): 
     76    def __init__(self, parent, root, *args, **kwds): 
    7777        # agwstyle is introduced in wx.2.8.11 but is not working for mac 
    7878        if IS_MAC and wx_version < 812: 
     
    9797                    del kwds['style'] 
    9898                    CT.CustomTreeCtrl.__init__(self, parent, *args, **kwds) 
    99         self.root = self.AddRoot("Available Data") 
     99        self.root = self.AddRoot(root) 
    100100 
    101101    def OnCompareItems(self, item1, item2): 
     
    520520        Add a listcrtl in the panel 
    521521        """ 
    522         tree_ctrl_label = wx.StaticText(self, -1, "Data") 
    523         tree_ctrl_label.SetForegroundColour('blue') 
    524         self.tree_ctrl = DataTreeCtrl(parent=self, style=wx.SUNKEN_BORDER) 
     522        # Add splitter 
     523        w, h = self.parent.GetSize() 
     524        splitter = wx.SplitterWindow(self) 
     525        splitter.SetMinimumPaneSize(50) 
     526        splitter.SetSashGravity(1.0) 
     527 
     528        file_sizer = wx.BoxSizer(wx.VERTICAL) 
     529        file_sizer.SetMinSize(wx.Size(w/13, h*2/5)) 
     530        theory_sizer = wx.BoxSizer(wx.VERTICAL) 
     531        theory_sizer.SetMinSize(wx.Size(w/13, h*2/5)) 
     532 
     533        self.tree_ctrl = DataTreeCtrl(parent=splitter, 
     534                                      style=wx.SUNKEN_BORDER, 
     535                                      root="Available Data") 
     536 
    525537        self.tree_ctrl.Bind(CT.EVT_TREE_ITEM_CHECKING, self.on_check_item) 
    526538        self.tree_ctrl.Bind(CT.EVT_TREE_ITEM_MENU, self.on_right_click_data) 
     
    557569        wx.EVT_MENU(self, self.editmask_id, self.on_edit_data) 
    558570 
    559         tree_ctrl_theory_label = wx.StaticText(self, -1, "Theory") 
    560         tree_ctrl_theory_label.SetForegroundColour('blue') 
    561         self.tree_ctrl_theory = DataTreeCtrl(parent=self, 
    562                                              style=wx.SUNKEN_BORDER) 
     571        self.tree_ctrl_theory = DataTreeCtrl(parent=splitter, 
     572                                             style=wx.SUNKEN_BORDER, 
     573                                             root="Available Theory") 
    563574        self.tree_ctrl_theory.Bind(CT.EVT_TREE_ITEM_CHECKING, 
    564575                                   self.on_check_item) 
    565576        self.tree_ctrl_theory.Bind(CT.EVT_TREE_ITEM_MENU, 
    566577                                   self.on_right_click_theory) 
    567         self.sizer1.Add(tree_ctrl_label, 0, wx.LEFT, 10) 
    568         self.sizer1.Add(self.tree_ctrl, 1, wx.EXPAND | wx.ALL, 10) 
    569         self.sizer1.Add(tree_ctrl_theory_label, 0,  wx.LEFT, 10) 
    570         self.sizer1.Add(self.tree_ctrl_theory, 1, wx.EXPAND | wx.ALL, 10) 
     578        splitter.SplitHorizontally(self.tree_ctrl, self.tree_ctrl_theory) 
     579        self.sizer1.Add(splitter, 1, wx.EXPAND | wx.ALL, 10) 
    571580 
    572581    def on_right_click_theory(self, event): 
     
    722731            if self.tree_ctrl.root: 
    723732                self.tree_ctrl.SortChildren(self.tree_ctrl.root) 
     733            # Expand root if # of data sets > 0 
     734            if self.tree_ctrl.GetCount() > 0: 
     735                self.tree_ctrl.root.Expand() 
    724736        self.enable_remove() 
    725737        self.enable_import() 
     
    760772                                       state_id=state_id, 
    761773                                       theory_list=theory_list) 
     774        if self.tree_ctrl_theory.GetCount() > 0: 
     775            self.tree_ctrl_theory.root.Expand() 
    762776 
    763777    def append_theory_helper(self, tree, root, state_id, theory_list): 
  • src/sas/sasgui/guiframe/local_perspectives/plotting/plotting.py

    r6ffa0dd rca224b1  
    134134        """ 
    135135        for group_id in self.plot_panels.keys(): 
    136             panel = self.plot_panels[group_id] 
    137             panel.graph.reset() 
    138             self.hide_panel(group_id) 
     136            self.clear_panel_by_id(group_id) 
    139137        self.plot_panels = {} 
    140138 
  • src/sas/sasgui/perspectives/calculator/model_editor.py

    ra08b89b rddbac66  
    55function of y (usually the intensity).  It also provides a drop down of 
    66standard available math functions.  Finally a full python editor panel for 
    7 complete customizatin is provided. 
    8  
    9 :TODO the writiong of the file and name checking (and maybe some other 
    10 funtions?) should be moved to a computational module which could be called 
    11 fropm a python script.  Basically one just needs to pass the name, 
     7complete customization is provided. 
     8 
     9:TODO the writing of the file and name checking (and maybe some other 
     10functions?) should be moved to a computational module which could be called 
     11from a python script.  Basically one just needs to pass the name, 
    1212description text and function text (or in the case of the composite editor 
    1313the names of the first and second model and the operator to be used). 
     
    6161    """ 
    6262    Dialog for easy custom composite models.  Provides a wx.Dialog panel 
    63     to choose two existing models (including pre-existing custom models which 
     63    to choose two existing models (including pre-existing Plugin Models which 
    6464    may themselves be composite models) as well as an operation on those models 
    6565    (add or multiply) the resulting model will add a scale parameter for summed 
     
    380380            color = 'blue' 
    381381        except: 
    382             msg = "Easy Custom Sum/Multipy: Error occurred..." 
     382            msg = "Easy Sum/Multipy Plugin: Error occurred..." 
    383383            info = 'Error' 
    384384            color = 'red' 
     
    501501        self.factor = factor 
    502502        self._operator = operator 
    503         self.explanation = "  Custom Model = %s %s (model1 %s model2)\n" % \ 
     503        self.explanation = "  Plugin Model = %s %s (model1 %s model2)\n" % \ 
    504504                           (self.factor, f_oper, self._operator) 
    505505        self.explanationctr.SetLabel(self.explanation) 
     
    617617class EditorPanel(wx.ScrolledWindow): 
    618618    """ 
    619     Custom model function editor 
     619    Simple Plugin Model function editor 
    620620    """ 
    621621    def __init__(self, parent, base, path, title, *args, **kwds): 
     
    652652        self.msg_sizer = None 
    653653        self.warning = "" 
    654         self._description = "New Custom Model" 
     654        #This does not seem to be used anywhere so commenting out for now 
     655        #    -- PDB 2/26/17  
     656        #self._description = "New Plugin Model" 
    655657