00001 #!/usr/local/bin/python
00002 #
00003 # Copyright 2002
00004 # by
00005 # The Board of Trustees of the
00006 # Leland Stanford Junior University.
00007 # All rights reserved.
00008 #
00009
00010 __facility__ = "Online"
00011 __abstract__ = "V&V test for rcTestReport class"
00012 __author__ = "R. Claus <Claus@SLAC.Stanford.edu> SLAC - GLAST LAT I&T/Online"
00013 __date__ = "11/21/2002"
00014 __version__ = "$Revision: 1.1 $"
00015 __credits__ = "SLAC"
00016
00017 import LATTE.copyright_SLAC
00018
00019 import logging as log
00020 from LATTE.runcontrol.rcTransitions import rcTransitions
00021 from LATTE.runcontrol.rcTestReport import rcTestReport
00022 import time
00023 import os
00024
00025 # Example application implementation.
00026 # Note that the name of the class must be userApplication.
00027 # Look at rcTransitions for names of other transition methods that can be used.
00028 class userApplication(rcTransitions):
00029 "Implementation class for a user application"
00030 def __init__(self, rc, userId, debug):
00031 rcTransitions.__init__(self, rc, userId, debug)
00032 log.debug("userApplication.__init__()")
00033 self.tr = rcTestReport()
00034
00035 def getName(self):
00036 return __name__
00037
00038 def setup(self):
00039 log.debug("userApplication.setup()")
00040 # A state transition can be rejected by not returning None
00041 return None
00042
00043 def startRun(self):
00044 log.debug("userApplication.startRun()")
00045 # A state transition can be rejected by not returning None
00046 self.rc.doStop()
00047 return None
00048
00049 def stopRun(self):
00050 log.debug("userApplication.stopRun()")
00051 self.setCompletionStatus(self.COMPL_STATUS_PASSED)
00052 self.createTestReport()
00053 # The STOP_RUN transition can not be rejected
00054
00055 def createTestReport(self):
00056 tr = self.tr
00057 tr.initReport(title='CAL System Test Procedure')
00058 tr.addHTML("""
00059 <STYLE TYPE="text/css">
00060 H1 { font-size: x-large; color: red }
00061 H2 { font-size: large; color: blue }
00062 H3 { font-size: medium; color: blue }
00063 </STYLE>
00064 """)
00065 tr.addHeading('CALF_SUPP_P02')
00066 tr.addHeading('System Test Procedure Report')
00067 tr.addHeading('Sat May 31, 2003 18:01:46 Eastern Daylight Time')
00068 versions = tr.addSection('Versions')
00069 tr.addSectionItem(versions, 'Release', 'P01-06-00')
00070 verTable = tr.addSectionTable(versions, border='1', width='25%')
00071 tr.addTableHeader(verTable, '<i>Module</i>', 'left')
00072 tr.addTableHeader(verTable, '<i>Version</i>', 'right')
00073 tr.beginTableRow(verTable)
00074 tr.addTableData('GAEM', align='left')
00075 tr.addTableData('2.0.1.0', align='right')
00076 tr.beginTableRow(verTable)
00077 tr.addTableData('GGLT', align='left')
00078 tr.addTableData('1.3.1.0', align='right')
00079 tr.addSectionItem(versions, 'Verification failed on', 'cmdCli, evtCli')
00080 assocFiles = tr.addSection('Associated Files')
00081 tr.addSectionItem(assocFiles,
00082 'Snapshot File',
00083 '../snapshots/030531180141_calf_supp_p02.xml',
00084 'http:
00085 )
00086 tr.addSectionItem(assocFiles,
00087 'Event File',
00088 '../Event Collections/030531180141_calf_supp_p02.ced',
00089 'http:
00090 )
00091
00092 runp = tr.addSection('Run Parameters')
00093 tr.addSectionItem(runp, 'Number of Charge Injection events per setting', '500')
00094 tr.addSectionItem(runp, 'Charge Injection setting', '100')
00095 tr.addSectionItem(runp, 'Tack Delay Setting(timed readout delay)', '56')
00096 tr.addSectionItem(runp, 'CAL Bias DAC setting', '0x15800')
00097 tr.addSectionItem(runp, 'LE Gain setting', '5')
00098 tr.addSectionItem(runp, 'LE Gain setting', '13')
00099 tr.addSectionImage(runp, 'Test Image', './CALreport.png')
00100 laset = tr.addSection('Log Accept DAC Settings')
00101 dsTable = tr.addSectionTable(laset, border='1', width='100%')
00102 for hdr in ('Row', 'Lg0', 'Lg1', 'Lg2', 'Lg3', 'Lg4', 'Lg5', 'Lg6', 'Lg7', 'Lg8', 'Lg9', 'Lg10', 'Lg11'):
00103 tr.addTableHeader(dsTable, hdr, align='left')
00104 for data in [('X0' ,17,0,0,13,16,20,23,16,2,0,3,18),
00105 ('X0+',18,28,15,16,8,6,16,7,11,32,0,6)
00106 ]:
00107 tr.beginTableRow(dsTable)
00108 for d in data:
00109 tr.addTableData(d, align='left', width='7%')
00110 corNrgThr = tr.addSection('Corresponding Energy Thresholds(Mev)')
00111 ntTable = tr.addSectionTable(corNrgThr, border='1', width='100%')
00112 for hdr in ('Row', 'Lg0', 'Lg1', 'Lg2', 'Lg3', 'Lg4', 'Lg5', 'Lg6', 'Lg7', 'Lg8', 'Lg9', 'Lg10', 'Lg11'):
00113 tr.addTableHeader(ntTable, hdr, align='left')
00114 for data in [('X0' ,0.76,1.58,1.71,0.58,0.62,0.57,0.48,0.78,0.58,1.82,0.44,1.01),
00115 ('X0+',0.75,0.66,1.14,0.65,0.36,0.63,0.62,0.93,0.61,0.58,3.83,0.50)
00116 ]:
00117 tr.beginTableRow(ntTable)
00118 for d in data:
00119 if d > 1.0:
00120 d = '<b>' + str(d) + '</b>'
00121 else:
00122 d = str(d)
00123 tr.addTableData("<u>"+d+"</u>", align='left', width='7%')
00124 tr.addHTML('<b>BOLD</b> indicates energy thresholds above 1 Mev', section=corNrgThr)
00125 sumPage = tr.addSection('Summary Page', insert=0)
00126 tr.addSectionItem(sumPage, 'Test Description', 'Determine nominal log accept DAC settings')
00127 tr.addSectionItem(sumPage, 'Operator', 'johnson')
00128 tr.addSectionItem(sumPage, 'Schema', 'EM AFEE boards SN# X-001, X-002, Y-001, Y-002')
00129 tr.addSectionItem(sumPage, 'Configuration', 'calf_supp_p02.xml version:0.1')
00130 tr.addSectionItem(sumPage, 'Test Start Time', 'Sat May 31, 2003 18:01:46 Eastern Daylight Time')
00131 tr.addSectionItem(sumPage, 'Test End Time', 'Sat May 31, 2003 18:04:12 Eastern Daylight Time')
00132 tr.addSectionItem(sumPage, 'Test Start AFEEoTo Temp', '25.13C')
00133 tr.addSectionItem(sumPage, 'Test Stop AFEEoTo Temp', '25.17C')
00134 tr.addSectionItem(sumPage, 'Status', 'PASSED')
00135 tr.addSectionItem(sumPage, 'Notes', '')
00136 tr.insertSection(sumPage, versions)
00137 log.debug("Generating test report...")
00138 testReportFile = os.path.join(self.prefs["reportdir"],
00139 'testAppReport_%s.html' % self.runId)
00140 tr.transformToFile(os.path.expandvars('$ONLINE_ROOT/LATTE/repos/reportStyle.xsl'),
00141 testReportFile)
00142 self.addExportedFile(testReportFile)
00143
00144
00145
00146 # Standalone mode:
00147 if __name__ == "__main__":
00148 from LATTE.runcontrol.RunControlCommon import RunControlCommon
00149
00150 rcCommon = RunControlCommon()
00151 rcCommon.initialize()
00152 rcCommon.setLoggingLevel("INFO")
00153 rcCommon.connect()
00154 ua = userApplication(None, 321, rcCommon)
00155 ua.rcSetup()
00156 ua.rcStartRun()
00157 ua.wait()
00158 ua.rcStopRun()
00159 ua.rcTeardown()