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)
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)