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 """Test of callbacks in OES 00011 """ 00012 __facility__ = "Online" 00013 __abstract__ = "Test script for event taking modes in FSW" 00014 __author__ = "Jim Panetta <panetta@slac.stanford.edu> SLAC - GLAST I&T/Online" 00015 __date__ = ("$Date: 2005/03/17 22:17:12 $").split(' ')[1] 00016 __created__ = "040908" 00017 __version__ = "$Revision: 1.7 $" 00018 __release__ = "$Name: R04-12-00 $" 00019 __credits__ = "SLAC" 00020 00021 import LATTE.copyright_SLAC 00022 00023 from LATTE.client.gOptions import Options 00024 from LATTE.client.gCmdCli import CmdCli 00025 from LATTE.database.gLAT import GLAT 00026 from LATTE.database.gOCS import GOCS 00027 from LATTE.client.gEvtCli import EvtCli 00028 from LATTE.database.gXBR import GXBRD 00029 from LATTE.database.gPlumber import Plumber 00030 from LATTE.tools.taskEngine import TaskEngine 00031 00032 from time import sleep 00033 import time 00034 import os 00035 import gc 00036 import math 00037 import logging as log 00038 import threading 00039 00040 from LATTE.tests.apps.support.SimpleGasuExample import * 00041 from LATTE.trigger.rcTrgFunctions import rcTrgInjectMarker 00042 00043 00044 aem = None 00045 trigger = None 00046 ocs = None 00047 task = None 00048 ec = None 00049 00050 def test(cmd=None, debug=0, count=10, disconnectOnExit=1): 00051 global aem, trigger, ec, ocs, task 00052 gc.disable() 00053 00054 options = Options(['server', 'schema'], 00055 ['fswmsglevel', 'evtdebug'], 00056 ['initforce', 'ocsverbose', 'nocommander']) 00057 try: 00058 options.parse() 00059 except Exception, msg: 00060 options.usage(str(msg)) 00061 return 00062 00063 if options.fswmsglevel is not None: 00064 msglevel = int(options.fswmsglevel) 00065 else: 00066 msglevel = 3 00067 verbose = (options.ocsverbose != None) 00068 force = (options.initforce != None) 00069 commander = not(options.nocommander != None) 00070 00071 task = TaskEngine("TestEngine") 00072 task.start() 00073 00074 if cmd == None: 00075 cmd = CmdCli() 00076 cmd.connect(options.server) 00077 00078 if options.evtdebug is not None: 00079 debug = options.evtdebug 00080 ec = EvtCli(debug) 00081 ec.setTimeoutEnabled(True) 00082 ec.connect(options.server, force) 00083 ec.socket().settimeout(1) 00084 00085 lat = GLAT(cmd) 00086 lat.readSchema(options.schema) 00087 00088 xbrd = GXBRD(cmd) 00089 xbrd = xbrd.readSchema(options.schema) 00090 00091 plumber = Plumber(lat, xbrd) 00092 plumber.initialize(msglevel, verbose, force, commander) 00093 00094 lat.applyConfig() 00095 00096 try: 00097 lat.LCB.setEvtEnable(True) 00098 except Exception, e: 00099 log.error(e) 00100 raise 00101 00102 ocs = GOCS(cmd) 00103 ocs.evtHandlerSetVerbosity(0xf) 00104 00105 trigger = SimpleGasuExample() 00106 trigger.GEM(lat.GEM) 00107 trigger.commit() 00108 trigger.enable() 00109 00110 cnt=0 00111 start = time.time() 00112 00113 nTest = 1 00114 00115 testEHSendAll(nTest, count); nTest += 1 00116 testEHSendErrors(nTest, count); nTest += 1 00117 testEHSendNothing(nTest, count); nTest += 1 00118 testEHSendPrescale(nTest, count, 0); nTest += 1 00119 testEHSendPrescale(nTest, count, 2); nTest += 1 00120 testEHSendPrescale(nTest, count, 0); nTest += 1 00121 testEHFilterTkrHits(nTest, count, 0x1); nTest += 1 00122 testEHSendAcd(nTest, count, 5, 0); nTest += 1 00123 testEHSendAcd(nTest, count, 5, 2); nTest += 1 00124 testEHSendAcd(nTest, count, 5, 0); nTest += 1 00125 testEHSendAll(nTest, count); nTest += 1 00126 00127 trigger.disable() 00128 ec.disconnect() 00129 task.shutdown() 00130 00131 if disconnectOnExit == 1: 00132 cmd.disconnect() 00133 00134 def countEvents(count, printSize=False): 00135 lastEvt = -1 00136 nSeen = 0 00137 for i in range(count): 00138 trigger.solicit() 00139 try: 00140 ec.readEvent() 00141 summary = ec.evt.summary 00142 # Construct event number 00143 evtNumber = (summary.evNumber << 2) | (summary.tag) 00144 nSeen += 1 00145 lastEvt = evtNumber 00146 if printSize: 00147 print "N: %d, Event number %x size = %X, summary=%x" % \ 00148 (nSeen, evtNumber, len(ec.dat), summary.ui) 00149 except IOError, e: 00150 pass 00151 # print e 00152 return nSeen 00153 00154 def testEHSendErrors(test, count): 00155 print "test %d: Take %d events, using evtHandlerSendErrorsOnly" % (test, count) 00156 trigger.disable() 00157 ocs.evtHandlerSendErrorsOnly() 00158 trigger.commit() 00159 trigger.enable() 00160 cnt = countEvents(count) 00161 print "evtHandlerSendErrorsOnly: Sent %d events, saw %d" % (count, cnt) 00162 if (cnt != 0): 00163 print " FAILED" 00164 else: 00165 print " PASSED" 00166 00167 def testEHSendNothing(test, count): 00168 print "test %d: Take %d events, using evtHandlerSendNothing" % (test, count) 00169 trigger.disable() 00170 ocs.evtHandlerSendNothing() 00171 trigger.commit() 00172 trigger.enable() 00173 cnt = countEvents(count) 00174 print "evtHandlerSendNothing: Sent %d events, saw %d" % (count, cnt) 00175 if (cnt != 0): 00176 print " FAILED" 00177 else: 00178 print " PASSED" 00179 00180 def testEHSendPrescale(test, count, prescale): 00181 effPre = prescale+1 00182 print "test %d: Take %d events, using evtHandlerSendPrescaled(%d)" % (test, count*effPre, prescale) 00183 trigger.disable() 00184 ocs.evtHandlerSendPrescaled(prescale) 00185 trigger.commit() 00186 trigger.enable() 00187 cnt = countEvents(count*effPre) 00188 print "evtHandlerSendPrescaled(%d): Sent %d events, saw %d" % (prescale, count*effPre, cnt) 00189 if (cnt != count): 00190 print " FAILED, expected %d" % count 00191 else: 00192 print " PASSED" 00193 00194 def testEHFilterTkrHits(test, count, prescale): 00195 effPre = prescale+1 00196 print "test %d: Take %d events, using evtHandlerFilterTkrHits(%d)" % (test, count*effPre, prescale) 00197 trigger.disable() 00198 ocs.evtHandlerFilterTkrHits(lowThreshold = 10, highThreshold = 0xffffffffL, prescale=prescale) 00199 trigger.commit() 00200 trigger.enable() 00201 cnt = countEvents(count*effPre) 00202 print "testEHFilterTkrHits(%d): Sent %d events, saw %d" % (prescale, count*effPre, cnt) 00203 if (cnt != count): 00204 print " FAILED, expected %d" % count 00205 else: 00206 print " PASSED" 00207 00208 def testEHSendAcd(test, count, marker, prescale): 00209 effPre = prescale+1 00210 print "test %d: Take %d events, using evtHandlerSendAcdScalers(%d,%d)" % \ 00211 (test, count*effPre, marker, prescale) 00212 00213 trigger.disable() 00214 ocs.evtHandlerSendAcdScalers(marker, prescale) 00215 trigger.commit() 00216 trigger.enable() 00217 00218 cnt = countEvents(count*effPre) 00219 evt = threading.Event() 00220 task.spawn(trigger.shut, evt) 00221 time.sleep(0.1) 00222 evt.set() 00223 00224 ec.readEvent() 00225 datalen = len(ec.dat) 00226 00227 print "evtHandlerSendAcdScalers(%d,%d): Sent %d events, saw %d" % \ 00228 (marker, prescale,count*effPre, cnt) 00229 if (cnt != count): 00230 print " FAILED, expected %d" % count 00231 elif (datalen < 0x4000): 00232 print " FAILED, ASC event size = 0x%X, < 0x4000" % datalen 00233 else: 00234 print " PASSED" 00235 time.sleep(1) # let shut() above finish... 00236 00237 def testEHSendAll(test, count): 00238 print "test %d: Take %d events, using evtHandlerSendAll:" % (test, count) 00239 trigger.disable() 00240 ocs.evtHandlerSendAll() 00241 trigger.commit() 00242 trigger.enable() 00243 cnt = countEvents(count) 00244 print "evtHandlerSendAll: Sent %d events, saw %d" % (count, cnt) 00245 if (cnt != count): 00246 print " FAILED" 00247 else: 00248 print " PASSED" 00249 00250 00251 if __name__ == '__main__': 00252 test()