def __init__(self, system, like='chi2_lnlike'): super(OFTI, self).__init__(system, like=like) self.priors = self.system.sys_priors self.tbl = self.system.data_table self.radec_idx = self.system.radec[1] self.seppa_idx = self.system.seppa[1] # these are of type astropy.table.column self.sep_observed = self.tbl[:]['quant1'] self.pa_observed = self.tbl[:]['quant2'] self.sep_err = self.tbl[:]['quant1_err'] self.pa_err = self.tbl[:]['quant2_err'] # convert RA/Dec rows to sep/PA for i in self.radec_idx: self.sep_observed[i], self.pa_observed[i] = radec2seppa( self.sep_observed[i], self.pa_observed[i]) self.sep_err[i], self.pa_err[i] = radec2seppa( self.sep_err[i], self.pa_err[i]) self.epochs = np.array(self.tbl['epoch']) # choose scale-and-rotate epoch self.epoch_idx = np.argmin(self.sep_err) # epoch with smallest error # create an empty results object self.results = orbitize.results.Results( sampler_name=self.__class__.__name__, post=None, lnlike=None)
def test_radec2seppa(): ras = np.array([-1, -1, 1, 1]) decs = np.array([-1, 1, -1, 1]) pas_expected = np.array([225., 315., 135., 45.]) pas_expected_180mod = np.array([225., 315., 495., 405.]) seps_expected = np.ones(4) * np.sqrt(2) sep_nomod, pa_nomod = system.radec2seppa(ras, decs) sep_180mod, pa_180mod = system.radec2seppa(ras, decs, mod180=True) assert sep_nomod == pytest.approx(seps_expected, abs=1e-3) assert sep_180mod == pytest.approx(seps_expected, abs=1e-3) assert pa_nomod == pytest.approx(pas_expected, abs=1e-3) assert pa_180mod == pytest.approx(pas_expected_180mod, abs=1e-3)
def test_radec2seppa(): """ Basic test for convenience function converting RA/DEC to SEP/PA """ ra = np.array([-1., 0., -1., 1.]) dec = np.array([0., -1., -1., 1.]) sep, pa = system.radec2seppa(ra, dec) assert sep.all() == np.array([1., 1., np.sqrt(2.), np.sqrt(2.)]).all() assert pa.all() == np.array([270., 180., 225., 45.]).all()
def __init__(self, system, like='chi2_lnlike', custom_lnlike=None): super(OFTI, self).__init__(system, like=like, custom_lnlike=custom_lnlike) # compute priors and columns containing ra/dec and sep/pa self.priors = self.system.sys_priors self.radec_idx = self.system.radec[1] self.seppa_idx = self.system.seppa[1] # store input table and table with values used by OFTI self.input_table = self.system.data_table self.data_table = self.system.data_table.copy() # these are of type astropy.table.column self.sep_observed = self.data_table[:]['quant1'].copy() self.pa_observed = self.data_table[:]['quant2'].copy() self.sep_err = self.data_table[:]['quant1_err'].copy() self.pa_err = self.data_table[:]['quant2_err'].copy() # convert RA/Dec rows to sep/PA if len(self.radec_idx) > 0: print( 'Converting ra/dec data points in data_table to sep/pa. Original data are stored in input_table.' ) for i in self.radec_idx: self.sep_observed[i], self.pa_observed[i] = radec2seppa( self.sep_observed[i], self.pa_observed[i]) self.sep_err[i], self.pa_err[i] = radec2seppa( self.sep_err[i], self.pa_err[i]) self.epochs = np.array(self.data_table['epoch']) # choose scale-and-rotate epoch self.epoch_idx = np.argmin(self.sep_err) # epoch with smallest error # create an empty results object self.results = orbitize.results.Results( sampler_name=self.__class__.__name__, post=None, lnlike=None)