def _beam_map_single(self, bl_index, f_index): p_stokes = [ 0.5 * np.array([[1.0, 0.0], [0.0, 1.0]]), 0.5 * np.array([[1.0, 0.0], [0.0, -1.0]]), 0.5 * np.array([[0.0, 1.0], [1.0, 0.0]]), 0.5 * np.array([[0.0, -1.0J], [1.0J, 0.0]]) ] # Get beam maps for each feed. feedi, feedj = self.uniquepairs[bl_index] beami, beamj = self.beam(feedi, f_index), self.beam(feedj, f_index) # Get baseline separation and fringe map. uv = self.baselines[bl_index] / self.wavelengths[f_index] fringe = visibility.fringe(self._angpos, self.zenith, uv) pow_stokes = [ np.sum(beami * np.dot(beamj.conjugate(), polproj), axis=1) * self._horizon for polproj in p_stokes] # Calculate the solid angle of each beam pxarea = (4*np.pi / beami.shape[0]) om_i = np.sum(np.abs(beami)**2 * self._horizon[:, np.newaxis]) * pxarea om_j = np.sum(np.abs(beamj)**2 * self._horizon[:, np.newaxis]) * pxarea omega_A = (om_i * om_j)**0.5 # Calculate the complex visibility transfer function cv_stokes = [ p * (2 * fringe / omega_A) for p in pow_stokes ] return cv_stokes
def _beam_map_single(self, bl_index, f_index): # Get beam maps for each feed. feedi, feedj = self.uniquepairs[bl_index] beami, beamj = self.beam(feedi, f_index), self.beam(feedj, f_index) # Get baseline separation and fringe map. uv = self.baselines[bl_index] / self.wavelengths[f_index] fringe = visibility.fringe(self._angpos, self.zenith, uv) # pxarea = (4 * np.pi / beami.shape[0]) # Beam solid angle (integrate over beam^2 - equal area pixels) # om_i = np.sum(np.abs(beami)**2 * self._horizon) * pxarea # om_j = np.sum(np.abs(beamj)**2 * self._horizon) * pxarea # omega_A = (om_i * om_j)**0.5 # Calculate the complex visibility transfer function # cvis = self._horizon * fringe * beami * beamj.conjugate() / omega_A # NOTE: to have consistent normalization with ps_cal, don't divide_A here cvis = self._horizon * fringe * beami * beamj.conjugate() return cvis
def _beam_map_single(self, bl_index, f_index): # Get beam maps for each feed. feedi, feedj = self.uniquepairs[bl_index] beami, beamj = self.beam(feedi, f_index), self.beam(feedj, f_index) # Get baseline separation and fringe map. uv = self.baselines[bl_index] / self.wavelengths[f_index] fringe = visibility.fringe(self._angpos, self.zenith, uv) pxarea = (4 * np.pi / beami.shape[0]) # Beam solid angle (integrate over beam^2 - equal area pixels) om_i = np.sum(np.abs(beami)**2 * self._horizon) * pxarea om_j = np.sum(np.abs(beamj)**2 * self._horizon) * pxarea omega_A = (om_i * om_j)**0.5 # Calculate the complex visibility transfer function cvis = self._horizon * fringe * beami * beamj.conjugate() / omega_A return cvis