Example #1
0
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")
Example #3
0
				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