I made GUIs for ISC using PyQt with a lot of help from Bas, Julia, Diego and Franco.
So far, we haveLSCoverview.py for overviewing length sensing and control (see below).ITFmonitor.py for monitoring the interferometer locking status (see attached; there's too much light on B1 since work on detection bench is currently underway).ASCoverview.py for overviewing alignment sensing and control (see attached).
Latest stable versions of all of them live in /virgoDev/PyIscGui/.
They can be run by> python LSCoverview.py
They need relevant .ui files for generating the screen, and .ui files can be edited using Qt Designer.> designer LSCoverview.ui
I hope this will be the first step to making GUIs for ISC and helping people understand what's happening in ISC.
Next:
- find a better solution for drawing the interferometer for ITFmonitor.py
- incorporate driving matrices in DSP
- make a GUI for tuning demodulation phases
- make a GUI for SSFS and OMC
- re-make violin GUI in PyQt (it was made with Tkinter)
Details:
All of these are based on Python PyQt4. To get all the current values, ConnectOnline function in virgotools is used. To push the requested values, cm_send commands are used. SMS channels are found to be very useful. SMS channels can be acquired only with prefixes:self.connection=ConnectOnline('FbmPyAccess', 'V1:LSC')
frame = self.connection.get_next_frame()
Widgets are named consistently so that
- QLineEdit for showing current value has the name {channelname]_value (they are dark grey when signal not acquired, grey when zero, green when not zero)
- QLineEdit for inputting requested value has the name {channelname}_request (they are white)
- QPushButton for applying the value has the name {channelname}_apply
Right now, codes only talk to Acl.
Below are some notes on each code.LSCoverview.py
- As for the input channels (error signals), channels which has largest and second largest weights are shown. Input channels are sum channels and their weights are saved as SMS channels with the name something like "V1:LSC_MICH_INPUT_B4_DC."
- You can change the weights by selecting the channels in combobox. This will zero all the other weights.
- Control filters for {DOF}_OUT are also shown. I found that it is saved as SMS channels with the name something like "V1:LSC_MICH_OUT_MICH_control_MICH_mains."
- Driving matrix is saved as SMS channels with the names something like "V1:LSC_BS_CORR_MICH_CORR."
- You have to be careful about the driving matrix because you have another matrix in DSP.
- You can set the ramp time at top-right.ITFmonitor.py
- Interferometer is drawn by PyQt4.QtGui.QPainter and the rest is designed by Qt Designer.
- To change the interferometer drawing, you have to look into the code (which is not very nice and we are seeking for another solution).
- The thickness of the beams are changed depending on the powers on photodiodes, and you can monitor which parts are locked.
- Normalization factor for beam thickness have to be re-tuned later once we have a full lock.ASCoverview.py
- To save sensing and driving matrices, I added the following lines to the ASC_Acl.cfg file.ACL_SMS "ASC_" BS_TX_INPUT PR_TX_INPUT DIFFp_TX_INPUT DIFFm_TX_INPUT COMMp_TX_INPUT COMMm_TX_INPUT
ACL_SMS "ASC_" BS_TY_INPUT PR_TY_INPUT DIFFp_TY_INPUT DIFFm_TY_INPUT COMMp_TY_INPUT COMMm_TY_INPUT
ACL_SMS "ASC_" NE_TX_CORR NI_TX_CORR WE_TX_CORR WI_TX_CORR
ACL_SMS "ASC_" NE_TY_CORR NI_TY_CORR WE_TY_CORR WI_TY_CORR
- The matrix part of the GUI can be auto generated using generateMatrixUI.py.
- Somehow, COMM{p|m}_{TX|TY}_CORR are not saved as ADC channels (so they are dark grey in the ASCoverview screen). We have to fix this.