Example #1
0
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)
Example #2
0
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)
Example #3
0
    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