def calcOrbit(self): #converts every coordinate into correct units #time0 = time.time() mag = max([x.mag for x in self.dets]) errs = 0.1 if mag <= 21: errs = 0.1 else: errs = 0.1 + (mag - 21.0) / 10.0 ralist = [ephem.hours(np.deg2rad(det.ra)) for det in self.dets] #time1 = time.time() declist = [ephem.degrees(np.deg2rad(det.dec)) for det in self.dets] #time2 = time.time() datelist = [ ephem.date((Time(det.mjd, format='mjd')).datetime) for det in self.dets ] #time3 = time.time() orbit = Orbit(dates=datelist, ra=ralist, dec=declist, obscode=np.ones(len(self.dets), dtype=int) * 807, err=errs) self.orbit = orbit #time4 = time.time() #print('time1: ' + str(time1-time0)) #print('time2: ' + str(time2-time1)) # print('time3: ' + str(time3-time2)) #print('time4: ' + str(time4-time3)) orbit.get_elements() self.chiSq = orbit.chisq self.elements, self.errs = orbit.get_elements() return self.elements, self.errs
class DESKBO(object): def __init__(self, obsfile, name=None, field=None, pltcolor='k'): # print 'Reading file ', obsfile self.name=name self.field=field self.obsfile=obsfile self.observations = Catalog(self.obsfile, date=DateTime, ra=hours, dec=degrees, expnum=int, exptime=float, band=str, ccdnum=int, mag=float, \ ml_score=float, snobjid=int, orderedby='date') self.observations.add_constant('obscode', 807) self.observations.add_constant('err', 0.15) self.orbit = Orbit(self.observations) # Warning: somehow orbit.predict_pos() does not work from here. self.body = self.orbit.ellipticalBody(name=self.name) self.pltcolor=pltcolor self.elements, self.errs = self.orbit.get_elements() obsdates = sorted([o.date for o in self.observations]) self.body.compute(obsdates[0]) self.discoveryDistance = self.body.sun_distance self.size = KBOsize(self) self.epoch = self.orbit.jd0 self.mu = (self.epoch-self.elements['top'])*np.sqrt(combinedMass/self.elements['a']**3)*DAY*180/np.pi if self.mu<0: self.mu += 360.0 def predict(self, d, obscode=807): # d is an ephem.Date object self.body.compute(d) pos = {'ra':self.body.a_ra, 'dec':self.body.a_dec} return pos
def setOrbit(self): mag = min([x.mag for x in self.dets]) #time0 = time.time() errs = 0.1 if mag <= 21: errs = 0.15 else: errs = 0.15 + (mag - 21.0) / 40.0 #time1 = time.time() ralist = [ephem.hours(np.deg2rad(det.ra)) for det in self.dets] #print('ra:' + str(time.time()-time1)) #time2 = time.time() declist = [ephem.degrees(np.deg2rad(det.dec)) for det in self.dets] #print('dec:' + str(time.time()-time2)) datelist = [ ephem.date((Time(det.mjd, format='mjd')).datetime) for det in self.dets ] #time3 = time.time() #print('date:' + str(time3-time2)) #time2 = time.time()i orbit = Orbit(dates=datelist, ra=ralist, dec=declist, obscode=np.ones(len(self.dets), dtype=int) * 807, err=errs) self.orbit = orbit self.chisq = orbit.chisq #time3 = time.time() self.elements, self.errs = orbit.get_elements() #time4 = time.time() #print('time0:' + str(time1-time0)) #print('dateTime:' + str(time2-time1)) #print('orbitTime:' + str(time3-time2)) #print('getTime:' + str(time4-time3)) return orbit