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:
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:
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()