Ignore:
Timestamp:
Mar 2, 2015 4:09:46 PM (10 years ago)
Author:
Doucet, Mathieu <doucetm@…>
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:
13e46abe
Parents:
c93122e
Message:

Remove extra white spaces

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/sas/calculator/resolution_calculator.py

    r79492222 r6bd3a8d1  
    2525    """ 
    2626    def __init__(self): 
    27          
     27 
    2828        # wavelength 
    2929        self.wave = Neutron() 
     
    8585        self.qxrange = [] 
    8686        self.qyrange = [] 
    87          
     87 
    8888    def compute_and_plot(self, qx_value, qy_value, qx_min, qx_max, 
    8989                          qy_min, qy_max, coord='cartesian'): 
     
    122122                            sigma_r, qx_min, qx_max, qy_min, qy_max, 
    123123                            coord, False) 
    124              
    125             # Non tof mode to be speed up 
    126             #if num_lamda < 2: 
    127             #    return self.plot_image(image) 
    128              
    129124            if qx_min > self.qx_min: 
    130125                qx_min = self.qx_min 
     
    135130            if qy_max < self.qy_max: 
    136131                qy_max = self.qy_max 
    137                  
     132 
    138133            # set max qranges 
    139134            self.qxrange = [qx_min, qx_max] 
     
    167162            sigma1d += sigma1d_list[ind] * sigma1d_list[ind] * self.intensity 
    168163            total_intensity += self.intensity 
    169          
     164 
    170165        if total_intensity != 0: 
    171166            # average variance 
     
    195190        else: 
    196191            self.image = image_out 
    197          
     192 
    198193        # plot image 
    199194        return self.plot_image(self.image) 
    200      
     195 
    201196    def setup_tof(self, wavelength, wavelength_spread): 
    202197        """ 
    203198        Setup all parameters in instrument 
    204          
     199 
    205200        : param ind: index of lambda, etc 
    206201        """ 
     
    210205        self.set_wavelength_spread(wavelength_spread) 
    211206        self.intensity = self.wave.get_intensity() 
    212          
     207 
    213208        if wavelength == 0: 
    214209            msg = "Can't compute the resolution: the wavelength is zero..." 
    215210            raise RuntimeError, msg 
    216211        return self.intensity 
    217          
     212 
    218213    def compute(self, wavelength, wavelength_spread, qx_value, qy_value, 
    219214                coord='cartesian', tof=False): 
     
    260255        # sample to detector distance 
    261256        l_two = l_sad - l_sas 
    262          
     257 
    263258        # Sample offset correction for l_one and Lp on variance calculation 
    264259        l1_cor = (l_ssa * l_two) / (l_sas + l_two) 
     
    297292        # normalize 
    298293        variance_1d_1 = knot * knot * variance_1d_1 / 12 
    299          
     294 
    300295        # for 2d 
    301296        #sigma_1 += sigma_wave_1 
     
    328323        # normalize 
    329324        variance_1d_2 = knot * knot * variance_1d_2 / 12 
    330          
     325 
    331326        # for 2d 
    332327        #sigma_2 =  knot*sqrt(sigma_2/12) 
     
    341336        self.sigma_1d = sigma1d 
    342337        return qr_value, phi, sigma_1, sigma_2, sigma_r, sigma1d 
    343      
     338 
    344339    def _within_detector_range(self, qx_value, qy_value): 
    345340        """ 
     
    364359            return False 
    365360        return True 
    366      
     361 
    367362    def get_image(self, qx_value, qy_value, sigma_1, sigma_2, sigma_r, 
    368363                  qx_min, qx_max, qy_min, qy_max, 
     
    378373        # Get  qx_max and qy_max... 
    379374        self._get_detector_qxqy_pixels() 
    380         
     375 
    381376        qr_value, phi = self._get_polar_value(qx_value, qy_value) 
    382377 
     
    397392        if not full_cal: 
    398393            return None 
    399   
     394 
    400395        # Make an empty graph in the detector scale 
    401396        dx_size = (self.qx_max - self.qx_min) / (1000 - 1) 
     
    421416            # qy_center 
    422417            qc_2 = qy_value 
    423              
     418 
    424419            # Calculate the 2D Gaussian distribution image 
    425420            image = self._gaussian2d(q_1, q_2, qc_1, qc_2, 
     
    436431        else: 
    437432            self.image_lam = image * self.intensity 
    438          
     433 
    439434        return self.image_lam 
    440      
     435 
    441436    def plot_image(self, image): 
    442437        """ 
    443438        Plot image using pyplot 
    444439        : image: 2d resolution image 
    445          
     440 
    446441        : return plt: pylab object 
    447442        """ 
     
    463458 
    464459        return plt 
    465      
     460 
    466461    def reset_image(self): 
    467462        """ 
     
    469464        """ 
    470465        self.image = [] 
    471          
     466 
    472467    def get_variance(self, size=[], distance=0, phi=0, comp='radial'): 
    473468        """ 
     
    476471        : distance: [z, x] where z along the incident beam, x // qx_value 
    477472        : comp: direction of the sigma; can be 'phi', 'y', 'x', and 'radial' 
    478          
     473 
    479474        : return variance: sigma^2 
    480475        """ 
    481476        # check the length of size (list) 
    482477        len_size = len(size) 
    483          
     478 
    484479        # define sigma component direction 
    485480        if comp == 'radial': 
     
    522517        """ 
    523518        Get the variance when the wavelength spread is given 
    524          
     519 
    525520        : radius: the radial distance from the beam center to the pix of q 
    526521        : distance: sample to detector distance 
    527522        : spread: wavelength spread (ratio) 
    528523        : comp: direction of the sigma; can be 'phi', 'y', 'x', and 'radial' 
    529          
     524 
    530525        : return variance: sigma^2 for 2d, sigma^2 for 1d [tuple] 
    531526        """ 
     
    560555            else: 
    561556                sigma *= 1 
    562                  
     557 
    563558            return sigma, sigma1d 
    564559 
     
    567562        """ 
    568563        Get the variance from gravity when the wavelength spread is given 
    569          
     564 
    570565        : s_distance: source to sample distance 
    571566        : d_distance: sample to detector distance 
     
    573568        : spread: wavelength spread (ratio) 
    574569        : comp: direction of the sigma; can be 'phi', 'y', 'x', and 'radial' 
    575          
     570 
    576571        : return variance: sigma^2 
    577572        """ 
     
    590585            sigma *= math.pow(spread, 2) 
    591586            sigma *= 8 
    592              
    593             # only for the polar coordinate 
    594             #if comp == 'radial': 
    595             #    sigma *= (math.sin(phi) * math.sin(phi)) 
    596             #elif comp == 'phi': 
    597             #    sigma *= (math.cos(phi) * math.cos(phi)) 
    598              
    599587            return sigma 
    600      
     588 
    601589    def _cal_A_value(self, lamda, s_distance, d_distance): 
    602590        """ 
    603591        Calculate A value for gravity 
    604          
     592 
    605593        : s_distance: source to sample distance 
    606594        : d_distance: sample to detector distance 
     
    624612            a_value *= (4 * lamda * lamda) 
    625613        return a_value 
    626      
     614 
    627615    def get_intensity(self): 
    628616        """ 
     
    636624        """ 
    637625        return self.wave.wavelength 
    638      
    639     #TODO: why was this method duplicated? 
    640     #def get_spectrum(self): 
    641     #    """ 
    642     #    Get spectrum 
    643     #    """ 
    644     #    return self.wave.spectrum 
    645      
     626 
    646627    def get_default_spectrum(self): 
    647628        """ 
     
    649630        """ 
    650631        return self.wave.get_default_spectrum() 
    651      
     632 
    652633    def get_spectrum(self): 
    653634        """ 
     
    655636        """ 
    656637        return self.wave.get_spectrum() 
    657           
     638 
    658639    def get_wavelength_spread(self): 
    659640        """ 
     
    661642        """ 
    662643        return self.wave.wavelength_spread 
    663      
     644 
    664645    def get_neutron_mass(self): 
    665646        """ 
     
    667648        """ 
    668649        return self.wave.mass 
    669      
     650 
    670651    def get_source_aperture_size(self): 
    671652        """ 
     
    673654        """ 
    674655        return self.aperture.source_size 
    675      
     656 
    676657    def get_sample_aperture_size(self): 
    677658        """ 
     
    679660        """ 
    680661        return self.aperture.sample_size 
    681      
     662 
    682663    def get_detector_pix_size(self): 
    683664        """ 
     
    685666        """ 
    686667        return self.detector.pix_size 
    687         
     668 
    688669    def get_detector_size(self): 
    689670        """ 
     
    691672        """ 
    692673        return self.detector.size 
    693       
     674 
    694675    def get_source2sample_distance(self): 
    695676        """ 
     
    697678        """ 
    698679        return self.aperture.sample_distance 
    699      
     680 
    700681    def get_sample2sample_distance(self): 
    701682        """ 
     
    703684        """ 
    704685        return self.sample.distance 
    705      
     686 
    706687    def get_sample2detector_distance(self): 
    707688        """ 
     
    709690        """ 
    710691        return self.detector.distance 
    711      
     692 
    712693    def set_intensity(self, intensity): 
    713694        """ 
     
    715696        """ 
    716697        self.wave.set_intensity(intensity) 
    717          
     698 
    718699    def set_wave(self, wavelength): 
    719700        """ 
     
    727708        else: 
    728709            raise 
    729      
     710 
    730711    def set_wave_spread(self, wavelength_spread): 
    731712        """ 
     
    736717        elif wavelength_spread.__class__.__name__ == 'float': 
    737718            self.wave.set_wave_spread_list([wavelength_spread]) 
    738             #self.set_wavelength_spread(wavelength_spread) 
    739719        else: 
    740720            raise 
    741          
     721 
    742722    def set_wavelength(self, wavelength): 
    743723        """ 
     
    746726        self.wavelength = wavelength 
    747727        self.wave.set_wavelength(wavelength) 
    748          
     728 
    749729    def set_spectrum(self, spectrum): 
    750730        """ 
     
    753733        self.spectrum = spectrum 
    754734        self.wave.set_spectrum(spectrum) 
    755            
     735 
    756736    def set_wavelength_spread(self, wavelength_spread): 
    757737        """ 
     
    760740        self.wavelength_spread = wavelength_spread 
    761741        self.wave.set_wavelength_spread(wavelength_spread) 
    762          
     742 
    763743    def set_wave_list(self, wavelength_list, wavelengthspread_list): 
    764744        """ 
     
    767747        self.wave.set_wave_list(wavelength_list) 
    768748        self.wave.set_wave_spread_list(wavelengthspread_list) 
    769      
     749 
    770750    def get_wave_list(self): 
    771751        """ 
     
    773753        """ 
    774754        return self.wave.get_wave_list() 
    775      
     755 
    776756    def get_intensity_list(self): 
    777757        """ 
     
    779759        """ 
    780760        return self.wave.get_intensity_list() 
    781             
     761 
    782762    def set_source_aperture_size(self, size): 
    783763        """ 
    784764        Set source aperture size 
    785          
     765 
    786766        : param size: [dia_value] or [x_value, y_value] 
    787767        """ 
     
    789769            raise RuntimeError, "The length of the size must be one or two." 
    790770        self.aperture.set_source_size(size) 
    791          
     771 
    792772    def set_neutron_mass(self, mass): 
    793773        """ 
     
    796776        self.wave.set_mass(mass) 
    797777        self.mass = mass 
    798          
     778 
    799779    def set_sample_aperture_size(self, size): 
    800780        """ 
    801781        Set sample aperture size 
    802          
     782 
    803783        : param size: [dia_value] or [xheight_value, yheight_value] 
    804784        """ 
     
    806786            raise RuntimeError, "The length of the size must be one or two." 
    807787        self.aperture.set_sample_size(size) 
    808      
     788 
    809789    def set_detector_pix_size(self, size): 
    810790        """ 
     
    812792        """ 
    813793        self.detector.set_pix_size(size) 
    814          
     794 
    815795    def set_detector_size(self, size): 
    816796        """ 
     
    819799        """ 
    820800        self.detector.set_size(size) 
    821          
     801 
    822802    def set_source2sample_distance(self, distance): 
    823803        """ 
    824804        Set detector source2sample_distance 
    825          
     805 
    826806        : param distance: [distance, x_offset] 
    827807        """ 
     
    833813        """ 
    834814        Set detector sample_slit2sample_distance 
    835          
     815 
    836816        : param distance: [distance, x_offset] 
    837817        """ 
     
    839819            raise RuntimeError, "The length of the size must be one or two." 
    840820        self.sample.set_distance(distance) 
    841     
     821 
    842822    def set_sample2detector_distance(self, distance): 
    843823        """ 
    844824        Set detector sample2detector_distance 
    845          
     825 
    846826        : param distance: [distance, x_offset] 
    847827        """ 
     
    849829            raise RuntimeError, "The length of the size must be one or two." 
    850830        self.detector.set_distance(distance) 
    851          
     831 
    852832    def get_all_instrument_params(self): 
    853833        """ 
    854834        Get all instrumental parameters 
    855835        """ 
    856         #self.intensity = self.get_intensity() 
    857         #self.wavelength = self.get_wavelength() 
    858         #self.wavelength_spread = self.get_wavelength_spread() 
    859836        self.mass = self.get_neutron_mass() 
    860837        self.spectrum = self.get_spectrum() 
     
    866843        self.sample2sample_distance = self.get_sample2sample_distance() 
    867844        self.sample2detector_distance = self.get_sample2detector_distance() 
    868      
     845 
    869846    def get_detector_qrange(self): 
    870847        """ 
    871848        get max detector q ranges 
    872          
     849 
    873850        : return: qx_min, qx_max, qy_min, qy_max tuple 
    874851        """ 
     
    879856        qy_min = self.qyrange[0] 
    880857        qy_max = self.qyrange[1] 
    881          
     858 
    882859        return qx_min, qx_max, qy_min, qy_max 
    883      
     860 
    884861    def _rotate_z(self, x_value, y_value, theta=0.0): 
    885862        """ 
     
    888865        : y_value: numpy array of y values 
    889866        : theta: angle to rotate by in rad 
    890          
     867 
    891868        :return: x_prime, y-prime 
    892         """         
     869        """ 
    893870        # rotate by theta 
    894871        x_prime = x_value * math.cos(theta) + y_value * math.sin(theta) 
    895872        y_prime = -x_value * math.sin(theta) + y_value * math.cos(theta) 
    896      
     873 
    897874        return x_prime, y_prime 
    898      
     875 
    899876    def _gaussian2d(self, x_val, y_val, x0_val, y0_val, 
    900877                    sigma_x, sigma_y, sigma_r): 
     
    907884        : sigma_x: variance in x-direction 
    908885        : sigma_y: variance in y-direction 
    909          
     886 
    910887        : return: gaussian (value) 
    911888        """ 
     
    914891        y_value = y_val - y0_val 
    915892        phi_i = numpy.arctan2(y_val, x_val) 
    916          
     893 
    917894        # phi correction due to the gravity shift (in phi) 
    918895        phi_0 = math.atan2(y0_val, x0_val) 
     
    921898        sin_phi = numpy.sin(self.gravity_phi) 
    922899        cos_phi = numpy.cos(self.gravity_phi) 
    923          
     900 
    924901        x_p = x_value * cos_phi + y_value * sin_phi 
    925902        y_p = -x_value * sin_phi + y_value * cos_phi 
    926          
     903 
    927904        new_sig_x = sqrt(sigma_r * sigma_r / (sigma_x * sigma_x) + 1) 
    928905        new_sig_y = sqrt(sigma_r * sigma_r / (sigma_y * sigma_y) + 1) 
     
    951928        : sigma_y: variance in phi-direction 
    952929        : sigma_r: wavelength variance in r-direction 
    953          
     930 
    954931        : return: gaussian (value) 
    955932        """ 
     
    958935        gaussian  = self._gaussian1d(x_val, x0_val, sigma_x) 
    959936        gaussian *= self._gaussian1d(y_val, y0_val, sigma_y) 
    960   
     937 
    961938        # normalizing factor correction 
    962939        if sigma_x != 0 and sigma_y != 0: 
    963940            gaussian *= sqrt(2 * pi) 
    964941        return gaussian 
    965      
     942 
    966943    def _gaussian1d(self, value, mean, sigma): 
    967944        """ 
     
    970947        : mean: mean value 
    971948        : sigma: variance 
    972          
     949 
    973950        : return: gaussian (value) 
    974951        """ 
     
    984961            # normalize 
    985962            gaussian /= sqrt(2 * pi) 
    986              
     963 
    987964        return gaussian 
    988      
     965 
    989966    def _atan_phi(self, qy_value, qx_value): 
    990967        """ 
     
    992969        : qx_value: x component of q 
    993970        : qy_value: y component of q 
    994          
     971 
    995972        : return phi: the azimuthal angle of q on x-y plane 
    996973        """ 
     
    1019996        Get the pixel positions of the detector in the qx_value-qy_value space 
    1020997        """ 
    1021          
     998 
    1022999        # update all param values 
    10231000        self.get_all_instrument_params() 
    1024          
     1001 
    10251002        # wavelength 
    10261003        wavelength = self.wave.wavelength 
    10271004        # Gavity correction 
    10281005        delta_y = self._get_beamcenter_drop()  # in cm 
    1029          
     1006 
    10301007        # detector_pix size 
    10311008        detector_pix_size = self.detector_pix_size 
     
    10501027        except: 
    10511028            pass 
    1052          
     1029 
    10531030        # detector size in [no of pix_x,no of pix_y] 
    10541031        detector_pix_nums_x = self.detector_size[0] 
    1055          
     1032 
    10561033        # get pix_y if it exists, otherwse take it from [0] 
    10571034        try: 
     
    10591036        except: 
    10601037            detector_pix_nums_y = self.detector_size[0] 
    1061          
     1038 
    10621039        # detector offset in pix number 
    10631040        offset_x = detector_offset / pix_x_size 
    10641041        offset_y = delta_y / pix_y_size 
    1065          
     1042 
    10661043        # beam center position in pix number (start from 0) 
    10671044        center_x, center_y = self._get_beamcenter_position(detector_pix_nums_x, 
     
    10781055        detector_ind_x = detector_ind_x - center_x 
    10791056        detector_ind_y = detector_ind_y - center_y 
    1080          
     1057 
    10811058        # unit correction in cm 
    10821059        detector_ind_x = detector_ind_x * pix_x_size 
    10831060        detector_ind_y = detector_ind_y * pix_y_size 
    1084          
     1061 
    10851062        qx_value = numpy.zeros(len(detector_ind_x)) 
    10861063        qy_value = numpy.zeros(len(detector_ind_y)) 
     
    10941071            qy_value[i] = self._get_qx(indy, sample2detector_distance, wavelength) 
    10951072            i += 1 
    1096              
     1073 
    10971074        # qx_value and qy_value values in array 
    10981075        qx_value = qx_value.repeat(detector_pix_nums_y) 
     
    11071084        self.qy_min = numpy.min(qy_value) 
    11081085        self.qy_max = numpy.max(qy_value) 
    1109                  
     1086 
    11101087        # Appr. min and max values of the detector display limits 
    11111088        # i.e., edges of the last pixels. 
     
    11191096        self.qx_max += self._get_qx(0.5 * pix_x_size, 
    11201097                                    sample2detector_distance, wavelength) 
    1121          
     1098 
    11221099        # min and max values of detecter 
    11231100        self.detector_qx_min = self.qx_min 
     
    11251102        self.detector_qy_min = self.qy_min 
    11261103        self.detector_qy_max = self.qy_max 
    1127          
     1104 
    11281105        # try to set it as a Data2D otherwise pass (not required for now) 
    11291106        try: 
     
    11361113        except: 
    11371114            pass 
    1138          
     1115 
    11391116        return output 
    1140          
     1117 
    11411118    def _get_qx(self, dx_size, det_dist, wavelength): 
    11421119        """ 
    11431120        :param dx_size: x-distance from beam center [cm] 
    11441121        :param det_dist: sample to detector distance [cm] 
    1145          
     1122 
    11461123        :return: q-value at the given position 
    11471124        """ 
     
    11521129        qx_value = (2.0 * pi / wavelength) * numpy.sin(theta) 
    11531130        return qx_value 
    1154      
     1131 
    11551132    def _get_polar_value(self, qx_value, qy_value): 
    11561133        """ 
    11571134        Find qr_value and phi from qx_value and qy_value values 
    1158          
     1135 
    11591136        : return qr_value, phi 
    11601137        """ 
     
    11631140        # find angle phi 
    11641141        phi = self._atan_phi(qy_value, qx_value) 
    1165          
     1142 
    11661143        return qr_value, phi 
    1167      
     1144 
    11681145    def _get_beamcenter_position(self, num_x, num_y, offset_x, offset_y): 
    11691146        """ 
     
    11711148        :param num_y: number of pixel in y-direction 
    11721149        :param offset: detector offset in x-direction in pix number 
    1173          
     1150 
    11741151        :return: pix number; pos_x, pos_y in pix index 
    11751152        """ 
     
    11881165        """ 
    11891166        Get the beam center drop (delta y) in y diection due to gravity 
    1190          
     1167 
    11911168        :return delta y: the beam center drop in cm 
    11921169        """ 
Note: See TracChangeset for help on using the changeset viewer.