Changes in / [8938502:d26f025] in sasview


Ignore:
Files:
9 deleted
3 edited

Legend:

Unmodified
Added
Removed
  • sasview/test/sesans_data/sphere2micron.ses

    rd3bce8c r2a2b43a  
    1 FileFormatVersion       1.0 
    2 DataFileTitle           Polystyrene of Markus Strobl,  Full Sine, ++ only 
    3 Sample                  Polystyrene 2 um in 53% H2O, 47% D2O 
    4 Settings                D1=D2=20x8 mm,Ds = 16x10 mm (WxH), GF1 =scanning, GF2 = 2.5 A. 2 um polystyrene in 53% H2O, 47% D2O; 8.55% contrast 
    5 Operator                CPD 
    6 Date                    do 10 jul 2014 16:37:30 
    7 ScanType                sine one element scan 
    8 Thickness               2.00E-01 
    9 Thickness_unit          cm 
    10 Theta_zmax              0.0168 
    11 Theta_zmax_unit         radians 
    12 Theta_ymax              0.0168 
    13 Theta_ymax_unit         radians 
    14 Orientation             Z 
    15 SpinEchoLength_unit     A 
    16 Depolarisation_unit     A-2 cm-1 
    17 Wavelength_unit         A 
    18  
    19 BEGIN_DATA 
    20 SpinEchoLength Depolarisation Depolarisation_error SpinEchoLength_error Wavelength Wavelength_error Polarisation  Polarisation_error 
    21 391.56 0.0041929 0.0036894 19.578 2.11 0.1055 1.0037 0.0032974 
    22 1564 -0.0046571 0.0038185 78.2 2.11 0.1055 0.99586 0.003386 
    23 2735.6 -0.017007 0.0038132 136.78 2.11 0.1055 0.98497 0.0033444 
    24 3907.9 -0.033462 0.0035068 195.39 2.11 0.1055 0.97064 0.0030309 
    25 5080.2 -0.047483 0.0038208 254.01 2.11 0.1055 0.9586 0.0032613 
    26 6251.8 -0.070375 0.00376 312.59 2.11 0.1055 0.93926 0.0031446 
    27 7423.2 -0.092217 0.0037927 371.16 2.11 0.1055 0.92117 0.0031108 
    28 8595.5 -0.10238 0.004006 429.77 2.11 0.1055 0.91287 0.0032562 
    29 9767.7 -0.12672 0.0038534 488.39 2.11 0.1055 0.8933 0.0030651 
    30 10940 -0.1374 0.004243 546.98 2.11 0.1055 0.88484 0.003343 
    31 12112 -0.16072 0.0045837 605.58 2.11 0.1055 0.86666 0.0035372 
    32 13284 -0.16623 0.0045613 664.2 2.11 0.1055 0.86242 0.0035027 
    33 14456 -0.18468 0.0044918 722.79 2.11 0.1055 0.84837 0.0033931 
    34 15628 -0.19143 0.0048967 781.38 2.11 0.1055 0.84328 0.0036768 
    35 16800 -0.20029 0.0045421 840.02 2.11 0.1055 0.83666 0.0033837 
    36 17971 -0.19798 0.0046642 898.56 2.11 0.1055 0.83838 0.0034819 
    37 19143 -0.21442 0.0047052 957.17 2.11 0.1055 0.82619 0.0034614 
    38 20316 -0.20885 0.0044931 1015.8 2.11 0.1055 0.8303 0.0033218 
    39 21488 -0.21393 0.0049186 1074.4 2.11 0.1055 0.82655 0.00362 
    40 22660 -0.20685 0.004423 1133 2.11 0.1055 0.83179 0.0032758 
    41 23832 -0.20802 0.0046979 1191.6 2.11 0.1055 0.83092 0.0034758 
    42 25003 -0.19848 0.0045953 1250.2 2.11 0.1055 0.838 0.0034289 
    43 26175 -0.21117 0.0044567 1308.8 2.11 0.1055 0.82859 0.0032881 
    44 27347 -0.21283 0.004137 1367.4 2.11 0.1055 0.82736 0.0030477 
    45 28520 -0.2042 0.0044587 1426 2.11 0.1055 0.83375 0.0033101 
    46 29692 -0.2112 0.0042852 1484.6 2.11 0.1055 0.82857 0.0031615 
    47 30864 -0.20319 0.0043483 1543.2 2.11 0.1055 0.8345 0.003231 
    48 32036 -0.20752 0.0044297 1601.8 2.11 0.1055 0.83129 0.0032788 
    49 33207 -0.20654 0.0043188 1660.4 2.11 0.1055 0.83201 0.0031995 
    50 34380 -0.20126 0.0046375 1719 2.11 0.1055 0.83593 0.0034518 
    51 35551 -0.20924 0.0042871 1777.6 2.11 0.1055 0.83001 0.0031684 
    52 36724 -0.21323 0.0045471 1836.2 2.11 0.1055 0.82707 0.0033487 
    53 37895 -0.21324 0.0045354 1894.7 2.11 0.1055 0.82706 0.00334 
    54 39067 -0.19905 0.0044141 1953.4 2.11 0.1055 0.83758 0.003292 
    55 40239 -0.1991 0.0047441 2012 2.11 0.1055 0.83754 0.003538 
    56 41411 -0.20359 0.0050136 2070.5 2.11 0.1055 0.8342 0.003724 
    57 42583 -0.21032 0.0049474 2129.1 2.11 0.1055 0.82922 0.0036529 
    58 43755 -0.20689 0.0048203 2187.8 2.11 0.1055 0.83176 0.00357 
    59 44927 -0.21075 0.0052337 2246.4 2.11 0.1055 0.8289 0.0038628 
    60 46099 -0.19956 0.0047827 2304.9 2.11 0.1055 0.8372 0.0035653 
     1DataFileTitle   "Polystyrene of Markus Strobl,  Full Sine, ++ only "                                             
     2Sample  "Polystyrene 2 um in 53% H2O, 47% D2O "                                          
     3Settings        "D1=D2=20x8 mm,Ds = 16x10 mm (WxH), GF1 =scanning, GF2 = 2.5 A. 2 um polystyrene in 53% H2O, 47% D2O; 8.55% contrast "                                           
     4Operator        CPD                                              
     5Date    do 10 jul 2014 16:37:30                                                  
     6ScanType        sine one element scan                                            
     7Thickness [cm]  2.00E-01                                                 
     8Q_zmax [\A^-1]  0.05                                             
     9Q_ymax [\A^-1]  0.05                                             
     10                                                         
     11spin echo length [A]     Depolarisation [A-2 cm-1]       error depol [A-2 cm-1]          error SEL [A]   wavelength [A]          error wavelength [A]    polarisation    error pol  
     12391.56  0.0041929       0.0036894       19.578  2.11    0.1055  1.0037  0.0032974 
     131564    -0.0046571      0.0038185       78.2    2.11    0.1055  0.99586 0.003386 
     142735.6  -0.017007       0.0038132       136.78  2.11    0.1055  0.98497 0.0033444 
     153907.9  -0.033462       0.0035068       195.39  2.11    0.1055  0.97064 0.0030309 
     165080.2  -0.047483       0.0038208       254.01  2.11    0.1055  0.9586  0.0032613 
     176251.8  -0.070375       0.00376 312.59  2.11    0.1055  0.93926 0.0031446 
     187423.2  -0.092217       0.0037927       371.16  2.11    0.1055  0.92117 0.0031108 
     198595.5  -0.10238        0.004006        429.77  2.11    0.1055  0.91287 0.0032562 
     209767.7  -0.12672        0.0038534       488.39  2.11    0.1055  0.8933  0.0030651 
     2110940   -0.1374 0.004243        546.98  2.11    0.1055  0.88484 0.003343 
     2212112   -0.16072        0.0045837       605.58  2.11    0.1055  0.86666 0.0035372 
     2313284   -0.16623        0.0045613       664.2   2.11    0.1055  0.86242 0.0035027 
     2414456   -0.18468        0.0044918       722.79  2.11    0.1055  0.84837 0.0033931 
     2515628   -0.19143        0.0048967       781.38  2.11    0.1055  0.84328 0.0036768 
     2616800   -0.20029        0.0045421       840.02  2.11    0.1055  0.83666 0.0033837 
     2717971   -0.19798        0.0046642       898.56  2.11    0.1055  0.83838 0.0034819 
     2819143   -0.21442        0.0047052       957.17  2.11    0.1055  0.82619 0.0034614 
     2920316   -0.20885        0.0044931       1015.8  2.11    0.1055  0.8303  0.0033218 
     3021488   -0.21393        0.0049186       1074.4  2.11    0.1055  0.82655 0.00362 
     3122660   -0.20685        0.004423        1133    2.11    0.1055  0.83179 0.0032758 
     3223832   -0.20802        0.0046979       1191.6  2.11    0.1055  0.83092 0.0034758 
     3325003   -0.19848        0.0045953       1250.2  2.11    0.1055  0.838   0.0034289 
     3426175   -0.21117        0.0044567       1308.8  2.11    0.1055  0.82859 0.0032881 
     3527347   -0.21283        0.004137        1367.4  2.11    0.1055  0.82736 0.0030477 
     3628520   -0.2042 0.0044587       1426    2.11    0.1055  0.83375 0.0033101 
     3729692   -0.2112 0.0042852       1484.6  2.11    0.1055  0.82857 0.0031615 
     3830864   -0.20319        0.0043483       1543.2  2.11    0.1055  0.8345  0.003231 
     3932036   -0.20752        0.0044297       1601.8  2.11    0.1055  0.83129 0.0032788 
     4033207   -0.20654        0.0043188       1660.4  2.11    0.1055  0.83201 0.0031995 
     4134380   -0.20126        0.0046375       1719    2.11    0.1055  0.83593 0.0034518 
     4235551   -0.20924        0.0042871       1777.6  2.11    0.1055  0.83001 0.0031684 
     4336724   -0.21323        0.0045471       1836.2  2.11    0.1055  0.82707 0.0033487 
     4437895   -0.21324        0.0045354       1894.7  2.11    0.1055  0.82706 0.00334 
     4539067   -0.19905        0.0044141       1953.4  2.11    0.1055  0.83758 0.003292 
     4640239   -0.1991 0.0047441       2012    2.11    0.1055  0.83754 0.003538 
     4741411   -0.20359        0.0050136       2070.5  2.11    0.1055  0.8342  0.003724 
     4842583   -0.21032        0.0049474       2129.1  2.11    0.1055  0.82922 0.0036529 
     4943755   -0.20689        0.0048203       2187.8  2.11    0.1055  0.83176 0.00357 
     5044927   -0.21075        0.0052337       2246.4  2.11    0.1055  0.8289  0.0038628 
     5146099   -0.19956        0.0047827       2304.9  2.11    0.1055  0.8372  0.0035653 
  • src/sas/sascalc/data_util/qsmearing.py

    r235f514 r235f514  
    6565            raise ValueError('one or more of your dx values are negative, please check the data file!') 
    6666 
    67     if _found_sesans: 
    68         # Pre-compute the Hankel matrix (H) 
     67    if _found_sesans == True: 
     68        #Pre-compute the Hankel matrix (H) 
     69        qmax, qunits = data.sample.zacceptance 
    6970        SElength = Converter(data._xunit)(data.x, "A") 
    70  
    71         theta_max = Converter("radians")(data.sample.zacceptance)[0] 
    72         q_max = 2 * np.pi / np.max(data.source.wavelength) * np.sin(theta_max) 
    73         zaccept = Converter("1/A")(q_max, "1/" + data.source.wavelength_unit), 
    74  
     71        zaccept = Converter(qunits)(qmax, "1/A"), 
    7572        Rmax = 10000000 
    76         hankel = SesansTransform(data.x, SElength, 
    77                                  data.source.wavelength, 
    78                                  zaccept, Rmax) 
     73        hankel = SesansTransform(data.x, SElength, zaccept, Rmax) 
    7974        # Then return the actual transform, as if it were a smearing function 
    8075        return PySmear(hankel, model, offset=0) 
  • src/sas/sascalc/dataloader/readers/sesans_reader.py

    rf6c2555 r9a5097c  
    11""" 
    22    SESANS reader (based on ASCII reader) 
    3  
     3     
    44    Reader for .ses or .sesans file format 
    5  
    6     Jurrian Bakker 
     5     
     6    Jurrian Bakker  
    77""" 
    88import numpy as np 
     
    1818_ZERO = 1e-16 
    1919 
    20  
    2120class Reader: 
    2221    """ 
    2322    Class to load sesans files (6 columns). 
    2423    """ 
    25     # File type 
     24    ## File type 
    2625    type_name = "SESANS" 
    27  
    28     # Wildcards 
     26     
     27    ## Wildcards 
    2928    type = ["SESANS files (*.ses)|*.ses", 
    3029            "SESANS files (*..sesans)|*.sesans"] 
    31     # List of allowed extensions 
     30    ## List of allowed extensions 
    3231    ext = ['.ses', '.SES', '.sesans', '.SESANS'] 
    33  
    34     # Flag to bypass extension check 
     32     
     33    ## Flag to bypass extension check 
    3534    allow_all = True 
    36  
     35     
    3736    def read(self, path): 
     37         
     38#        print "reader triggered" 
     39         
    3840        """ 
    3941        Load data file 
    40  
     42         
    4143        :param path: file path 
    42  
     44         
    4345        :return: SESANSData1D object, or None 
    44  
     46         
    4547        :raise RuntimeError: when the file can't be opened 
    4648        :raise ValueError: when the length of the data vectors are inconsistent 
     
    4951            basename = os.path.basename(path) 
    5052            _, extension = os.path.splitext(basename) 
    51             if not (self.allow_all or extension.lower() in self.ext): 
    52                 raise RuntimeError( 
    53                     "{} has an unrecognized file extension".format(path)) 
     53            if self.allow_all or extension.lower() in self.ext: 
     54                try: 
     55                    # Read in binary mode since GRASP frequently has no-ascii 
     56                    # characters that brakes the open operation 
     57                    input_f = open(path,'rb') 
     58                except: 
     59                    raise  RuntimeError, "sesans_reader: cannot open %s" % path 
     60                buff = input_f.read() 
     61                lines = buff.splitlines() 
     62                x  = np.zeros(0) 
     63                y  = np.zeros(0) 
     64                dy = np.zeros(0) 
     65                lam  = np.zeros(0) 
     66                dlam = np.zeros(0) 
     67                dx = np.zeros(0) 
     68                 
     69               #temp. space to sort data 
     70                tx  = np.zeros(0) 
     71                ty  = np.zeros(0) 
     72                tdy = np.zeros(0) 
     73                tlam  = np.zeros(0) 
     74                tdlam = np.zeros(0) 
     75                tdx = np.zeros(0) 
     76                output = Data1D(x=x, y=y, lam=lam, dy=dy, dx=dx, dlam=dlam, isSesans=True) 
     77                self.filename = output.filename = basename 
     78 
     79                paramnames=[] 
     80                paramvals=[] 
     81                zvals=[] 
     82                dzvals=[] 
     83                lamvals=[] 
     84                dlamvals=[] 
     85                Pvals=[] 
     86                dPvals=[] 
     87 
     88                for line in lines: 
     89                    # Initial try for CSV (split on ,) 
     90                    line=line.strip() 
     91                    toks = line.split('\t') 
     92                    if len(toks)==2: 
     93                        paramnames.append(toks[0]) 
     94                        paramvals.append(toks[1]) 
     95                    if len(toks)>5: 
     96                        zvals.append(toks[0]) 
     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]) 
     102                    else: 
     103                        continue 
     104 
     105                x=[] 
     106                y=[] 
     107                lam=[] 
     108                dx=[] 
     109                dy=[] 
     110                dlam=[] 
     111                lam_header = lamvals[0].split() 
     112                data_conv_z = None 
     113                default_z_unit = "A" 
     114                data_conv_P = None 
     115                default_p_unit = " " # Adjust unit for axis (L^-3) 
     116                lam_unit = lam_header[1].replace("[","").replace("]","") 
     117                if lam_unit == 'AA': 
     118                    lam_unit = 'A' 
     119                varheader=[zvals[0],dzvals[0],lamvals[0],dlamvals[0],Pvals[0],dPvals[0]] 
     120                valrange=range(1, len(zvals)) 
     121                for i in valrange: 
     122                    x.append(float(zvals[i])) 
     123                    y.append(float(Pvals[i])) 
     124                    lam.append(float(lamvals[i])) 
     125                    dy.append(float(dPvals[i])) 
     126                    dx.append(float(dzvals[i])) 
     127                    dlam.append(float(dlamvals[i])) 
     128 
     129                x,y,lam,dy,dx,dlam = [ 
     130                    np.asarray(v, 'double') 
     131                   for v in (x,y,lam,dy,dx,dlam) 
     132                ] 
     133 
     134                input_f.close() 
     135 
     136                output.x, output.x_unit = self._unit_conversion(x, lam_unit, default_z_unit) 
     137                output.y = y 
     138                output.y_unit = r'\AA^{-2} cm^{-1}'  # output y_unit added 
     139                output.dx, output.dx_unit = self._unit_conversion(dx, lam_unit, default_z_unit) 
     140                output.dy = dy 
     141                output.lam, output.lam_unit = self._unit_conversion(lam, lam_unit, default_z_unit) 
     142                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 
     146 
     147                # Store loading process information 
     148                output.meta_data['loader'] = self.type_name 
     149                #output.sample.thickness = float(paramvals[6]) 
     150                output.sample.name = paramvals[1] 
     151                output.sample.ID = paramvals[0] 
     152                zaccept_unit_split = paramnames[7].split("[") 
     153                zaccept_unit = zaccept_unit_split[1].replace("]","") 
     154                if zaccept_unit.strip() == r'\AA^-1' or zaccept_unit.strip() == r'\A^-1': 
     155                    zaccept_unit = "1/A" 
     156                output.sample.zacceptance=(float(paramvals[7]),zaccept_unit) 
     157                output.vars = varheader 
     158 
     159                if len(output.x) < 1: 
     160                    raise RuntimeError, "%s is empty" % path 
     161                return output 
     162 
    54163        else: 
    55             raise RuntimeError("{} is not a file".format(path)) 
    56         with open(path, 'r') as input_f: 
    57             line = input_f.readline() 
    58             params = {} 
    59             while not line.startswith("BEGIN_DATA"): 
    60                 terms = line.split() 
    61                 if len(terms) >= 2: 
    62                     params[terms[0]] = " ".join(terms[1:]) 
    63                 line = input_f.readline() 
    64             self.params = params 
     164            raise RuntimeError, "%s is not a file" % path 
     165        return None 
    65166 
    66             if "FileFormatVersion" not in self.params: 
    67                 raise RuntimeError("SES file missing FileFormatVersion") 
    68             if float(self.params["FileFormatVersion"]) >= 2.0: 
    69                 raise RuntimeError("SASView only supports SES version 1") 
    70  
    71             if "SpinEchoLength_unit" not in self.params: 
    72                 raise RuntimeError("SpinEchoLength has no units") 
    73             if "Wavelength_unit" not in self.params: 
    74                 raise RuntimeError("Wavelength has no units") 
    75             if params["SpinEchoLength_unit"] != params["Wavelength_unit"]: 
    76                 raise RuntimeError("The spin echo data has rudely used " 
    77                                    "different units for the spin echo length " 
    78                                    "and the wavelength.  While sasview could " 
    79                                    "handle this instance, it is a violation " 
    80                                    "of the file format and will not be " 
    81                                    "handled by other software.") 
    82  
    83             headers = input_f.readline().split() 
    84  
    85             self._insist_header(headers, "SpinEchoLength") 
    86             self._insist_header(headers, "Depolarisation") 
    87             self._insist_header(headers, "Depolarisation_error") 
    88             self._insist_header(headers, "Wavelength") 
    89  
    90             data = np.loadtxt(input_f) 
    91  
    92             if data.shape[1] != len(headers): 
    93                 raise RuntimeError( 
    94                     "File has {} headers, but {} columns".format( 
    95                         len(headers), 
    96                         data.shape[1])) 
    97  
    98             if data.size < 1: 
    99                 raise RuntimeError("{} is empty".format(path)) 
    100             x = data[:, headers.index("SpinEchoLength")] 
    101             if "SpinEchoLength_error" in headers: 
    102                 dx = data[:, headers.index("SpinEchoLength_error")] 
    103             else: 
    104                 dx = x*0.05 
    105             lam = data[:, headers.index("Wavelength")] 
    106             if "Wavelength_error" in headers: 
    107                 dlam = data[:, headers.index("Wavelength_error")] 
    108             else: 
    109                 dlam = lam*0.05 
    110             y = data[:, headers.index("Depolarisation")] 
    111             dy = data[:, headers.index("Depolarisation_error")] 
    112  
    113             lam_unit = self._unit_fetch("Wavelength") 
    114             x, x_unit = self._unit_conversion(x, "A", 
    115                                               self._unit_fetch( 
    116                                                   "SpinEchoLength")) 
    117             dx, dx_unit = self._unit_conversion( 
    118                 dx, lam_unit, 
    119                 self._unit_fetch("SpinEchoLength")) 
    120             dlam, dlam_unit = self._unit_conversion( 
    121                 dlam, lam_unit, 
    122                 self._unit_fetch("Wavelength")) 
    123             y_unit = self._unit_fetch("Depolarisation") 
    124  
    125             output = Data1D(x=x, y=y, lam=lam, dy=dy, dx=dx, dlam=dlam, 
    126                             isSesans=True) 
    127  
    128             output.y_unit = y_unit 
    129             output.x_unit = x_unit 
    130             output.source.wavelength_unit = lam_unit 
    131             output.source.wavelength = lam 
    132             self.filename = output.filename = basename 
    133             output.xaxis(r"\rm{z}", x_unit) 
    134             # Adjust label to ln P/(lam^2 t), remove lam column refs 
    135             output.yaxis(r"\rm{ln(P)/(t \lambda^2)}", y_unit) 
    136             # Store loading process information 
    137             output.meta_data['loader'] = self.type_name 
    138             output.sample.name = params["Sample"] 
    139             output.sample.ID = params["DataFileTitle"] 
    140             output.sample.thickness = self._unit_conversion( 
    141                 float(params["Thickness"]), "cm", 
    142                 self._unit_fetch("Thickness"))[0] 
    143  
    144             output.sample.zacceptance = ( 
    145                 float(params["Theta_zmax"]), 
    146                 self._unit_fetch("Theta_zmax")) 
    147  
    148             output.sample.yacceptance = ( 
    149                 float(params["Theta_ymax"]), 
    150                 self._unit_fetch("Theta_ymax")) 
    151             return output 
    152  
    153     @staticmethod 
    154     def _insist_header(headers, name): 
    155         if name not in headers: 
    156             raise RuntimeError( 
    157                 "Missing {} column in spin echo data".format(name)) 
    158  
    159     @staticmethod 
    160     def _unit_conversion(value, value_unit, default_unit): 
    161         """ 
    162         Performs unit conversion on a measurement. 
    163  
    164         :param value: The magnitude of the measurement 
    165         :param value_unit: a string containing the final desired unit 
    166         :param default_unit: string with the units of the original measurement 
    167         :return: The magnitude of the measurement in the new units 
    168         """ 
    169         # (float, string, string) -> float 
    170         if has_converter and value_unit != default_unit: 
    171             data_conv_q = Converter(default_unit) 
    172             value = data_conv_q(value, units=value_unit) 
     167    def _unit_conversion(self, value, value_unit, default_unit): 
     168        if has_converter == True and value_unit != default_unit: 
     169            data_conv_q = Converter(value_unit) 
     170            value = data_conv_q(value, units=default_unit) 
    173171            new_unit = default_unit 
    174172        else: 
    175173            new_unit = value_unit 
    176174        return value, new_unit 
    177  
    178     def _unit_fetch(self, unit): 
    179         return self.params[unit+"_unit"] 
Note: See TracChangeset for help on using the changeset viewer.