Main Page | Packages | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | Related Pages

rcArchiver.py

00001 #!/usr/local/bin/python
00002 #
00003 #                               Copyright 2004
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__ = "Event archiver class"
00012 __author__   = "S. Tuvi <stuvi@SLAC.Stanford.edu> SLAC - GLAST LAT I&T/Online"
00013 __date__     = "02/13/2003"
00014 __version__  = "$Revision: 2.3 $"
00015 __credits__  = "SLAC"
00016 
00017 from time import gmtime, strftime
00018 import os
00019 from struct import unpack
00020 from struct import pack
00021 
00022 from LATTE.client.gEvtCli import EvtCli
00023 
00024 MODE_CREATE = 0
00025 MODE_APPEND = 1
00026 MODE_READONLY = 2
00027 
00028 class rcArchiver(object):
00029   """\brief Event Archiver
00030 
00031   Default event archiver class to store event data to a file.
00032   This class can be inherited to create a custom event class and
00033   using it from a RunControl class by calling the setArchiverClass
00034   method.
00035   """
00036 
00037   def __init__(self, filePath=None, fileName=None, mode=MODE_CREATE, userId=123):
00038     if fileName is None:
00039       ts   = strftime('%y%m%d%H%M%S', gmtime())
00040       self.__fileName = rcArchiver.getFileNameFromTS(ts)
00041     else:
00042       self.__fileName = fileName
00043     if filePath is None:
00044       self.__filePath = ""
00045     else:
00046       self.__filePath = filePath + os.sep
00047     self.__mode = mode
00048     if mode == MODE_CREATE:
00049       fileMode = 'w+b'
00050       self.__archFile = file(os.path.join(self.__filePath, self.__fileName), fileMode)
00051     elif mode == MODE_APPEND:
00052       fileMode = 'a+b'
00053       self.__archFile = file(os.path.join(self.__filePath, self.__fileName), fileMode)
00054     elif mode == MODE_READONLY:
00055       fileMode = 'rb'
00056       self.__archFile = None
00057       self.__evtCli = EvtCli()
00058       self.__evtCli.open(os.path.join(self.__filePath, self.__fileName), fileMode)
00059     else:
00060       raise RuntimeError, "Invalid archive file mode"
00061 
00062   def write(self, rawEventData):
00063     if not self.__archFile.closed:
00064       self.__archFile.write(rawEventData)
00065 
00066   def writeTuple(self, tuple):
00067     for item in tuple:
00068       self.__archFile.write(item)
00069 
00070   def read(self):
00071     try:
00072       (header, dat) = self.__evtCli.read()
00073       return dat
00074     except:
00075       return None
00076 
00077   def close(self):
00078     if self.__mode == MODE_READONLY:
00079       self.__evtCli.close()
00080     else:
00081       self.__archFile.close()
00082 
00083   def isClosed(self):
00084     return self.__archFile.closed
00085 
00086   def getFileName(self):
00087       return self.__fileName
00088 
00089   def getFilePath(self):
00090     return self.__filePath
00091 
00092   def getFileNameFromTS(ts):
00093     return ts + ".ldf"
00094   getFileNameFromTS = staticmethod(getFileNameFromTS)
00095 

Generated on Fri Jul 21 13:26:31 2006 for LATTE R04-12-00 by doxygen 1.4.3