Client examples

The following client (mythen_client.py) can be used to setup the detector and acquire data. See 20.1.6 for an example of the necessary steps.

#!/usr/bin/env python

from PyTango import *
import sys
import time

def usage():
    print "Usage:"

    print "   'mythen_client.py' -> to get information and status"
    print "   'mythen_client.py help' -> prints this help"
    print "   'mythen_client.py status' -> Gets the detector status"
    print "   'mythen_client.py trimdir <dirname>' -> Sets the directory containing"
    print "      trimbit files"
    print "   'mythen_client.py caldir <dirname>' -> Sets the directory containig"
    print "      calibration files"
    print "   'mythen_client.py outdir <dirname>' -> Sets the directory to which data"
    print "      files will be written"
    print "   'mythen_client.py fname <filename>' -> Sets the root for output file names"
    print "   'mythen_client.py index <index>' -> Sets the index of the output file"
    print "   'mythen_client.py settings <standard|fast|highgain>' -> Detector settings"
    print "   'mythen_client.py threshold <threshold>' -> Sets the detector thresholds (eV)"
    print "   'mythen_client.py exptime <exptime>' -> Sets the exposure time (s)"
    print "   'mythen_client.py frames <framenumber>' -> Sets the number of frames to be"
    print "      acquired"
    print "   'mythen_client.py start' -> Starts the acquisition"
    print "   'mythen_client.py frame' -> Downloads a single frame from the detector"
    print "   'mythen_client.py data' -> Downloads all available data from the detector"
    print "   'mythen_client.py flatfield [filename]' -> Sets flatfield corrections"
    print "      (use empty filename to disable corrections)"
    print "   'mythen_client.py ratecorr <deadtime>' -> Sets rate corrections (ns)"
    print "      (use -1 for defaule corrections, 0 to disable corrections)"


def refresh(mythendet):
    """The refresh function is used to refresh all the attributs"""
    mythendet.Refresh()


def get_hostname(mythendet):
    """The get_hostname function is used to read the hostname."""

    print mythendet.get_property("hostname")


def get_port(mythendet):
    """The get_port function is used to read the port."""

    print mythendet.get_property("port")


def get_det_id(mythendet):
    """The get_det_id function is used to read the detector ID."""

    print mythendet.get_property("detectorId")


def get_trimdir(mythendet):
    """The get_trimdir function is used to read the trimbit file directory."""

    print "Trimdir: " + mythendet.read_attribute("TrimDir").value


def set_trimdir(mythendet, trimdir):
    """The set_trimdir function is used to set the trimbit file directory."""

    mythendet.write_attribute("TrimDir", trimdir)
    get_trimdir(mythendet)


def get_caldir(mythendet):
    """The get_caldir function is used to read the calibration file directory."""

    print "Caldir: " + mythendet.read_attribute("CalibrationDir").value


def set_caldir(mythendet, caldir):
    """The set_caldir function is used to set the calibration file directory."""

    mythendet.write_attribute("CalibrationDir", caldir)
    get_caldir(mythendet)


def get_outdir(mythendet):
    """The get_outdir function is used to read the output file directory."""

    print "Outdir: " + mythendet.read_attribute("OutDir").value


def set_outdir(mythendet, outdir):
    """The set_outdir function is used to set the output file directory."""

    mythendet.write_attribute("OutDir", outdir)
    get_outdir(mythendet)


def get_outfile(mythendet):
    """The get_outfile function is used to read the output file name."""

    print "Fname: " + mythendet.read_attribute("OutFileName").value


def set_outfile(mythendet, outfile):
    """The set_outfile function is used to set the output file name."""

    mythendet.write_attribute("OutFileName", outfile)
    get_outfile(mythendet)


def get_outfileidx(mythendet):
    """The get_outfileidx function is used to read the output file index."""

    print "Index: %d" % mythendet.read_attribute("OutFileIndex").value


def set_outfileidx(mythendet, index):
    """The set_outfile function is used to set the output file name."""

    mythendet.write_attribute("OutFileIndex", int(index))
    get_outfileidx(mythendet)


def get_settings(mythendet):
    """The get_settings function is used to read the detector settings."""

    print "Settings: %s" % mythendet.read_attribute("Settings").value


def set_settings(mythendet, settings):
    """The set_settings function is used to set the detector settings."""

    mythendet.write_attribute("Settings", settings)
    get_settings(mythendet)


def get_threshold(mythendet):
    """The get_threshold function is used to read the detector thresholds."""

    print "Threshold: %d (eV)" % mythendet.read_attribute("Threshold").value


def set_threshold(mythendet, thr):
    """The set_threshold function is used to set the detector thresholds."""

    mythendet.write_attribute("Threshold", int(thr))
    get_threshold(mythendet)


def get_exptime(mythendet):
    """The get_exptime function is used to read the exposure time."""

    print "ExpTime: %f (s)" % mythendet.read_attribute("ExposureTime").value


def set_exptime(mythendet, exptime):
    """The set_exptime function is used to set the exposure time."""

    mythendet.write_attribute("ExposureTime", float(exptime))
    get_exptime(mythendet)


def get_frames(mythendet):
    """The get_frames function is used to read the number of frames."""

    print "Frames: %d" % mythendet.read_attribute("FramesPerCycle").value


def set_frames(mythendet, frames):
    """The set_frames function is used to set the number of frames."""

    mythendet.write_attribute("FramesPerCycle", int(frames))
    get_frames(mythendet)


def start_acquisition(mythendet):
    """The start_acquisition function is used to start the acquisition."""

    mythendet.StartAcquisition()
    print "Acquisition started"


def get_frame(mythendet):
    """The get_frame function is used to download a single frame from the detector."""

    mythendet.GetFrame()
    print "Got one frame from detector"


def get_data(mythendet):
    """The get_data function is used to download data from the detector."""

    mythendet.GetData()
    print "Got data from detector"


def get_flatfield(mythendet):
    """The get_flatfield function is used to get flatfield corrections."""

    if (mythendet.read_attribute("FlatFieldEnabled").value):
        print "Flatfield: " + mythendet.read_attribute("FlatFieldFileName").value
    else:
        print "Flatfield: (disabled)"


def set_flatfield(mythendet, fname):
    """The set_flatfield function is used to set flatfield corrections."""

    if (fname==""):
        mythendet.write_attribute("FlatFieldEnabled", False)
    else:
        mythendet.write_attribute("FlatFieldEnabled", True)

    mythendet.write_attribute("FlatFieldFileName", fname)

    get_flatfield(mythendet)


def get_ratecorr(mythendet):
    """The get_ratecorr function is used to get rate corrections (ns)."""

    if (not mythendet.read_attribute("RateCorrEnabled").value):
        print "Ratecorr: (disabled)"
    elif (mythendet.read_attribute("RateCorrDefault").value):
        print "Ratecorr: %f (default)" % float(mythendet.read_attribute("RateCorrDeadTime").value)
    else:
        print "Ratecorr: %f (ns)" % float(mythendet.read_attribute("RateCorrDeadTime").value)
        

def set_ratecorr(mythendet, deadtime):
    """The set_ratecorr function is used to set rate corrections (ns)."""

    dtime = float(deadtime)
    if (dtime==-1):
        mythendet.write_attribute("RateCorrEnabled", True)
        mythendet.write_attribute("RateCorrDefault", True)
    elif (dtime==0):
        mythendet.write_attribute("RateCorrEnabled", False)
    else:
        mythendet.write_attribute("RateCorrEnabled", True)
        mythendet.write_attribute("RateCorrDefault", False)
        mythendet.write_attribute("RateCorrDeadTime", dtime)

    get_ratecorr(mythendet)


def get_status(mythendet):
    """The get_state function is used to read the status."""

    print mythendet.Status()




#
# main
#
try :
    mythendet = DeviceProxy( "//haspp0xtdot:10000/test/mythen/exp.01")
    
    if (len(sys.argv)==1):
        refresh(mythendet)
        get_hostname(mythendet)
        get_port(mythendet)
        get_det_id(mythendet)
        get_trimdir(mythendet)
        get_caldir(mythendet)
        get_outdir(mythendet)
        get_outfile(mythendet)
        get_outfileidx(mythendet)
        get_settings(mythendet)
        get_threshold(mythendet)
        get_exptime(mythendet)
        get_frames(mythendet)
        get_flatfield(mythendet)
        get_ratecorr(mythendet)
        
        get_status(mythendet)

        print "                 "
        print "Run 'mythen_client.py help' to see program options"
        print "                 "
    else:
        if (sys.argv[1]=="help"):
            usage()

        elif (sys.argv[1] == "trimdir" and len(sys.argv)>2):
            set_trimdir(mythendet, sys.argv[2])

        elif (sys.argv[1] == "caldir" and len(sys.argv)>2):
            set_caldir(mythendet, sys.argv[2])

        elif (sys.argv[1] == "outdir" and len(sys.argv)>2):
            set_outdir(mythendet, sys.argv[2])

        elif (sys.argv[1] == "fname" and len(sys.argv)>2):
            set_outfile(mythendet, sys.argv[2])

        elif (sys.argv[1] == "index" and len(sys.argv)>2):
            set_outfileidx(mythendet, sys.argv[2])

        elif (sys.argv[1] == "settings" and len(sys.argv)>2):
            set_settings(mythendet, sys.argv[2])

        elif (sys.argv[1] == "threshold" and len(sys.argv)>2):
            set_threshold(mythendet, sys.argv[2])

        elif (sys.argv[1] == "exptime" and len(sys.argv)>2):
            set_exptime(mythendet, sys.argv[2])

        elif (sys.argv[1] == "frames" and len(sys.argv)>2):
            set_frames(mythendet, sys.argv[2])

        elif (sys.argv[1] == "start"):
            start_acquisition(mythendet)

        elif (sys.argv[1] == "frame"):
            get_frame(mythendet)

        elif (sys.argv[1] == "data"):
            get_data(mythendet)

        elif (sys.argv[1] == "flatfield"):
            if (len(sys.argv)>2):
                set_flatfield(mythendet, sys.argv[2])
            else:
                set_flatfield(mythendet, "")

        elif (sys.argv[1] == "ratecorr" and len(sys.argv)>2):
            set_ratecorr(mythendet, sys.argv[2])

        elif  (sys.argv[1] == "status"):
            get_status(mythendet)

        else:
            usage()


except Exception, inst :
    print "Failed with exception !"
    print sys.exc_info()[0]
    print type(inst)     # the exception instance
    print inst.args      # arguments stored in .args