diff --git a/config/config.properties b/config/config.properties index f1be87d..abd60b6 100644 --- a/config/config.properties +++ b/config/config.properties @@ -1,10 +1,12 @@ -#Tue Nov 29 09:43:05 CET 2016 +#Wed Jan 18 15:39:16 CET 2017 autoSaveScanData=true createSessionFiles=false -dataLayout=table +dataLayout=ch.psi.fda.LayoutFDA dataPath={data}/{year}_{month}/{date} -dataProvider=txt +dataProvider=ch.psi.fda.ProviderFDA dataScanFlushRecords=true +dataScanPreserveTypes=false +dataScanReleaseRecords=false dataServerPort=-1 devicePoolFile={config}/devices.properties deviceUpdateStrategyFile={config}/update.properties diff --git a/config/devices.properties b/config/devices.properties index c4f7220..69a5d33 100644 --- a/config/devices.properties +++ b/config/devices.properties @@ -20,6 +20,7 @@ ramp_rate_x_ips=ch.psi.pshell.epics.ControlledVariable|X07MA-ES1-IPS:FRAMP X07MA sample_hor=ch.psi.pshell.epics.Motor|X07MA-ES1-MAG:TRZ1||| sample_vert=ch.psi.pshell.epics.Motor|X07MA-ES1-MAG:TRY1||| sample_rot=ch.psi.pshell.epics.Motor|X07MA-ES1-MAG:ROY1||| +au_mesh=ch.psi.pshell.epics.Motor|X07MA-OP-IO1:TR1||| needle=ch.psi.pshell.epics.ProcessVariable|X07MA-PC-TC:DMD:LOOP2:MANUAL||| temperature=ch.psi.pshell.epics.ChannelDouble|X07MA-PC-TC:DMD:LOOP1:SETPOINT||| temperature_readback=ch.psi.pshell.epics.ChannelDouble|X07MA-PC-TC:STS:T1|Read|| diff --git a/devices/au_mesh.properties b/devices/au_mesh.properties new file mode 100644 index 0000000..76ab901 --- /dev/null +++ b/devices/au_mesh.properties @@ -0,0 +1,14 @@ +#Wed Jan 18 15:01:23 CET 2017 +defaultSpeed=1.0 +estbilizationDelay=0 +hasEnable=false +homingType=None +maxSpeed=NaN +maxValue=250.0 +minSpeed=0.1 +minValue=-250.0 +offset=0.0 +precision=6 +resolution=3.0E-4 +scale=1.0 +unit=mm diff --git a/devices/src1.properties b/devices/src1.properties index da985da..d7115f5 100644 --- a/devices/src1.properties +++ b/devices/src1.properties @@ -1,4 +1,4 @@ -#Mon Aug 24 09:08:53 CEST 2015 +#Thu Dec 22 16:38:19 CET 2016 colormap=Temperature colormapAutomatic=true colormapMax=255.0 @@ -13,5 +13,16 @@ pollingBackground=false pollingInterval=0 rescaleFactor=1.0 rescaleOffset=0.0 +roiHeight=-1 +roiWidth=-1 +roiX=0 +roiY=0 rotation=0.0 +rotationCrop=false scale=1.0 +spatialCalOffsetX=NaN +spatialCalOffsetY=NaN +spatialCalScaleX=NaN +spatialCalScaleY=NaN +spatialCalUnits=mm +transpose=false diff --git a/devices/src2.properties b/devices/src2.properties index 442b842..b265dda 100644 --- a/devices/src2.properties +++ b/devices/src2.properties @@ -1,4 +1,4 @@ -#Mon Aug 24 09:08:53 CEST 2015 +#Thu Dec 22 16:38:19 CET 2016 colormap=Grayscale colormapAutomatic=true colormapMax=255.0 @@ -13,5 +13,16 @@ pollingBackground=false pollingInterval=0 rescaleFactor=1.0 rescaleOffset=0.0 +roiHeight=-1 +roiWidth=-1 +roiX=0 +roiY=0 rotation=0.0 +rotationCrop=false scale=1.0 +spatialCalOffsetX=NaN +spatialCalOffsetY=NaN +spatialCalScaleX=NaN +spatialCalScaleY=NaN +spatialCalUnits=mm +transpose=false diff --git a/plugins/EnergyScan.java b/plugins/EnergyScan.java index 3e71dc0..6d735b6 100644 --- a/plugins/EnergyScan.java +++ b/plugins/EnergyScan.java @@ -19,6 +19,7 @@ import ch.psi.pshell.ui.Panel; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.File; +import java.util.logging.Logger; /** * @@ -58,7 +59,7 @@ public class EnergyScan extends Panel { } Path getConfigFile() { - return Paths.get(getController().getSetup().getConfigPath(), "energy_scan.properties"); + return Paths.get(getContext().getSetup().getConfigPath(), "energy_scan.properties"); } enum Mode { @@ -122,7 +123,7 @@ public class EnergyScan extends Panel { } else { mode = "lin_" + String.format("%1.0f", (Double) spinnerAlpha.getValue()); } - path = getController().getSetup().expandPath(path); + path = getContext().getSetup().expandPath(path); path = path.replaceAll("\\{el\\}", String.valueOf(comboSetup.getSelectedItem())); path = path.replaceAll("\\{mode\\}", mode); return path; @@ -611,7 +612,10 @@ public class EnergyScan extends Panel { private void buttonAbortActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonAbortActionPerformed batch = null; - abort(); + try { + abort(); + } catch (InterruptedException ex) { + } }//GEN-LAST:event_buttonAbortActionPerformed private void comboSetupActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_comboSetupActionPerformed diff --git a/plugins/HystScan.java b/plugins/HystScan.java index 8ff6bfc..2f883f4 100644 --- a/plugins/HystScan.java +++ b/plugins/HystScan.java @@ -66,7 +66,7 @@ public class HystScan extends Panel { } Path getConfigFile() { - return Paths.get(getController().getSetup().getConfigPath(), "energy_scan.properties"); + return Paths.get(getContext().getSetup().getConfigPath(), "energy_scan.properties"); } void loadConfig() { @@ -93,7 +93,7 @@ public class HystScan extends Panel { } else { //if (comboMode.getSelectedIndex() == 1) { mode = "minus"; } - path = getController().getSetup().expandPath(path); + path = getContext().getSetup().expandPath(path); path = path.replaceAll("\\{el\\}", String.valueOf(comboSetup.getSelectedItem())); path = path.replaceAll("\\{mode\\}", mode); return path; @@ -593,7 +593,10 @@ public class HystScan extends Panel { }//GEN-LAST:event_buttonExecuteActionPerformed private void buttonAbortActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonAbortActionPerformed - abort(); + try { + abort(); + } catch (InterruptedException ex) { + } }//GEN-LAST:event_buttonAbortActionPerformed private void buttonDefaultsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonDefaultsActionPerformed diff --git a/plugins/importer.java b/plugins/importer.java index ab41e81..e105c36 100644 --- a/plugins/importer.java +++ b/plugins/importer.java @@ -2,7 +2,7 @@ * Copyright (c) 2014 Paul Scherrer Institute. All rights reserved. */ -import ch.psi.pshell.core.Controller; +import ch.psi.pshell.core.Context; import ch.psi.pshell.ui.Importer; import ch.psi.pshell.ui.Plugin; import ch.psi.utils.Str; @@ -52,7 +52,7 @@ public class importer implements Plugin { String getRanges(String fileName) throws Exception{ File file = new File(fileName); if (!file.exists()){ - file = Paths.get(Controller.getInstance().getSetup().getScriptPath(), fileName).toFile(); + file = Paths.get(Context.getInstance().getSetup().getScriptPath(), fileName).toFile(); if (!file.exists()){ throw new Exception("Invalid ranges file: " + fileName); } diff --git a/script/Co_xas_speed.py b/script/Co_xas_speed.py new file mode 100644 index 0000000..a33691b --- /dev/null +++ b/script/Co_xas_speed.py @@ -0,0 +1,27 @@ +#set pol c- off 1.5 +#otf 760 840 3 delay 10 +#file Co3_plus +#start +set_pol_cminus(offset = 1.5) +wait_beam() +set_file('Co3_plus') +otf(start=760, end=840, time=3, delay=10) + +#set pol c- off 1.5 +#otf 760 840 6 delay 10 +#file Co6_plus +#start +set_pol_cminus(offset = 1.5) +wait_beam() +set_file('Co6_plus') +otf(start=760, end=840, time=6, delay=10) + +#set pol c- off 1.5 +#otf 760 840 10 delay 10 +#file Co10_plus +#start +set_pol_cminus(offset = 1.5) +wait_beam() +set_file('Co10_plus') +otf(start=760, end=840, time=10, delay=10) + diff --git a/script/EnergyScan.py b/script/EnergyScan.py index 2328f29..f9dd8d2 100644 --- a/script/EnergyScan.py +++ b/script/EnergyScan.py @@ -91,44 +91,46 @@ time.sleep(DELAY) caput('START', '1') -log("Exit slit: "+ str(exit_slit.read()) + "; cff: " + str(cff.read()) + "; harm.: " + str(harmonic.read()) + "; FE: " + str(aperture.read() ) ) -log("Sample temperature: " + str(temperature_readback.read() ) ) -log("Sample coord. HOR; VERT; ROT: " + str(sample_hor.read()) + "; " + str(sample_vert.read()) + "; " + str(sample_rot.read()) ) - -waiting = True -def plot_task(): - global waiting - pos=count.take() - start_plot() - while waiting: - if count.take() != pos: - update_plot() - pos = count.take() - time.sleep(2.0) - -ret = fork(plot_task) -try: - #Post-actions - wait_channel('START', 'STOP', type = 's') - time.sleep(2.0) - print "Finished Energy scan" -finally: - waiting = False -join(ret) - -#File convertion -newName = folder + time.strftime("%Y%m%d_%H%M_", start) + FILE + "_0000.txt"; -name = getNewestFile() - -if name == newest:#TODO: WHY WRITING AGAIN??? - - raise Exception("Data file not created") - -if not os.path.isfile(name): - raise Exception("Data file not found: " + name) - -convert_file(name, newName) -#plot_file(newName) -print("Success") - - +try: + write_logs() + + waiting = True + def plot_task(): + global waiting + pos=count.take() + start_plot() + while waiting: + if count.take() != pos: + update_plot() + pos = count.take() + time.sleep(2.0) + + ret = fork(plot_task) + try: + #Post-actions + wait_channel('START', 'STOP', type = 's') + time.sleep(2.0) + print "Finished Energy scan" + finally: + waiting = False + join(ret) + + #File convertion + newName = folder + time.strftime("%Y%m%d_%H%M_", start) + FILE + "_0000.txt"; + name = getNewestFile() + + if name == newest:#TODO: WHY WRITING AGAIN??? + + raise Exception("Data file not created") + + if not os.path.isfile(name): + raise Exception("Data file not found: " + name) + + convert_file(name, newName) + #plot_file(newName) + print("Success") + +except: + while caget('START') == 'START': + print("Aborting...") + caput('START', '0') diff --git a/script/HystScan.py b/script/HystScan.py index f505e03..1c117ce 100644 --- a/script/HystScan.py +++ b/script/HystScan.py @@ -11,7 +11,7 @@ OFFSET = -1.0 """ -iPS = True +iPS = False FIELD_PRECISION = 0.01 field = field_z if FIELD == "Hz" else (field_x_ips if iPS else field_x ) @@ -33,7 +33,7 @@ if RAMP_RATE is not None: if len(ENERGIES) ==2: - # dif_series = plot([],"Dif", context="Dif")[0].getSeries(0) + # dif_series = plot([],"Dif", get_context()="Dif")[0].getSeries(0) dif_series = plot([],"Dif")[0].getSeries(0) else: dif_series = None @@ -44,10 +44,7 @@ set_preference(Preference.PLOT_TYPES, {'tey_norm':1, 'trans_norm':1}) scan = ManualScan(['field', 'Energy'], ['TEY', 'I0', 'trans', 'polarization', 'polAngle', 'temperature', 'RingCurrent', 'fieldAnalogX', 'tey_norm','trans_norm'], [0.0, ENERGIES[0]], [0.0, ENERGIES[-1]], [0, len(ENERGIES)-1]) scan.start() -log("Exit slit: "+ str(exit_slit.read()) + "; cff: " + str(cff.read()) ) -log( "Harm.: " + str(harmonic.read()) + "; FE: " + str(aperture.read() ) ) -log("Sample temperature: " + str(temperature_readback.read() ) ) -log("Sample coord. HOR; VERT; ROT: " + str(sample_hor.read()) + "; " + str(sample_vert.read()) + "; " + str(sample_rot.read()) ) +write_logs() print "Waiting for start field" diff --git a/script/local.py b/script/local.py index 8cb6b7a..72c06d7 100644 --- a/script/local.py +++ b/script/local.py @@ -1,28 +1,40 @@ ################################################################################################### # Deployment specific global definitions - executed after startup.py ################################################################################################### + +import ch.psi.fda.ProcessorFDA as ProcessorFDA + +def run_fda(file_name, arguments={}): + """ + Run FDA loop + """ + ProcessorFDA().execute(file_name,arguments) + import traceback energy.setBlockingWrite(True) -#The persistence strategy is overriden to adjust file names + +#now using ch.psi.fda.LayoutFDA +""" +#The persistence strategy is overriden to adjust file names import ch.psi.pshell.data.LayoutTable class DataLayout( ch.psi.pshell.data.LayoutTable): def getLogFileName(self): - return time.strftime('%Y%m%d_%H%M') + '_' + get_context().name + '_logs' + return time.strftime('%Y%m%d_%H%M') + '_' + get_exec_pars().name + '_logs' def getDatasetName(self, scan): - print get_context().count - data_file = time.strftime('%Y%m%d_%H%M') + '_' + get_context().name + '_' + str(get_context().count).zfill(4) - print "Opened data file: " + get_context().path + "/" + data_file + print get_exec_pars().count + data_file = time.strftime('%Y%m%d_%H%M') + '_' + get_exec_pars().name + '_' + str(get_exec_pars().count).zfill(4) + print "Opened data file: " + get_exec_pars().path + "/" + data_file return data_file -controller.dataManager.setLayout(DataLayout()) - +get_context().dataManager.setLayout(DataLayout()) +""" #Reading Energy Scan configuration file def getPars(element): - f = open(controller.setup.getConfigPath() + '/energy_scan.properties') + f = open(get_context().setup.getConfigPath() + '/energy_scan.properties') try: for line in f: tokens = line.split("=") @@ -154,7 +166,7 @@ def plot_file(file_name, title = None): # global FILENAME # if former == State.Busy: # FILENAME = None -#controller.addListener(Listener()) #Old listeners are cleande in startup +#get_context().addListener(Listener()) #Old listeners are cleande in startup ################################################################################################### @@ -351,7 +363,7 @@ def wait_inj (value, delay=0.5): def set_file(file_name): """ """ - set_context(name = file_name) + set_exec_pars(name = file_name) class pol_mod(Readable): def read(self): @@ -367,8 +379,8 @@ def otf(start, end, time, delay=0.0, mode = None, offset = None, alpha = None, n """ """ if name is None: - name = get_context().name - folder = controller.setup.expandPath("{year}_{month}/{date}"); + name = get_exec_pars().name + folder = get_context().setup.expandPath("{year}_{month}/{date}"); run("EnergyScan", {"E1":start, "E2":end, "TIME":time, "DELAY":float(delay), "MODE":mode, "OFFSET":(offset), "FOLDER":folder, "FILE":name, "ALPHA":alpha}) def hyst_cont(field, init_field, final_field, ramp_speed, energies): @@ -394,8 +406,10 @@ def hyst_step_mult(forward, ranges, ramp_speed, energies, energy_change_sleep = def scan_e(start, end, step, settling_time = 0, accumulation_time = None, name = None): """ """ - if name is not None: - set_context(name = name) + #if name is not None: + #set_exec_pars(name = name) + if name is None: + name = get_exec_pars().name #wait_beam() acc = Accumulator([signal_tey, signal_i0, signal_trans, tey_norm, trans_norm], accumulation_time) detectors = acc.getSensors() + [polmod, pol_angle, temperature, current] @@ -406,8 +420,8 @@ def scan_e_mult(ranges, settling_time = 0, accumulation_time = None, name = None """ """ if name is not None: - set_context(name = name) - # name = get_context().name + set_exec_pars(name = name) + # name = get_exec_pars().name acc = Accumulator([signal_tey, signal_i0, signal_trans, tey_norm, trans_norm], accumulation_time) detectors = acc.getSensors() + [polmod, pol_angle, temperature, current] set_preference(Preference.ENABLED_PLOTS, acc.getSensors()) @@ -422,5 +436,36 @@ def scan_v(keithley,start, end, step): lscan(setpoint, readback, float(start), float(end), float(step), latency = 0.1) +def set_hor(value): + """ + """ + sample_hor.move(value) + +def set_vert(value): + """ + """ + sample_vert.move(value) + +def set_rot(value): + """ + """ + sample_rot.move(value) + + +def set_au_mesh(value): + """ + """ + au_mesh.move(value) + +def write_logs(): + set_exec_pars(open = True) #Compensade bug on log function, which should open persistence context + log("Exit slit: "+ str(exit_slit.read())) + log("Cff: " + str(cff.read())) + log("Harm: " + str(harmonic.read())) + log("FE: " + str(aperture.read() )) + log("Sample temperature: " + str(temperature_readback.read() ) ) + log("Sample coord. HOR; VERT; ROT: " + str(sample_hor.read()) + "; " + str(sample_vert.read()) + "; " + str(sample_rot.read()) ) + log("Gain sample: " + str(caget(keithleys["k1"][2]))) + log("Gain i0: " + str(caget(keithleys["k2"][2]))) + log("Gain diode: " + str(caget(keithleys["k3"][2]))) - \ No newline at end of file diff --git a/script/test/HystScanBackup.py b/script/test/HystScanBackup.py index c57168d..7bb97ec 100644 --- a/script/test/HystScanBackup.py +++ b/script/test/HystScanBackup.py @@ -31,7 +31,7 @@ if RAMP_RATE is not None: if len(ENERGIES) ==2: - # dif_series = plot([],"Dif", context="Dif")[0].getSeries(0) + # dif_series = plot([],"Dif", title="Dif")[0].getSeries(0) dif_series = plot([],"Dif")[0].getSeries(0) else: dif_series = None diff --git a/script/test/HystScanIps.py b/script/test/HystScanIps.py index 0b68ec6..8db9028 100644 --- a/script/test/HystScanIps.py +++ b/script/test/HystScanIps.py @@ -32,7 +32,7 @@ if RAMP_RATE is not None: if len(ENERGIES) ==2: - # dif_series = plot([],"Dif", context="Dif")[0].getSeries(0) + # dif_series = plot([],"Dif", title="Dif")[0].getSeries(0) dif_series = plot([],"Dif")[0].getSeries(0) else: dif_series = None diff --git a/script/test/HystScanOld.py b/script/test/HystScanOld.py index 8c373b1..d3eef27 100644 --- a/script/test/HystScanOld.py +++ b/script/test/HystScanOld.py @@ -23,7 +23,7 @@ caputq('X07MA-PC-PS2:SET:DMD:RAMPRATE:TPM', RAMP_RATE) #sleep(15.0) if len(ENERGIES) ==2: - dif_series = plot([],"Dif", context="Dif")[0].getSeries(0) + dif_series = plot([],"Dif", title="Dif")[0].getSeries(0) else: dif_series = None diff --git a/script/test/RunFDA.py b/script/test/RunFDA.py new file mode 100644 index 0000000..fefae5d --- /dev/null +++ b/script/test/RunFDA.py @@ -0,0 +1,7 @@ + +#Execute a FDA script +ProcessorFDA().execute("templates/scan_vertical.xml",{}) + + +#Alterando parametros +#ProcessorFDA().execute("templates/scan_vertical.xml",{"vertical.Start":6.0, "vertical.End":8.0})