Commit 01377eae authored by Andrea Orlati's avatar Andrea Orlati Committed by GitHub
Browse files

fix issue #538: changed the name of the python program in order to run it...

fix issue #538: changed the name of the python program in order to run it through a bash script. The script (#544)

turns off the stdout messages in order to provide a clearer output to the user. Improved user messages in case of problems.
slighly changed the default beviour when linking to a component. Default is the calibration tool, if the currently selected
recorder is different a warning is given but the GUI is started all the same.
parent 204e91b7
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -66,7 +66,7 @@ lllll_OBJECTS =
#
# Scripts (public and local)
# ----------------------------
SCRIPTS         =
SCRIPTS         = calibrationtoolclient
SCRIPTS_L       =

#
@@ -78,7 +78,7 @@ TCL_SCRIPTS_L =
#
# Python stuff (public and local)
# ----------------------------
PY_SCRIPTS         =  calibrationtoolclient
PY_SCRIPTS         =  _ctc
PY_SCRIPTS_L       =  

PY_MODULES         = customwidgets calibrationtool_ui 
+177 −148
Original line number Diff line number Diff line
@@ -12,9 +12,10 @@ import ACS, ACS__POA # Import the Python CORBA
from PyQt4 import Qt
from PyQt4.QtCore import pyqtSlot,QThread,QMutex,QTimer
import PyQt4.Qwt5 as Qwt
import sys,getopt
import sys,getopt,os
from time import sleep
import math 
from IRAPy import logger,userLogger



@@ -28,6 +29,7 @@ __version__ = '$Id'
@version $Id$
'''

DEFAULT_COMPONENT="MANAGEMENT/CalibrationTool"

class MyWorker(QThread):
	def __init__(self,component,parent=None):
@@ -166,42 +168,83 @@ class MyWorker(QThread):
                pass
 




class Application(Qt.QDialog,calibrationtool_ui.Ui_CalibrationToolDialog):
 
	def __init__(self,compname,parent=None):
		Qt.QDialog.__init__(self)
		
		self.scheduler=None
		self.antennaBoss=None
		self.component=None
		self.componentName=DEFAULT_COMPONENT
		self.managerConnected=False
		self.thread=None
		
		try:
			self.simpleClient = PySimpleClient()
			self.managerConnected=True
		except Exception,ex:
			newEx = ClientErrorsImpl.CouldntLogManagerExImpl(exception=ex, create=1)
			logger.logException(newEx)
			print "Please check the system is up and running......"
			sys.exit(-1)
							
		try:
                        scheduler= self.simpleClient.getDefaultComponent("IDL:alma/Management/Scheduler:1.0")
                        antennaBoss =self.simpleClient.getDefaultComponent("IDL:alma/Antenna/AntennaBoss:1.0")
			self.scheduler= self.simpleClient.getDefaultComponent("IDL:alma/Management/Scheduler:1.0")
		except Exception,ex:
			newEx = ClientErrorsImpl.CouldntAccessComponentExImpl(exception=ex, create=1)
			newEx.setComponentName("IDL:alma/Management/Scheduler:1.0")
			logger.logException(newEx)
			print "Please check the system is up and running and scheduler component is alive!"
			sys.exit(-1)

		try:
			self.antennaBoss =self.simpleClient.getDefaultComponent("IDL:alma/Antenna/AntennaBoss:1.0")
		except Exception,ex:
			newEx = ClientErrorsImpl.CouldntAccessComponentExImpl(exception=ex, create=1)
			newEx.setComponentName("IDL:alma/Antenna/AntennaBoss:1.0")
			logger.logException(newEx)
			print "Please check the system is up and running and antenna boss is alive!"
			sys.exit(-1)

		#choose default recorder
		if compname=='default':
                              
                              recorder=scheduler._get_currentRecorder()
			try:
				recorder=self.scheduler._get_currentRecorder()
				(recordername,compl)=recorder.get_sync()
                              self.componentname=recordername
                              print recordername
			except  Exception,ex:
				newEx = ClientErrorsImpl.CouldntAccessPropertyExImpl(exception=ex, create=1)
				logger.logException(newEx)
				print "Please check scheduler component is alive and responsive|" 
				sys.exit(-1)
					
			print "Starting with default component: " + DEFAULT_COMPONENT	
			if recordername!=DEFAULT_COMPONENT:
				print "Be aware that the in-use recorder is currently " + recordername

			self.componentName=DEFAULT_COMPONENT
				
		else:
                              self.componentname=compname
                        print self.componentname
                        component= self.simpleClient.getComponent(self.componentname)
     			self.thread=MyWorker([component,scheduler,antennaBoss,self.simpleClient])
			self.componentName=compname
			print "Starting with component: " + self.componentName
       	               
		try:
			self.component= self.simpleClient.getComponent(self.componentName)
		except Exception,ex:
			newEx = ClientErrorsImpl.CouldntAccessComponentExImpl(exception=ex, create=1)
			newEx.setComponentName(self.componentName)
			logger.logException(newEx)
			print "Please check the system is up and running and " + self.componentName + " is alive!"
			sys.exit(-1)
		
		self.thread=MyWorker([self.component,self.scheduler,self.antennaBoss,self.simpleClient])
		Qt.QDialog.__init__(self)
		self.setupUi(self)
#		self.qwtPlot_datax.setAxisScale(Qwt.QwtPlot.xBottom, 0,1000)
		self.qwtPlot_datax.setAxisAutoScale(Qwt.QwtPlot. yLeft) 
			self.setWindowTitle(self.componentname)
		self.setWindowTitle(self.componentName)
		self.qwtPlot_datax.setAxisTitle(Qwt.QwtPlot.yLeft, "Ta(K)")
		self.qwtPlot_datay.setAxisTitle(Qwt.QwtPlot.yLeft, "Ta(K)")
		




		self.connect(self.thread,Qt.SIGNAL("arrayDataX"),self.qwtPlot_datay.setX)
		self.connect(self.thread,Qt.SIGNAL("arrayDataY"),self.qwtPlot_datay.setVal)
                        
@@ -223,16 +266,6 @@ class Application(Qt.QDialog,calibrationtool_ui.Ui_CalibrationToolDialog):
		self.connect(self.thread,Qt.SIGNAL("isRecording"),self.isRecording)
		self.connect(self.thread,Qt.SIGNAL("scanAxis"),self.scanAxis)
                       


		except  Exception,ex:
			newEx = ClientErrorsImpl.CouldntAccessComponentExImpl(exception=ex, create=1)
#        		newEx.setComponentName(self.componentname)
         #ACS_LOG_ERROR
        		newEx.log(self.simpleClient.getLogger(),ACSLog.ACS_LOG_ERROR)
        		self.simpleClient.disconnect()
        		sys.exit(-1)	
                        
	@pyqtSlot(Qt.QObject,name="isRecording")
	def isRecording(self,rec):
		if rec==False:
@@ -242,9 +275,6 @@ class Application(Qt.QDialog,calibrationtool_ui.Ui_CalibrationToolDialog):
			palette.setColor(role, Qt.QColor('gray'))
			self.recording.setPalette(palette)
			self.BScanaxis.setEnabled(False)
                
                
                
		if rec==True:
			self.recording.setText("ON")
			palette = self.recording.palette()
@@ -256,7 +286,6 @@ class Application(Qt.QDialog,calibrationtool_ui.Ui_CalibrationToolDialog):
	@pyqtSlot(Qt.QObject,name="scanAxis")  # decorator for the slot
	def scanAxis(self,scanaxis):
		self.BScanaxis.setText(str(scanaxis))           
                
		if 'SUBR' not in str(scanaxis):
			self.scanAxisLabel.setText('ScanAxis - Pointing')
			xaxis_text="Direction (Deg)"
@@ -266,47 +295,45 @@ class Application(Qt.QDialog,calibrationtool_ui.Ui_CalibrationToolDialog):
			self.scanAxisLabel.setText('ScanAxis - Focus')
			xaxis_text="Distance (mm)"
			hpbw_label_text='HPBW(mm)'

			peakOffsetLabel_text='PeakOffset(mm)'  
                
			self.qwtPlot_datax.setAxisTitle(Qwt.QwtPlot.xBottom, xaxis_text)
			self.qwtPlot_datay.setAxisTitle(Qwt.QwtPlot.xBottom, xaxis_text)
			self.hpbw_label.setText(hpbw_label_text)
			self.peakOffsetLabel.setText(peakOffsetLabel_text)

        

	@pyqtSlot(Qt.QObject,name="scalePlots")  # decorator for the slot
	def scalePlots(self,val):
		self.qwtPlot_datay.setAxisScale(QwtPlot.xBottom, min(val), max(val))
   	
	def run(self):
		self.thread.start()
					
	def __del__(self):
		self.thread.run=False  
		#__del__ apparently is called twice, I have no clue and it should be investigated 
		if self.thread:
			if self.thread.isRunning:
				self.thread.quit()

		if self.managerConnected:
			try:
 		     self.simpleClient.releaseComponent(self.componentname)
				if self.component:
					self.simpleClient.releaseComponent(self.component._get_name())
				if self.scheduler:
					self.simpleClient.releaseComponent(self.scheduler._get_name())
 		     self.simpleClient.releaseComponent(self.boss._get_name())
     


		     self.simpleClient.disconnect()
				if self.antennaBoss:
					self.simpleClient.releaseComponent(self.antennaBoss._get_name())
			except Exception,ex:
                      print "exception"
                      
		print "end app"
		

def usage(nameapp):
        print nameapp+" [component name]"
        
        
  
				print "Error in application cleanup"                      
		
		
def usage():
	print "calibrationtoolclient [component name]"
	print
	print "If no component name is provided, the default "+DEFAULT_COMPONENT+" will be used" 

def main(args):
	sys.tracebacklimit=0

	try:
		opts, args = getopt.getopt(sys.argv[1:],"h",["help"])
	except getopt.GetoptError, err:
@@ -324,13 +351,15 @@ def main(args):
	else:
		componentname=args[0]
  
        print componentname   
	app = Qt.QApplication(args)
	a=Application(componentname) #passa il nome del component al costruttore
	sleep(1)
	a.run()
	p=a.show()	
		
	sys.exit(app.exec_())
	sleep(2)
	print "Application closed!"
	

if __name__=='__main__':
	main(sys.argv)
+9 −0
Original line number Diff line number Diff line
#! /bin/bash
# ***********************************************************************
# Who                                           when            What
# Andrea Orlati(andrea.orlati@inaf.it)          22/05/2020      Creation
#************************************************************************


export ACS_LOG_STDOUT=11
_ctc $1