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

gosedImpl.py

00001 #!/usr/local/bin/python
00002 #
00003 #                               Copyright 2003
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__ = "GLAST Online Single Event Display Modular"
00012 __author__   = "A. Kavelaars <aliciak@SLAC.Stanford.edu> SLAC - GLAST LAT I&T/Online"
00013 __date__     = "11/20/2003"
00014 __version__  = "$Revision: 1.16 $"
00015 __credits__  = "SLAC"
00016 
00017 
00018 import LATTE.copyright_SLAC
00019 from   qt                    import *
00020 #~ from   gutil                 import hexConvert
00021 import sys, string
00022 import operator, math
00023 import Numeric
00024 import time
00025 import struct
00026 
00027 from   gosed                 import singleEvtDisplay
00028 from   ServerPreferencesImpl import ServerPreferencesImpl
00029 from   GOSEDPreferencesImpl  import GOSEDPreferencesImpl
00030 from   GOSEDReadme           import GOSEDReadme
00031 
00032 import GOSEDACDImpl
00033 import GOSEDTWRImpl
00034 import GOSEDCALImpl
00035 import GOSEDTKRImpl
00036 import GOSEDCALTKRImpl
00037 import GOSEDDataImpl
00038 import GOSEDPainter
00039 import GOTEDImpl
00040 import GOSED_LDF
00041 import LDF
00042 #~ import DataDistributorPoll as DDP
00043 from   LATTE.client.gBits    import hexConvert
00044 import LATTE.tools.DataDistributorPoll as DDP
00045 
00046 import atexit
00047 
00048 
00049 class singleEvtDisplayImpl(singleEvtDisplay):
00050   """ \brief Glast Online Single Event Display (GOSED)
00051 
00052   This class:
00053   1. Manages all the GUI functions for GOSED.
00054   2. Retreives the TKR and CAL projections' pixmaps from GOSEDPainter.
00055   3. Loads all the information from the current event processed by GOSED_LDF,
00056   """
00057 
00058   def __init__(self,filename = None,parent = None,name = None,fl = 0):
00059     """ singleEvtDisplayImpl contructor
00060 
00061     \param filename      None
00062     \param parent        None
00063     \param name          None
00064     \param fl            0
00065     """
00066 
00067     # Initialize variables
00068     singleEvtDisplay.__init__(self,parent,name,fl)
00069     self.flagDisabledPixmap = self.image4
00070     self.flagEnabledPixmap  = self.image3
00071 
00072     # Initialize variables
00073     self.__fn      = filename
00074     self.__ds      = None
00075     self.__file    = None
00076     self.__fits    = None
00077     self.__data    = None
00078     self.__evtList = []
00079 
00080     self.__lci     = GOSED_LDF.myLATcomponentIterator(self)
00081     self.__ldbi    = LDF.LATdataBufferIterator(self.__lci)
00082 
00083     # Set default led flags
00084     #~ self.errorFlag.setPixmap(self.flagDisabledPixmap)
00085     #~ self.diagnosticFlag.setPixmap(self.flagDisabledPixmap)
00086 
00087     # Initialize Preferences windows
00088     import ConfigParser                 # Triage...
00089     self.__confParser = ConfigParser.ConfigParser() # Should have 1 Prefs GUI
00090     self.ServerPreferencesGUI = ServerPreferencesImpl(self.__confParser, self)
00091     self.GOSEDPreferencesGUI  = GOSEDPreferencesImpl(self.__confParser, self)
00092 
00093     if self.GOSEDPreferencesGUI.EventlimitsButton.isChecked():
00094       self.preferredLimits = "Event"
00095     elif self.GOSEDPreferencesGUI.CALlimitsButton.isChecked():
00096       self.preferredLimits = "Default"
00097     elif self.GOSEDPreferencesGUI.CustomlimitsButton.isChecked():
00098       self.preferredLimits = "Custom"
00099     else:
00100       self.preferredLimits = "Event"
00101 
00102     # Create dock windows
00103     self.createDockWindows()
00104 
00105     prefs = self.GOSEDPreferencesGUI
00106 
00107     # Create Painters
00108     self.drawGOSEDACD = GOSEDACDImpl.ACDSingleEvtDisplayImpl(prefs, self.__dwGOSEDACD)
00109     self.__dwGOSEDACD.setWidget(self.drawGOSEDACD)
00110 
00111     self.drawGOSEDCAL = GOSEDCALImpl.GOSEDCALImpl(prefs, self.__dwGOSEDCAL)
00112     self.__dwGOSEDCAL.setWidget(self.drawGOSEDCAL)
00113 
00114     self.drawGOSEDTKR = GOSEDTKRImpl.GOSEDTKRImpl(self.__dwGOSEDTKR)
00115     self.__dwGOSEDTKR.setWidget(self.drawGOSEDTKR)
00116 
00117     self.drawGOSEDTWR = GOSEDTWRImpl.GOSEDTWRImpl(self.__dwGOSEDTWR)
00118     self.__dwGOSEDTWR.setWidget(self.drawGOSEDTWR)
00119 
00120     self.drawGOSEDCALTKR = GOSEDCALTKRImpl.GOSEDCALTKRImpl(prefs, self.__dwGOSEDCALTKR)
00121     self.__dwGOSEDCALTKR.setWidget(self.drawGOSEDCALTKR)
00122 
00123     self.drawGOSEDData = GOSEDDataImpl.GOSEDDataImpl(self, self.__dwGOSEDData)
00124     self.__dwGOSEDData.setWidget(self.drawGOSEDData)
00125 
00126     self.drawGOTED = GOTEDImpl.towerEvtDisplayImpl(self.__dwGOTED)
00127     self.__dwGOTED.setWidget(self.drawGOTED)
00128 
00129     # Add default setup Dock Windows ATK-060904 -- WORK THIS OUT!!
00130     self.addDockWindow(self.__dwGOSEDTWR , Qt.DockLeft, True)
00131     if not self.GOSEDPreferencesGUI.twr():  self.__dwGOSEDTWR.hide()
00132 
00133     self.addDockWindow(self.__dwGOSEDCALTKR , Qt.DockLeft, False)
00134     if not self.GOSEDPreferencesGUI.calTkr():  self.__dwGOSEDCALTKR.hide()
00135 
00136     self.addDockWindow(self.__dwGOSEDData, Qt.DockRight, False)
00137     if not self.GOSEDPreferencesGUI.data():  self.__dwGOSEDData.hide()
00138 
00139     self.addDockWindow(self.__dwGOSEDTKR , Qt.DockLeft, False)
00140     if not self.GOSEDPreferencesGUI.tkr():  self.__dwGOSEDTKR.hide()
00141 
00142     self.addDockWindow(self.__dwGOSEDACD , Qt.DockRight, True)
00143     if not self.GOSEDPreferencesGUI.acd():  self.__dwGOSEDACD.hide()
00144 
00145     self.addDockWindow(self.__dwGOSEDCAL,  Qt.DockLeft,  False)
00146     if not self.GOSEDPreferencesGUI.cal():  self.__dwGOSEDCAL.hide()
00147 
00148     self.addDockWindow(self.__dwGOTED,  Qt.DockRight,  True)
00149     if not self.GOSEDPreferencesGUI.ted():  self.__dwGOTED.hide()
00150 
00151     # Custom Widgets setup
00152     self.setFocusPolicy(QWidget.StrongFocus)
00153 
00154     # TKR and CAL
00155     self.xzTKR = self.drawGOSEDTKR.xzTKR
00156     self.yzTKR = self.drawGOSEDTKR.yzTKR
00157     self.xzCAL = self.drawGOSEDCAL.xzCAL
00158     self.yzCAL = self.drawGOSEDCAL.yzCAL
00159 
00160     xzTKRLayout = QGridLayout(self.xzTKR,0,0,0,-1,"gosedLayout")
00161     yzTKRLayout = QGridLayout(self.yzTKR,0,0,0,-1,"gosedLayout")
00162     xzCALLayout = QGridLayout(self.xzCAL,0,0,0,-1,"gosedLayout")
00163     yzCALLayout = QGridLayout(self.yzCAL,0,0,0,-1,"gosedLayout")
00164 
00165     self.drawXZ_TKR = GOSEDPainter.drawXZ_TKR(self, self.xzTKR)
00166     self.drawYZ_TKR = GOSEDPainter.drawYZ_TKR(self, self.yzTKR)
00167     self.drawXZ_CAL = GOSEDPainter.drawXZ_CAL(self, self.xzCAL)
00168     self.drawYZ_CAL = GOSEDPainter.drawYZ_CAL(self, self.yzCAL)
00169 
00170     xzTKRLayout.addWidget(self.drawXZ_TKR,0,0)
00171     yzTKRLayout.addWidget(self.drawYZ_TKR,0,0)
00172     xzCALLayout.addWidget(self.drawXZ_CAL,0,0)
00173     yzCALLayout.addWidget(self.drawYZ_CAL,0,0)
00174 
00175     self.xzTKR2 = self.drawGOSEDCALTKR.xzTKR
00176     self.yzTKR2 = self.drawGOSEDCALTKR.yzTKR
00177     self.xzCAL2 = self.drawGOSEDCALTKR.xzCAL
00178     self.yzCAL2 = self.drawGOSEDCALTKR.yzCAL
00179 
00180     xzTKRLayout2 = QGridLayout(self.xzTKR2,0,0,0,-1,"gosedLayout")
00181     yzTKRLayout2 = QGridLayout(self.yzTKR2,0,0,0,-1,"gosedLayout")
00182     xzCALLayout2 = QGridLayout(self.xzCAL2,0,0,0,-1,"gosedLayout")
00183     yzCALLayout2 = QGridLayout(self.yzCAL2,0,0,0,-1,"gosedLayout")
00184 
00185     self.drawXZ_TKR2 = GOSEDPainter.drawXZ_TKR(self, self.xzTKR2)
00186     self.drawYZ_TKR2 = GOSEDPainter.drawYZ_TKR(self, self.yzTKR2)
00187     self.drawXZ_CAL2 = GOSEDPainter.drawXZ_CAL(self, self.xzCAL2)
00188     self.drawYZ_CAL2 = GOSEDPainter.drawYZ_CAL(self, self.yzCAL2)
00189 
00190     xzTKRLayout2.addWidget(self.drawXZ_TKR2,0,0)
00191     yzTKRLayout2.addWidget(self.drawYZ_TKR2,0,0)
00192     xzCALLayout2.addWidget(self.drawXZ_CAL2,0,0)
00193     yzCALLayout2.addWidget(self.drawYZ_CAL2,0,0)
00194 
00195     # ACD
00196     self.side1ACD = self.drawGOSEDACD.side1ACD
00197     self.side2ACD = self.drawGOSEDACD.side2ACD
00198     self.side3ACD = self.drawGOSEDACD.side3ACD
00199     self.side4ACD = self.drawGOSEDACD.side4ACD
00200     self.hatACD = self.drawGOSEDACD.hatACD
00201 
00202     #hatWidth    = self.hatACD.width()
00203     #hatHeight   = self.hatACD.height()
00204     #side1Width  = self.side1ACD.width()
00205     #side1Height = self.side1ACD.height()
00206 
00207     side1ACDLayout = QGridLayout(self.side1ACD,0,0,0,-1,"gosedLayout")
00208     side2ACDLayout = QGridLayout(self.side2ACD,0,0,0,-1,"gosedLayout")
00209     side3ACDLayout = QGridLayout(self.side3ACD,0,0,0,-1,"gosedLayout")
00210     side4ACDLayout = QGridLayout(self.side4ACD,0,0,0,-1,"gosedLayout")
00211     hatACDLayout = QGridLayout(self.hatACD,0,0,0,-1,"gosedLayout")
00212 
00213     self.drawSide1ACD = GOSEDPainter.drawSide1ACD(self, self.side1ACD)
00214     self.drawSide2ACD = GOSEDPainter.drawSide2ACD(self, self.side2ACD)
00215     self.drawSide3ACD = GOSEDPainter.drawSide3ACD(self, self.side3ACD)
00216     self.drawSide4ACD = GOSEDPainter.drawSide4ACD(self, self.side4ACD)
00217     self.drawHatACD = GOSEDPainter.drawHatACD(self, self.hatACD)
00218 
00219     #~ self.drawSide1ACD.setGeometry(0,0,hatWidth,side1Height)
00220 
00221     side1ACDLayout.addWidget(self.drawSide1ACD,0,0)
00222     side2ACDLayout.addWidget(self.drawSide2ACD,0,0)
00223     side3ACDLayout.addWidget(self.drawSide3ACD,0,0)
00224     side4ACDLayout.addWidget(self.drawSide4ACD,0,0)
00225     hatACDLayout.addWidget(self.drawHatACD,0,0)
00226 
00227     # CAL and TKR List Views setup:
00228     self.drawGOSEDData.TKRview.setColumnAlignment(0,self.AlignCenter)
00229     self.drawGOSEDData.TKRview.setColumnAlignment(1,self.AlignLeft)
00230 
00231     self.drawGOSEDData.CALview.setColumnAlignment(0,self.AlignCenter)
00232     self.drawGOSEDData.CALview.setColumnAlignment(1,self.AlignLeft)
00233 
00234     for i in range(2,9):#self.drawGOSEDData.Tkrview.columns()):
00235       self.drawGOSEDData.TKRview.setColumnAlignment(i,self.AlignRight)
00236       self.drawGOSEDData.CALview.setColumnAlignment(i,self.AlignRight)
00237 
00238     self.drawGOSEDData.CALview.header().setMovingEnabled(0)
00239     self.drawGOSEDData.TKRview.header().setMovingEnabled(0)
00240 
00241     # Buttons setup
00242     self.clearViews()
00243 
00244     self.Go.setEnabled(0)
00245     self.Next.setEnabled(0)
00246     self.Previous.setEnabled(0)
00247     self.Stop.setEnabled(0)
00248 
00249     self.drawGOSEDTWR.selectTWR.setEnabled(0)
00250     self.drawGOSEDCAL.selectRNG.setEnabled(0)
00251     self.drawGOSEDCAL.RNGAll.setEnabled(0)
00252     self.drawGOSEDCALTKR.selectRNG.setEnabled(0)
00253     self.drawGOSEDCALTKR.RNGAll.setEnabled(0)
00254 
00255     for i in range(16):
00256       self.drawGOTED.towerList[i].setEnabled(1)
00257 
00258     # Initialize timer
00259     self.__timer = QTimer(self)
00260 
00261     # Connections
00262     self.connect(self.__timer, SIGNAL("timeout()"), self.nextClicked)
00263     #~ self.connect(self.__timer, SIGNAL("timeout()"), self.next)
00264 
00265     self.connect(self.drawGOSEDTWR.selectTWR, SIGNAL('clicked(int)'), self.selectChange)
00266     self.connect(self.drawGOSEDCAL.scaleSelection, SIGNAL('activated(int)'), self.selectChange)
00267     self.connect(self.drawGOSEDCALTKR.scaleSelection, SIGNAL('activated(int)'), self.selectChange)
00268     self.connect(self.drawGOSEDCAL.selectRNG, SIGNAL('clicked(int)'), self.selectChange)
00269     self.connect(self.drawGOSEDCALTKR.selectRNG, SIGNAL('clicked(int)'), self.selectChange)
00270     self.connect(self.drawGOTED.refreshButton, SIGNAL('clicked()'), self.selectChange)
00271 
00272     atexit.register(self.fileExit)
00273 
00274     #~ bitBlt(self.drawXZ_TKR.final, 0, 0, self.drawXZ_TKR.background)
00275     #~ bitBlt(self.drawYZ_TKR.final, 0, 0, self.drawYZ_TKR.background)
00276     #~ bitBlt(self.drawXZ_CAL.final, 0, 0, self.drawXZ_CAL.background)
00277     #~ bitBlt(self.drawYZ_CAL.final, 0, 0, self.drawYZ_CAL.background)
00278 
00279     #~ bitBlt(self.drawXZ_TKR2.final, 0, 0, self.drawXZ_TKR2.background)
00280     #~ bitBlt(self.drawYZ_TKR2.final, 0, 0, self.drawYZ_TKR2.background)
00281     #~ bitBlt(self.drawXZ_CAL2.final, 0, 0, self.drawXZ_CAL2.background)
00282     #~ bitBlt(self.drawYZ_CAL2.final, 0, 0, self.drawYZ_CAL2.background)
00283 
00284 
00285   def createDockWindows(self):
00286 
00287     # Create Dock for GLAST Online Single Event Display TWR Window (GOSEDTWR)
00288     self.__dwGOSEDTWR = QDockWindow()
00289     self.__dwGOSEDTWR.setResizeEnabled(0)
00290     self.__dwGOSEDTWR.setCloseMode(QDockWindow.Always)
00291     self.__dwGOSEDTWR.setCaption('GOSEDTWR')
00292     #~ self.__teComments = self.__comments.getWidget()
00293     #~ self.setDockEnabled(self.__dwGOSEDTWR, Qt.DockTop, 1)
00294     #~ self.setDockEnabled(self.__dwGOSEDTWR, Qt.DockBottom, 0)
00295     #~ self.setDockEnabled(self.__dwGOSEDTWR, Qt.DockRight, 0)
00296     #~ self.setDockEnabled(self.__dwGOSEDTWR, Qt.DockLeft, 0)
00297 
00298     #~ self.__dwGOSEDTWR.setFixedExtentWidth(428)
00299     #~ self.__dwGOSEDTWR.setFixedExtentHeight(315)
00300 
00301     # Create Dock for GLAST Online Single Event Display TKR Window (GOSEDTKR)
00302     self.__dwGOSEDTKR = QDockWindow()
00303     self.__dwGOSEDTKR.setResizeEnabled(0)
00304     self.__dwGOSEDTKR.setCloseMode(QDockWindow.Always)
00305     self.__dwGOSEDTKR.setCaption('GOSEDTKR')
00306     #~ self.__teComments = self.__comments.getWidget()
00307     #~ self.setDockEnabled(self.__dwGOSEDTKR, Qt.DockTop, 0)
00308     #~ self.setDockEnabled(self.__dwGOSEDTKR, Qt.DockBottom, 1)
00309     #~ self.setDockEnabled(self.__dwGOSEDTKR, Qt.DockRight, 0)
00310     #~ self.setDockEnabled(self.__dwGOSEDTKR, Qt.DockLeft, 0)
00311 
00312     self.__dwGOSEDTKR.setFixedExtentWidth(428)
00313     self.__dwGOSEDTKR.setFixedExtentHeight(315)
00314 
00315     # Create Dock for GLAST Online Single Event Display CAL Window (GOSEDCAL)
00316     self.__dwGOSEDCAL = QDockWindow()
00317     self.__dwGOSEDCAL.setResizeEnabled(0)
00318     self.__dwGOSEDCAL.setCloseMode(QDockWindow.Always)
00319     self.__dwGOSEDCAL.setCaption('GOSEDCAL')
00320     #~ self.__teComments = self.__comments.getWidget()
00321     #~ self.setDockEnabled(self.__dwGOSEDCAL, Qt.DockTop, 0)
00322     #~ self.setDockEnabled(self.__dwGOSEDCAL, Qt.DockBottom, 1)
00323     #~ self.setDockEnabled(self.__dwGOSEDCAL, Qt.DockRight, 0)
00324     #~ self.setDockEnabled(self.__dwGOSEDCAL, Qt.DockLeft, 0)
00325 
00326     self.__dwGOSEDCAL.setFixedExtentWidth(428)
00327     self.__dwGOSEDCAL.setFixedExtentHeight(115)
00328 
00329     # Create Dock for GLAST Online Single Event Display CAL & TKR Window (GOSEDCAL)
00330     self.__dwGOSEDCALTKR = QDockWindow()
00331     self.__dwGOSEDCALTKR.setResizeEnabled(0)
00332     self.__dwGOSEDCALTKR.setCloseMode(QDockWindow.Always)
00333     self.__dwGOSEDCALTKR.setCaption('GOSEDCAL')
00334     #~ self.__teComments = self.__comments.getWidget()
00335     #~ self.setDockEnabled(self.__dwGOSEDCALTKR, Qt.DockTop, 0)
00336     #~ self.setDockEnabled(self.__dwGOSEDCALTKR, Qt.DockBottom, 1)
00337     #~ self.setDockEnabled(self.__dwGOSEDCALTKR, Qt.DockRight, 0)
00338     #~ self.setDockEnabled(self.__dwGOSEDCALTKR, Qt.DockLeft, 0)
00339 
00340     #~ self.__dwGOSEDCALTKR.setFixedExtentWidth(428)
00341     #~ self.__dwGOSEDCALTKR.setFixedExtentHeight(115)
00342 
00343     # Create Dock for GLAST Online ACD Event Display (GOSEDACD)
00344     self.__dwGOSEDACD = QDockWindow()
00345     self.__dwGOSEDACD.setResizeEnabled(0)
00346     self.__dwGOSEDACD.setCloseMode(QDockWindow.Always)
00347     self.__dwGOSEDACD.setCaption('GOSEDACD')
00348     self.__dwGOSEDACD.setNewLine(True)
00349     #~ self.__teComments = self.__comments.getWidget()
00350     #~ self.setDockEnabled(self.__dwGOSEDACD, Qt.DockTop, 0)
00351     #~ self.setDockEnabled(self.__dwGOSEDACD, Qt.DockBottom, 0)
00352     #~ self.setDockEnabled(self.__dwGOSEDACD, Qt.DockRight, 1)
00353     #~ self.setDockEnabled(self.__dwGOSEDACD, Qt.DockLeft, 0)
00354     #~  ,
00355     self.__dwGOSEDACD.setFixedExtentWidth(428)
00356     self.__dwGOSEDACD.setFixedExtentHeight(428)
00357 
00358     # Create Dock for GLAST Online Single Event Display Data Window(GOSED Data)
00359     self.__dwGOSEDData = QDockWindow()
00360     self.__dwGOSEDData.setResizeEnabled(1)
00361     self.__dwGOSEDData.setCloseMode(QDockWindow.Always)
00362     self.__dwGOSEDData.setCaption('GOSEDData')
00363     self.__dwGOSEDData.setNewLine(True)
00364     #~ self.__teComments = self.__comments.getWidget()
00365     #~ self.setDockEnabled(self.__dwGOSEDData, Qt.DockTop, 0)
00366     #~ self.setDockEnabled(self.__dwGOSEDData, Qt.DockBottom, 0)
00367     #~ self.setDockEnabled(self.__dwGOSEDData, Qt.DockRight, 1)
00368     #~ self.setDockEnabled(self.__dwGOSEDData, Qt.DockLeft, 0)
00369 
00370     self.__dwGOSEDData.setFixedExtentWidth(428)
00371     self.__dwGOSEDData.setFixedExtentHeight(100)
00372 
00373     # Create Dock for GLAST Online Tower Event Display (GOTED)
00374     self.__dwGOTED = QDockWindow()
00375     self.__dwGOTED.setResizeEnabled(1)
00376     self.__dwGOTED.setCloseMode(QDockWindow.Always)
00377     self.__dwGOTED.setCaption('GOTED')
00378     #~ self.__teComments = self.__comments.getWidget()
00379     #~ self.setDockEnabled(self.__dwGOTED, Qt.DockTop, 0)
00380     #~ self.setDockEnabled(self.__dwGOTED, Qt.DockBottom, 0)
00381     #~ self.setDockEnabled(self.__dwGOTED, Qt.DockRight, 1)
00382     #~ self.setDockEnabled(self.__dwGOTED, Qt.DockLeft, 0)
00383     self.__dwGOTED.setFixedExtentWidth(50)
00384     self.__dwGOTED.setFixedExtentHeight(50)
00385     #~ self.addDockWindow(self.__dwGOTED, Qt.DockRight)
00386 
00387     # Dock in initial configuration
00388     #~ self.__dockArea = QDockArea(Qt.Horizontal, QDockArea.Normal,self)
00389     #~ self.__dockArea.moveDockWindow(self.__dwGOSEDTWR, 0)
00390     #~ self.__dockArea.moveDockWindow(self.__dwGOSEDTKR, 1)
00391     #~ self.__dockArea.moveDockWindow(self.__dwGOSEDCAL, 2)
00392     #~ self.__dockArea.moveDockWindow(self.__dwGOSEDData, 3)
00393     #~ self.__dockArea.moveDockWindow(self.__dwGOSEDACD, 4)
00394     #~ self.__dockArea.moveDockWindow(self.__dwGOTED, 5)
00395 
00396 
00397     #~ self.__dwGOSEDTWR.show()
00398 
00399     #~ self.addDockWindow(self.__dwGOSEDTWR, self.__dwGOSEDTWR.dock())#Qt.DockLeft)
00400     #~ self.addDockWindow(self.__dwGOSEDTKR, self.__dwGOSEDTKR.dock())#Qt.DockBottom)
00401     #~ self.addDockWindow(self.__dwGOSEDCAL, self.__dwGOSEDCAL.dock())#Qt.DockBottom)
00402     #~ self.addDockWindow(self.__dwGOSEDData,self.__dwGOSEDData.dock())#Qt.DockRight)
00403     #~ self.addDockWindow(self.__dwGOSEDACD,self.__dwGOSEDACD.dock())#Qt.DockRight)
00404     #~ self.addDockWindow(self.__dwGOTED,self.__dwGOTED.dock())#Qt.DockRight)
00405     #~ self.addDockWindow(self.__dwGOSEDTWR,  Qt.DockLeft,  True)
00406     #~ self.addDockWindow(self.__dwGOSEDTKR,  Qt.DockLeft,  False)
00407 
00408 
00409 
00410   def dockGOSEDTWR(self):
00411     #~ self.addDockWindow(self.__dwGOSEDTWR, Qt.DockTop)
00412     self.__dwGOSEDTWR.show()
00413     self.GOSEDPreferencesGUI.twr(True)
00414     self.__shown()
00415 
00416   def dockGOSEDTKR(self):
00417     #~ self.addDockWindow(self.__dwGOSEDTWR, Qt.DockBottom)
00418     #~ self.drawXZ_TKR.final = QPixmap()
00419     #~ self.drawYZ_TKR.final = QPixmap()
00420     #~ self.drawXZ_CAL.final = QPixmap()
00421     #~ self.drawYZ_CAL.final = QPixmap()
00422 
00423     #~ self.drawXZ_TKR2.final = QPixmap()
00424     #~ self.drawYZ_TKR2.final = QPixmap()
00425     #~ self.drawXZ_CAL2.final = QPixmap()
00426     #~ self.drawYZ_CAL2.final = QPixmap()
00427     self.__dwGOSEDTKR.show()
00428     self.GOSEDPreferencesGUI.tkr(True)
00429     self.__shown()
00430 
00431   def dockGOSEDCAL(self):
00432     #~ self.addDockWindow(self.__dwGOSEDTWR, Qt.DockBottom)
00433     self.__dwGOSEDCAL.show()
00434     self.GOSEDPreferencesGUI.cal(True)
00435     self.__shown()
00436 
00437   def dockGOSEDCALTKR(self):
00438     #~ self.addDockWindow(self.__dwGOSEDTWR, Qt.DockBottom)
00439     self.__dwGOSEDCALTKR.show()
00440     self.GOSEDPreferencesGUI.calTkr(True)
00441     self.__shown()
00442 
00443   def dockGOSEDData(self):
00444     #~ self.addDockWindow(self.__dwGOSEDData, Qt.DockRight)
00445     self.__dwGOSEDData.show()
00446     self.GOSEDPreferencesGUI.data(True)
00447     self.__shown()
00448 
00449   def dockGOTED(self):
00450     #~ self.addDockWindow(self.__dwGOTED, Qt.DockRight)
00451     self.__dwGOTED.show()
00452     self.GOSEDPreferencesGUI.ted(True)
00453     self.__shown()
00454 
00455   def dockGOSEDACD(self):
00456     #~ self.addDockWindow(self.__dwGOSEDACD, Qt.DockRight)
00457     self.__dwGOSEDACD.show()
00458     self.GOSEDPreferencesGUI.acd(True)
00459     self.__shown()
00460 
00461   def mousePressEvent(self, e):
00462     for i in range(16):
00463       if self.drawGOTED.towerList[i].hasMouse():
00464         Zpm = self.clickTWR(i)
00465         if Zpm is None:
00466           return
00467         twrButton = self.drawGOSEDTWR.selectTWR.find(i)
00468         twrButton.setOn(1)
00469         self.selectChange()
00470         bitBlt(self.drawGOTED.towerList[i], 0, 0, Zpm , 0, 0)
00471 
00472 
00473   def clickTWR(self, id):
00474     if self.drawGOTED.final[id].isNull():
00475       #~ bitBlt(Zpm, 0, 0, self.drawGOTED.noBgrZ , 0, 0)
00476       return
00477     Zpm = QPixmap(self.drawGOTED.towerList[id].width(),
00478                   self.drawGOTED.towerList[id].height())
00479     bitBlt(Zpm, 0, 0, self.drawGOTED.final[id] , 0, 0)
00480     self.pTWR = QPainter(Zpm)
00481     #~ self.pCAL.setBrush(color)
00482     self.pTWR.setPen(QColor("red"))
00483     self.pTWR.drawRect(0,0,
00484                        self.drawGOTED.towerList[id].width(),
00485                        self.drawGOTED.towerList[id].height()
00486                        )
00487     self.pTWR.end()
00488     return Zpm
00489 
00490 
00491   def plot(self):
00492     """ Plot is the heart of GOSED. It strips the information of the event
00493     from the data string and passes it to GOSED_LDF, initializing the
00494     iteration over all the entries of the event.
00495     It manages three kinds of sources of data:
00496     1. Data from .arch files
00497     2. Data from .fits files
00498     3. Data from server
00499     It also manages the reinizialization of all the gui's outputs, calling
00500     clearviews() to delete the information from a previous event
00501     """
00502 
00503     if self.__file is not None:
00504       if str(self.__fn).endswith(".ldf", False) or str(self.__fn).endswith(".arch", False) \
00505          or str(self.__fn).endswith(".dge", False):
00506 
00507         evtPtr = self.__file.tell()
00508         #~ print "plot: evtPtr =", evtPtr
00509 
00510         self.__evtList.append(evtPtr)
00511         #~ print "-------> plot: eventList = ", self.__evtList
00512 
00513         data = self.__file.read(8)
00514 
00515         if len(data) < 8:
00516           print "End of File: " , (self.__fn)
00517           #~ self.__pauseDisplay = 1
00518           self.statusBar().message("End of File: %s" % (self.__fn), 2000)
00519           self.Next.setEnabled(0)
00520           self.Previous.setEnabled(1)
00521           self.Go.setEnabled(0)
00522           self.Stop.setEnabled(0)
00523           self.__timer.stop()
00524 
00525           if self.__evtList.count(evtPtr) != 1:
00526             self.__evtList.pop()
00527             #~ print "-------> plot: eventList = ", self.__evtList
00528 
00529           return
00530 
00531         (identity, length) = struct.unpack('!LL', data)
00532         data              += self.__file.read(length - 8)
00533 
00534     elif self.__fits is not None:
00535       data = self.__fits.read()
00536       if data is None:
00537         print "End of File: " , (self.__fn)
00538         #~ self.__pauseDisplay = 1
00539         self.statusBar().message("End of File: %s" % (self.__fn), 2000)
00540         self.__timer.stop()
00541         self.Next.setEnabled(0)
00542         self.Go.setEnabled(0)
00543         self.Stop.setEnabled(0)
00544         return
00545 
00546     elif self.__ds is not None:
00547       #import gutil
00548       data, sender = self.__ds.receive()
00549       if data is None or len(data) == 0:
00550         return
00551       #print gutil.hexConvert(data)
00552 
00553     else:
00554       print "No data source open for display"
00555       self.statusBar().message("No data source open for display", 2000)
00556       self.__timer.stop()
00557       return
00558 
00559     # Clear the display
00560     self.drawGOSEDData.totHits.clear()  # RiC 10/30/03 added this line
00561     self.clearViews()                   # RiC 10/30/03 added this line
00562 
00563     #~ Obsolete:
00564     #~ self.existsTWRdata = 0
00565     #~ self.existsCALTWRdata = 0
00566 
00567     # Iterate over all entries for the current data buffer
00568     # RiC: A buffer is allowed to contain more than one event, but doesn't now.
00569     #      May have to rethink this when it does.
00570     self.__ldbi.iterate(data, len(data)) # RiC 4/2/04 switched to the new way
00571 
00572   def replot(self):
00573     # Clear the display
00574     self.drawGOSEDData.totHits.clear()  # RiC 10/30/03 added this line
00575     self.clearViews()                   # RiC 10/30/03 added this line
00576 
00577     # Iterate over all entries for the current data buffer
00578     # RiC: A buffer is allowed to contain more than one event, but doesn't now.
00579     #      May have to rethink this when it does.
00580     self.__ldbi.iterate() # RiC 4/2/04 switched to the new way
00581 
00582   def selectChange(self):
00583     """ This function is called whenever the user makes a change of selection
00584     in TWR, RNG or Scale, to reload the event with the new filter settings.
00585     """
00586 
00587     # Pass the new filter only for the implemented Scale Selections:
00588     if (self.drawGOSEDCAL.scaleSelection.currentItem() == 0 or \
00589        self.drawGOSEDCAL.scaleSelection.currentItem() == 1) and\
00590        (self.drawGOSEDCALTKR.scaleSelection.currentItem() == 0 or \
00591         self.drawGOSEDCALTKR.scaleSelection.currentItem() == 1):
00592       if self.__file is not None or \
00593          self.__fits is not None or \
00594          self.__ds is not None:
00595         self.drawGOSEDCAL.RNGAll.setEnabled(0)
00596         # Reinitialize settings, we have to do it again here since we don't call
00597         # plot() for a new event, we reiterate the current event over a new
00598         # set of filters.
00599         self.clearViews()
00600         self.drawGOSEDData.totHits.setText(str(0))
00601 
00602         # Load backgrounds. We do it here and not in clearviews() not to have a
00603         # white pixmap while the event is being processed.
00604         bitBlt(self.drawXZ_TKR, 0, 0, self.drawXZ_TKR.background)
00605         bitBlt(self.drawYZ_TKR, 0, 0, self.drawYZ_TKR.background)
00606         bitBlt(self.drawXZ_CAL, 0, 0, self.drawXZ_CAL.background)
00607         bitBlt(self.drawYZ_CAL, 0, 0, self.drawYZ_CAL.background)
00608 
00609         bitBlt(self.drawXZ_TKR2, 0, 0, self.drawXZ_TKR2.background)
00610         bitBlt(self.drawYZ_TKR2, 0, 0, self.drawYZ_TKR2.background)
00611         bitBlt(self.drawXZ_CAL2, 0, 0, self.drawXZ_CAL2.background)
00612         bitBlt(self.drawYZ_CAL2, 0, 0, self.drawYZ_CAL2.background)
00613 
00614         bitBlt(self.drawHatACD, 0, 0, self.drawHatACD.background)
00615         bitBlt(self.drawSide1ACD, 0, 0, self.drawSide1ACD.background)
00616         bitBlt(self.drawSide2ACD, 0, 0, self.drawSide2ACD.background)
00617         bitBlt(self.drawSide3ACD, 0, 0, self.drawSide3ACD.background)
00618         bitBlt(self.drawSide4ACD, 0, 0, self.drawSide4ACD.background)
00619 
00620         #~ for i in range(16):
00621           #~ if not self.drawGOTED.final[i].isNull():
00622             #~ bitBlt(self.drawYZ_CAL, 0, 0, self.drawYZ_CAL.background)
00623         self.__ldbi.iterate()
00624     else:
00625       self.statusBar().message("Auto Range not Implemented Yet", 2000)
00626 
00627 
00628   def clearViews(self):
00629     """ This function reloads GOSED defaults in order to process a new event.
00630     """
00631 
00632 #     # Reinitialize final Pixmaps, they need to be Null at the beginning of
00633 #     # each event processing
00634 #     self.drawXZ_TKR.final = QPixmap()
00635 #     self.drawYZ_TKR.final = QPixmap()
00636 #     self.drawXZ_CAL.final = QPixmap()
00637 #     self.drawYZ_CAL.final = QPixmap()
00638 
00639 #     self.drawXZ_TKR2.final = QPixmap()
00640 #     self.drawYZ_TKR2.final = QPixmap()
00641 #     self.drawXZ_CAL2.final = QPixmap()
00642 #     self.drawYZ_CAL2.final = QPixmap()
00643 
00644 #     self.drawHatACD.finalHatACD = QPixmap()
00645 #     self.drawSide1ACD.finalSide1ACD = QPixmap()
00646 #     self.drawSide2ACD.finalSide2ACD = QPixmap()
00647 #     self.drawSide3ACD.finalSide3ACD = QPixmap()
00648 #     self.drawSide4ACD.finalSide4ACD = QPixmap()
00649 
00650 #     #~ for i in range(16):
00651 #       #~ self.drawGOTED.final[i] = QPixmap()
00652 #       #~ bitBlt(self.drawGOTED.towerList[i], 0, 0,
00653 #              #~ self.drawGOTED.noBgrZ, 0, 0)
00654 #       #~ self.drawGOTED.towerList[i].setIcon(QPixmap())
00655 
00656 #     for i in range(16):
00657 #       self.drawGOTED.final[i] = QPixmap()
00658 #       bitBlt(self.drawGOTED.towerList[i], 0, 0,
00659 #              self.drawGOTED.noBgrZ, 0, 0)
00660 
00661     # Reinitialize final Pixmaps, they need to be Null at the beginning of
00662     # each event processing
00663     self.drawXZ_TKR.clear()
00664     self.drawYZ_TKR.clear()
00665     self.drawXZ_CAL.clear()
00666     self.drawYZ_CAL.clear()
00667 
00668     self.drawXZ_TKR2.clear()
00669     self.drawYZ_TKR2.clear()
00670     self.drawXZ_CAL2.clear()
00671     self.drawYZ_CAL2.clear()
00672 
00673     self.drawHatACD.clear()
00674     self.drawSide1ACD.clear()
00675     self.drawSide2ACD.clear()
00676     self.drawSide3ACD.clear()
00677     self.drawSide4ACD.clear()
00678 
00679     #~ for i in range(16):
00680       #~ self.drawGOTED.clear()
00681       #~ bitBlt(self.drawGOTED.towerList[i], 0, 0,
00682              #~ self.drawGOTED.noBgrZ, 0, 0)
00683       #~ self.drawGOTED.towerList[i].setIcon(QPixmap())
00684 
00685     for i in range(16):
00686       self.drawGOTED.clear()
00687       bitBlt(self.drawGOTED.towerList[i], 0, 0,
00688              self.drawGOTED.noBgrZ, 0, 0)
00689 
00690     # Clear list views
00691     #self.drawGOSEDData.ACDview.clear()
00692     self.drawGOSEDData.acd.clear()
00693     self.drawGOSEDData.TKRview.clear()
00694     self.drawGOSEDData.CALview.clear()
00695     self.drawGOSEDData.diagTKR.clear()
00696     self.drawGOSEDData.diagCAL.clear()
00697     self.drawGOSEDData.error.clear()
00698     self.drawGOSEDData.trigger.clear()
00699 
00700 
00701 
00702     # Disable button groups
00703     for i in range(self.drawGOSEDTWR.selectTWR.count()):
00704       twrButton = self.drawGOSEDTWR.selectTWR.find(i)
00705       twrButton.setEnabled(0)
00706 
00707     for i in range(0,4):
00708       RngButton = self.drawGOSEDCAL.selectRNG.find(i)
00709       RngButton.setEnabled(0)
00710 
00711     for i in range(0,4):
00712       RngButton = self.drawGOSEDCALTKR.selectRNG.find(i)
00713       RngButton.setEnabled(0)
00714 
00715     #~ for i in range(16):
00716       #~ self.drawGOTED.towerList[i].setEnabled(0)
00717 
00718   def clearButtonGroups(self):
00719     """ This function unchecks all the buttons. Contrary to clearviews(), this
00720     is only necesary when opening a new file, since we may have changed a
00721     selection in only one parameter (for example RNG only), and thus we don't
00722     want to loose the other filter by unchecking it (for example TWR).
00723     """
00724     for i in range(0,4):
00725       rngButton = self.drawGOSEDCAL.selectRNG.find(i)
00726       if rngButton.isOn():
00727         rngButton.setChecked(0)
00728 
00729     for i in range(0,4):
00730       rngButton = self.drawGOSEDCALTKR.selectRNG.find(i)
00731       if rngButton.isOn():
00732         rngButton.setChecked(0)
00733 
00734     for i in range(self.drawGOSEDTWR.selectTWR.count()):
00735       twrButton = self.drawGOSEDTWR.selectTWR.find(i)
00736       if twrButton.isOn():
00737         twrButton.setChecked(0)
00738 
00739 
00740   def nextClicked(self):
00741     """ Plots next event when called
00742     """
00743 
00744     # INVESTIGATE HOW TO REINICIALIZE THE SELECTED TOWER FOR A NEW EVENT HERE
00745     #~ GOSED_LDF.CALcontributionIterator1.__selectedTower = -1
00746     #~ self.GOSED_LDF.CALcontributionIterator2.__selectedTower = -1
00747     #~ self.GOSED_LDF.TKRcontributionIterator.__selectedTower = -1
00748 
00749     # As easy as this:
00750     self.plot()
00751 
00752     #~ for i in range(16):
00753       #~ twrButton = self.drawGOSEDTWR.selectTWR.find(i)
00754       #~ if twrButton.isChecked():
00755         #~ Zpm = self.clickTWR(i)
00756         #~ if Zpm is None:
00757           #~ return
00758         #~ bitBlt(self.drawGOTED.towerList[i], 0, 0, Zpm , 0, 0)
00759 
00760     # Enable Previous button
00761     if self.__ds is None and self.__fits is None and self.Go.isEnabled():
00762       self.Previous.setEnabled(1)
00763 
00764     # Check if we have no data for either the CAL or the TKR and if so load
00765     # the background. We do it here and not in clearviews() not to have a
00766     # white pixmap while the event is being processed
00767 #     if self.drawGOSEDData.CALview.childCount() == 0:
00768 #       bitBlt(self.drawXZ_CAL, 0, 0, self.drawXZ_CAL.background)
00769 #       bitBlt(self.drawYZ_CAL, 0, 0, self.drawYZ_CAL.background)
00770 
00771 #       bitBlt(self.drawXZ_CAL2, 0, 0, self.drawXZ_CAL2.background)
00772 #       bitBlt(self.drawYZ_CAL2, 0, 0, self.drawYZ_CAL2.background)
00773 
00774 #     if self.drawGOSEDData.TKRview.childCount() == 0:
00775 #       bitBlt(self.drawXZ_TKR, 0, 0, self.drawXZ_TKR.background)
00776 #       bitBlt(self.drawYZ_TKR, 0, 0, self.drawYZ_TKR.background)
00777 
00778 #       bitBlt(self.drawXZ_TKR2, 0, 0, self.drawXZ_TKR2.background)
00779 #       bitBlt(self.drawYZ_TKR2, 0, 0, self.drawYZ_TKR2.background)
00780 
00781 #     if self.drawGOSEDData.acd.childCount() == 0:
00782 #       bitBlt(self.drawHatACD, 0, 0, self.drawHatACD.background)
00783 #       bitBlt(self.drawSide1ACD, 0, 0, self.drawSide1ACD.background)
00784 #       bitBlt(self.drawSide2ACD, 0, 0, self.drawSide2ACD.background)
00785 #       bitBlt(self.drawSide3ACD, 0, 0, self.drawSide3ACD.background)
00786 #       bitBlt(self.drawSide4ACD, 0, 0, self.drawSide4ACD.background)
00787 
00788     #~ if not self.Go.isEnabled():
00789       #~ step = float(str(self.GOSEDPreferencesGUI.timestepValue.text()))
00790       #~ self.__timer.start(step*1000, False)   # seconds in milliseconds
00791      #~ self.__timer.start(500, False)
00792 
00793 
00794   def previousClicked(self):
00795     """ Finds previous event in the file and then plots it. It only
00796     works for .arch files.
00797     """
00798 
00799     if self.__ds is not None:
00800       self.statusBar().message("Previous event is not available", 2000)
00801       self.Previous.setEnabled(0)
00802       return
00803 
00804     if self.__fits is not None:
00805       self.statusBar().message("Can't go to Previous event in a Fits file", 2000)
00806       self.Previous.setEnabled(0)
00807       return
00808 
00809     if self.__file is None:  return
00810 
00811     evtPtr = 0
00812 
00813     if self.__evtList != []:
00814       evtPtr = self.__evtList.pop()  # points to beginning of current  event
00815       #~ print "-------> prev1: eventList = ", self.__evtList
00816       if self.__evtList != []:
00817         evtPtr = self.__evtList.pop()  # points to beginning of previous event
00818         #~ print "-------> prev2: eventList = ", self.__evtList
00819     #~ print "previousClicked: evtPtr =", evtPtr
00820 
00821     self.__file.seek(evtPtr)
00822     self.nextClicked()
00823 
00824     self.Go.setEnabled(1)
00825     self.Next.setEnabled(1)
00826 
00827     if evtPtr == 0:
00828       print "Beginning of File: " , (self.__fn)
00829       self.statusBar().message("Beginning of File: %s" % (self.__fn), 2000)
00830       self.Previous.setEnabled(0)
00831 
00832 
00833   def goClicked(self):
00834     """ Load events ininterruptedly in time steps selected by the user from
00835     the GOSED Preferences menu. It stops when the Stop Button is clicked.
00836     """
00837 
00838     # Disable Browse buttons to avoid conflicting signals
00839     self.Go.setEnabled(0)
00840     self.Previous.setEnabled(0)
00841     self.Next.setEnabled(0)
00842     self.Stop.setEnabled(1)
00843 
00844     step = float(str(self.GOSEDPreferencesGUI.timestepValue.text()))
00845     self.__timer.start(step*1000, False)   # seconds in milliseconds
00846 
00847   def stopClicked(self):
00848     """ Stop the ininterrupted display of events triggered by the Go Button
00849     """
00850     self.__timer.stop()
00851 
00852     # Enable back Browse buttons
00853     self.Go.setEnabled(1)
00854     self.Stop.setEnabled(0)
00855     if self.__ds is None:
00856       self.Next.setEnabled(1)
00857     # The Previous button is only enabled for .arch files
00858     if self.__ds is None and self.__fits is None:
00859       self.Previous.setEnabled(1)
00860 
00861 
00862   def fileOpen(self):
00863     """ Load data from a file
00864     """
00865 
00866     # Prevent that gui gets hanged up if Cancel button is clicked at the dialog window
00867     self.__fn_Old = self.__fn
00868     self.__timer.stop()
00869 
00870     self.__fn = QFileDialog.getOpenFileName(QString.null, "(*.ldf *.arch *.fits *.dge)", self)
00871 
00872     # If Cancel was clicked in the File Open dialog reload existing file and return
00873     if str(self.__fn) == "":
00874       self.__fn = self.__fn_Old
00875       return
00876 
00877     if not self.__fn.endsWith(".arch") and not self.__fn.endsWith(".ldf") and not str(self.__fn).endswith(".fits"):
00878       self.statusBar().message("Can't display a File other than with extension .arch or .fits", 2000)
00879       self.__fn = self.__fn_Old
00880       return
00881 
00882     # Close previous data sources
00883     if self.__ds is not None:
00884       self.serverClose()
00885 
00886     self.fileClose()
00887 
00888     # Flag to check which one is my first tower and range in the File
00889     self.firstTower = None
00890     self.firstRNG   = None
00891     self.firstRNG2  = None
00892 
00893     # Setup Browse buttons
00894     self.Go.setEnabled(1)
00895     self.Next.setEnabled(1)
00896     self.Previous.setEnabled(0)
00897     self.Stop.setEnabled(1)
00898 
00899     if self.__fn.endsWith(".fits"):
00900       try:
00901         from LATTE.runcontrol import rcFitsWriter
00902       except (ImportError, IOError), e:
00903         raise "rcFitsWriter or one of its dependencies not available: %s" % e
00904       self.__fits = rcFitsWriter.rcFitsWriter(fileName=str(self.__fn), mode=rcFitsWriter.MODE_READONLY, format=rcFitsWriter.FORMAT_BYTE)
00905     else:
00906       self.__file = open(str(self.__fn), 'rb')
00907 
00908     self.__evtList = []
00909 
00910 
00911     self.statusBar().message("Beginning of File: %s" % (self.__fn), 2000)
00912     self.drawGOSEDData.filename.setText(str(self.__fn))
00913     self.drawGOSEDTWR.selectTWR.setEnabled(1)
00914     self.drawGOSEDCAL.selectRNG.setEnabled(1)
00915     self.drawGOSEDCALTKR.selectRNG.setEnabled(1)
00916     self.GOSEDPreferencesGUI.setCustomEnabled(1)
00917     self.GOSEDPreferencesGUI.setACDCustomEnabled(1)
00918 
00919     # Plot data
00920     self.plot()
00921 
00922 
00923   def fileClose(self):
00924     """ Close file source
00925     """
00926     self.__timer.stop()
00927 
00928     #INVESTIGATE HOW TO REINICIALIZE THE SELECTED TOWER FOR A NEW EVENT HERE
00929     #~ self.selectTWR.setButton(-1)
00930 
00931     if self.__file is not None:
00932       self.__file.close()
00933       self.__file = None
00934     elif self.__fits is not None:
00935       self.__fits.close()
00936       self.__fits = None
00937     else:
00938       self.statusBar().message("No file open for display", 2000)
00939       return
00940 
00941     # Reinitialize everything
00942     self.clearViews()
00943     self.GOSEDPreferencesGUI.setCustomEnabled(0)
00944     self.GOSEDPreferencesGUI.setACDCustomEnabled(0)
00945 
00946     self.drawGOSEDTWR.selectTWR.setEnabled(0)
00947     self.drawGOSEDCAL.selectRNG.setEnabled(0)
00948     self.drawGOSEDCALTKR.selectRNG.setEnabled(0)
00949     self.clearButtonGroups()
00950 
00951 
00952   def __shown(self):
00953     self.GOSEDPreferencesGUI.twr(self.__dwGOSEDTWR.isVisible())
00954     self.GOSEDPreferencesGUI.calTkr(self.__dwGOSEDCALTKR.isVisible())
00955     self.GOSEDPreferencesGUI.data(self.__dwGOSEDData.isVisible())
00956     self.GOSEDPreferencesGUI.tkr(self.__dwGOSEDTKR.isVisible())
00957     self.GOSEDPreferencesGUI.acd(self.__dwGOSEDACD.isVisible())
00958     self.GOSEDPreferencesGUI.cal(self.__dwGOSEDCAL.isVisible())
00959     self.GOSEDPreferencesGUI.ted(self.__dwGOTED.isVisible())
00960 
00961   def fileExit(self):
00962     """ Exits the gui
00963     """
00964     if self.__file is not None:
00965       self.fileClose()
00966     else:
00967       self.serverClose()
00968     self.__timer.stop()
00969     self.GOSEDPreferencesGUI.saveViews()
00970     self.close()
00971 
00972   def serverOpen(self, state):
00973     """  Load event data from a network server
00974     """
00975     if state:
00976       # Close previous data sources
00977       if self.__file is not None or self.__fits is not None:
00978         self.fileClose()
00979 
00980       # Obsolete
00981       #~ """Flag to check which one is my first tower and range in the File"""
00982       self.firstTower = None
00983       self.firstRNG   = None
00984       self.firstRNG2  = None
00985 
00986       server = str(self.ServerPreferencesGUI.selectedServer.text())
00987       print "Listening on data server", server
00988       if server == "":
00989         return
00990 
00991       dsName = 'LAT_EBFdata'
00992       if self.__ds is None:
00993         self.__ds = DDP.DataDistributorPoll(dsName)
00994         if self.__ds is not None:
00995           self.__ds.connect(server)
00996           self.__ds.start()
00997           self.drawGOSEDTWR.selectTWR.setEnabled(1)
00998           self.drawGOSEDCAL.selectRNG.setEnabled(1)
00999           self.drawGOSEDCALTKR.selectRNG.setEnabled(1)
01000           self.GOSEDPreferencesGUI.setCustomEnabled(1)
01001           self.GOSEDPreferencesGUI.setACDCustomEnabled(1)
01002           self.stopClicked()
01003           self.goClicked()
01004         else:
01005           print "Unable to connect to Data Distribution server", dsName
01006     else:
01007       self.stopClicked()
01008       self.Go.setEnabled(0)
01009       self.serverClose()
01010 
01011 
01012   def serverClose(self):
01013     """  Close network server
01014     """
01015     if self.__ds is not None:
01016       self.__ds.stop()
01017       self.__ds.disconnect()
01018       self.__ds = None
01019       self.clearViews()
01020       self.clearButtonGroups()
01021 
01022   def ServerPreferences(self):
01023     """ Calls the Server Preferences window stopping the timer.
01024     """
01025     self.__timer.stop()
01026     self.ServerPreferencesGUI.exec_loop()
01027 
01028 
01029   def GOSEDPreferences(self):
01030     """ Calls the GOSED Preferences window stopping the timer. It also
01031     passes the new settings to GOSED.
01032     """
01033     self.__timer.stop()
01034     self.GOSEDPreferencesGUI.exec_loop()
01035 
01036     if self.GOSEDPreferencesGUI.EventlimitsButton.isChecked():
01037       self.preferredLimits = "Event"
01038     elif self.GOSEDPreferencesGUI.CALlimitsButton.isChecked():
01039       self.preferredLimits = "Default"
01040     elif self.GOSEDPreferencesGUI.CustomlimitsButton.isChecked():
01041       self.preferredLimits = "Custom"
01042 
01043     # Obsolete:
01044     #~ if self.GOSEDPreferencesGUI.energyScaleButton.isChecked():
01045       #~ self.preferredScale = "Energy"
01046       #~ self.CALenergy.setEnabled(1)
01047     #~ elif self.GOSEDPreferencesGUI.rangeScaleButton.isChecked():
01048       #~ self.preferredScale = "Range"
01049       #~ self.CALenergy.setEnabled(0)
01050 
01051     # Return if no data source is loaded
01052     if (self.__file is None) or (self.__fits is None) or (self.__ds is None):
01053       return
01054 
01055     # If there is no event loaded click next (plot), otherwise reload the
01056     # same event with the new settings
01057     if self.__evtList == []:
01058       self.nextClicked()
01059     else:
01060       self.clearViews()
01061       # Obsolete:
01062       #~ self.existsTWRdata = 0
01063       #~ self.existsCALTWRdata = 0
01064       self.__ldbi.iterate()
01065 
01066 
01067   def helpOnline(self):
01068     """This function opens a web browser with I&T URL for reference.
01069     """
01070     import webbrowser
01071     webbrowser.open('http://www-glast.slac.stanford.edu/IntegrationTest/ONLINE/Default.htm')
01072 
01073 
01074   def helpContents(self):
01075     """ Calls GOSED Readme file for reference.
01076     """
01077     self.GOSEDReadme = GOSEDReadme()
01078     self.GOSEDReadme.exec_loop()
01079 
01080 
01081   def helpAbout(self):
01082     """ Displays About GOSED info
01083     """
01084     QMessageBox.about(self,'Help About',
01085             '                              GLAST Online Single Event Display\n                                  I&T Online - Alicia T. Kavelaars\nhttp://www-glast.slac.stanford.edu/IntegrationTest/ONLINE/contact.htm\n                                       Copyright 2003 by\n       The Board of Trustees of the Leland Stanford Junior University.\n                                       All rights reserved.')
01086 
01087 
01088 if __name__ == "__main__":
01089   a = QApplication(sys.argv)
01090   QObject.connect(a,SIGNAL("lastWindowClosed()"),a,SLOT("quit()"))
01091   #if len(sys.argv) == 2:
01092   #  w = singleEvtDisplayImpl(sys.argv[1])
01093   #else:
01094   w = singleEvtDisplayImpl()
01095   a.setMainWidget(w)
01096   w.show()
01097   a.exec_loop()

Generated on Fri Jan 21 18:00:49 2005 for LATTE P04-06-05 by doxygen 1.4.1