def test2(): import gonio_psic psic = gonio_psic.test2(show=False) psic.set_angles(phi=42.,chi=33,eta=20., mu=15.,nu=75.,delta=20.) # get beam and detector vectors beam = gonio_psic.beam_vectors(h=1.3,v=0.1) det = gonio_psic.det_vectors(h=2.0,v=1.5, nu=psic.angles['nu'], delta=psic.angles['delta']) # get sample vectors sample = [[1.,1.], [.5,1.5], [-1.,1.], [-1.,-1.],[0.,.5],[1.,-1.]] angles = {'phi':108.0007,'chi':0.4831} sample = gonio_psic.sample_vectors(sample,angles=angles,gonio=psic) #sample = 1.5 # compute active_area print active_area(psic.nm,ki=psic.ki,kr=psic.kr,beam=beam, det=det,sample=sample,plot=True)
def active_area(self, plot=False, fig=None): """ Compute active area correction (c_a = A_beam/A_int**2) Use to correct scattering data for area effects, including spilloff, A_int/A_beam and normailization to unit surface area (1/A_beam), i.e. Ic = Im * ca = Im/A_ratio A_ratio = A_int/(A_beam**2) where A_int = intersection area (area of beam on sample viewed by detector) A_beam = total beam area """ if self.beam_slits == {} or self.beam_slits == None: print "Warning beam slits not specified" return 1.0 alpha = self.gonio.pangles['alpha'] beta = self.gonio.pangles['beta'] if plot == True: print 'Alpha = ', alpha, ', Beta = ', beta if alpha < 0.0: print 'alpha is less than 0.0' return 0.0 elif beta < 0.0: print 'beta is less than 0.0' return 0.0 # get beam vectors bh = self.beam_slits['horz'] bv = self.beam_slits['vert'] beam = gonio_psic.beam_vectors(h=bh, v=bv) # get det vectors if self.det_slits == None: det = None else: dh = self.det_slits['horz'] dv = self.det_slits['vert'] det = gonio_psic.det_vectors(h=dh, v=dv, nu=self.gonio.angles['nu'], delta=self.gonio.angles['delta']) # get sample poly if type(self.sample) == types.DictType: sample_dia = self.sample.get('dia', 0.) sample_vecs = self.sample.get('polygon', None) sample_angles = self.sample.get('angles', {}) # if sample_vecs != None and sample_dia <= 0.: sample = gonio_psic.sample_vectors(sample_vecs, angles=sample_angles, gonio=self.gonio) elif sample_dia > 0.: sample = sample_dia else: sample = None else: sample = self.sample # compute active_area (A_beam, A_int) = active_area(self.gonio.nm, ki=self.gonio.ki, kr=self.gonio.kr, beam=beam, det=det, sample=sample, plot=plot, fig=fig) if A_int == 0.: ca = 0. else: ca = A_beam / (A_int**2) return ca