def main(RA, DEC, EQUINOX, TRIGGERTIME, NAME): logfmt = '%(levelname)s: %(message)s\t(%(asctime)s)' datefmt= '%m/%d/%Y %I:%M:%S %p' formatter = logging.Formatter(fmt=logfmt,datefmt=datefmt) logger = logging.getLogger('__main__') logging.root.setLevel(logging.DEBUG) if not os.path.isdir("logs"): os.mkdir("logs") fh = logging.FileHandler(filename='logs/%s_obs.log' % NAME) #file handler fh.setFormatter(formatter) #logger.addHandler(ch) logger.addHandler(fh) logger.info("OBSERVABILITY DETAILS\n\n") # Script outline # # 1. When is the object visible from Paranal? # 2. Is it visible within 4 hours after the trigger? # 3. Is it visible long enough (~ 1hr) # Set the observatory information and calc twilights GRB = CelestialObject() GRB.setObservatory(siteabbrev='e') JulianDayNOW = coo.time_to_jd(time.gmtime(time.time())[0:6]) GRB.computeTwilights(intime=time.time()) GRB.computeNightLength() GRB.setRADEC(RA=RA, DEC=DEC, EQUINOX=EQUINOX) GRB.setTRIGGER(TRIGGERTIME) GRB.printInfo(NoLogger=NAME) #GRB.plotNightAltitude() #GRB._Figures = GRB._Figures - 1 #GRB.plotNightVisibility() # Check if the GRB is observable triggerDelay = 4 # hours exposureTime = 1 # hours #JulianDayNOW = GRB._OBJECTWRAPPER.jdsunset + 1/48. # temp starttime = GRB._OBJECTWRAPPER.jdsunset # temp #triggertime = GRB._OBJECTWRAPPER.jdsunset+3/24. # temp fullVisibilityArray = GRB.computeNightVisibility(telescopelimit=20, triggerdelay=(4/24.), triggertime=GRB.getTRIGGERTIME()) if len(fullVisibilityArray) == 0: logger.info("### ATTENTION ###") logger.info("Plan: do NOT trigger VLT") logger.info("REASONS") logger.info("No observability period.") logger.info("DETAILS") logger.info("Time of trigger: %s-%s-%s %s:%s:%.2f" % GRB.jd2skycalcstruct(GRB.getTRIGGERTIME())) logger.info("Current time: %s-%s-%s %s:%s:%.2f" % GRB.jd2skycalcstruct(JulianDayNOW)) logger.info("End of observability: %s-%s-%s %s:%s:%.2f" % GRB.jd2skycalcstruct(TimeArray[-1])) triggerFlag = False else: # Trigger outline # # 1. pick times that are greater than the trigger time # 2. is the length of the observation greater than 1 hour? - if we trigger before the obs period # 3. is the end of the observation - NOW, greater than 1 hour? - if we trigger during the obs period # 4. is the observable time < 4 hours after the triggerDelay for i in range(len(fullVisibilityArray)): # Trigger flag triggerFlag = True # 1. pick times that are greater than the trigger time TimeArray = fullVisibilityArray[i][1] # for 1. tmpTimeArray = numpy.array([]) for i in range(len(TimeArray)): if TimeArray[i] >= GRB.getTRIGGERTIME(): ftmpTimeArray = numpy.append(tmpTimeArray, TimeArray[i]) if len(tmpTimeArray) == 0: logger.info("### ATTENTION ###") logger.info("Plan: do NOT trigger VLT") logger.info("REASONS") logger.info("No observability period.") logger.info("DETAILS") logger.info("Time of trigger: %s-%s-%s %s:%s:%.2f" % GRB.jd2skycalcstruct(GRB.getTRIGGERTIME())) logger.info("Current time: %s-%s-%s %s:%s:%.2f" % GRB.jd2skycalcstruct(JulianDayNOW)) triggerFlag = False break logger.info("Possible observability") logger.info("%s-%s-%s %s:%s:%.2f" % GRB.jd2skycalcstruct(tmpTimeArray[0])) logger.info("%s-%s-%s %s:%s:%.2f" % GRB.jd2skycalcstruct(tmpTimeArray[-1])) # all the times needed # ATTENTION - TIMES WILL BE IN HOURS FOR COMPARISON LengthOfObservability = (tmpTimeArray[-1]-tmpTimeArray[0]) * 24 # for 2. LengthOfObservabilityFromNow = (tmpTimeArray[-1] - JulianDayNOW) * 24 # for 3. TimeBetweenTriggerAndHAWKI = (tmpTimeArray[0] - GRB.getTRIGGERTIME()) * 24. # for 4. if len(tmpTimeArray) == 0: logger.info("### ATTENTION ###") logger.info("Plan: do NOT trigger VLT") logger.info("REASONS") logger.info("No observability period.") logger.info("DETAILS") logger.info("Time of trigger: %s-%s-%s %s:%s:%.2f" % GRB.jd2skycalcstruct(GRB.getTRIGGERTIME())) logger.info("Current time: %s-%s-%s %s:%s:%.2f" % GRB.jd2skycalcstruct(JulianDayNOW)) logger.info("End of observability: %s-%s-%s %s:%s:%.2f" % GRB.jd2skycalcstruct(TimeArray[-1])) triggerFlag = False break # 2. is the length of the observation greater than 1 hour? - if we trigger before the obs period if LengthOfObservability < exposureTime: logger.info("### ATTENTION ###") logger.info("Plan: do NOT trigger VLT") logger.info("REASONS") logger.info("Observable: %s hours" % (LengthOfObservability)) logger.info("Time until triggering: %s hours" % (TimeBetweenTriggerAndHAWKI)) logger.info("DETAILS") logger.info("Time of trigger: %s-%s-%s %s:%s:%.2f" % GRB.jd2skycalcstruct(GRB.getTRIGGERTIME())) logger.info("Current time: %s-%s-%s %s:%s:%.2f" % GRB.jd2skycalcstruct(JulianDayNOW)) logger.info("Start of observability: %s-%s-%s %s:%s:%.2f" % GRB.jd2skycalcstruct(TimeArray[0])) logger.info("End of observability: %s-%s-%s %s:%s:%.2f" % GRB.jd2skycalcstruct(TimeArray[-1])) triggerFlag = False break # 3. is the end of the observation - NOW, greater than 1 hour? - if we trigger during the obs period if LengthOfObservabilityFromNow < exposureTime: logger.info("### ATTENTION ###") logger.info("Plan: do NOT trigger VLT") logger.info("REASONS") logger.info("If we trigger now, we do not have enough time to expose.") logger.info("dt = now - end of observability = %s" % (LengthOfObservabilityFromNow)) logger.info("DETAILS") logger.info("Observable: %s hours" % (LengthOfObservability)) logger.info("Time until triggering: %s hours" % (TimeBetweenTriggerAndHAWKI)) logger.info("Time of trigger: %s-%s-%s %s:%s:%.2f" % GRB.jd2skycalcstruct(GRB.getTRIGGERTIME())) logger.info("Current time: %s-%s-%s %s:%s:%.2f" % GRB.jd2skycalcstruct(JulianDayNOW)) logger.info("End of observability: %s-%s-%s %s:%s:%.2f" % GRB.jd2skycalcstruct(TimeArray[-1])) triggerFlag = False break # 4. is the observable time < 4 hours after the triggerDelay TimeBetweenTriggerAndHAWKI = (tmpTimeArray[0] - GRB.getTRIGGERTIME()) * 24. if TimeBetweenTriggerAndHAWKI > triggerDelay: logger.info("### ATTENTION ###") logger.info("Plan: do NOT trigger VLT") logger.info("REASONS") logger.info("The VLT trigger time is > 4 hours after the GRB trigger time.") logger.info("dt = %s" % (TimeBetweenTriggerAndHAWKI)) logger.info("DETAILS") logger.info("Observable: %s hours" % (LengthOfObservability)) logger.info("Time until triggering: %s hours" % (TimeBetweenTriggerAndHAWKI)) logger.info("Time of trigger: %s-%s-%s %s:%s:%.2f" % GRB.jd2skycalcstruct(GRB.getTRIGGERTIME())) logger.info("Current time: %s-%s-%s %s:%s:%.2f" % GRB.jd2skycalcstruct(JulianDayNOW)) logger.info("End of observability: %s-%s-%s %s:%s:%.2f" % GRB.jd2skycalcstruct(TimeArray[-1])) triggerFlag = False break if triggerFlag == True: break return triggerFlag, TimeArray
def check4trigger(force=False): # Logging logfmt = '%(levelname)s: %(message)s\t(%(asctime)s)' datefmt= '%m/%d/%Y %I:%M:%S %p' formatter = logging.Formatter(fmt=logfmt,datefmt=datefmt) logger = logging.getLogger('__main__') logging.root.setLevel(logging.DEBUG) if not os.path.isdir("logs"): os.mkdir("logs") fh = logging.FileHandler(filename='logs/%s_lock.log' % NAME) #file handler fh.setFormatter(formatter) #logger.addHandler(ch) logger.addHandler(fh) logger.info("TRIGGER LOCK DETAILS: SURVEILLANCE\n\n") # Checks if there is a trigger that should be called logger.info("Checking for RRM triggers awaiting HAWK-I triggering\n") # FROM DOC # -------- # OPTIONS: # 1. New trigger GRBNAME.rrm # 2. New trigger, triggered GRBNAME.rrmlock # a. Trigger lock exists; yes/no # b. if Trigger exists; New; yes/no # c. if Trigger exists; if New; # c.1. Upload FTP file # c.2. E-mail details # c.3. Finding Chart # (c.4. text message) # Check the lock folder rrmLocks = glob.glob("lock/*") newTrigger = [] previousTriggers = [] if rrmLocks: for rrmburst in rrmLocks: pattern = 'rrmlock' if re.search(pattern, rrmburst): logger.info("RRM LOCKED IGNORING BURST: %s" % rrmburst) previousTriggers.append(rrmburst) else: logger.info("RRM TRIGGER: %s" % rrmburst) newTrigger.append(rrmburst) for burst in newTrigger: # Trigger RRM # Collect the details rrmfile = open(burst, "r") rrmdata = rrmfile.readlines()[0].split(" ") rrmfile.close() rrmRA = rrmdata[0] rrmDEC = rrmdata[1] rrmName = rrmdata[2] rrmStart = float(rrmdata[3]) rrmEnd = float(rrmdata[4]) logger.info("Details of opened trigger") logger.info("rrmRA: %s" % rrmRA) logger.info("rrmDEC: %s" % rrmDEC) logger.info("rrmName: %s" % rrmName) logger.info("rrmStart: %s JD" % rrmStart) logger.info("rrmEnd: %s JD" % rrmEnd) # First we have to check if we can trigger if not force: JulianDayNOW = coo.time_to_jd(time.gmtime(time.time())[0:6]) TimeBetweenNowAndTrigger = JulianDayNOW - rrmStart if TimeBetweenNowAndTrigger > 0: logger.info("!!! TRIGGERING !!!") # Move the file to a locked rrm trigger shutil.move(burst, "%slock" % burst) else: logger.info("This trigger is in the future") logger.info("Time until trigger: %.2f hours" % (abs(TimeBetweenNowAndTrigger*24))) break # 1. Upload FTP logger.info("\nBeginning RRM Upload") OBName = "RRM_GRB_AUTO_1" RRMFile = makeRRMFile(rrmRA, rrmDEC, rrmName, OBName) uploadRRMFile(RRMFile) logger.info("Finished RRM Upload") # 2. Finding Chart logger.info("\nBeginning FC Creation") FindingChartName = "fc/%s.jpg" % (rrmName) FindingChartURL = "http://jonnyy.uwcs.co.uk/grbs/%s.jpg" % (rrmName) rrmError = 600 hack_fc(rrmRA, rrmDEC, rrmName, rrmError) upload_fc(FindingChartName) logger.info("Finished FC Creation") # 3. E-mail details logger.info("\nBeginning E-mail Sending") email_send(FindingChartURL, rrmName, OBName, rrmRA, rrmDEC) logger.info("Finished E-mail Sending") else: logger.info("NO TRIGGERS, EXITING")
break return triggerFlag, TimeArray if __name__ == "__main__": # Test cases # Trigger something observable at night # Expected: TRIGGER RA = "06:30:45.50" DEC = "-60:31:12.0" EQUINOX = "J2000" TRIGGERTIME = time.struct_time((2012, 01, 10, 23, 43, 0, 0, 0, 0)) TRIGGERTIME = coo.time_to_jd(TRIGGERTIME[0:6]) if main(RA, DEC, EQUINOX, TRIGGERTIME, "TEST"): print "\nExpected result" else: print "WARNING: FAILED!!!" print "\n\n\n\n\n" sys.exit() # Try to trigger something not observable at night # Expected: NO TRIGGER RA = "-30:30:45.50" DEC = "-60:31:12.0" EQUINOX = "J2000" TRIGGERTIME = time.struct_time((2011, 12, 21, 00, 43, 0, 0, 0, 0)) TRIGGERTIME = coo.time_to_jd(TRIGGERTIME[0:6])
# Trigger something observable at night # Expected: TRIGGER # 1. GRB INFO FROM JCG PAGES grblist = burstinfo() for grb in grblist: #RA = "06:30:45.50" #DEC = "-60:31:12.0" #EQUINOX = "J2000" #NAME = "TEST" #TRIGGERTIME = time.struct_time((2012, 01, 10, 23, 43, 0, 0, 0, 0)) RA = grb.getRA() DEC = grb.getDEC() EQUINOX = "J2000" NAME = grb.getName() TRIGGERTIME = grb.getTIME() TRIGGERTIME = coo.time_to_jd(TRIGGERTIME[0:6]) if not check4burst(RA, DEC, EQUINOX, TRIGGERTIME, NAME): print "\nExpected result" else: print "WARNING: FAILED!!!" #print "\n\n\n\n\n" #check4trigger() # Tue Dec 20 18:53:04 CET 2011