示例#1
0
def mean_ia(inp,limit,only=None):
        """
        Calculate the internal angle for each peak and store in inp.mena_ia[inp.no_grains][inp.nrefl[i]]
        Jette Oddershede Januar 2009
        """
        
        import build_fcn
        build_fcn.FCN(inp)
        import fcn
        reload(fcn)

        delete = 0
        for i in range(inp.no_grains):
            if i+1 in inp.fit['skip']:
                pass
            else:
                rod = n.array([inp.rod[i][0]+inp.values['rodx%s' %i],inp.rod[i][1]+inp.values['rody%s' %i],inp.rod[i][2]+inp.values['rodz%s' %i]])
                for j in range(inp.nrefl[i]-1,-1,-1):
                    Omega = tools.form_omega_mat_general(inp.w[inp.id[i][j]]*n.pi/180,inp.values['wx']*n.pi/180,inp.values['wy']*n.pi/180)
                    gexp = fcn.gexp(inp.w[inp.id[i][j]],inp.dety[inp.id[i][j]],inp.detz[inp.id[i][j]],
                                    inp.values['wx'],inp.values['wy'],inp.values['tx'],inp.values['ty'],inp.values['tz'],
                                    inp.values['py'],inp.values['pz'],inp.values['cy'],inp.values['cz'],inp.values['L'],
                                    inp.values['x%s' %i],inp.values['y%s' %i],inp.values['z%s' %i])
                    gcalc = fcn.gcalc(inp.values['a'],inp.values['b'],inp.values['c'],inp.values['alpha'],inp.values['beta'],inp.values['gamma'],
                                      inp.h[i][j],inp.k[i][j],inp.l[i][j],
                                      rod[0],rod[1],rod[2],
                                      inp.values['epsaa%s' %i],inp.values['epsab%s' %i],inp.values['epsac%s' %i],
                                      inp.values['epsbb%s' %i],inp.values['epsbc%s' %i],inp.values['epscc%s' %i])
#                    gexp = n.dot(Omega,gexp)
#                    gcalc = n.dot(Omega,gcalc)
                    inp.mean_ia[i][j] = IA(n.transpose(gexp)[0],n.transpose(gcalc)[0])
#                    print i+1,inp.mean_ia[i][j]
                    if inp.mean_ia[i][j] > limit:
                        delete = delete + 1
                        reject(inp,i,j,'ia')

        if only != []:
            print 'Rejected', delete, 'reflection based on internal angles'
        insignificant(inp)
示例#2
0
def mean_ia_old(inp,limit,only=None):
        """
        Calculate the internal angle for each peak and store in inp.mena_ia[inp.no_grains][inp.nrefl[i]]
        Jette Oddershede Januar 2009
        """
        
        import build_fcn
        build_fcn.FCN(inp)
        import fcn
        reload(fcn)

        for i in range(inp.no_grains):
            if i+1 in inp.fit['skip']:
                pass
            else:
                rod = n.array([inp.rod[i][0]+inp.values['rodx%s' %i],inp.rod[i][1]+inp.values['rody%s' %i],inp.rod[i][2]+inp.values['rodz%s' %i]])
                for j in range(inp.nrefl[i]):
                    Omega = tools.form_omega_mat_general(inp.w[inp.id[i][j]]*n.pi/180,inp.values['wx']*n.pi/180,inp.values['wy']*n.pi/180)
                    gexp = fcn.gexp(inp.w[inp.id[i][j]],inp.dety[inp.id[i][j]],inp.detz[inp.id[i][j]],
                                    inp.values['wx'],inp.values['wy'],inp.values['tx'],inp.values['ty'],inp.values['tz'],
                                    inp.values['py'],inp.values['pz'],inp.values['cy'],inp.values['cz'],inp.values['L'],
                                    inp.values['x%s' %i],inp.values['y%s' %i],inp.values['z%s' %i])
                    gcalc = fcn.gcalc(inp.values['a'],inp.values['b'],inp.values['c'],inp.values['alpha'],inp.values['beta'],inp.values['gamma'],
                                      inp.h[i][j],inp.k[i][j],inp.l[i][j],
                                      rod[0],rod[1],rod[2],
                                      inp.values['epsaa%s' %i],inp.values['epsab%s' %i],inp.values['epsac%s' %i],
                                      inp.values['epsbb%s' %i],inp.values['epsbc%s' %i],inp.values['epscc%s' %i])
                    gexp = n.dot(Omega,gexp)
                    gcalc = n.dot(Omega,gcalc)
#                    print int(inp.h[i][j]), int(inp.k[i][j]), int(inp.l[i][j]),inp.w[inp.id[i][j]],inp.dety[inp.id[i][j]],inp.detz[inp.id[i][j]],'gexp', 2*n.pi*n.transpose(gexp)[0]/inp.param['wavelength']
#                    print int(inp.h[i][j]), int(inp.k[i][j]), int(inp.l[i][j]),inp.w[inp.id[i][j]],inp.dety[inp.id[i][j]],inp.detz[inp.id[i][j]],'gcalc', 2*n.pi*n.transpose(gcalc)[0]/inp.param['wavelength']
                    inp.mean_ia[i][j] = IA(n.transpose(gexp)[0],n.transpose(gcalc)[0])
#                    inp.mean_ia[i][j] = IAforrod(n.transpose(gexp)[0],n.transpose(gcalc)[0],rod)
#                    print inp.h[i][j], inp.k[i][j], inp.l[i][j], inp.id[i][j], inp.mean_ia[i][j]

        data = deepcopy(inp.mean_ia)
        maxia = [0]*inp.no_grains
        for i in range(inp.no_grains):
            data[i].sort()
            if i+1 in inp.fit['skip']:
                pass
            else:       
                mean = n.sum(data[i])/len(data[i])
                medi = median(data[i])
#                print i, len(data[i]), medi, mean,'\n',data[i]
                while mean > limit*medi:
                    data[i].pop()
                    mean = n.sum(data[i])/inp.nrefl[i]
                    medi = median(data[i])
                maxia[i] = max(data[i])
#                print i, len(data[i]),medi,mean,'\n',data[i],'\n'
        
        delete = 0
        if only==None:
            only = range(1,1+inp.no_grains)        
        for i in range(inp.no_grains):
            if i+1 in inp.fit['skip'] or i+1 not in only:
                pass
            else:               
                for j in range(inp.nrefl[i]-1,-1,-1): # loop backwards to make pop work
                    if inp.mean_ia[i][j] > maxia[i]:
                        delete = delete + 1
                        reject(inp,i,j,'ia')
        if only != []:
            print 'Rejected', delete, 'reflection based on internal angles'
        insignificant(inp)