Документ взят из кэша поисковой машины. Адрес оригинального документа : http://www.stsci.edu/spst/UnixTransition/doc/sms_exposure_check.py
Дата изменения: Fri Apr 8 12:46:13 2016
Дата индексирования: Mon Apr 11 04:28:04 2016
Кодировка:

Поисковые слова: http astrokuban.info astrokuban
#
#MODULE sms_exposure_check
#
#***********************************************************************
"""

**PURPOSE** --
This procedure compares the exposures that appear on the SMS against those
in the PMDB and reports those that do not appear on the SMS and probably
should.

**DEVELOPER** --
Don Chance

**MODIFICATION HISTORY** --

o Initial implementation 9/28/00
o Fix bug introduced with revised sms_util. drc 3/12/03
o code cleanup 12/8/15 drc
"""
#***********************************************************************
from abstract_check import abstract_check, UNKNOWN, PASS
from checklist_init import sogs_db
import stpydb


class sms_exposure_check(abstract_check):
"""Verify the planned exposures appear on the SMS
"""
def run(self):
abstract_check.run(self)
file_pointer = open(self.outfile, "w")

# Get all the exposures that should appear on the SMS out of the database
dbconnection = stpydb.stpydb(dbmsName=sogs_db)
dbconnection.query("select qel.proposal_id, qel.obset_id,")
dbconnection.query(" qel.alignment_id, qel.exposure_id, qel.version_num,")
dbconnection.query(" qel.config, qel.opmode")

dbconnection.query("from qalignment qal,")
dbconnection.query(" qpdescrip qpd,")
dbconnection.query(" qsbranching qsb,")
dbconnection.query(" qelogsheet qel,")
dbconnection.query(" qgactinst qga,")
dbconnection.query(" wistat_sunit wis")

dbconnection.query("where wis.sunit_id = qsb.sunit_id")
dbconnection.query("and wis.version_num = qsb.version_num")
dbconnection.query("and wis.version_num = qel.version_num")
dbconnection.query("and wis.version_num = qal.version_num")
dbconnection.query("and qsb.proposal_id = qel.proposal_id")
dbconnection.query("and qsb.proposal_id = qpd.proposal_id")
dbconnection.query("and qsb.proposal_id = qal.proposal_id")
dbconnection.query("and qsb.proposal_id = qga.proposal_id")
dbconnection.query("and qsb.obset_id = qel.obset_id")
dbconnection.query("and qsb.obset_id = qal.obset_id")
dbconnection.query("and qsb.obset_id = qga.obset_id")
dbconnection.query("and qal.alignment_id = qel.alignment_id")
dbconnection.query("and qal.alignment_id = qga.alignment_id")
dbconnection.query("and qel.exposure_id = qga.exposure_id")
dbconnection.query("and qga.instr_name != 'QDUMMY'")
dbconnection.query("and qel.opmode not in ('DUMMY', 'POINTING')")
dbconnection.query("and wis.sunit_status >= 2")
dbconnection.query("and wis.cc_or_sms_na = @sms")
dbconnection.query("and wis.cc_or_sms_vn = @ver")

dbconnection.query("order by wis.beg_tim, qel.proposal_id,")
dbconnection.query(" qel.obset_id, qal.sequence,")
dbconnection.query(" qel.alignment_id, qel.exposure_id,")
dbconnection.query(" qel.version_num")
dbconnection.setParam([["sms", self.my_checklist.calendar.get_name()],
["ver", self.my_checklist.calendar.get_version()]])

pmdb_exposure_list = [{}]
dbconnection.executeAll(pmdb_exposure_list)

# Match each exposure from the PMDB with one from the SMS
missing_exposures_list = []
sms_exposure_list = self.my_checklist.my_sms.get_exposures()
sms_exposure_nos = range(len(sms_exposure_list))
for pmdb_exposure in pmdb_exposure_list:
for i in sms_exposure_nos:
if (sms_exposure_list[i]['prop_id'] == pmdb_exposure['proposal_id'] and
sms_exposure_list[i]['obset_id'] == pmdb_exposure['obset_id'] and
sms_exposure_list[i]['align_id'] == pmdb_exposure['alignment_id'] and
sms_exposure_list[i]['exp_id'] == pmdb_exposure['exposure_id']):

# Found a match. Eliminate the number of this exposure
# from sms_exposure_nos and break out
sms_exposure_nos.remove(i)
break
else:
# If an exposure is not on the SMS, save it for later examination
missing_exposures_list.append(pmdb_exposure)

if missing_exposures_list:
file_pointer.write("The following exposures do NOT EXPLICITY appear in the SMS: %s\n" %
self.my_checklist.my_sms.get_name())
file_pointer.write("-----------------------------------------------------------\n")
file_pointer.write(" prop:ob:al:ex:vn configuration operating mode\n")
file_pointer.write("-----------------------------------------------------------\n")
for missing_exposure in missing_exposures_list:
file_pointer.write("%s:%s:%s:%s:%s %-10s %-15s\n" % (missing_exposure['proposal_id'],
missing_exposure['obset_id'],
missing_exposure['alignment_id'],
missing_exposure['exposure_id'],
missing_exposure['version_num'],
missing_exposure['config'],
missing_exposure['opmode']))
self.pf_status = UNKNOWN
return self.pf_status
else:
self.pf_status = PASS
return self.pf_status


def run(smsname):
"""Run the check stand alone.
"""
import smschecklist
clist = smschecklist.sms(smsname, 1)
check = sms_exposure_check(clist)
print "\n Output sent to file " + check.outfile
check.run()