def fit(self, iters=1): """tempopulsar.fit(iters=1) Runs `iters` iterations of the tempo2 fit, recomputing barycentric TOAs and residuals each time.""" f = fitter.wls_fitter(toas=self.t, model=self.model) for ii in range(iters + 1): f.call_minimize() fitp = f.model.get_params_dict("free", "quantity") # TODO: handle these units correctly for p, val in zip(fitp.keys(), fitp.values()): modval = getattr(f.model, p).value if (not has_astropy_unit(val)) and has_astropy_unit(modval): if type(modval) is ang.Angle: val = ang.Angle(val, unit=modval.unit) else: val = val * modval.unit self[p].val = val
def __init__( self, name, tempo_code=None, itoa_code=None, aliases=None, itrf_xyz=None, clock_file="time.dat", clock_dir="PINT", clock_fmt="tempo", include_gps=True, include_bipm=True, bipm_version=bipm_default, origin=None, overwrite=False, ): # ITRF coordinates are required if itrf_xyz is None: raise ValueError("ITRF coordinates not given for observatory '%s'" % name) # Convert coords to standard format. If no units are given, assume # meters. if not has_astropy_unit(itrf_xyz): xyz = numpy.array(itrf_xyz) * u.m else: xyz = itrf_xyz.to(u.m) # Check for correct array dims if xyz.shape != (3,): raise ValueError( "Incorrect coordinate dimensions for observatory '%s'" % (name) ) # Convert to astropy EarthLocation, ensuring use of ITRF geocentric coordinates self._loc_itrf = EarthLocation.from_geocentric(*xyz) # Save clock file info, the data will be read only if clock # corrections for this site are requested. self.clock_file = clock_file self._multiple_clock_files = not isinstance(clock_file, str) self.clock_dir = clock_dir self.clock_fmt = clock_fmt self._clock = None # The ClockFile object, will be read on demand # If using TEMPO time.dat we need to know the 1-char tempo-style # observatory code. if clock_dir == "TEMPO" and clock_file == "time.dat" and tempo_code is None: raise ValueError("No tempo_code set for observatory '%s'" % name) # GPS corrections self.include_gps = include_gps self._gps_clock = None # BIPM corrections self.include_bipm = include_bipm self.bipm_version = bipm_version self._bipm_clock = None self.tempo_code = tempo_code if aliases is None: aliases = [] for code in (tempo_code, itoa_code): if code is not None: aliases.append(code) self.origin = origin super(TopoObs, self).__init__(name, aliases=aliases)