def geometric_delay(baselines, skypos, altaz=False, dircos=False, hadec=True, units='mks', latitude=None): """ --------------------------------------------------------------------- Estimates the geometric delays matrix for different baselines from different sky positions. Inputs: baselines: x, y, and z components of baseline vectors in a Mx3 numpy array skypos: Nx2 (Alt-Az or HA-Dec) or Nx3 (direction cosines) numpy array of sky positions altaz: [Boolean flag, default=False] If True, skypos is in Alt-Az coordinates system hadec: [Boolean flag, default=True] If True, skypos is in HA-Dec coordinates system dircos: [Boolean flag, default=False] If True, skypos is in direction cosines coordinates system units: Units of baselines. Default='mks'. Alternative is 'cgs'. latitude: Latitude of the observatory. Required if hadec is True. Outputs: geometric delays [NxM numpy array] Geometric delay for every combination of baselines and skypos. --------------------------------------------------------------------- """ try: baselines, skypos except NameError: raise NameError('baselines and/or skypos not defined in geometric_delay().') if (altaz)+(dircos)+(hadec) != 1: raise ValueError('One and only one of altaz, dircos, hadec must be set to True.') if hadec and (latitude is None): raise ValueError('Latitude must be specified when skypos is in HA-Dec format.') try: units except NameError: print 'No units provided. Assuming MKS units.' units = 'mks' if (units != 'mks') and (units != 'cgs'): print 'Units should be specified to be one of MKS or CGS. Default=MKS' print 'Proceeding with MKS units.' units = 'mks' if not isinstance(baselines, NP.ndarray): raise TypeError('baselines should be a Nx3 numpy array in geometric_delay().') if len(baselines.shape) == 1: baselines = baselines.reshape(1,-1) if baselines.shape[1] == 1: baselines = NP.hstack(baselines, NP.zeros((baselines.size,2))) elif baselines.shape[1] == 2: baselines = NP.hstack(baselines, NP.zeros((baselines.size,1))) elif baselines.shape[1] > 3: baselines = baselines[:,:3] if altaz or hadec: if len(skypos.shape) < 2: if skypos.size != 2: raise ValueError('Sky position in altitude-azimuth or HA-Dec should consist of 2 elements.') else: skypos = skypos.reshape(1,-1) elif len(skypos.shape) > 2: raise ValueError('Sky positions should be a Nx2 numpy array if using altitude-azimuth of HA-Dec.') else: if skypos.shape[1] != 2: raise ValueError('Sky positions should be a Nx2 numpy array if using altitude-azimuth of HA-Dec.') if altaz: dc = GEOM.altaz2dircos(skypos, 'degrees') else: dc = GEOM.altaz2dircos(GEOM.hadec2altaz(skypos, latitude, 'degrees'), 'degrees') else: if len(skypos.shape) < 2: if skypos.size != 3: raise ValueError('Sky position in direction cosines should consist of 3 elements.') else: skypos = skypos.reshape(1,-1) elif len(skypos.shape) > 2: raise ValueError('Sky positions should be a Nx3 numpy array if using direction cosines.') else: if skypos.shape[1] != 3: raise ValueError('Sky positions should be a Nx3 numpy array if using direction cosines.') dc = skypos # geometric_delays = delay_envelope(baselines, dc, units)[:,:,-1] geometric_delays = NP.dot(dc, baselines.T)/c return geometric_delays
# pfb_interp_func = interpolate.interp1d(pfbfreq[useful_freq_range]/1e3, pfbwin[useful_freq_range]) # pfbwin_interp = pfb_interp_func(chans) pfbwin_interp = NP.interp(chans, pfbfreq[useful_freq_range]/1e3, pfbwin[useful_freq_range]) bandpass_shape = 10**(pfbwin_interp/10) window = n_channels * DSP.windowing(n_channels, shape=bpass_shape, pad_width=n_pad, centering=True, area_normalize=True) bpass = base_bpass * bandpass_shape n_snaps = int(t_obs/t_snap) lst = (lst_init + (t_snap/3.6e3) * NP.arange(n_snaps)) * 15.0 # in degrees if obs_mode == 'track': pointings_radec = NP.repeat(NP.asarray(pointing_init).reshape(-1,2), n_snaps, axis=0) else: pointings_radec = NP.hstack((NP.asarray(lst-pointing_init[0]).reshape(-1,1), pointing_init[1]+NP.zeros(n_snaps).reshape(-1,1))) pointings_hadec = NP.hstack(((lst-pointings_radec[:,0]).reshape(-1,1), pointings_radec[:,1].reshape(-1,1))) pointings_altaz = GEOM.hadec2altaz(pointings_hadec, latitude, units='degrees') pointings_dircos = GEOM.altaz2dircos(pointings_altaz, units='degrees') ## Interferometer parameters # baseline_orientation = NP.asarray([0.0, 90.0]) # in degrees from East towards North # baseline_length = 1000.0 + NP.zeros(2) # in m # baseline_vect = NP.zeros((2,3)) # baseline_vect[:,0] = baseline_length * NP.cos(NP.radians(baseline_orientation)) # baseline_vect[:,1] = baseline_length * NP.sin(NP.radians(baseline_orientation)) # baseline_orientation_str = '{0:.1f}'.format(baseline_orientation) # baseline_length_str = '{0:.1f}'.format(baseline_length) # ia = RI.InterferometerArray(labels, bl, chans, telescope=telescope, latitude=latitude, A_eff=A_eff, freq_scale='GHz') # # ia = RI.InterferometerArray(['B1','B2'], baseline_vect, chans, telescope=telescope, latitude=latitude, A_eff=A_eff, freq_scale='GHz')
bandpass_shape[flagged_channels] = 0.0 n_snaps = int(1.0 * t_obs / t_snap) lst = (lst_init + (t_snap / 3.6e3) * NP.arange(n_snaps)) * 15.0 # in degrees if obs_mode == 'track': pointings_radec = NP.repeat(NP.asarray(pointing_init).reshape(-1, 2), n_snaps, axis=0) else: pointings_radec = NP.hstack( (NP.asarray(lst - pointing_init[0]).reshape(-1, 1), pointing_init[1] + NP.zeros(n_snaps).reshape(-1, 1))) pointings_hadec = NP.hstack(((lst - pointings_radec[:, 0]).reshape(-1, 1), pointings_radec[:, 1].reshape(-1, 1))) pointings_altaz = GEOM.hadec2altaz(pointings_hadec, latitude, units='degrees') pointings_dircos = GEOM.altaz2dircos(pointings_altaz, units='degrees') use_GSM = args['ASM'] use_DSM = args['DSM'] use_NVSS = args['NVSS'] use_SUMSS = args['SUMSS'] use_MSS = args['MSS'] use_GLEAM = args['GLEAM'] use_PS = args['PS'] fg_str = '' nside = args['nside'] flux_unit = args['flux_unit'] if use_GSM:
hdulist = fits.open(infile+'.fits') latitude = hdulist[0].header['latitude'] pointing_coords = hdulist[0].header['pointing_coords'] pointings_table = hdulist['POINTING AND PHASE CENTER INFO'].data lst = pointings_table['LST'] n_snaps = lst.size hdulist.close() if pointing_coords == 'altaz': pointings_altaz = NP.hstack((pointings_table['pointing_latitude'].reshape(-1,1), pointings_table['pointing_longitude'].reshape(-1,1))) pointings_hadec = GEOM.altaz2hadec(pointings_altaz, latitude, units='degrees') pointings_dircos = GEOM.altaz2dircos(pointings_altaz, units='degrees') elif pointing_coords == 'radec': pointings_radec = NP.hstack((pointings_table['pointing_longitude'].reshape(-1,1), pointings_table['pointing_latitude'].reshape(-1,1))) pointings_hadec = NP.hstack(((lst-pointings_radec[:,0]).reshape(-1,1), pointings_radec[:,1].reshape(-1,1))) pointings_altaz = GEOM.hadec2altaz(pointings_hadec, latitude, units='degrees') pointings_dircos = GEOM.altaz2dircos(pointings_altaz, units='degrees') elif pointing_coords == 'hadec': pointings_hadec = NP.hstack((pointings_table['pointing_longitude'].reshape(-1,1), pointings_table['pointing_latitude'].reshape(-1,1))) pointings_radec = NP.hstack(((lst-pointings_hadec[:,0]).reshape(-1,1), pointings_hadec[:,1].reshape(-1,1))) pointings_altaz = GEOM.hadec2altaz(pointings_hadec, latitude, units='degrees') pointings_dircos = GEOM.altaz2dircos(pointings_altaz, units='degrees') hdulist = fits.open(asm_CLEAN_infile+'.fits') clean_lags = hdulist['SPECTRAL INFO'].data['lag'] clean_lags_orig = NP.copy(clean_lags) asm_cc_skyvis = hdulist['CLEAN NOISELESS VISIBILITIES REAL'].data + 1j * hdulist['CLEAN NOISELESS VISIBILITIES IMAG'].data asm_cc_skyvis_res = hdulist['CLEAN NOISELESS VISIBILITIES RESIDUALS REAL'].data + 1j * hdulist['CLEAN NOISELESS VISIBILITIES RESIDUALS IMAG'].data asm_cc_vis = hdulist['CLEAN NOISY VISIBILITIES REAL'].data + 1j * hdulist['CLEAN NOISY VISIBILITIES IMAG'].data asm_cc_vis_res = hdulist['CLEAN NOISY VISIBILITIES RESIDUALS REAL'].data + 1j * hdulist['CLEAN NOISY VISIBILITIES RESIDUALS IMAG'].data hdulist.close()
obs_mode = 'track' if obs_mode == 'track': pointings_radec = NP.repeat(NP.asarray(pointing_init).reshape(-1, 2), n_snaps, axis=0) else: ha_init = lst_init * 15.0 - pointing_init[0] pointings_radec = NP.hstack( (NP.asarray(lst - ha_init).reshape(-1, 1), pointing_init[1] + NP.zeros(n_snaps).reshape(-1, 1))) pointings_hadec = NP.hstack(((lst - pointings_radec[:, 0]).reshape(-1, 1), pointings_radec[:, 1].reshape(-1, 1))) pointings_altaz = GEOM.hadec2altaz(pointings_hadec, latitude, units='degrees') pointings_dircos = GEOM.altaz2dircos(pointings_altaz, units='degrees') pointings_radec_orig = NP.copy(pointings_radec) pointings_hadec_orig = NP.copy(pointings_hadec) pointings_altaz_orig = NP.copy(pointings_altaz) pointings_dircos_orig = NP.copy(pointings_dircos) lst_wrapped = lst + 0.0 lst_wrapped[lst_wrapped > 180.0] = lst_wrapped[lst_wrapped > 180.0] - 360.0 if lst_wrapped.size > 1: lst_edges = NP.concatenate( (lst_wrapped, [lst_wrapped[-1] + lst_wrapped[-1] - lst_wrapped[-2]])) else:
ant_locs = NP.loadtxt(antenna_file, skiprows=6, comments='#', usecols=(1,2,3)) bl = RI.baseline_generator(ant_locs, auto=False, conjugate=False) bl_lengths = NP.sqrt(NP.sum(bl**2,axis=1)) decl = -27.0 # in degrees lat = -27.0 # in degrees ha_range = 4.0 # in hrs ha_step = 1.0/60. # in hrs ha = 15.0*NP.arange(-ha_range/2, ha_range/2, ha_step) ha = NP.asarray(ha).reshape(-1,1) dec = decl + NP.zeros((len(ha),1)) dec.reshape(-1,1) hadec = NP.hstack((ha, dec)) altaz = GEOM.hadec2altaz(hadec, lat, units='degrees') dircos = GEOM.altaz2dircos(altaz, units='degrees') dm = DLY.delay_envelope(bl, dircos, units='mks') min_delays = dm[:,:,1]-dm[:,:,0] max_delays = NP.sum(dm,axis=2) fig = PLT.figure(figsize=(14,8)) ax = PLT.axes([0.12,0.1,0.8,0.8]) PLT.xlim(NP.min(bl_lengths)-1.0,NP.max(bl_lengths)+100.0) PLT.ylim(1e9*(NP.min(min_delays)-1.e-8),1e9*(NP.max(max_delays)+1.e-8)) PLT.xlabel('Baseline Length [m]', fontsize=18, weight='semibold') PLT.ylabel('Delay [ns]', fontsize=18, weight='semibold') PLT.title('Delay Envelope', fontsize=18, weight='semibold')
def observe( self, timestamp, Tsys, bandpass, pointing_center, skymodel, tobs, pb_min=0.1, fov_radius=None, lst=None ): if bandpass.size != self.bp.shape[1]: raise ValueError("bandpass length does not match.") self.Tsys = self.Tsys + [Tsys] self.vis_rms_freq = self.vis_rms_freq + [ 2.0 * FCNST.k * Tsys / self.A_eff / self.eff_Q / NP.sqrt(2) / tobs / self.freq_resolution / CNST.Jy ] self.tobs = self.tobs + [tobs] self.lst = self.lst + [lst] if self.timestamp == []: self.bp = NP.asarray(bandpass).reshape(1, -1) self.pointing_center = NP.asarray(pointing_center).reshape(1, -1) else: self.bp = NP.vstack((self.bp, NP.asarray(bandpass).reshape(1, -1))) self.pointing_center = NP.vstack((self.pointing_center, NP.asarray(pointing_center).reshape(1, -1))) pointing_lon = self.pointing_center[-1, 0] pointing_lat = self.pointing_center[-1, 1] if self.skycoords == "radec": if self.pointing_coords == "hadec": if lst is not None: pointing_lon = lst - self.pointing_center[-1, 0] pointing_lat = self.pointing_center[-1, 1] else: raise ValueError( "LST must be provided. Sky coordinates are in RA-Dec format while pointing center is in HA-Dec format." ) elif self.pointing_coords == "altaz": pointing_lonlat = lst - GEOM.altaz2hadec(self.pointing_center[-1, :], self.latitude, units="degrees") pointing_lon = pointing_lonlat[0] pointing_lat = pointing_lonlat[1] elif self.skycoords == "hadec": if self.pointing_coords == "radec": if lst is not None: pointing_lon = lst - self.pointing_center[-1, 0] pointing_lat = self.pointing_center[-1, 1] else: raise ValueError( "LST must be provided. Sky coordinates are in RA-Dec format while pointing center is in HA-Dec format." ) elif self.pointing_coords == "altaz": pointing_lonlat = lst - GEOM.altaz2hadec(self.pointing_center[-1, :], self.latitude, units="degrees") pointing_lon = pointing_lonlat[0] pointing_lat = pointing_lonlat[1] else: if self.pointing_coords == "radec": if lst is not None: pointing_lonlat = GEOM.hadec2altaz( NP.asarray([lst - self.pointing_center[-1, 0], self.pointing_center[-1, 1]]), self.latitude, units="degrees", ) pointing_lon = pointing_lonlat[0] pointing_lat = pointing_lonlat[1] else: raise ValueError( "LST must be provided. Sky coordinates are in Alt-Az format while pointing center is in RA-Dec format." ) elif self.pointing_coords == "hadec": pointing_lonlat = GEOM.hadec2altaz(self.pointing_center, self.latitude, units="degrees") pointing_lon = pointing_lonlat[0] pointing_lat = pointing_lonlat[1] pointing_phase = 0.0 baseline_in_local_frame = self.baseline if self.baseline_coords == "equatorial": baseline_in_local_frame = GEOM.xyz2enu(self.baseline, self.latitude, "degrees") ptmp = self.pointing_center[-1, :] # Convert pointing center to Alt-Az coordinates if self.pointing_coords == "hadec": ptmp = GEOM.hadec2altaz(self.pointing_center[-1, :], self.latitude, units="degrees") elif self.pointing_coords == "radec": if lst is not None: ptmp = GEOM.hadec2altaz( NP.asarray([lst - self.pointing_center[-1, 0], self.pointing_center[-1, 1]]), self.latitude, units="degrees", ) else: raise ValueError( "LST must be provided. Sky coordinates are in Alt-Az format while pointing center is in RA-Dec format." ) ptmp = GEOM.altaz2dircos(ptmp, "degrees") # Convert pointing center to direction cosine coordinates pointing_phase = ( 2.0 * NP.pi * NP.dot(baseline_in_local_frame.reshape(1, -1), ptmp.reshape(-1, 1)) * self.channels.reshape(1, -1) / FCNST.c ) if fov_radius is None: fov_radius = 90.0 # PDB.set_trace() m1, m2, d12 = GEOM.spherematch( pointing_lon, pointing_lat, skymodel.catalog.location[:, 0], skymodel.catalog.location[:, 1], fov_radius, maxmatches=0, ) # if fov_radius is not None: # m1, m2, d12 = GEOM.spherematch(pointing_lon, pointing_lat, skymodel.catalog.location[:,0], skymodel.catalog.location[:,1], fov_radius, maxmatches=0) # else: # m1 = [0] * skymodel.catalog.location.shape[0] # m2 = xrange(skymodel.catalog.location.shape[0]) # d12 = GEOM.sphdist(NP.empty(skymodel.catalog.shape[0]).fill(pointing_lon), NP.empty(skymodel.catalog.shape[0]).fill(pointing_lat), skymodel.catalog.location[:,0], skymodel.catalog.location[:,1]) if len(d12) != 0: pb = NP.empty((len(d12), len(self.channels))) fluxes = NP.empty((len(d12), len(self.channels))) coords_str = self.skycoords if self.skycoords == "radec": coords_str = "altaz" source_positions = GEOM.hadec2altaz( NP.hstack( ( NP.asarray(lst - skymodel.catalog.location[m2, 0]).reshape(-1, 1), skymodel.catalog.location[m2, 1].reshape(-1, 1), ) ), self.latitude, "degrees", ) for i in xrange(len(self.channels)): # pb[:,i] = PB.primary_beam_generator(d12, self.channels[i]/1.0e9, 'degrees', self.telescope) pb[:, i] = PB.primary_beam_generator( source_positions, self.channels[i] / 1.0e9, "altaz", self.telescope ) fluxes[:, i] = ( skymodel.catalog.flux_density[m2] * (self.channels[i] / skymodel.catalog.frequency) ** skymodel.catalog.spectral_index[m2] ) geometric_delays = DLY.geometric_delay( baseline_in_local_frame, source_positions, altaz=(coords_str == "altaz"), hadec=(coords_str == "hadec"), latitude=self.latitude, ) self.geometric_delays = self.geometric_delays + [geometric_delays.reshape(len(source_positions))] phase_matrix = 2.0 * NP.pi * NP.repeat( geometric_delays.reshape(-1, 1), len(self.channels), axis=1 ) * NP.repeat(self.channels.reshape(1, -1), len(d12), axis=0) - NP.repeat(pointing_phase, len(d12), axis=0) skyvis = NP.sum( pb * fluxes * NP.repeat(NP.asarray(bandpass).reshape(1, -1), len(d12), axis=0) * NP.exp(-1j * phase_matrix), axis=0, ) if fov_radius is not None: self.obs_catalog_indices = self.obs_catalog_indices + [m2] # self.obs_catalog = self.obs_catalog + [skymodel.catalog.subset(m2)] else: print "No sources found in the catalog within matching radius. Simply populating the observed visibilities with noise." skyvis = NP.zeros((1, len(self.channels))) if self.timestamp == []: self.skyvis_freq = skyvis.reshape(1, -1) self.vis_noise_freq = self.vis_rms_freq[-1] * ( NP.random.randn(len(self.channels)).reshape(1, -1) + 1j * NP.random.randn(len(self.channels)).reshape(1, -1) ) self.vis_freq = self.skyvis_freq + self.vis_noise_freq else: self.skyvis_freq = NP.vstack((self.skyvis_freq, skyvis.reshape(1, -1))) self.vis_noise_freq = NP.vstack( ( self.vis_noise_freq, self.vis_rms_freq[-1] * ( NP.random.randn(len(self.channels)).reshape(1, -1) + 1j * NP.random.randn(len(self.channels)).reshape(1, -1) ), ) ) self.vis_freq = NP.vstack( (self.vis_freq, (self.skyvis_freq[-1, :] + self.vis_noise_freq[-1, :]).reshape(1, -1)) ) self.timestamp = self.timestamp + [timestamp]
n_snaps = int(t_obs/t_snap) else: t_obs = n_snaps * t_snap t_snap = t_snap + NP.zeros(n_snaps) lst = (lst_init + (t_snap/3.6e3) * NP.arange(n_snaps)) * 15.0 # in degrees if obs_mode is None: obs_mode = 'track' if obs_mode == 'track': pointings_radec = NP.repeat(NP.asarray(pointing_init).reshape(-1,2), n_snaps, axis=0) else: ha_init = lst_init * 15.0 - pointing_init[0] pointings_radec = NP.hstack((NP.asarray(lst-ha_init).reshape(-1,1), pointing_init[1]+NP.zeros(n_snaps).reshape(-1,1))) pointings_hadec = NP.hstack(((lst-pointings_radec[:,0]).reshape(-1,1), pointings_radec[:,1].reshape(-1,1))) pointings_altaz = GEOM.hadec2altaz(pointings_hadec, latitude, units='degrees') pointings_dircos = GEOM.altaz2dircos(pointings_altaz, units='degrees') pointings_radec_orig = NP.copy(pointings_radec) pointings_hadec_orig = NP.copy(pointings_hadec) pointings_altaz_orig = NP.copy(pointings_altaz) pointings_dircos_orig = NP.copy(pointings_dircos) lst_wrapped = lst + 0.0 lst_wrapped[lst_wrapped > 180.0] = lst_wrapped[lst_wrapped > 180.0] - 360.0 if lst_wrapped.size > 1: lst_edges = NP.concatenate((lst_wrapped, [lst_wrapped[-1]+lst_wrapped[-1]-lst_wrapped[-2]])) else: lst_edges = NP.concatenate((lst_wrapped, lst_wrapped+t_snap/3.6e3*15)) duration_str = '_{0:0d}x{1:.1f}s'.format(n_snaps, t_snap[0])
ant_locs = NP.loadtxt(antenna_file, skiprows=6, comments="#", usecols=(1, 2, 3)) bl = GEOM.baseline_generator(ant_locs, auto=False, conjugate=False) bl_lengths = NP.sqrt(NP.sum(bl ** 2, axis=1)) decl = -27.0 # in degrees lat = -27.0 # in degrees ha_range = 4.0 # in hrs ha_step = 1.0 / 60.0 # in hrs ha = 15.0 * NP.arange(-ha_range / 2, ha_range / 2, ha_step) ha = NP.asarray(ha).reshape(-1, 1) dec = decl + NP.zeros((len(ha), 1)) dec.reshape(-1, 1) hadec = NP.hstack((ha, dec)) altaz = GEOM.hadec2altaz(hadec, lat, units="degrees") dircos = GEOM.altaz2dircos(altaz, units="degrees") dm = DLY.delay_envelope(bl, dircos, units="mks") min_delays = dm[:, :, 1] - dm[:, :, 0] max_delays = NP.sum(dm, axis=2) fig = PLT.figure(figsize=(14, 8)) ax = PLT.axes([0.12, 0.1, 0.8, 0.8]) PLT.xlim(NP.min(bl_lengths) - 1.0, NP.max(bl_lengths) + 100.0) PLT.ylim(1e9 * (NP.min(min_delays) - 1.0e-8), 1e9 * (NP.max(max_delays) + 1.0e-8)) PLT.xlabel("Baseline Length [m]", fontsize=18, weight="semibold") PLT.ylabel("Delay [ns]", fontsize=18, weight="semibold") PLT.title("Delay Envelope", fontsize=18, weight="semibold")
## GSM and Power pattern animation data gsm_cartesian = HP.cartview(fluxes.ravel(), coord=['G','E'], xsize=200, return_projected_map=True) ragrid, decgrid = NP.meshgrid(NP.linspace(NP.amin(ra_deg), NP.amax(ra_deg), gsm_cartesian.shape[1]), NP.linspace(NP.amin(dec_deg), NP.amax(dec_deg), gsm_cartesian.shape[0])) ravect = ragrid.ravel() decvect = decgrid.ravel() n_snaps = int(t_obs/t_snap) lst = (lst_init + (t_snap/3.6e3) * NP.arange(n_snaps)) * 15.0 # in degrees # Get pointings in RA-Dec coordinates for animation if obs_mode == 'track': pointings_radec = NP.repeat(NP.asarray(pointing_init).reshape(-1,2), n_snaps, axis=0) else: pointings_radec = NP.hstack((NP.asarray(lst-pointing_init[0]).reshape(-1,1), pointing_init[1]+NP.zeros(n_snaps).reshape(-1,1))) pointings_hadec = NP.hstack(((lst-pointings_radec[:,0]).reshape(-1,1), pointings_radec[:,1].reshape(-1,1))) pointings_altaz = GEOM.hadec2altaz(pointings_hadec, MWA_latitude, units='degrees') pointings_dircos = GEOM.altaz2dircos(pointings_altaz, units='degrees') delay_matrix = DLY.delay_envelope(intrfrmtr.baseline, pointings_dircos, units='mks') pbeams = [] m2s = [] for i in xrange(n_snaps): havect = lst[i] - ravect altaz = GEOM.hadec2altaz(NP.hstack((havect.reshape(-1,1),decvect.reshape(-1,1))), MWA_latitude, units='degrees') # m1, m2, d12 = GEOM.spherematch(pointings[i,0], pointings[i,1], ravect, decvect, 90.0, maxmatches=0) roi_altaz = NP.asarray(NP.where(altaz[:,0] >= 0.0)).ravel() pb = PB.primary_beam_generator(altaz[roi_altaz,:], freq, telescope='mwa', skyunits='altaz', freq_scale='Hz', phase_center=pointings_altaz[i,:]) pbeams += [pb] m2s += [roi_altaz] ## Plotting animation