Changeset 580ee7a in sasview for calculator/instrument.py
- Timestamp:
- Aug 5, 2011 12:18:09 PM (13 years ago)
- 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
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
calculator/instrument.py
r19637b1 r580ee7a 17 17 18 18 _MIN = 0.0 19 _MAX = 30.019 _MAX = 50.0 20 20 _INTENSITY = 368428 21 21 _WAVE_LENGTH = 6.0 22 22 _WAVE_SPREAD = 0.125 23 23 _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]] 26 25 27 26 class Aperture(object): … … 152 151 self.distance = distance 153 152 validate(distance[0]) 154 155 153 154 156 155 class Neutron(object): 157 156 """ … … 160 159 def __init__(self): 161 160 162 # intensity in counts/sec163 self.intensity = _INTENSITY164 161 # neutron mass in cgs unit 165 162 self.mass = _MASS 166 # wavelength spectrum 167 self.spectrum = [] 163 168 164 # wavelength 169 165 self.wavelength = _WAVE_LENGTH 170 166 # wavelength spread (FWHM) 171 167 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) 178 176 # 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 186 182 # default unit of the thickness 187 183 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 189 230 def set_intensity(self, intensity = 368428): 190 231 """ … … 198 239 Sets the wavelength 199 240 """ 241 # check if the wavelength is in range 242 if wavelength < min(self.band) or\ 243 wavelength > max(self.band): 244 raise 200 245 self.wavelength = wavelength 201 246 validate(wavelength) 247 self.intensity = numpy.interp(self.wavelength, 248 self.spectrum[0], 249 self.spectrum[1], 250 0.0, 251 0.0) 252 202 253 203 254 def set_mass(self, mass = _MASS): … … 245 296 """ 246 297 return self.wavelength 247 248 def _set_mean(self):249 """250 To get mean value of wavelength251 """252 mean_value = numpy.mean(self.peak[0]*253 self.peak[1])254 self.mean = mean_value255 256 257 def get_mean_peakvalue(self):258 """259 To get mean value of wavelength260 """261 mean_value = numpy.mean(self.peak[1])262 return mean_value263 298 264 299 def get_spectrum(self): … … 267 302 """ 268 303 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 269 314 270 315 def plot_spectrum(self): … … 275 320 try: 276 321 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') 278 323 plt.legend(['Spectrum'], loc = 'best') 279 324 plt.show() … … 281 326 raise RuntimeError, "Can't import matplotlib required to plot..." 282 327 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 329 class 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 299 377 def validate(value = None): 300 378 """
Note: See TracChangeset
for help on using the changeset viewer.