Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
marc
dtObsGUI
Commits
34b510d8
Commit
34b510d8
authored
Oct 02, 2017
by
Tammo Jan Dijkema
Browse files
Add progress indicator
parent
711a56a3
Changes
1
Hide whitespace changes
Inline
Side-by-side
DTObs.py
View file @
34b510d8
...
...
@@ -4,12 +4,13 @@ import logging
from
telescope
import
telescope
from
PyQt5
import
QtGui
from
PyQt5.QtCore
import
QThread
,
QRunnable
,
QObject
,
pyqtSignal
,
pyqtSlot
,
QThreadPool
from
PyQt5.QtCore
import
QRunnable
,
QObject
,
pyqtSignal
,
pyqtSlot
,
QThreadPool
from
PyQt5.QtWidgets
import
(
QFileDialog
,
QApplication
,
QMainWindow
,
QTableWidgetItem
)
from
ui.dtobswindow
import
Ui_mainWindow
import
subprocess
import
traceback
import
time
import
numpy
as
np
from
astropy
import
units
as
u
from
astropy.coordinates
import
SkyCoord
...
...
@@ -37,7 +38,7 @@ class WorkerSignals(QObject):
allfinished
=
pyqtSignal
()
# error = pyqtSignal(tuple)
# result = pyqtSignal(object)
#
progress = pyqtSignal(int
)
progress
=
pyqtSignal
(
int
,
int
,
str
)
# meas_num, percent_complete, remaining
class
Worker
(
QRunnable
):
""" Execute a function asynchronously, connect to signals """
...
...
@@ -51,6 +52,7 @@ class Worker(QRunnable):
self
.
signals
=
WorkerSignals
()
self
.
kwargs
[
'oneSetpointCompleteSignal'
]
=
self
.
signals
.
finished
self
.
kwargs
[
'progressSignal'
]
=
self
.
signals
.
progress
@
pyqtSlot
()
def
run
(
self
):
...
...
@@ -87,7 +89,6 @@ class DTObservationProgram(Ui_mainWindow):
(
raStr
,
decStr
)
=
self
.
radec
.
to_string
(
'hmsdms'
).
split
()
self
.
tableWidgetPointings
.
insertRow
(
rowPosition
)
#measurement = '{:3d}\t {:3.5f}\t {:3.5f}'.format(int(meas),float(RA), float(Dec))
self
.
tableWidgetPointings
.
setItem
(
rowPosition
,
0
,
QTableWidgetItem
(
raStr
))
self
.
tableWidgetPointings
.
setItem
(
rowPosition
,
1
,
QTableWidgetItem
(
decStr
))
self
.
tableWidgetPointings
.
setItem
(
rowPosition
,
2
,
QTableWidgetItem
(
""
))
...
...
@@ -102,7 +103,6 @@ class DTObservationProgram(Ui_mainWindow):
def
measCompleted
(
self
,
meas_num
,
status
):
""" Make the meas_num-th row of the table green """
print
(
"One setpoint complete, namely"
,
meas_num
,
status
)
colors
=
{
'Completed'
:
QtGui
.
QColor
(
'green'
),
'Slewing'
:
QtGui
.
QColor
(
'yellow'
),
'Measuring'
:
QtGui
.
QColor
(
'cyan'
)}
...
...
@@ -111,23 +111,50 @@ class DTObservationProgram(Ui_mainWindow):
self
.
tableWidgetPointings
.
item
(
meas_num
,
column
).
setBackground
(
colors
[
status
])
self
.
tableWidgetPointings
.
resizeColumnsToContents
()
def
goToSetpoints
(
self
,
setpoints
,
oneSetpointCompleteSignal
=
None
):
def
goToSetpoints
(
self
,
setpoints
,
oneSetpointCompleteSignal
=
None
,
progressSignal
=
None
):
""" Send a list of setpoints to the telescope """
for
setpoint_nr
,
setpoint
in
enumerate
(
setpoints
):
self
.
myDT
.
setRaDec
(
setpoint
)
oneSetpointCompleteSignal
.
emit
(
setpoint_nr
,
'Slewing'
)
time
.
sleep
(
2
)
self
.
myDT
.
waitUntilThere
()
time
.
sleep
(
3
)
dist
=
np
.
sqrt
(
self
.
myDT
.
dist_el
**
2
+
self
.
myDT
.
dist_az
**
2
)
firstDist
=
dist
while
not
dist
<
0.01
*
u
.
deg
:
percentSlew
=
max
(
100
-
dist
/
firstDist
*
100
,
0
)
progressSignal
.
emit
(
setpoint_nr
,
percentSlew
,
"{:.3f}°"
.
format
(
dist
.
value
))
#print("{:.3f}".format(dist))
#print("{:2.0f}".format(percentSlew.value))
self
.
myDT
.
getDistance
(
waitForUpdate
=
True
)
dist
=
np
.
sqrt
(
self
.
myDT
.
dist_el
**
2
+
self
.
myDT
.
dist_az
**
2
)
oneSetpointCompleteSignal
.
emit
(
setpoint_nr
,
'Measuring'
)
time
.
sleep
(
2
)
# Todo: call function here
self
.
startMeasure
()
self
.
doMeasurement
(
setpoint_nr
,
progressSignal
=
progressSignal
)
oneSetpointCompleteSignal
.
emit
(
setpoint_nr
,
'Completed'
)
def
startMeasure
(
self
):
def
updateProgress
(
self
,
meas_num
,
progress_percent
,
remaining_str
):
"""
Update the table with some progress indicator
meas_num: the row which needs to be updated
progress_percent: integer giving the percentage complete
remaining_str: string indicating how much remaining, e.g. "1:30" or "3°"
"""
self
.
tableWidgetPointings
.
setItem
(
meas_num
,
2
,
QTableWidgetItem
(
remaining_str
))
def
doMeasurement
(
self
,
measnum
,
progressSignal
=
None
):
""" Dumping data into file including meta-data"""
print
(
"start dump-wide"
)
data
=
subprocess
.
Popen
([
"cat"
,
"/home_local/camrasdemo/test-001.txt"
],
stdout
=
subprocess
.
PIPE
).
stdout
integrationTime
=
self
.
spinBoxIntTime
.
value
()
#self.measprog = subprocess.Popen(["cat","/home_local/camrasdemo/test-001.txt"], stdout=subprocess.PIPE)
self
.
measprog
=
subprocess
.
Popen
([
"sleep"
,
str
(
integrationTime
)],
stdout
=
subprocess
.
PIPE
)
for
sec
in
range
(
integrationTime
):
remainstring
=
str
(
int
((
integrationTime
-
sec
)
/
60
))
+
":"
remainstring
+=
"{:02}"
.
format
((
integrationTime
-
sec
)
%
60
)
progressSignal
.
emit
(
measnum
,
int
(
float
(
sec
)
/
integrationTime
*
100
),
remainstring
)
time
.
sleep
(
1
)
self
.
measprog
.
wait
()
data
=
self
.
measprog
.
stdout
def
startMeasurement
(
self
):
print
(
"Measurement started"
)
...
...
@@ -137,8 +164,6 @@ class DTObservationProgram(Ui_mainWindow):
dec
=
self
.
tableWidgetPointings
.
item
(
meas
,
1
).
text
()
self
.
tableWidgetPointings
.
setItem
(
meas
,
2
,
QTableWidgetItem
(
"Scheduled"
))
for
column
in
range
(
3
):
self
.
tableWidgetPointings
.
item
(
meas
,
column
).
setBackground
(
QtGui
.
QColor
(
'gray'
))
self
.
tableWidgetPointings
.
resizeColumnsToContents
()
setpoint
=
SkyCoord
(
ra
,
dec
,
frame
=
'icrs'
)
setpoints
.
append
(
setpoint
)
...
...
@@ -146,6 +171,7 @@ class DTObservationProgram(Ui_mainWindow):
worker
=
Worker
(
self
.
goToSetpoints
,
setpoints
)
worker
.
signals
.
finished
.
connect
(
self
.
measCompleted
)
worker
.
signals
.
allfinished
.
connect
(
self
.
allCompleted
)
worker
.
signals
.
progress
.
connect
(
self
.
updateProgress
)
self
.
threadpool
.
start
(
worker
)
def
stopMeasurement
(
self
):
...
...
@@ -160,3 +186,4 @@ if __name__ == '__main__':
mainWindow
.
show
()
sys
.
exit
(
app
.
exec_
())
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment