# Select the source field for the energy record(bo, "$(P)$(CRLID):EnergySelect") { field(DESC, "energy selection") field(DTYP, "Soft Channel") field(ZNAM, "Mono") field(ONAM, "Local") field(VAL, "1") field(FLNK, "$(P)$(CRLID):EnergyCalc") } # The local energy record(ao, "$(P)$(CRLID):EnergyLocal") { field(DESC, "local energy") field(VAL, "12.398") field(PREC, "4") field(EGU, "keV") field(FLNK, "$(P)$(CRLID):EnergyCalc") } # The beamline energy record(ao, "$(P)$(CRLID):EnergyBeamline") { field(DESC, "beamline energy") field(DOL, "$(KEV) CP") field(OMSL, "closed_loop") field(PREC, "4") field(EGU, "keV") field(FLNK, "$(P)$(CRLID):EnergyCalc") } # Calculate the energy to be used record(calcout, "$(P)$(CRLID):EnergyCalc"){ field(DESC, "Energy select calc") field(SCAN, "Passive") field(INPA, "$(P)$(CRLID):EnergySelect.RVAL") field(INPB, "$(P)$(CRLID):EnergyBeamline") field(INPC, "$(P)$(CRLID):EnergyLocal") field(CALC, "(A==0)?B:C") field(OUT, "$(P)$(CRLID):energy PP") field(PREC, "4") field(SCAN, "Passive") } record(ao, "$(P)$(CRLID):energy"){ field(EGU, "keV") field(DOL, "$(KEV) CP") field(OMSL, "closed_loop") field(DTYP, "pydev") field(OUT, "@$(OBJ).updateE(VAL)") field(FLNK, "$(P)$(CRLID):recalc_table.PROC CA") } record(ai, "$(P)$(CRLID):energy_RBV"){ field(DTYP, "pydev") field(INP, "@pydev.iointr('updated_E')") field(SCAN, "I/O Intr") field(PREC, "5") } record(ao, "$(P)$(CRLID):focalSize"){ field(EGU, "m") field(DTYP, "pydev") field(OUT, "@$(OBJ).updateFsize(VAL)") } record(calcout, "$(P)$(CRLID):fSize_twk_up"){ field(INPA, "$(P)$(CRLID):sortedIndex_RBV") field(CALC, "MIN(A+1,2**$(NUM)-1)") field(OUT, "$(P)$(CRLID):sortedIndex PP") } record(calcout, "$(P)$(CRLID):fSize_twk_dn"){ field(INPA, "$(P)$(CRLID):sortedIndex_RBV") field(CALC, "MAX(0,A-1)") field(OUT, "$(P)$(CRLID):sortedIndex PP") } record(ao, "$(P)$(CRLID):slitSize_H"){ field(EGU, "m") field(DOL, "$(SLITH) CP") field(OMSL, "closed_loop") field(DTYP, "pydev") field(OUT, "@$(OBJ).updateSlitSize(VAL, 'hor')") field(FLNK, "$(P)$(CRLID):recalc_table.PROC CA") field(PREC, "6") } record(ai, "$(P)$(CRLID):slitSize_H_RBV"){ field(DTYP, "pydev") field(INP, "@pydev.iointr('updated_slitSize_H')") field(SCAN, "I/O Intr") field(PREC, "6") field(EGU, "m") } record(ao, "$(P)$(CRLID):slitSize_V"){ field(EGU, "m") field(DOL, "$(SLITV) CP") field(OMSL, "closed_loop") field(DTYP, "pydev") field(OUT, "@$(OBJ).updateSlitSize(VAL, 'vert')") field(FLNK, "$(P)$(CRLID):recalc_table.PROC CA") field(PREC, "6") } record(ai, "$(P)$(CRLID):slitSize_V_RBV"){ field(DTYP, "pydev") field(INP, "@pydev.iointr('updated_slitSize_V')") field(SCAN, "I/O Intr") field(PREC, "6") field(EGU, "m") } record(bo, "$(P)$(CRLID):recalc_enable"){ field(DESC, "Lookup table calc enable") field(SCAN, "Passive") field(ZNAM, "Disabled") field(ONAM, "Enabled") } # Not sure this would work -- how to get a PV to simply trigger code? record(bo, "$(P)$(CRLID):recalc_table"){ field(DTYP, "pydev") field(OUT, "@$(OBJ).construct_lookup_table()") field(FLNK, "$(P)$(CRLID):refind_config.PROC CA") field(SDIS, "$(P)$(CRLID):recalc_enable") field(DISV, "0") } # Not sure this would work -- how to get a PV to simply trigger code? record(bo, "$(P)$(CRLID):refind_config"){ field(DTYP, "pydev") field(OUT, "@$(OBJ).find_config()") } record(bo, "$(P)$(CRLID):thickerr_flag"){ field(DTYP, "pydev") field(ZNAM, "Off") field(ONAM, "On") field(OUT, "@$(OBJ).setThickerrFlag(VAL)") field(FLNK, "$(P)$(CRLID):recalc_table.PROC CA") } record(bi, "$(P)$(CRLID):thickerr_flag_RBV"){ field(DTYP, "pydev") field(INP, "@pydev.iointr('updated_thickerr_Flag')") field(SCAN, "I/O Intr") } record(longin, "$(P)$(CRLID):lenses") { field(DTYP, "pydev") field(INP, "@pydev.iointr('new_lenses')") field(SCAN, "I/O Intr") field(FLNK, "$(P)$(CRLID):lens_decode.PROC CA") } record(transform, "$(P)$(CRLID):lens_decode"){ field(INPA, "$(P)$(CRLID):lenses PP") field(CLCB, "A % 2") field(CLCC, "(A >> 1) % 2") field(CLCD, "(A >> 2) % 2") field(CLCE, "(A >> 3) % 2") field(CLCF, "(A >> 4) % 2") field(CLCG, "(A >> 5) % 2") field(CLCH, "(A >> 6) % 2") field(CLCI, "(A >> 7) % 2") field(CLCJ, "(A >> 8) % 2") field(CLCK, "(A >> 9) % 2") # field(CLCL, "(A >> 10) % 2") # field(CLCM, "(A >> 11) % 2") } record(calcout, "$(P)$(CRLID):lens_encode"){ field(OUT, "$(P)$(CRLID):lensConfig_BW PP") field(CALC, "A+B*2+C*4+D*8+E*16+F*32+G*64+H*128+I*256+J*512") } record(calcout, "$(P)$(CRLID):lens_RBV_encode"){ field(OUT, "$(P)$(CRLID):lensConfig_RBV PP") field(CALC, "A+B*2+C*4+D*8+E*16+F*32+G*64+H*128+I*256+J*512") } record(longin, "$(P)$(CRLID):lensConfig_RBV") { } record(longout, "$(P)$(CRLID):lensConfig_BW") { field(DTYP, "pydev") field(OUT, "@$(OBJ).updateConfig(VAL)") } record(ai, "$(P)$(CRLID):fSize_actual"){ field(DTYP, "pydev") field(INP, "@pydev.iointr('new_fSize')") field(SCAN, "I/O Intr") field(PREC, "5") } record(longout, "$(P)$(CRLID):sortedIndex") { field(DTYP, "pydev") field(OUT, "@$(OBJ).updateIndex(VAL)") } record(longin, "$(P)$(CRLID):sortedIndex_RBV") { field(DTYP, "pydev") field(INP, "@pydev.iointr('new_index')") field(SCAN, "I/O Intr") } record(longout, "$(P)$(CRLID):previewIndex") { field(DTYP, "pydev") field(OUT, "@$(OBJ).getPreviewFocalSize(VAL)") } record(ai, "$(P)$(CRLID):fSize_preview"){ field(DTYP, "pydev") field(INP, "@pydev.iointr('new_preview')") field(SCAN, "I/O Intr") field(PREC, "6") } record(bo, "$(P)$(CRLID):verbosity"){ field(DTYP, "pydev") field(OUT, "@$(OBJ).updateVerbosity(VAL)") field(ZNAM, "Off") field(ONAM, "On") } record(waveform, "$(P)$(CRLID):fSizes"){ field(DTYP, "pydev") field(INP, "@pydev.iointr('new_lookupTable')") field(SCAN, "I/O Intr") field(PREC, "6") field(FTVL, "DOUBLE") field(NELM, "$(ELEM)") } record(waveform, "$(P)$(CRLID):invF_indices"){ field(DTYP, "pydev") field(INP, "@pydev.iointr('new_invFind_list')") field(SCAN, "I/O Intr") field(PREC, "6") field(FTVL, "DOUBLE") field(NELM, "$(ELEM)") } record(waveform, "$(P)$(CRLID):invF"){ field(DTYP, "pydev") field(INP, "@pydev.iointr('new_invF_list')") field(SCAN, "I/O Intr") field(PREC, "6") field(FTVL, "DOUBLE") field(NELM, "$(ELEM)") } record(waveform, "$(P)$(CRLID):configs"){ field(DTYP, "pydev") field(INP, "@pydev.iointr('new_configs')") field(SCAN, "I/O Intr") field(PREC, "6") field(FTVL, "LONG") field(NELM, "$(ELEM)") } # The commented out records below were meant to replicate the lock feature used # in filter control. BL staff indicated not required but kept in case needed. # Will also have to update python code (in/out masks, culled tables/indices need # to be uncommented). # MW 2024.09.04 #!record(calcout, "$(P)$(CRLID):outMask_encode"){ #! field(OUT, "$(P)$(CRLID):outMask PP") #! field(CALC, "A+B*2+C*4+D*8+E*16+F*32+G*64+H*128+I*256+J*512") #!} #! #!record(longout, "$(P)$(CRLID):outMask") { #! field(DTYP, "pydev") #! field(DESC, "Fixed-out lens mask") #! field(OUT, "@$(OBJ).setOutMask(VAL)") #!} #! #!record(calcout, "$(P)$(CRLID):inMask_encode"){ #! field(OUT, "$(P)$(CRLID):inMask PP") #! field(CALC, "A+B*2+C*4+D*8+E*16+F*32+G*64+H*128+I*256+J*512") #!} #! #!record(longout, "$(P)$(CRLID):inMask") { #! field(DTYP, "pydev") #! field(DESC, "Fixed-in lens mask") #! field(OUT, "@$(OBJ).setInMask(VAL)") #!} #!record(longin, "$(P)$(CRLID):inMask_RBV") { #! field(DTYP, "pydev") #! field(INP, "@pydev.iointr('new_inMask')") #! field(SCAN, "I/O Intr") #!} #! #!record(longin, "$(P)$(CRLID):outMask_RBV") { #! field(DTYP, "pydev") #! field(INP, "@pydev.iointr('new_outMask')") #! field(SCAN, "I/O Intr") #!} #! record(waveform, "$(P)$(CRLID):fSizes_culled"){ #! field(DTYP, "pydev") #! field(INP, "@pydev.iointr('new_culledTable')") #! field(SCAN, "I/O Intr") #! field(PREC, "6") #! field(FTVL, "DOUBLE") #! field(NELM, "$(ELEM)") #! } #! record(waveform, "$(P)$(CRLID):configs_culled"){ #! field(DTYP, "pydev") #! field(INP, "@pydev.iointr('new_culledConfigs')") #! field(SCAN, "I/O Intr") #! field(PREC, "6") #! field(FTVL, "LONG") #! field(NELM, "$(ELEM)") #! }