Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/sas/sascalc/dataloader/data_info.py

    r2ffe241 r0d64713  
    2525import numpy 
    2626import math 
     27 
     28class 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 
    2780 
    2881class plottable_1D(object): 
     
    4093    ## Slit smearing width 
    4194    dxw = None 
    42     ## SESANS specific params (wavelengths for spin echo length calculation) 
    43     lam = None 
    44     dlam = None 
    4595 
    4696    # Units 
     
    50100    _yunit = '' 
    51101 
    52     def __init__(self, x, y, dx=None, dy=None, dxl=None, dxw=None, lam=None, dlam=None): 
     102    def __init__(self, x, y, dx=None, dy=None, dxl=None, dxw=None): 
    53103        self.x = numpy.asarray(x) 
    54104        self.y = numpy.asarray(y) 
     
    61111        if dxw is not None: 
    62112            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) 
    67113 
    68114    def xaxis(self, label, unit): 
     
    352398    ## Details 
    353399    details = None 
    354     ## SESANS zacceptance 
    355     zacceptance = None 
    356400 
    357401    def __init__(self): 
     
    491535    ## Loading errors 
    492536    errors = None 
    493     ## SESANS data check 
    494     isSesans = None 
    495  
    496537 
    497538    def __init__(self): 
     
    526567        ## Loading errors 
    527568        self.errors = [] 
    528         ## SESANS data check 
    529         self.isSesans = False 
    530569 
    531570    def append_empty_process(self): 
     
    547586        _str += "Title:           %s\n" % self.title 
    548587        _str += "Run:             %s\n" % str(self.run) 
    549         _str += "SESANS:          %s\n" % str(self.isSesans) 
    550588        _str += "Instrument:      %s\n" % str(self.instrument) 
    551589        _str += "%s\n" % str(self.sample) 
     
    698736        return self._perform_union(other) 
    699737 
    700 class 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): 
     738class 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): 
    705746        DataInfo.__init__(self) 
    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') 
     747        plottable_sesans1D.__init__(self, x, y, lam, dx, dy, dlam) 
    717748 
    718749    def __str__(self): 
     
    728759        return _str 
    729760 
     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 
     794class 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 
    730817    def is_slit_smeared(self): 
    731818        """ 
     
    756843            y = numpy.zeros(length) 
    757844            dy = numpy.zeros(length) 
    758             lam = numpy.zeros(length) 
    759             dlam = numpy.zeros(length) 
    760             clone = Data1D(x, y, lam=lam, dx=dx, dy=dy, dlam=dlam) 
     845            clone = Data1D(x, y, dx=dx, dy=dy) 
    761846 
    762847        clone.title = self.title 
     
    9331018    ## Vector of Q-values at the center of each bin in y 
    9341019    y_bins = None 
    935     ## No 2D SESANS data as of yet. Always set it to False 
    936     isSesans = False 
    9371020 
    9381021    def __init__(self, data=None, err_data=None, qx_data=None, 
    9391022                 qy_data=None, q_data=None, mask=None, 
    9401023                 dqx_data=None, dqy_data=None): 
     1024        self.y_bins = [] 
     1025        self.x_bins = [] 
    9411026        DataInfo.__init__(self) 
    9421027        plottable_2D.__init__(self, data, err_data, qx_data, 
    9431028                              qy_data, q_data, mask, dqx_data, dqy_data) 
    944         self.y_bins = [] 
    945         self.x_bins = [] 
    946  
    9471029        if len(self.detector) > 0: 
    9481030            raise RuntimeError, "Data2D: Detector bank already filled at init" 
     
    11831265    final_dataset.xmin = data.xmin 
    11841266    final_dataset.ymin = data.ymin 
    1185     final_dataset.isSesans = datainfo.isSesans 
    11861267    final_dataset.title = datainfo.title 
    11871268    final_dataset.run = datainfo.run 
Note: See TracChangeset for help on using the changeset viewer.