diff --git a/iexcode/instruments/ARPES.py b/iexcode/instruments/ARPES.py index debe940c10e2ea72a044db5b460e4f0cbb423e62..43e798c1db0e34ae30f06c5cc4f9edf54b8ca80c 100644 --- a/iexcode/instruments/ARPES.py +++ b/iexcode/instruments/ARPES.py @@ -11,7 +11,7 @@ from iexcode.instruments.IEX_cameras import _enable_endstation_cameras from iexcode.instruments.files_and_folders import check_run,make_user_folders,folder_mda,path_dserv from iexcode.instruments.Logfile import Logfile from iexcode.instruments.staff import staff_detector_dictionary -from iexcode.instruments.xrays import _xrays_detector_dictionary, _xrays_reset, xrays_get_all +from iexcode.instruments.xrays import _xrays_detector_dictionary, _xrays_reset, xrays_get_all, xrays_log_dictionary from iexcode.instruments.conversions_constants import * from iexcode.instruments.utilities import * @@ -329,6 +329,9 @@ def _ARPES_log_dictionary(): "tey2":(caget(ARPES_extra_pvs()['tey2']),"1.2e") } + if iex.BL.xrays == True: + d.update(xrays_log_dictionary()) + return d ############################################################################################################## diff --git a/iexcode/instruments/IEX_VPU.py b/iexcode/instruments/IEX_VPU.py index c30f5af77b10f126ecb14e533c8f9b8e181963f5..16b2b26a135320671e49ca21b33693a74b13c20d 100644 --- a/iexcode/instruments/IEX_VPU.py +++ b/iexcode/instruments/IEX_VPU.py @@ -5,6 +5,7 @@ import numpy.polynomial.polynomial as poly from epics import caget, caput +import iexcode.instruments.cfg as iex from iexcode.instruments.userCalcs import userCalcOut_clear from iexcode.instruments.utilities import dateandtime, print_warning_message, read_dict from iexcode.instruments.VLS_PGM import mono_grating_get @@ -31,9 +32,9 @@ def ID_pvs(): 'energy_sp':pv+'EnergySet.VAL', 'start_ramp':pv+'StartRamp.VAL', 'energy_eV_rbv':pv+'EnergyRBV', - 'energy_eV_sp':pv+'EnergyScanSet.VAL', - 'scan_eV_rbv':pv+'EnergyScanSeteV', - 'scan_eV_val':pv+'EnergySetRBV', + 'energy_eV_sp':pv+'EnergyScanSeteV.VAL', + 'scan_val':pv+'EnergyScanSeteV.VAL', + 'scan_rbv':pv+'EnergyRBV', 'table_dir':pv+'TableDirection', 'By_q':pv+'ByqRdbk', 'Bx_q':pv+'BxqRdbk', @@ -535,8 +536,8 @@ def ID_scan_pvs(): """ returns the rbv and val for scanning """ - val_pv=ID_pvs()['scan_eV_val'] - rbv_pv=ID_pvs()['scan_eV_rbv'] + val_pv=ID_pvs()['scan_val'] + rbv_pv=ID_pvs()['scan_rbv'] return rbv_pv, val_pv def ID_scan_fillin(mda,scan_dim,start,stop,step,**kwargs): @@ -547,10 +548,10 @@ def ID_scan_fillin(mda,scan_dim,start,stop,step,**kwargs): """ #Setting up the ScanRecord for ID in Table mode val_pv, rbv_pv = ID_scan_pvs() - mda.fillin(scan_dim,rbv_pv,val_pv,start,stop,step,**kwargs) + iex.BL.mda.fillin(scan_dim,rbv_pv,val_pv,start,stop,step,**kwargs) -def ID_scan_fillin_table(mda,scan_dim,ID_array,**kwargs): +def ID_scan_fillin_table(ID_array,**kwargs): """ fills in the scanRecord for scanning the ID set point @@ -558,7 +559,7 @@ def ID_scan_fillin_table(mda,scan_dim,ID_array,**kwargs): """ #Setting up the ScanRecord for ID in Table mode rbv_pv, val_pv = ID_scan_pvs() - mda.fillin.table(scan_dim,rbv_pv,val_pv,ID_array,**kwargs) + iex.BL.mda.fillin_table(rbv_pv,val_pv,ID_array,**kwargs) ############################################################################################################## ############################## ID direction table ############################## diff --git a/iexcode/instruments/Logfile.py b/iexcode/instruments/Logfile.py index 58dd96102ffbec6c2ce6492caed61ddde0347da4..d2795cbe287d826346cf6af489ab83d10b4c1556 100644 --- a/iexcode/instruments/Logfile.py +++ b/iexcode/instruments/Logfile.py @@ -1,4 +1,5 @@ from os.path import join,isfile +import time from epics import caget, caput @@ -147,12 +148,29 @@ class Logfile: print("Logprint failed") - def log_entries(self,d=None): + def log_entries(self,endstation_dictionary=None,comment=''): """ gets the meta data to write in the log file """ - if d is None: - d = self.log_dictionary() + if endstation_dictionary is None: + endstation_dictionary = self.log_dictionary() + + scan_log = { + "scan":(iex.BL.mda.prefix()+str(iex.BL.mda.fileNum()),"s"), + 'drive':(caget(iex.BL.mda.ioc+"scan1.P1PV"),"s"), + 'start':(caget(iex.BL.mda.ioc+"scan1.P1SP"),".3f"), + 'stop':(caget(iex.BL.mda.ioc+"scan1.P1EP"),".3f") , + 'step':(caget(iex.BL.mda.ioc+"scan1.P1SI"),".3f"), + } + + time_comments={ + 'time': (time.strftime("%D-%H:%M:%S"),"s"), + 'comment':(comment,"s") + } + d = scan_log + d.update(endstation_dictionary) + d.update(time_comments) + header_list = [] data_list = [] format_list = [] @@ -206,7 +224,7 @@ class Logfile: pv_format="{0:"+format_list[last_entry]+"}\n" f.write(pv_format.format(data_list[last_entry])) - def update(self,d=None): + def update(self,d=None,comment=''): """ To be used for scanlog and scanEA functions. Update SaveFile_Header version number when changing the structure of the file (indexing). diff --git a/iexcode/instruments/VLS_PGM.py b/iexcode/instruments/VLS_PGM.py index 4e3cbd53e96bf6bda9578c4fa0c18dd94318016c..095ac21879db6c91ab89c2ac39bf9d7fd684420a 100644 --- a/iexcode/instruments/VLS_PGM.py +++ b/iexcode/instruments/VLS_PGM.py @@ -7,6 +7,8 @@ import numpy as np from epics import caget,caput + +import iexcode.instruments.cfg as iex from iexcode.instruments.IEX_BL_config import * from iexcode.instruments.utilities import print_warning_message,read_dict from iexcode.instruments.scanRecord import * @@ -553,9 +555,9 @@ def mono_scan_after(**kwargs): """ resets mda after scanning the mono """ - after_scan_pv = iex.BL.mda.default_after_scan_seq + after_scan_pv = iex.BL.mda.default_after_scan_seq() caput(after_scan_pv+".PROC",1) - iex.BL.mda.positioner_after_scan("PRIOR POS",kwargs) + iex.BL.mda.positioner_after_scan("PRIOR POS",**kwargs) ############################################################################################################## diff --git a/iexcode/instruments/cfg.py b/iexcode/instruments/cfg.py index 8e9c9467180f2b55ec15fe9011636be4c59ce6b4..6fe1b1ff7d8c15ea272ff2939118f5eb9e54e238 100644 --- a/iexcode/instruments/cfg.py +++ b/iexcode/instruments/cfg.py @@ -1,3 +1,5 @@ BL=None mpa=None + +ca_list=[] \ No newline at end of file diff --git a/iexcode/instruments/current_amplifiers.py b/iexcode/instruments/current_amplifiers.py index 7488c520bc4fee881fb27fa4dbdc20f342a3a116..47327a8acac2ee40b338b0da252ab2cb8c0f729e 100644 --- a/iexcode/instruments/current_amplifiers.py +++ b/iexcode/instruments/current_amplifiers.py @@ -2,6 +2,8 @@ import numpy as np from time import sleep from epics import caget, caput + +import iexcode.instruments.cfg as iex from iexcode.instruments.userCalcs import userStringSeq_pvs, userStringSeq_clear from iexcode.instruments.VLS_PGM import mono_energy_get @@ -11,7 +13,7 @@ def ca_detector_list(branch): returns the list of keithley current amplifiers based on key key: 'ARPES' / 'Staff' """ - ca_list = list(_ca_dictionary()[branch].keys()) + ca_list = iex.ca_list return ca_list @@ -242,16 +244,21 @@ def _ca_live_sequence(ioc,seq_num,detector_list): return userStringSeq_proc -def ca_average(avg_pts,ca_list,rate="Slow",verbose=True): +def ca_average(avg_pts,**kwargs): """ Average reading of the relevant current amplifiers for the current scanIOC/branch. + ** kwargs: Previously: CA_average """ - print("\nAverage set to: "+str(max(avg_pts,1))) + kwargs.setdefault('ca_list',ca_detector_list(iex.BL.branch)), + kwargs.setdefault('rate',"Slow") + kwargs.setdefault('verbose',True) + ca_list = kwargs['ca_list'] + for i in range(0,len(ca_list)): ca = Keithley(ca_list[i][0],ca_list[i][1]) - ca.avg(avg_pts,rate=rate,verbose=verbose) + ca.avg(avg_pts,rate=kwargs['rate'],verbose=kwargs['verbose']) def _load_responsivity_curve(): diff --git a/iexcode/instruments/scanRecord.py b/iexcode/instruments/scanRecord.py index ef3f17e8c3029a8a2b151d438b0c4dd0d0d932e1..b836c161d9f8a523c882ce0f6bf2afc6cefae57b 100644 --- a/iexcode/instruments/scanRecord.py +++ b/iexcode/instruments/scanRecord.py @@ -84,7 +84,6 @@ def saveData_get_all(ioc_pv): return {} - ############################################################################################################## @@ -723,6 +722,7 @@ class ScanRecord: Previously: Scan_Reset_AfterTable """ + kwargs.setdefault('scan_dim',1) #Setting everything back scan_pv = self.ioc+"scan"+str(kwargs['scan_dim']) diff --git a/iexcode/instruments/xrays.py b/iexcode/instruments/xrays.py index bd972006e2ed97262b74c8b1115967b93efbb3bb..924b86a7f5442155ed7e6a88b8405e88d30e704c 100644 --- a/iexcode/instruments/xrays.py +++ b/iexcode/instruments/xrays.py @@ -9,12 +9,10 @@ from time import sleep from epics import caget,caput import iexcode.instruments.cfg as iex -from iexcode.instruments.IEX_cameras import _enable_endstation_cameras from iexcode.instruments.current_amplifiers import ca_average, ca_detector_list from iexcode.instruments.diagnostics import * from iexcode.instruments.FMB_mirrors import FMB_mirror_get from iexcode.instruments.IEX_VPU import * -from iexcode.instruments.Logfile import log_update from iexcode.instruments.m3r import m3r_align,m3r_branch,m3r_switch_branch,m3r_position_dictionary from iexcode.instruments.shutters import * from iexcode.instruments.slits import * @@ -115,7 +113,7 @@ def xrays_get_all(verbose=True): return vals -def _xrays_log_entries(**kwargs): +def xrays_log_dictionary(**kwargs): """ Writes CSV file for the MDA scans with the following default parameters: FilePath='/home/beams/29IDUSER/Documents/User_Folders/UserName/' @@ -126,69 +124,18 @@ def _xrays_log_entries(**kwargs): Previously: scanlog """ - #default parameters - kwargs.setdefault('comment','') - #global BL - - ioc = iex.BL.ioc - - #scan Num - scan = iex.BL.mda.prefix(ioc)+str(iex.BL.mda.fileNum(ioc)) - entry_list=["scan"] - pv_list=[scan] - format_list=["s" ] - #scan info - drive = caget(ioc+"scan1.P1PV") - start = caget(ioc+"scan1.P1SP") - stop = caget(ioc+"scan1.P1EP") - step = caget(ioc+"scan1.P1SI") - entry_list.append('drive','start','stop' ,'step') - pv_list.append(drive,start,stop ,step) - format_list.append("s",".3f",".3f",".3f") - - #endstation info - if iex.BL.endstation_name == 'ARPES': - endstation_entry, endstation_pv, endstation_format = iex.BL.log_entries(**kwargs) - entry_list.append(endstation_entry) - pv_list.append(endstation_pv) - format_list.append(endstation_format) - elif iex.BL.endstation_name == 'Kappa': - endstation_entry, endstation_pv, endstation_format = iex.BL.log_entries(**kwargs) - entry_list.append(endstation_entry[:-7]) - pv_list.append(endstation_pv[:-7]) - format_list.append(endstation_format[:-7]) - - #beamline info - ID_mode = ID_mode_get(verbose=False) if iex.BL.xrays else "no_xrays" - ID_QP_ratio = ID_QP_ratio_get(verbose=False)[0] if iex.BL.xrays else "no_xrays" - ID_sp = round(ID_get_sp_eV()) if iex.BL.xrays else 0 - ID_rbv = round(ID_get_rbv_eV,4) if iex.BL.xrays else 0 - hv = mono_energy_get() if iex.BL.xrays else 0 - grt = mono_grating_get() if iex.BL.xrays else 0 - slit_size = slit_get()[0] if iex.BL.xrays else 0 - entry_list.append("hv","exit_slit","GRT", "ID_SP", "ID_RBV", "ID_Mode", "ID_QP") - pv_list.append(hv,slit_size,grt, ID_sp, ID_rbv,ID_mode, ID_QP_ratio) - format_list.append(".2f",".0f","s",".1f",".1f","s", ".0f") - - #endstation info 2: Fanny can I change to order to get rid of this complication? - if iex.BL.endstation_name == 'Kappa': - endstation_entry, endstation_pv, endstation_format = iex.BL.log_entries(**kwargs) - entry_list.append(endstation_entry[-7:]) - pv_list.append(endstation_pv[-7:]) - format_list.append(endstation_format[-7:]) - - #timestamp and comments - t = time.strftime("%D-%H:%M:%S") - comment = kwargs["comment"] - entry_list.append('time','comment') - pv_list.append(t,comment) - format_list.append("s","s") + d={ + 'ID_mode':(ID_mode_get(verbose=False),"s"), + 'ID_QP_ratio':(ID_QP_ratio_get(verbose=False)[0],".0f"), + 'ID_sp':(ID_get_sp_eV(verbose=False),".2f"), + 'ID_rbv':(ID_get_rbv_eV(verbose=False),".2f"), + 'mono':(mono_energy_get(),".2f"), + 'grating':(mono_grating_get(),"s"), + 'slit_size':(slit_get(verbose=False)[0][0],".0f"), + } + + return d - try: - log_update(iex.BL.endstation,iex.BL.ioc,entry_list,pv_list,format_list) - except: - print("scanlog did not write to file, check for errors.") - ############################################################################################################## ############################## beamline encoders ############################## ############################################################################################################## @@ -426,7 +373,7 @@ def scanmono(start,stop,step,average_pnts=1,**kwargs): scans the mono at the current ID value """ - ca_average(average_pnts,ca_detector_list(iex.BL.branch)) + ca_average(average_pnts) mono_scan(start,stop,step,**kwargs) @@ -476,13 +423,13 @@ def scanXAS(start_stop_step_lists,ID_eV=None,ID_tracking=False, **kwargs): energy(ID_eV,m3r=kwargs["m3r"]) #Averaging and Normalization - ca_average(kwargs['average_pnts'],ca_detector_list(iex.BL.branch)) + ca_average(kwargs['average_pnts']) if iex.BL.branch=="d": mesh_d("In") print_warning_message('MeshD is not automatically removed') #mpa - if iex.BL.endstation == "Kappa" and kwargs["mcp"]: + if iex.BL.endstation_name == "Kappa" and kwargs["mcp"]: mpa.HV_on() #Scanning @@ -491,11 +438,10 @@ def scanXAS(start_stop_step_lists,ID_eV=None,ID_tracking=False, **kwargs): iex.BL.mda.go(scan_dim) #Setting everything back - mono_energy_set(ID_eV) - mono_scan_after(iex.BL.mda,scan_dim) - iex.BL.mda.table_reset_after(scan_dim) + mono_scan_after() + iex.BL.mda.table_reset_after() - if iex.BL.endstation == "Kappa": + if iex.BL.endstation_name == "Kappa": if kwargs["mcp"]: mpa.HV_off() print("WARNING: Mesh"+iex.BL.branch+" is still In") @@ -584,7 +530,7 @@ def get_mirrors(): ############################################################################################################## def slit(size,verbose=True): """ - sets the exit slit based on iex.BL.endstation + sets the exit slit based on iex.BL.endstation_name ARPES = 0 < x < 300 um Kappa = 0 < x < 1000 um @@ -595,7 +541,7 @@ def slit(size,verbose=True): def slit_get(verbose=True): """ - sets the exit slit based on iex.BL.endstation + sets the exit slit based on iex.BL.endstation_name ARPES = 0 < x < 300 um Kappa = 0 < x < 1000 um diff --git a/iexcode/launch_ARPES.py b/iexcode/launch_ARPES.py index 388a8cfc906a0e88eb789067c613130abe67573b..26e91f83e653ef5709e97c491f29febbdd05358c 100644 --- a/iexcode/launch_ARPES.py +++ b/iexcode/launch_ARPES.py @@ -1,4 +1,44 @@ +import iexcode.instruments.cfg as iex from iexcode.instruments.ARPES import * -from iexcode.instruments.diagnostics import diode_c, diode_c_read -from iexcode.instruments.electron_analyzer import * +from iexcode.instruments.bakeout import * #not tested +from iexcode.instruments.conversions_constants import * +from iexcode.instruments.current_amplifiers import * #need to test SRS +from iexcode.instruments.diagnostics import * +from iexcode.instruments.electron_analyzer import * #didn't test, but not much changed +from iexcode.instruments.encoders import * #didn't test encoder reset +from iexcode.instruments.files_and_folders import * +from iexcode.instruments.FMB_mirrors import * +#from iexcode.instruments.hxp_mirrors import * +from iexcode.instruments.IEX_cameras import * +from iexcode.instruments.IEX_VPU import * #need to test with ID +#from iexcode.instruments.kappa_angle_calcs import * +#from iexcode.instruments.Kappa_det import * +#from iexcode.instruments.Kappa import * +from iexcode.instruments.Lakeshore_335 import *#didnt' test mostly hardcoded +from iexcode.instruments.Logfile import * # +from iexcode.instruments.m3r import * +from iexcode.instruments.Motors import * +#from iexcode.instruments.MPA import * +from iexcode.instruments.Octupole import * +#from iexcode.instruments.remote_controlers import * +#from iexcode.instruments.resolution import * +#from iexcode.instruments.s29_temp_cntl import * +from iexcode.instruments.scalers import * +from iexcode.instruments.scanRecord import * +from iexcode.instruments.Scienta import * +from iexcode.instruments.shutters import * #didn't do main shutter +from iexcode.instruments.slits import * +#from iexcode.instruments.spec_stuff import * +from iexcode.instruments.staff import * +from iexcode.instruments.storage_ring import * +from iexcode.instruments.userCalcs import * +from iexcode.instruments.utilities import * +from iexcode.instruments.valves import * +from iexcode.instruments.VLS_PGM import * +from iexcode.instruments.utilities import * +#from iexcode.instruments.vortex import * +from iexcode.instruments.xrays import * + + + diff --git a/iexcode/launch_all.py b/iexcode/launch_all.py index d9a72a11094e6f81433093513a68d94f8d03bcf1..d5bf125cb87c1285a3dfa3833339f5f5f14fcbb9 100644 --- a/iexcode/launch_all.py +++ b/iexcode/launch_all.py @@ -1,13 +1,44 @@ - -from iexcode.macros.cameras import * import iexcode.instruments.cfg as iex + +from iexcode.instruments.ARPES import * +from iexcode.instruments.bakeout import * #not tested from iexcode.instruments.conversions_constants import * -from iexcode.instruments.current_amplifiers import Keithley,SRS -from iexcode.instruments.utilities import playsound,range_up,range_down,take_closest_value -from iexcode.instruments.diagnostics import diagnostics_list_all, diagnostic -from iexcode.instruments.diagnostics import diagnostics_all_out, diagnostics_all_in, mesh_W -from iexcode.instruments.IEX_BL_config import get_all +from iexcode.instruments.current_amplifiers import * #need to test SRS +from iexcode.instruments.diagnostics import * +from iexcode.instruments.electron_analyzer import * #didn't test, but not much changed +from iexcode.instruments.encoders import * #didn't test encoder reset +from iexcode.instruments.files_and_folders import * +from iexcode.instruments.FMB_mirrors import * +#from iexcode.instruments.hxp_mirrors import * +from iexcode.instruments.IEX_cameras import * +from iexcode.instruments.IEX_VPU import * #need to test with ID +#from iexcode.instruments.kappa_angle_calcs import * +#from iexcode.instruments.Kappa_det import * +#from iexcode.instruments.Kappa import * +from iexcode.instruments.Lakeshore_335 import *#didnt' test mostly hardcoded +from iexcode.instruments.Logfile import * # +from iexcode.instruments.m3r import * from iexcode.instruments.Motors import * +#from iexcode.instruments.MPA import * +from iexcode.instruments.Octupole import * +#from iexcode.instruments.remote_controlers import * +#from iexcode.instruments.resolution import * +#from iexcode.instruments.s29_temp_cntl import * from iexcode.instruments.scalers import * from iexcode.instruments.scanRecord import * -from iexcode.instruments.utilities import * \ No newline at end of file +from iexcode.instruments.Scienta import * +from iexcode.instruments.shutters import * #didn't do main shutter +from iexcode.instruments.slits import * +#from iexcode.instruments.spec_stuff import * +from iexcode.instruments.staff import * +from iexcode.instruments.storage_ring import * +from iexcode.instruments.userCalcs import * +from iexcode.instruments.utilities import * +from iexcode.instruments.valves import * +from iexcode.instruments.VLS_PGM import * +from iexcode.instruments.utilities import * +#from iexcode.instruments.vortex import * +from iexcode.instruments.xrays import * + +from iexplot import * + diff --git a/iexcode/macros/__init__.py b/iexcode/macros/__init__.py index 22fb71cbe6c4dbf4d150e410132792ad6b62713f..e6ccdb93fcb545fdc3cd980a8d526137d7f192bd 100644 --- a/iexcode/macros/__init__.py +++ b/iexcode/macros/__init__.py @@ -1,17 +1,42 @@ +import iexcode.instruments.cfg as iex -from iexcode.instruments.AD_utilities import * -from iexcode.instruments.bakeout import * -from iexcode.instruments.cameras import * -from iexcode.instruments.conversions_constants import * -from iexcode.instruments.encoders import * -from iexcode.instruments.files_and_folders import * -from iexcode.instruments.IEX_BL_config import * -from iexcode.instruments.Logfile import * -from iexcode.instruments.Motors import * -from iexcode.instruments.remote_controlers import * -from iexcode.instruments.s29_temp_cntl import * -from iexcode.instruments.scalers import * -from iexcode.instruments.userCalcs import * -from iexcode.instruments.utilities import * - +from iexcode.instruments.ARPES import * +from iexcode.instruments.bakeout import * #not tested +from iexcode.instruments.conversions_constants import * +from iexcode.instruments.current_amplifiers import * #need to test SRS +from iexcode.instruments.diagnostics import * +from iexcode.instruments.electron_analyzer import * #didn't test, but not much changed +from iexcode.instruments.encoders import * #didn't test encoder reset +from iexcode.instruments.files_and_folders import * +from iexcode.instruments.FMB_mirrors import * +#from iexcode.instruments.hxp_mirrors import * +from iexcode.instruments.IEX_cameras import * +from iexcode.instruments.IEX_VPU import * #need to test with ID +#from iexcode.instruments.kappa_angle_calcs import * +#from iexcode.instruments.Kappa_det import * +#from iexcode.instruments.Kappa import * +from iexcode.instruments.Lakeshore_335 import *#didnt' test mostly hardcoded +from iexcode.instruments.Logfile import * # +from iexcode.instruments.m3r import * +from iexcode.instruments.Motors import * +#from iexcode.instruments.MPA import * +from iexcode.instruments.Octupole import * +#from iexcode.instruments.remote_controlers import * +#from iexcode.instruments.resolution import * +#from iexcode.instruments.s29_temp_cntl import * +from iexcode.instruments.scalers import * +from iexcode.instruments.scanRecord import * +from iexcode.instruments.Scienta import * +from iexcode.instruments.shutters import * #didn't do main shutter +from iexcode.instruments.slits import * +#from iexcode.instruments.spec_stuff import * +from iexcode.instruments.staff import * +from iexcode.instruments.storage_ring import * +from iexcode.instruments.userCalcs import * +from iexcode.instruments.utilities import * +from iexcode.instruments.valves import * +from iexcode.instruments.VLS_PGM import * +from iexcode.instruments.utilities import * +#from iexcode.instruments.vortex import * +from iexcode.instruments.xrays import *