def PixelsToQ(data, correct_solid_angle=True): """ generate a q_map for sansdata. Each pixel will have 4 values: (qx,qy,q,theta) **Inputs** data (sans2d): data in correct_solid_angle {Correct solid angle} (bool): Apply correction for mapping curved Ewald sphere to flat detector **Returns** output (sans2d): converted to I vs. Qx, Qy 2016-04-06 Brian Maranville """ L2=data.metadata['det.dis'] x0=data.metadata['det.beamx'] #should be close to 64 y0=data.metadata['det.beamy'] #should be close to 64 wavelength=data.metadata['resolution.lmda'] shape=data.data.x.shape qx=np.empty(shape,'Float64') qy=np.empty(shape,'Float64') x,y = np.indices(shape) X=data.metadata['det.pixelsizex']/10.0*(x-x0) # in mm in nexus Y=data.metadata['det.pixelsizey']/10.0*(y-y0) r=np.sqrt(X**2+Y**2) theta=np.arctan2(r,L2*100)/2 #remember to convert L2 to cm from meters q=(4*np.pi/wavelength)*np.sin(theta) alpha=np.arctan2(Y,X) qx=q*np.cos(alpha) qy=q*np.sin(alpha) if correct_solid_angle: data.data.x = data.data.x * (np.cos(theta)**3) res=SansData() res.data=copy(data.data) res.metadata=deepcopy(data.metadata) #Adding res.q res.q = q res.qx=qx res.qy=qy res.theta=theta return res