コード例 #1
0
ファイル: gains.py プロジェクト: akutkin/SACA
 def find_gains_for_baseline(self, bl, t):
     ant1, ant2 = baselines_2_ants([bl])
     # (N, #if, #pol)
     gains1 = self.find_gains_for_antenna(ant1, t)
     gains2 = self.find_gains_for_antenna(ant2, t)
     gains12 = np.asarray([
         gains1[..., 0] * np.conjugate(gains2[..., 0]),
         gains1[..., 1] * np.conjugate(gains2[..., 1]),
         gains1[..., 0] * np.conjugate(gains2[..., 1]),
         gains1[..., 1] * np.conjugate(gains2[..., 0])
     ])
     return gains12
コード例 #2
0
ファイル: gains.py プロジェクト: akutkin/SACA
    def find_gains_for_baseline(self, t, bl):
        """
        Method that find complex antenna gains for given time and baseline.

        Given time ``t`` and baseline ``bl`` this method finds indxs of
        ``gains`` array of ``_data`` structured array of ``self``for ``ant1``,
        containing ``t`` and ``ant2``, containing ``t`` and returns array of
        gains (gain1 * gain2^*) for baseline ``bl`` for time moment ``t`` with
        shape (#stokes, #if), where ant1 < ant2.

        :param t:
            Time for which fetch gains.

        :param bl:
            Baseline for which fetch gains.

        :return:
            Numpy.ndarray.
        """

        ant1, ant2 = baselines_2_ants([bl])

        # Find indx of gains entries containing ``t`` with ant1 & ant2
        indx1 = np.where((t <= self._data['stop']) & (t >= self._data['start'])
                         & (self._data['antenna'] == ant1))[0]
        indx2 = np.where((t <= self._data['stop']) & (t >= self._data['start'])
                         & (self._data['antenna'] == ant2))[0]

        # Now each gains# has shape (#if, #pol)
        gains1 = np.squeeze(self._data[indx1]['gains'])
        gains2 = np.squeeze(self._data[indx2]['gains'])

        # ``gains12`` has shape (#stokes, #nif)
        gains12 = np.asarray([
            gains1[:, 0] * np.conjugate(gains2[:, 0]),
            gains1[:, 1] * np.conjugate(gains2[:, 1]),
            gains1[:, 0] * np.conjugate(gains2[:, 1]),
            gains1[:, 1] * np.conjugate(gains2[:, 0])
        ])

        return gains12
コード例 #3
0
ファイル: heteroboot.py プロジェクト: akutkin/SACA
            # Then second row, etc...
            i += 1
            j = 0
    except IndexError:
        break
fig.show()
fig.savefig("{}.{}".format(os.path.join(base_path, 'res_cc'), 'png'),
            bbox_inches='tight', dpi=400)
matplotlib.pyplot.close()

# Plot uv-coverage
label_size = 12
matplotlib.rcParams['xtick.labelsize'] = label_size
matplotlib.rcParams['ytick.labelsize'] = label_size
for i, color in enumerate(colors):
    uvdata_r.uv_coverage(baselines=baselines_2_ants(uvdata_r.baselines)[i],
                         sym='.{}'.format(color))
matplotlib.pyplot.show()
matplotlib.pyplot.savefig('/home/ilya/sandbox/heteroboot/uv.png',
                          bbox_inches='tight', dpi=400)
matplotlib.pyplot.close()

# Plot several histograms
label_size = 12
matplotlib.rcParams['xtick.labelsize'] = label_size
matplotlib.rcParams['ytick.labelsize'] = label_size
for i, color in enumerate(colors):
    baseline = uvdata_r.baselines[i]
    res = uvdata_r._choose_uvdata(baselines=[baseline], freq_average=True,
                                  stokes='I')[0]
    matplotlib.pyplot.hist(res.real, color="#4682b4", range=[-0.16, 0.16],
コード例 #4
0
    def __iter__(self):
        # def create_train_test_uvfits(self):
        all_baselines = self.uvdata.baselines
        for bl, scans_times in self.uvdata.baselines_scans_times.items():
            print("BASELINE = ", bl)
            self.cur_bl = bl
            ta, tb = baselines_2_ants([bl])
            ta = self.uvdata.antenna_mapping[ta]
            tb = self.uvdata.antenna_mapping[tb]
            n_scans = len(scans_times)
            # rnd_scan_number = np.random.randint(n_scans)
            half_scan_number = int(n_scans / 2)
            # if half_scan_number == 0:
            #     half_scan_number = 1
            for scan_num, scan_times in enumerate(scans_times):
                self.cur_scan = scan_num
                if scan_num != half_scan_number:
                    continue
                print("SCAN # ", scan_num)
                start_time = Time(scan_times[0], format="jd")
                stop_time = Time(scan_times[-1], format="jd")
                # Train data
                # flag_baseline_scan(self.original_uvfits, os.path.join(self.outdir, "cv_bl_{}_scan_{}_train.uvf".format(int(bl), scan_num)), ta, tb,
                #                    start_time=start_time, stop_time=stop_time, except_time_range=False)
                flag_baseline_scan(self.original_uvfits,
                                   os.path.join(self.outdir,
                                                self.train_uvfits),
                                   ta,
                                   tb,
                                   start_time=start_time,
                                   stop_time=stop_time,
                                   except_time_range=False)
                # Test data
                # Manage target baseline
                # flag_baseline_scan(self.original_uvfits, os.path.join(self.outdir, "cv_bl_{}_scan_{}_test.uvf".format(int(bl), scan_num)), ta, tb,
                #                    start_time=start_time, stop_time=stop_time, except_time_range=True)
                flag_baseline_scan(self.original_uvfits,
                                   os.path.join(self.outdir, self.test_uvfits),
                                   ta,
                                   tb,
                                   start_time=start_time,
                                   stop_time=stop_time,
                                   except_time_range=True)
                # Manage all others baselines
                for other_bl in all_baselines:
                    ta_other, tb_other = baselines_2_ants([other_bl])
                    ta_other = self.uvdata.antenna_mapping[ta_other]
                    tb_other = self.uvdata.antenna_mapping[tb_other]
                    if ta in (ta_other, tb_other) and tb in (ta_other,
                                                             tb_other):
                        continue
                    else:
                        # flag_baseline(os.path.join(self.outdir, "cv_bl_{}_scan_{}_test.uvf".format(int(bl), scan_num)),
                        #               os.path.join(self.outdir, "cv_bl_{}_scan_{}_test.uvf".format(int(bl), scan_num)),
                        #               ta_other, tb_other)
                        flag_baseline(
                            os.path.join(self.outdir, self.test_uvfits),
                            os.path.join(self.outdir, self.test_uvfits),
                            ta_other, tb_other)

                yield self.train_uvfits, self.test_uvfits
コード例 #5
0
uvdata_m.substitute([ccmodel])
uvdata_r = uvdata - uvdata_m

baseline = uvdata.baselines[0]
print "baseline {}".format(baseline)
i, indxs_i = uvdata._choose_uvdata(baselines=[baseline], IF=1, stokes='I')
rl, indxs_rl = uvdata._choose_uvdata(baselines=[baseline], IF=1, stokes='RL')
lr, indxs_lr = uvdata._choose_uvdata(baselines=[baseline], IF=1, stokes='LR')
i = i[:, 0, 0]
rl = rl[:, 0, 0]
lr = lr[:, 0, 0]

import astropy.io.fits as pf
hdus = pf.open(os.path.join(uv_data_dir, uv_fname))
hdu = hdus[3]
ant1, ant2 = baselines_2_ants([baseline])
ant1_name = hdu.data['ANNAME'][ant1 - 1]
ant2_name = hdu.data['ANNAME'][ant2 - 1]
ra = float(hdus[0].header['OBSRA'])
dec = float(hdus[0].header['OBSDEC'])
tzero = hdu.header['PZERO{}'.format(
    find_card_from_header(hdu.header, value='DATE')[0][0][-1])]
times = uvdata.data['time'][indxs_i] + tzero

pa_br = np.array(PA(times, ra, dec, br_lat, br_long))
pa_fd = np.array(PA(times, ra, dec, fd_lat, fd_long))

delta_d = 0.05

d_br = np.random.normal(0, delta_d) + 1j * np.random.normal(0, delta_d)
d_fd = np.random.normal(0, delta_d) + 1j * np.random.normal(0, delta_d)