def MC_make_angles_(R,U,pVec,detectorGeom,planeData,omeMin,omeMax,tweak = False, stdev = rad(.1)): tmpDG = detector.DetectorGeomGE(detectorGeom, pVec=pVec) recips = planeData.makeRecipVectors(R = R, U = U) wavelength = planeData.wavelength nvecs = recips.shape[1] from data_class import inv_dict allangs = inv_dict() for i in range(nvecs): rI = recips[:,i] angle_sols = Get_LLNL_Angles(rI,wavelength) for key in angle_sols.keys(): tth,eta,w = angle_sols[key] w = mapOme(w,-num.pi,num.pi) if eta!=num.pi and eta!=-num.pi: eta = mapOme(eta,-num.pi,num.pi) if w<omeMin.getVal('radians') or w>omeMax.getVal('radians'): continue if w is not None: #pred_angle_vector = num.array(detectorGeom.xyoToAng(*(px,py,w))) tmpX, tmpY, tmpO = tmpDG.angToXYO([tth,tth],[eta,eta],[w,w]) tmpX = tmpX[0] tmpY = tmpY[0] tmpO = tmpO[0] if tweak: tmpX = tmpX + num.random.normal(0,stdev) tmpY = tmpY + num.random.normal(0,stdev) tmpO = tmpO + num.random.normal(0,stdev) tmpTTh, tmpEta, tmpOme = detectorGeom.xyoToAng(tmpX, tmpY, tmpO) tmpAngs = num.vstack([tmpTTh, tmpEta, tmpOme]) allangs.Add((i,key),(num.array((tmpTTh,tmpEta,tmpOme)),(stdev,stdev,stdev))) #fangs.append([tmpTTh,tmpEta,tmpOme]) return allangs
def MC_make_angles_nrb(R,U,pVec,detectorGeom,planeData,omeMin,omeMax,tweak = False, stdev = rad(.1)): angl,axxx = Rotations.angleAxisOfRotMat(R) Rparams0 = (angl*axxx).flatten() #import uncertainty_analysis tmpDG = detector.DetectorGeomGE(detectorGeom, pVec=pVec) #print 'recip vects...', recips = planeData.makeRecipVectors(R = R, U = U) #print 'made' wavelength = planeData.wavelength nvecs = recips.shape[1] from data_class import inv_dict #allangs = inv_dict() allangs = [] #import sys #print "nvecs",nvecs for j in range(10): print j, #print "done" for i in range(nvecs): #print i #sys.stdout.write(str(i)+ " ") rI = recips[:,i] #print "rI",rI,tweak if tweak: Rparams_tweak = numpy.random.normal([0,0,0],[stdev,stdev,stdev]) #Rparams = Rparams0 + Rparams_tweak Rtweak = Rotations.rotMatOfExpMap(Rparams_tweak) #print Rparams0, Rparams rI = num.dot(Rtweak,rI) angle_sols = Get_LLNL_Angles(rI,wavelength) #print rI, angle_sols for key in angle_sols.keys(): tth,eta,w = angle_sols[key] w = mapOme(w,-num.pi,num.pi) if eta!=num.pi and eta!=-num.pi: eta = mapOme(eta,-num.pi,num.pi) if w<omeMin.getVal('radians') or w>omeMax.getVal('radians'): continue if w is not None: #pred_angle_vector = num.array(detectorGeom.xyoToAng(*(px,py,w))) tmpX, tmpY, tmpO = tmpDG.angToXYO([tth,tth],[eta,eta],[w,w]) tmpX = tmpX[0] tmpY = tmpY[0] tmpO = tmpO[0] tmpTTh, tmpEta, tmpOme = detectorGeom.xyoToAng(tmpX, tmpY, tmpO) tmpAngs = num.vstack([tmpTTh, tmpEta, tmpOme]) #allangs.Add((i,key),(num.array((tmpTTh,tmpEta,tmpOme)),(stdev,stdev,stdev))) allangs.append([tmpTTh,tmpEta,tmpOme]) return num.array(allangs)