################################################################################ # PyDevice Support for Transfocator ################################################################################ epicsEnvSet("PY_OBJECT", "CRL1") epicsEnvSet("CRL_ID", "CRL1") # Set CRL numbers epicsEnvSet("_STACKS","10") # Number of stacks epicsEnvSet("_ELEM","1024") # Possible configurations: 2^(Number of stacks) epicsEnvSet("MONOE","testMonoE") # for testing -- replace with real mono energy PV epicsEnvSet("IDENERGY","testIDE") # for testing -- replace with real ID energy PV # Next two lines set up some testing tools for energy and slits dbLoadRecords("${TOP}/db/energyTestTools.db","P=$(PREFIX), MONOE=$(MONOE), IDENERGY=$(IDENERGY)") dbLoadRecords("${TOP}/db/slitTestTools.db","P=$(PREFIX), SLITH=testSSH, SLITV=testSSV") # Setting some variables beamline-dependent PVs epicsEnvSet('_SLITH',"$(PREFIX)testSSH") # Horizontal size of slit PV before CRL (testing) #epicsEnvSet('_SLITH',"$(PREFIX)testSSH") # Horizontal size of slit PV before CRL epicsEnvSet('_SLITV',"$(PREFIX)testSSV") # Vertical size of slit PV before CRL (testing) #epicsEnvSet('_SLITV',"$(PREFIX)testSSV") # Vertical size of slit PV before CRL epicsEnvSet("BLE","$(PREFIX)$(MONOE)") # Beam energy PV at CRL (testing) # CRL DBs and defining substitution file to get stack properties dbLoadTemplate("substitutions/pyDeviceTfor.substitutions","P=$(PREFIX),CRLID=$(CRL_ID)") pydev("stack_subFile = 'substitutions/pyDeviceTfor.substitutions'") # Import Transfocator class pydev("from pyTransfocator_single import singleTF") # Create Transfocator object pydev("$(PY_OBJECT) = singleTF(crl_setup = 'crl_setup_single.toml')") # DB for Transfocator system dbLoadRecords("${TOP}/db/pyDevCRLsingle.db","P=$(PREFIX), CRLID=$(CRL_ID), OBJ=$(PY_OBJECT), KEV=$(BLE), SLITH = $(_SLITH), SLITV = $(_SLITV), ELEM=$(_ELEM)") ################################################################################ # Verboseness turned on for debugging -- set to 0 to turn off doAfterIocInit("dbpf('$(PREFIX)$(CRL_ID):verbosity','1')") # After iocInit, need to setup focal size lookup table -- because setting slit # sizes and energy causes the table to be recalculated, will first disable # lookup table calc PV, set the slit sizes and energy, calculate the table # directly via python call, then enable calc PV so future slit/energy changes # update the lookup table # Disable calc of lookup table doAfterIocInit("dbpf('$(PREFIX)CRL$(_N):recalc_enable','0')") # Disable table calc # Process current slit and energy PV settings doAfterIocInit("dbpf('$(PREFIX)$(CRL_ID):slitSize_H.PROC','1')") # PROC H slit size read and update CRL1 object doAfterIocInit("dbpf('$(PREFIX)$(CRL_ID):slitSize_V.PROC','1')") # PROC V slit size read and update CRL1 object doAfterIocInit("dbpf('$(PREFIX)$(CRL_ID):energy.PROC','1')") # PROC energy read and update CRL1 object # Check initial energy and slit settings doAfterIocInit("pydev('print($(PY_OBJECT).energy)')") doAfterIocInit("pydev('print($(PY_OBJECT).slits)')") # Calc lookup table via python; later re-calculations started via EPICS (changes to energy, slits) # stack_subFile - string holding name/rel. location of substitutions file loaded # loaded in dbLoadTemplate # $(_STACKS) - number of stacks of lenses doAfterIocInit("pydev('$(PY_OBJECT).setupLookupTable(stack_subFile, $(_STACKS))')") # Enable lookup table calc PV doAfterIocInit("dbpf('$(PREFIX)$(CRL_ID):recalc_enable','1')") # Enable table calc ################################################################################