Changeset 580ee7a in sasview for calculator/instrument.py


Ignore:
Timestamp:
Aug 5, 2011 12:18:09 PM (13 years ago)
Author:
Jae Cho <jhjcho@…>
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.1.1, release-4.1.2, release-4.2.2, release_4.0.1, ticket-1009, ticket-1094-headless, ticket-1242-2d-resolution, ticket-1243, ticket-1249, ticket885, unittest-saveload
Children:
148f0dd
Parents:
1bf1bc0
Message:

extended rescal to tof

File:
1 edited

Legend:

Unmodified
Added
Removed
  • calculator/instrument.py

    r19637b1 r580ee7a  
    1717 
    1818_MIN = 0.0 
    19 _MAX = 30.0 
     19_MAX = 50.0 
    2020_INTENSITY = 368428 
    2121_WAVE_LENGTH = 6.0 
    2222_WAVE_SPREAD = 0.125 
    2323_MASS = 1.67492729E-24 #[gr] 
    24 X_VAL = numpy.linspace(0, 30, 310) 
    25 _LAMBDA_ARRAY = [[0, 5, 10, 15, 20, 25, 30], [1, 1, 1, 1, 1, 1, 1]] 
     24_LAMBDA_ARRAY = [[0, 1e+16],[_INTENSITY, _INTENSITY]] 
    2625 
    2726class Aperture(object): 
     
    152151            self.distance = distance 
    153152            validate(distance[0]) 
    154      
    155          
     153 
     154             
    156155class Neutron(object): 
    157156    """ 
     
    160159    def __init__(self): 
    161160         
    162         # intensity in counts/sec 
    163         self.intensity = _INTENSITY 
    164161        # neutron mass in cgs unit 
    165162        self.mass = _MASS 
    166         # wavelength spectrum  
    167         self.spectrum = [] 
     163 
    168164        # wavelength 
    169165        self.wavelength = _WAVE_LENGTH 
    170166        # wavelength spread (FWHM) 
    171167        self.wavelength_spread = _WAVE_SPREAD 
    172         # mean wavelength 
    173         self.mean = _WAVE_LENGTH 
    174         # wavelength = distribution after velocity selector 
    175         self.peak = [] 
    176         # std of of the spectrum 
    177         self.std = None 
     168        # wavelength spectrum  
     169        self.spectrum = self.get_default_spectrum()         
     170        # intensity in counts/sec 
     171        self.intensity = numpy.interp(self.wavelength,  
     172                                      self.spectrum[0], 
     173                                      self.spectrum[1], 
     174                                      0.0, 
     175                                      0.0) 
    178176        # min max range of the spectrum 
    179         self.min = _MIN 
    180         self.max = _MAX 
    181         # x-range of the spectrum 
    182         self.x_val = X_VAL 
    183         # default distribution function 
    184         # ex., 'gaussian', or an array 
    185         self.func = _LAMBDA_ARRAY 
     177        self.min = min(self.spectrum[0]) 
     178        self.max = max(self.spectrum[0]) 
     179        # wavelength band 
     180        self.band = [self.min, self.max] 
     181 
    186182        # default unit of the thickness 
    187183        self.wavelength_unit = 'A' 
    188          
     184     
     185    def set_full_band(self): 
     186        """ 
     187        set band to default value 
     188        """ 
     189        self.band = self.spectrum 
     190    def set_spectrum(self, spectrum):   
     191        """ 
     192        Set spectrum 
     193         
     194        :param spectrum: numpy array 
     195        """ 
     196        self.spectrum = spectrum  
     197        self.setup_spectrum() 
     198          
     199    def setup_spectrum(self): 
     200        """ 
     201        To set the wavelength spectrum, and intensity, assumes  
     202        wavelength is already within the spectrum 
     203        """ 
     204        spectrum = self.spectrum 
     205        intensity = numpy.interp(self.wavelength,  
     206                                      spectrum[0], 
     207                                      spectrum[1], 
     208                                      0.0, 
     209                                      0.0) 
     210        self.set_intensity(intensity) 
     211        # min max range of the spectrum 
     212        self.min = min(self.spectrum[0]) 
     213        self.max = max(self.spectrum[0]) 
     214        # set default band 
     215        self.set_band([self.min,self.max]) 
     216         
     217    def set_band(self, band=[]): 
     218        """ 
     219        To set the wavelength band 
     220         
     221        :param band: array of [min, max] 
     222        """ 
     223        # check if the wavelength is in range 
     224        if min(band) < self.min or\ 
     225                max(band) > self.max: 
     226            raise  
     227        self.band = band 
     228 
     229          
    189230    def set_intensity(self, intensity = 368428): 
    190231        """ 
     
    198239        Sets the wavelength 
    199240        """ 
     241        # check if the wavelength is in range 
     242        if wavelength < min(self.band) or\ 
     243                wavelength > max(self.band): 
     244            raise  
    200245        self.wavelength = wavelength 
    201246        validate(wavelength) 
     247        self.intensity = numpy.interp(self.wavelength,  
     248                                  self.spectrum[0], 
     249                                  self.spectrum[1], 
     250                                  0.0, 
     251                                  0.0) 
     252 
    202253 
    203254    def set_mass(self, mass = _MASS): 
     
    245296        """ 
    246297        return self.wavelength 
    247      
    248     def _set_mean(self): 
    249         """ 
    250         To get mean value of wavelength 
    251         """ 
    252         mean_value = numpy.mean(self.peak[0]* 
    253                                 self.peak[1]) 
    254         self.mean = mean_value 
    255  
    256          
    257     def get_mean_peakvalue(self): 
    258         """ 
    259         To get mean value of wavelength 
    260         """ 
    261         mean_value = numpy.mean(self.peak[1]) 
    262         return mean_value 
    263298             
    264299    def get_spectrum(self): 
     
    267302        """ 
    268303        return self.spectrum 
     304    def get_default_spectrum(self): 
     305        """ 
     306        get default spectrum 
     307        """ 
     308        return numpy.array(_LAMBDA_ARRAY) 
     309    def get_band(self): 
     310        """ 
     311        To get the wavelength band 
     312        """ 
     313        return self.band  
    269314     
    270315    def plot_spectrum(self): 
     
    275320        try: 
    276321            import matplotlib.pyplot as plt 
    277             plt.plot(self.x_val, self.spectrum, linewidth = 2, color = 'r') 
     322            plt.plot(self.spectrum[0], self.spectrum[1], linewidth = 2, color = 'r') 
    278323            plt.legend(['Spectrum'], loc = 'best') 
    279324            plt.show() 
     
    281326            raise RuntimeError, "Can't import matplotlib required to plot..." 
    282327         
    283     def plot_peak(self): 
    284         """ 
    285         To plot the wavelength peak spactrum 
    286         : requirment: matplotlib.pyplot 
    287         """ 
    288         try: 
    289             min = self.mean * (1 - self.wavelength_spread) 
    290             max = self.mean * (1 + self.wavelength_spread) 
    291             x_val =   numpy.linspace(min, max, 310) 
    292             import matplotlib.pyplot as plt 
    293             plt.plot(x_val, self.peak, linewidth = 2, color = 'r') 
    294             plt.legend(['peak'], loc = 'best') 
    295             plt.show() 
    296         except: 
    297             raise RuntimeError, "Can't import matplotlib required to plot..." 
    298  
     328     
     329class TOF(Neutron): 
     330    """ 
     331    TOF: make list of wavelength and wave length spreads 
     332    """ 
     333    def __init__(self): 
     334        """ 
     335        Init 
     336        """ 
     337        Neutron.__init__(self) 
     338        #self.switch = switch 
     339        self.wavelength_list = [self.wavelength] 
     340        self.wavelength_spread_list = [self.wavelength_spread] 
     341        self.intensity_list = self.get_intensity_list() 
     342     
     343    def get_intensity_list(self): 
     344        """ 
     345        get list of the intensity wrt wavelength_list 
     346        """ 
     347        out = numpy.interp(self.wavelength_list,  
     348                                      self.spectrum[0], 
     349                                      self.spectrum[1], 
     350                                      0.0, 
     351                                      0.0) 
     352        return out 
     353     
     354    def get_wave_list(self): 
     355        """ 
     356        Get wavelength and wavelength_spread list 
     357        """ 
     358        return self.wavelength_list, self.wavelengthspread_list 
     359     
     360    def set_wave_list(self, wavelength=[]): 
     361        """ 
     362        Set wavelength list 
     363         
     364        :param wavelength: list of wavelengths 
     365        """ 
     366        self.wavelength_list = wavelength 
     367         
     368    def set_wave_spread_list(self, wavelength_spread=[]): 
     369        """ 
     370        Set wavelength_spread list 
     371         
     372        :param wavelength_spread: list of wavelength spreads 
     373        """ 
     374        self.wavelengthspread_list = wavelength_spread 
     375         
     376         
    299377def validate(value = None): 
    300378    """ 
Note: See TracChangeset for help on using the changeset viewer.