diff --git a/alvra.py b/alvra.py index c000637..d2f432c 100755 --- a/alvra.py +++ b/alvra.py @@ -5,21 +5,21 @@ from slic.daq import BS, DIA, Scanner from slic.utils import Channels, Config, Elog, Screenshot from slic.checkers import PVChecker -from slic.devices.device import Device - from alvra_devices import * from alvra_adhoc import * -cfg = Config("/sf/alvra/config/exp/current_experiment.json") +#fn_cfg = "/sf/alvra/config/exp/current_experiment.json" +fn_cfg = "./slickits/alvra/config.json" +cfg = Config(fn_cfg) -elog = Elog(cfg.elog_url, cfg.user, cfg.screenshot_directory) +elog = Elog(cfg.elog_url, cfg.screenshot_directory, user=cfg.user, password="supercorrect") #TODO: remove fake password screenshot = Screenshot(cfg.screenshot_directory) check_intensity = PVChecker("SARFE10-PBPG050:HAMP-INTENSITY-CAL", vmin=100, vmax=300, wait_time=3) -bsdaqJF = DIA( +bsdaqJF = DIA(#TODO: gain and pedestal? api_address="http://sf-daq-alvra:10000", jf_name="JF_4.5M", pgroup=cfg.pgroup @@ -30,22 +30,28 @@ scansJF = Scanner( scan_info_dir="/sf/alvra/data/{}/res/scan_info".format(cfg.pgroup), default_counters=[bsdaqJF], checker=check_intensity, - scan_directories=True, + scan_directories=True ) -channels = Channels("/sf/alvra/config/com/channel_lists/default_channel_list") +#fn_channels = "/sf/alvra/config/com/channel_lists/default_channel_list" +fn_channels = "./slickits/alvra/channel_list" +channels = Channels(fn_channels) bsdaq = BS(channels, default_file_path="???") scansBSreadLocal = Scanner( - data_base_dir="/sf/alvra/config/com/data/scan_data", - scan_info_dir="/sf/alvra/config/com/data/scan_info", + data_base_dir="/sf/alvra/data/{}/res/scan_data".format(cfg.pgroup), + scan_info_dir="/sf/alvra/data/{}/res/scan_info".format(cfg.pgroup), default_counters=[bsdaq], + scan_directories=True ) +#TODO: just some generic examples: +from slic.devices.device import Device + shut_und = Device( "SARFE10-OPSH044", description="Photon shutter after Undulator" @@ -62,14 +68,3 @@ print(pbps_und) - - - - - - - - - - - diff --git a/alvra_adhoc.py b/alvra_adhoc.py index 1c9a52d..52d2311 100644 --- a/alvra_adhoc.py +++ b/alvra_adhoc.py @@ -5,3 +5,18 @@ class LXT: lxt = LXT() +from slic.devices.xoptics.dcm import AlvraDCM_FEL + +monoFEL = AlvraDCM_FEL("SAROP11-ODCM105") + + +from slic.devices.general.smaract import SmarActRecord + +laser_pitch = SmarActRecord("SARES11-XICM125:ROX1") +laser_trans = SmarActRecord("SARES11-XICM125:TRX1") +laser_yaw = SmarActRecord("SARES11-XICM125:ROY1") +microscope_pitch = SmarActRecord("SARES11-XMI125:ROY1") +microscope_yaw = SmarActRecord("SARES11-XMI125:ROZ1") + + + diff --git a/alvra_devices.py b/alvra_devices.py index fad74ed..b5d5671 100644 --- a/alvra_devices.py +++ b/alvra_devices.py @@ -7,17 +7,27 @@ phaseShifter = sd.general.alvra_timing.PhaseShifterAramis( description="Experiment laser phase shifter (Globi)" ) +flexTable = sd.endstations.alvra_flex.table( + "SARES12-XOTA128", + z_undulator=129, + description="Flex optical table" +) + prism = sd.general.smaract.SmarActStage( - gonio="SARES11-CMOV-SMA691110", - trans="SARES11-CMOV-SMA691111", - rotat="SARES11-CMOV-SMA691112", + dict( + gonio="SARES11-CMOV-SMA691110", + trans="SARES11-CMOV-SMA691111", + rotat="SARES11-CMOV-SMA691112" + ), z_undulator=127, description="Prime laser prism" ) xmic = sd.general.smaract.SmarActStage( - gonio="SARES11-CMOV-SMA691113", - rotat="SARES11-CMOV-SMA691114", + dict( + gonio="SARES11-CMOV-SMA691113", + rotat="SARES11-CMOV-SMA691114" + ), z_undulator=127, description="Prime microscope mirror" ) @@ -52,171 +62,171 @@ primeCryTrans = sd.endstations.alvra_prime.VonHamosBragg( description="Prime von Hamos X-trans (Bragg)" ) -#laser = sd.loptics.alvra_experiment.Laser_Exp( -# "SLAAR11-LMOT", -# z_undulator=122, -# description="Experiment laser hardware" +laser = sd.loptics.alvra_experiment.Laser_Exp( + "SLAAR11-LMOT", + z_undulator=122, + description="Experiment laser hardware" +) + +laserShutter = sd.loptics.alvra_laser_shutter.laser_shutter( + "SLAAR11-LDIO-LAS6891", + z_undulator=122, + description="Laser Shutter" +) + +pbpsOpt = sd.xdiagnostics.intensity_monitors.SolidTargetDetectorPBPS( + "SAROP11-PBPS117", + VME_crate="SAROP11-CVME-PBPS1", + link=9, + description="Intensity/position monitor after Optics hutch (PBPS)" +) + +pbpsAtt = sd.xdiagnostics.intensity_monitors.SolidTargetDetectorPBPS( + "SAROP11-PBPS122", + VME_crate="SAROP11-CVME-PBPS1", + link=9, + description="Intensity/Position monitor after Attenuator" +) + +screenFE = sd.xdiagnostics.profile_monitors.Pprm( + "SARFE10-PPRM053", + description="Profile monitor after single-shot spectrometer (PPRM)" +) + +screenOP = sd.xdiagnostics.profile_monitors.Pprm( + "SARFE10-PPRM064", + description="Profile monitor after Front End" +) + +screenMirrAlv1 = sd.xdiagnostics.profile_monitors.Pprm( + "SAROP11-PPRM066", + description="Profile monitor after Alvra Mirror 1 (PPRM)" +) + +screenMirrAlv2 = sd.xdiagnostics.profile_monitors.Pprm( + "SAROP11-PPRM078", + description="Profile monitor after Alvra Mirror 2 (PPRM)" +) + +screenMirrorV2 = sd.xdiagnostics.profile_monitors.Pprm( + "SAROP11-PPRM110", + description="Profile monitor after Vertical Mirror 2 (PPRM)" +) + +screenOPEnd = sd.xdiagnostics.profile_monitors.Pprm( + "SAROP11-PPRM117", + description="Profile monitor after Optics hutch (PPRM)" +) + +screenAtt = sd.xdiagnostics.profile_monitors.Pprm( + "SAROP11-PPRM122", + description="Profile monitor after Attenuator" +) + +kbHor = sd.xoptics.kbhor.KBhor( + "SAROP11-OKBH124", + description="Alvra horizontal KB mirror" +) + +kbVer = sd.xoptics.kbver.KBver( + "SAROP11-OKBV123", + description="Alvra vertical KB mirror" +) + +attFE = sd.xoptics.attenuator_aramis.AttenuatorAramis( + "SARFE10-OATT053", + description="Attenuator in Front End" +) + +attExp = sd.xoptics.attenuator_aramis.AttenuatorAramis( + "SAROP11-OATT120", + description="Attenuator Alvra" +) + +mono = sd.xoptics.dcm.Double_Crystal_Mono( + "SAROP11-ODCM105", + description="Alvra DCM Monochromator" +) + +refLaser = sd.xoptics.reflaser.RefLaser_Aramis( + "SAROP11-OLAS120", + description="Alvra beamline reference laser before KBs (OLAS)" +) + +slitSwitch = sd.xoptics.slits.SlitBlades_old( + "SAROP11-OAPU104", + description="Slit in Optics hutch after Photon switchyard and before Alvra mono" +) + +slitUnd = sd.xoptics.slits.SlitFourBlades_old( + "SARFE10-OAPU044", + description="Slit after Undulator" +) + +slitAttExp = sd.xoptics.slits.SlitPosWidth_old( + "SAROP11-OAPU120", + description="Slits behind attenuator" +) + +#shutUnd = sd.???( +# "SARFE10-OPSH044", +# description="Photon shutter after Undulator" #) -#laserShutter = sd.loptics.alvra_laser_shutter.laser_shutter( -# "SLAAR11-LTIM01-EVR0", -# z_undulator=122, -# description="Laser Shutter" +#gasMon = sd.???( +# "SARFE10-PBIG050", +# description="Gas Monitor Intensity (PBIG)" #) -#pbpsOpt = sd.xdiagnostics.intensity_monitors.SolidTargetDetectorPBPS( -# "SAROP11-PBPS117", -# VME_crate="SAROP11-CVME-PBPS1", -# link=9, -# description="Intensity/position monitor after Optics hutch (PBPS)" +#pbpsUnd = sd.???( +# "SARFE10-PBPS053", +# z_undulator=44, +# description="Intensity position monitor after Undulator (PBPS)" #) -#pbpsAtt = sd.xdiagnostics.intensity_monitors.SolidTargetDetectorPBPS( -# "SAROP11-PBPS122", -# VME_crate="SAROP11-CVME-PBPS1", -# link=9, -# description="Intensity/Position monitor after Attenuator" +#shutFE = sd.???( +# "SARFE10-SBST060", +# description="Photon shutter in the end of Front End" #) -#screenFE = sd.xdiagnostics.profile_monitors.Pprm( -# "SARFE10-PPRM053", -# description="Profile monitor after single-shot spectrometer (PPRM)" +#mirrorAlv1 = sd.???( +# "SAROP11-OOMH064", +# description="First Alvra Horizontal offset mirror (OMH064)" #) -#screenOP = sd.xdiagnostics.profile_monitors.Pprm( -# "SARFE10-PPRM064", -# description="Profile monitor after Front End" +#mirrorAlv2 = sd.???( +# "SAROP11-OOMH076", +# description="Second Alvra Horizontal offset mirror (OMH076)" #) -#screenMirrAlv1 = sd.xdiagnostics.profile_monitors.Pprm( -# "SAROP11-PPRM066", -# description="Profile monitor after Alvra Mirror 1 (PPRM)" +#mirrorV1 = sd.???( +# "SAROP11-OOMV108", +# description="Alvra Vertical offset Mirror 1 (OMV108)" #) -#screenMirrAlv2 = sd.xdiagnostics.profile_monitors.Pprm( -# "SAROP11-PPRM078", -# description="Profile monitor after Alvra Mirror 2 (PPRM)" +#mirrorV2 = sd.???( +# "SAROP11-OOMV109", +# description="Alvra Vertical offset Mirror 2 (OMV109)" #) -#screenMirrorV2 = sd.xdiagnostics.profile_monitors.Pprm( -# "SAROP11-PPRM110", -# description="Profile monitor after Vertical Mirror 2 (PPRM)" +#pulsePicker = sd.???( +# "SAROP11-OPPI110", +# description="X-ray pulse picker" #) -#screenOPEnd = sd.xdiagnostics.profile_monitors.Pprm( -# "SAROP11-PPRM117", -# description="Profile monitor after Optics hutch (PPRM)" +#shutOpt = sd.???( +# "SAROP11-SBST114", +# description="Shutter after Optics hutch" #) -#screenAtt = sd.xdiagnostics.profile_monitors.Pprm( -# "SAROP11-PPRM122", -# description="Profile monitor after Attenuator" +#DelayPALM = sd.???( +# "SAROP11-PALM118", +# description="Timing diagnostics THz streaking (PALM)" #) -#kbHor = sd.xoptics.KBhor.KBhor( -# "SAROP11-OKBH124", -# description="Alvra horizontal KB mirror" +#DelayPSEN = sd.???( +# "SAROP11-PSEN119", +# description="Timing diagnostics spectral encoding (PSEN)" #) -#kbVer = sd.xoptics.KBver.KBver( -# "SAROP11-OKBV123", -# description="Alvra vertical KB mirror" -#) - -#attFE = sd.xoptics.attenuator_aramis.AttenuatorAramis( -# "SARFE10-OATT053", -# description="Attenuator in Front End" -#) - -#attExp = sd.xoptics.attenuator_aramis.AttenuatorAramis( -# "SAROP11-OATT120", -# description="Attenuator Alvra" -#) - -#mono = sd.xoptics.dcm.Double_Crystal_Mono( -# "SAROP11-ODCM105", -# description="Alvra DCM Monochromator" -#) - -#refLaser = sd.xoptics.reflaser.RefLaser_Aramis( -# "SAROP11-OLAS120", -# description="Alvra beamline reference laser before KBs (OLAS)" -#) - -#slitSwitch = sd.xoptics.slits.SlitBlades_old( -# "SAROP11-OAPU104", -# description="Slit in Optics hutch after Photon switchyard and before Alvra mono" -#) - -#slitUnd = sd.xoptics.slits.SlitFourBlades_old( -# "SARFE10-OAPU044", -# description="Slit after Undulator" -#) - -#slitAttExp = sd.xoptics.slits.SlitPosWidth_old( -# "SAROP11-OAPU120", -# description="Slits behind attenuator" -#) - -##shutUnd = sd.???( -## "SARFE10-OPSH044", -## description="Photon shutter after Undulator" -##) - -##gasMon = sd.???( -## "SARFE10-PBIG050", -## description="Gas Monitor Intensity (PBIG)" -##) - -##pbpsUnd = sd.???( -## "SARFE10-PBPS053", -## z_undulator=44, -## description="Intensity position monitor after Undulator (PBPS)" -##) - -##shutFE = sd.???( -## "SARFE10-SBST060", -## description="Photon shutter in the end of Front End" -##) - -##mirrorAlv1 = sd.???( -## "SAROP11-OOMH064", -## description="First Alvra Horizontal offset mirror (OMH064)" -##) - -##mirrorAlv2 = sd.???( -## "SAROP11-OOMH076", -## description="Second Alvra Horizontal offset mirror (OMH076)" -##) - -##mirrorV1 = sd.???( -## "SAROP11-OOMV108", -## description="Alvra Vertical offset Mirror 1 (OMV108)" -##) - -##mirrorV2 = sd.???( -## "SAROP11-OOMV109", -## description="Alvra Vertical offset Mirror 2 (OMV109)" -##) - -##pulsePicker = sd.???( -## "SAROP11-OPPI110", -## description="X-ray pulse picker" -##) - -##shutOpt = sd.???( -## "SAROP11-SBST114", -## description="Shutter after Optics hutch" -##) - -##DelayPALM = sd.???( -## "SAROP11-PALM118", -## description="Timing diagnostics THz streaking (PALM)" -##) - -##DelayPSEN = sd.???( -## "SAROP11-PSEN119", -## description="Timing diagnostics spectral encoding (PSEN)" -##) - diff --git a/channel_list b/channel_list new file mode 100644 index 0000000..8a7bdeb --- /dev/null +++ b/channel_list @@ -0,0 +1,182 @@ +##### WARNING: DUPLICATE ENTRIES BREAK BEAM SYNCHRONOUS DATA ACQUISITION ##### +# fresh list of channels working 15.2.2019 - CJM +## edited list of channels to try to reduce time taken to retrieve BS data - 2.11.2019 CJM +# note that according to Dima there is a limit of 100 BS channels in this file +# otherwise bs writer on the server crashes, there are currently 93 channels in this list +# that aren't commented out +SLAAR11-LTIM01-EVR0:DUMMY_PV10_NBS +SLAAR11-LTIM01-EVR0:DUMMY_PV1_NBS +SLAAR11-LTIM01-EVR0:DUMMY_PV2_NBS +SLAAR11-LTIM01-EVR0:DUMMY_PV3_NBS +SLAAR11-LTIM01-EVR0:DUMMY_PV4_NBS +SLAAR11-LTIM01-EVR0:DUMMY_PV5_NBS +SLAAR11-LTIM01-EVR0:DUMMY_PV6_NBS +SLAAR11-LTIM01-EVR0:DUMMY_PV7_NBS +SLAAR11-LTIM01-EVR0:DUMMY_PV8_NBS +SLAAR11-LTIM01-EVR0:DUMMY_PV9_NBS + +# PSSS channels, including the new extracted values +# updated from Tine 23.8.2019 +#SARFE10-PSSS059:FPICTURE +##SARFE10-PSSS059:SPECTRUM_CENTER +##SARFE10-PSSS059:SPECTRUM_FWHM +##SARFE10-PSSS059:SPECTRUM_X +##SARFE10-PSSS059:SPECTRUM_Y + +# Laser IOxOS +SLAAR11-LSCP1-FNS:CH0:VAL_GET +##SLAAR11-LSCP1-FNS:CH1:VAL_GET +SLAAR11-LSCP1-FNS:CH2:VAL_GET +##SLAAR11-LSCP1-FNS:CH3:VAL_GET +SLAAR11-LSCP1-FNS:CH4:VAL_GET +##SLAAR11-LSCP1-FNS:CH5:VAL_GET +##SLAAR11-LSCP1-FNS:CH6:VAL_GET +##SLAAR11-LSCP1-FNS:CH7:VAL_GET + + +# Prime Keysight +##SARES11-GES1:BUFF_BS_INT +##SARES11-GES1:BUFF_WFM_CTR +##SARES11-GES1:CH1_BUFFER +##SARES11-GES1:CH1_VAL_GET +##SARES11-GES1:CH2_BUFFER +##SARES11-GES1:CH2_VAL_GET + +#SARCL01-DBPM150:X1-RT +#SARCL01-DBPM060:X1-RT +#SARMA01-DBPM100:Q1-RT +#SARCL02-DBPM110:X1-RT + +# arrival time BAM in ps +S10BC01-DBAM070:EOM1_T1 + +# Phil's Empire of delay lines bwahahahahah +# Topas pump delay +SLAAR11-LMOT-M451:ENC_1_BS +# Global Globi +SLAAR11-LMOT-M452:ENC_1_BS +# Harmonics pump delay (800 nm#) +##SLAAR11-LMOT-M453:ENC_1_BS + +# Edwin CALC channels running on Laser IOxOS +##SLAAR11-LTIM01-EVR0:CALCI +##SLAAR11-LTIM01-EVR0:CALCX +##SLAAR11-LTIM01-EVR0:CALCY +##SLAAR11-LTIM01-EVR0:CALCS + +# PALM Keysight +SAROP11-PALMK118:BUFF_BS_INT +SAROP11-PALMK118:BUFF_WFM_CTR +SAROP11-PALMK118:CH1_BUFFER +SAROP11-PALMK118:CH1_VAL_GET +SAROP11-PALMK118:CH2_BUFFER +SAROP11-PALMK118:CH2_VAL_GET +# and additional PALM calc channels +SAROP11-PALMK118:ANALYSIS_PALM_DEL +SAROP11-PALMK118:ANALYSIS_PALM_DT + +##SARCL02-DBPM220:X1 +##SARCL02-DBPM260:X1 +##SARCL02-DBPM330:X1 +##SARCL02-DBPM470:X1 + +##SARBD02-DBPM010:T1 +##SARBD02-DBPM040:T1 + +##SARBD01-DBPM040:T1 + +# Gas monitor +# these two are in the bs channels as of today 6.9.2019 +##SARFE10-PBPG050:HAMP-INTENSITY-AVG +##SARFE10-PBPG050:HAMP-INTENSITY-CAL + +# FE electronics channels (PBPS117) +SAROP11-CVME-PBPS2:Lnk9Ch12-DATA-CALIBRATED +SAROP11-CVME-PBPS2:Lnk9Ch13-DATA-CALIBRATED +SAROP11-CVME-PBPS2:Lnk9Ch14-DATA-CALIBRATED +SAROP11-CVME-PBPS2:Lnk9Ch15-DATA-CALIBRATED +SAROP11-CVME-PBPS2:Lnk9Ch12-DATA-SUM +SAROP11-CVME-PBPS2:Lnk9Ch13-DATA-SUM +SAROP11-CVME-PBPS2:Lnk9Ch14-DATA-SUM +SAROP11-CVME-PBPS2:Lnk9Ch15-DATA-SUM +SAROP11-PBPS117:XPOS +SAROP11-PBPS117:YPOS +SAROP11-PBPS117:INTENSITY + +# FE electronics channels (PBPS122) +##SAROP11-CVME-PBPS1:Lnk9Ch3-DATA-CALIBRATED +##SAROP11-CVME-PBPS1:Lnk9Ch3-DATA-SUM +##SAROP11-CVME-PBPS1:Lnk9Ch4-DATA-CALIBRATED +##SAROP11-CVME-PBPS1:Lnk9Ch4-DATA-SUM +##SAROP11-CVME-PBPS1:Lnk9Ch5-DATA-CALIBRATED +##SAROP11-CVME-PBPS1:Lnk9Ch5-DATA-SUM +##SAROP11-CVME-PBPS1:Lnk9Ch7-DATA-CALIBRATED +##SAROP11-CVME-PBPS1:Lnk9Ch7-DATA-SUM +##SAROP11-PBPS122:XPOS +##SAROP11-PBPS122:YPOS +##SAROP11-PBPS122:INTENSITY + + +#ESA IOxOS +##SARES11-LSCP10-FNS:CH0:VAL_GET +##SARES11-LSCP10-FNS:CH1:VAL_GET +##SARES11-LSCP10-FNS:CH2:VAL_GET +##SARES11-LSCP10-FNS:CH3:VAL_GET +##SARES11-LSCP10-FNS:CH4:VAL_GET +##SARES11-LSCP10-FNS:CH5:VAL_GET +##SARES11-LSCP10-FNS:CH6:VAL_GET +##SARES11-LSCP10-FNS:CH7:VAL_GET + +# Event code mask +SAR-CVME-TIFALL5:EvtSet +SAR-CVME-TIFALL4:EvtSet + +# PCO edge camera for spatial TT +#SARES20-CAMS142-M4:FPICTURE + +## BS channels for Prime Huber XYZ encoders +## added 25.7.2019 - CJM +SARES11-XSAM125:ENC_X1_BS +SARES11-XSAM125:ENC_Y1_BS +SARES11-XSAM125:ENC_Z1_BS +## Flex - currently not connected +#SARES12-XSAM128:ENC_X1_BS +#SARES12-XSAM128:ENC_Y1_BS +#SARES12-XSAM128:ENC_Z1_BS + +# add some cameras for testing the microscope LCP viewing ability: +# microscope +# +##SARES11-XMI125-C4P1:FPICTURE +# YAG +#SARES11-XPR125-C4P2:FPICTURE +# Edwin test setup with flushing numbers +#SLAAR11-LCAM-C452:FPICTURE + +# testing for Goran +SARCL01-DBPM060:Q1-RT +SARCL01-DBPM060:Q1-VALID-RT +SARCL01-DBPM060:X1-RT +SARCL01-DBPM060:X1-VALID-RT +SARCL01-DBPM060:Y1-RT +SARCL01-DBPM060:Y1-VALID-RT +SARCL01-DBPM150:Q1-RT +SARCL01-DBPM150:Q1-VALID-RT +SARCL01-DBPM150:X1-RT +SARCL01-DBPM150:X1-VALID-RT +SARCL01-DBPM150:Y1-RT +SARCL01-DBPM150:Y1-VALID-RT +SARCL02-DBPM110:Q1-RT +SARCL02-DBPM110:Q1-VALID-RT +SARCL02-DBPM110:X1-RT +SARCL02-DBPM110:X1-VALID-RT +SARCL02-DBPM110:Y1-RT +SARCL02-DBPM110:Y1-VALID-RT +SARMA01-DBPM100:Q1-RT +SARMA01-DBPM100:Q1-VALID-RT +SARMA01-DBPM100:X1-RT +SARMA01-DBPM100:X1-VALID-RT +SARMA01-DBPM100:Y1-RT +SARMA01-DBPM100:Y1-VALID-RT + + diff --git a/config.json b/config.json new file mode 100644 index 0000000..141961a --- /dev/null +++ b/config.json @@ -0,0 +1,9 @@ + +{ + "elog_url": "https://elog-gfa.psi.ch/Alvra", + "user": "gac-alvra", + "screenshot_directory": "/sf/alvra/config/screenshots", + "pgroup": "p17983" +} + +