def boxes(pixels, ka=None): t = utils.totals(pixels) m = utils.maxima(t) ka = ka or utils.k_alpha(t[m]) m &= (abs(t - ka) < .15*ka) return utils.boxes(m, pixels)
def boxes(pixels, ka=None): t = utils.totals(pixels, n=3) m = utils.maxima(pixels, n=2)[...,1:-1,1:-1] ka = ka or utils.k_alpha(t[m]) m &= (abs(t - ka) < .15*ka) return utils.boxes(m, pixels, n=3)
orbit_xyz = bl_to_xyz(orbit[:, 1:4], a) # transform back into obs and orb frames orbit_obs = np.zeros((nt + 1, 3)) orbit_orb = np.zeros((nt + 1, 3)) for i in range(nt + 1): orbit_obs[i, :] = obs_from_bh @ orbit_xyz[i, :] # orbit_obs[i,:] = orbit_xyz[i,:] orbit_orb[i, :] = orb_from_obs @ orbit_obs[i, :] # find precession angle t = orbit[:, 0] pr = orbit[:, 4] imaxs = maxima(pr) imins = minima(pr) phase = np.arctan2(orbit_orb[:, 1], orbit_orb[:, 0]) # different from keplerian fit simul_period = t[imaxs][1] - t[imaxs][0] simul_sma = (orbit_orb[imins, 0][0] - orbit_orb[imaxs, 0][0]) / 2 deltaphase = phase[imaxs][1] + np.pi print("Precession per Orbit:", deltaphase) # semi major axis # theoretical precession angle - Einstein #thdeltaphase = 24 * np.pi**3 * sma * sma \ # / (period*period * (1 - ecc*ecc)) # Gillesen 2017 thdeltaphase = 6 * np.pi / (sma * (1 - ecc * ecc))
def boxes(pixels, ka=None): t = utils.totals(pixels, n=3) m = utils.maxima(pixels, n=2)[..., 1:-1, 1:-1] ka = ka or utils.k_alpha(t[m]) m &= (abs(t - ka) < .15 * ka) return utils.boxes(m, pixels, n=3)