toPyspViewer()

The function toPyspViewer() sends commands and data to a detached pyspViewer processes. The pyspViewer process may have been started 'by hand' or by the function PySpectra.assertPyspViewerRunning().

The function is used by applications not running in the context of Sardana, applications that only need to display some data.

This function is also used by the Bluesky docHandler, see here

 
#!/usr/bin/env python3
#
# this script simulates a scan using am MCA and a counter
#
import random, time
import PySpectra, HasyUtils
import numpy as np

def main():

    (status, wasLaunched) = PySpectra.assertPyspViewerRunning()

    ret = PySpectra.toPyspViewer( { 'command': ["cls", "delete"]}) 
    if ret[ 'result'].upper() != 'DONE':
        print( "error from pyspMonitor %s" % ret[ 'result'])
        return

    ret = PySpectra.toPyspViewer( { 'command': ["setTitle \"An important title\"", 
                                                 "setComment \"An interesting comment\""]}) 

    name = "TestScan"
    max = 101
    MAX = 1024
    ret = PySpectra.toPyspViewer( {'Scan': { 'name': name,
                                     'xMin': 0., 'xMax': 100., 
                                     'yMin': 0., 'yMax': 1.,
                                     'symbol': '+','symbolColor': 'red',
                                     'symbolSize': 7, 'lineColor': 'blue',
                                     'nPts': max,
                                     'autoscaleX': False, 'autoscaleY': True}})

    x = np.linspace(0, 1023, MAX)
    y = np.random.random_sample( (len( x), ))*1000.
    ret = PySpectra.toPyspViewer( {'Scan': { 'name': "MCA",
                                              'flagMCA': True, 
                                              'lineColor': 'blue', 
                                              'x': x, 
                                              'y': y}}) 
         
    for i in range( max): 
        #
        # send a new MCA spectrum for every scan point
        #
        y = np.random.random_sample( (len( x), ))*1000.
        ret = PySpectra.toPyspViewer( {'Scan': { 'name': "MCA",
                                                  'flagMCA': True, 
                                                  'lineColor': 'blue', 
                                                  'x': x, 
                                                  'y': y}}) 
        pos = float(i)
        posY = random.random()*10
        PySpectra.toPyspViewer( { 'command': ['setXY %s %d %s %s' % (name, i, repr(pos), repr(posY))]})
        PySpectra.toPyspViewer( { 'command': ["display"]}) 
        time.sleep( 0.1)

    print( "Press <space> to continue")
    while 1:
        key = HasyUtils.inkey()
        if key == 32:
            break
        time.sleep( 0.1)
    #
    # if the pyspMonitor was launched by this script, kill it.
    #
    if wasLaunched:
        hshRet = PySpectra.toPyspViewer( { 'command': [ 'exit']})

    return 

if __name__ == "__main__":
    main()

Figure 6.1: toPyspViewer(), simulate a scan, send MCA spectra and couner readings
Image examplePysp6