This commit is contained in:
@@ -1,16 +1,16 @@
|
||||
#Mon Jun 18 16:41:56 CEST 2018
|
||||
#Mon Jun 25 12:57:35 CEST 2018
|
||||
colormap=Flame
|
||||
colormapAutomatic=true
|
||||
colormapMax=2000.0
|
||||
colormapMax=4000.0
|
||||
colormapMin=0.0
|
||||
flipHorizontally=false
|
||||
flipVertically=false
|
||||
grayscale=false
|
||||
imageHeight=1200
|
||||
imageWidth=1246
|
||||
imageHeight=2160
|
||||
imageWidth=2560
|
||||
invert=false
|
||||
regionStartX=304
|
||||
regionStartY=8
|
||||
regionStartX=1
|
||||
regionStartY=1
|
||||
rescaleFactor=1.0
|
||||
rescaleOffset=0.0
|
||||
roiHeight=-1
|
||||
@@ -21,10 +21,10 @@ rotation=0.0
|
||||
rotationCrop=false
|
||||
scale=1.0
|
||||
serverURL=null
|
||||
spatialCalOffsetX=-861.4939970777481
|
||||
spatialCalOffsetY=-820.4883730911062
|
||||
spatialCalScaleX=-18.90359092620482
|
||||
spatialCalScaleY=-19.37984500632817
|
||||
spatialCalOffsetX=-938.4756464214289
|
||||
spatialCalOffsetY=-887.658980452227
|
||||
spatialCalScaleX=-8.510638192507606
|
||||
spatialCalScaleY=-8.235816808193258
|
||||
spatialCalUnits=null
|
||||
t=
|
||||
transpose=false
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#Mon Jun 18 12:03:16 CEST 2018
|
||||
defaultSpeed=6000.0
|
||||
#Mon Jun 25 14:59:33 CEST 2018
|
||||
defaultSpeed=707.1067811865476
|
||||
estbilizationDelay=0
|
||||
hasEnable=false
|
||||
homingType=None
|
||||
|
||||
@@ -1058,6 +1058,7 @@
|
||||
<Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.RADConnectionPropertyEditor">
|
||||
<Connection code="getIcon("Title")" type="code"/>
|
||||
</Property>
|
||||
<Property name="selected" type="boolean" value="true"/>
|
||||
<Property name="text" type="java.lang.String" value=" "/>
|
||||
<Property name="toolTipText" type="java.lang.String" value="Show Camera Name"/>
|
||||
<Property name="focusable" type="boolean" value="false"/>
|
||||
|
||||
@@ -2142,7 +2142,7 @@ public class ScreenPanel3 extends Panel {
|
||||
synchronized (imageBuffer) {
|
||||
saveFrames("camera_stack", imageBuffer);
|
||||
}
|
||||
SwingUtils.showMessage(getTopLevel(), "Success", "Generated data file:\n" + getContext().getExecutionPars().getPath(), 5000);
|
||||
SwingUtils.showMessage(getTopLevel(), "Success", "Generated data file:\n" + getContext().getExecutionPars().getPath());
|
||||
}
|
||||
|
||||
public static String getCameraType(String name) {
|
||||
@@ -3250,6 +3250,7 @@ public class ScreenPanel3 extends Panel {
|
||||
toolBar.add(buttonReticle);
|
||||
|
||||
buttonTitle.setIcon(getIcon("Title"));
|
||||
buttonTitle.setSelected(true);
|
||||
buttonTitle.setText(" ");
|
||||
buttonTitle.setToolTipText("Show Camera Name");
|
||||
buttonTitle.setFocusable(false);
|
||||
|
||||
@@ -136,11 +136,12 @@ def check_end_scan(record, scan):
|
||||
for i in range (len(blms)):
|
||||
plt.getSeries(i).appendData(position, record[5 + i])
|
||||
|
||||
scanner.park(wait=True)
|
||||
#Process background
|
||||
def do_background():
|
||||
#Store Background
|
||||
if bkgrd>0:
|
||||
scanner.park(wait=True)
|
||||
#scanner.park(wait=True)
|
||||
set_exec_pars(group = "background")
|
||||
r = mscan (st, st.getReadables()[4:], bkgrd)
|
||||
for i in range(len(r.getReadables())):
|
||||
@@ -152,6 +153,16 @@ def do_background():
|
||||
except:
|
||||
pass
|
||||
|
||||
def set_blm_gain(scan_type):
|
||||
if SET_BLM_WS_MODE and len(blms)>0:
|
||||
cfg_gain = get_setting(blms[0] + "GainWs" + scan_type)
|
||||
print "cfg_gain = " , cfg_gain
|
||||
if cfg_gain is not None:
|
||||
set_blm_ws_gain(blms[0],cfg_gain)
|
||||
print "Set = " , blms[0]
|
||||
|
||||
|
||||
|
||||
#Scan
|
||||
def do_scan(index):
|
||||
global scan_complete, cur_cycle, wire
|
||||
@@ -163,6 +174,10 @@ def do_scan(index):
|
||||
plt.getAxis(plt.AxisId.X).setRange(scan_range[0], scan_range[1])
|
||||
else:
|
||||
plt.getAxis(plt.AxisId.X).setRange(scan_range[2], scan_range[3])
|
||||
|
||||
|
||||
set_blm_gain(scan_type)
|
||||
|
||||
scanner.init(wait=True)
|
||||
scanner.curr_cycl.write(0)
|
||||
scan_complete=False
|
||||
|
||||
@@ -7,10 +7,13 @@ run("Devices/WireScanner")
|
||||
run("Diagnostics/sig_process_wrapper")
|
||||
|
||||
|
||||
###################################################################################################
|
||||
# Arguments and constants
|
||||
###################################################################################################
|
||||
|
||||
ws_prefix = args[0] if is_panel else "S10DI01-DWSC010" #"S10CB07-DWSC440" #"SINDI01-DWSC090" \\
|
||||
ws_prefix = args[0] if is_panel else "SINDI01-DWSC090" #"S10DI01-DWSC010" #"S10CB07-DWSC440" #"SINDI01-DWSC090" \\
|
||||
plt = args[1] if is_panel else plot(None, title = "Wire Scan Calibration")[0]
|
||||
ws_wire = args[2] if is_panel else WireScanner.WireY2
|
||||
ws_wire = args[2] if is_panel else WireScanner.WireX1
|
||||
cal_range = args[3] if is_panel else True
|
||||
cal_gain = args[4] if is_panel else True
|
||||
|
||||
@@ -22,21 +25,43 @@ MIN_GAIN, MAX_GAIN = 0.5, 1.1
|
||||
OPT_STEP = 0.02
|
||||
SCAN_RANGE_FACTOR = 6.0
|
||||
|
||||
DEFAULT_RANGE = [-2000.0, 2000.0]
|
||||
|
||||
|
||||
###################################################################################################
|
||||
# Utilities
|
||||
###################################################################################################
|
||||
def write_ws_gain(val):
|
||||
set_setting(ws_blm + "GainWs" + ws_wire, val)
|
||||
|
||||
def read_ws_gain():
|
||||
return get_setting(ws_blm + "GainWs" + ws_wire)
|
||||
|
||||
def get_gain():
|
||||
return get_blm_ws_gain(ws_blm)
|
||||
|
||||
def set_gain(val):
|
||||
set_blm_ws_gain(ws_blm,val)
|
||||
|
||||
def set_wire_scan_range(wire, start, end):
|
||||
sel = {'X1':"W1X" , 'Y1': "W1Y", 'X2':"W2X", 'Y2' : "W2Y"}
|
||||
start = min (max(start, -2000), 2000.0)
|
||||
end = min (max(end, -2000), 2000.0)
|
||||
caput((ws_prefix + ":" + sel[wire] +"_START_SP"), start)
|
||||
caput((ws_prefix + ":" + sel[wire] +"_END_SP"), end)
|
||||
|
||||
|
||||
|
||||
###################################################################################################
|
||||
# Find COM
|
||||
###################################################################################################
|
||||
print "--------------- Find COM --------------- "
|
||||
|
||||
#2) Set the number of RF shots (N_shot) to be acquired during a single cycle WSC measurement (e.g.,N_shot=50)
|
||||
n_shot = 200
|
||||
|
||||
#3) Set a test scanning range (e.g.,Xmin=-1000,Xmax=+1000um)
|
||||
x_min, x_max = -1000.0, 1000.0
|
||||
|
||||
x_min, x_max = DEFAULT_RANGE[0], DEFAULT_RANGE[1]
|
||||
|
||||
#4) For a given machine repetition-rate (RR), the scan speed is automatically set to WSC_speed=(Xmax- Xmin)*RR/N_shot
|
||||
rr = get_repetition_rate()
|
||||
@@ -48,6 +73,14 @@ ret = run("Diagnostics/WireScan", args)
|
||||
[rms_com, rms_sigma, com, sigma, pos_path, path] = ret
|
||||
|
||||
|
||||
|
||||
|
||||
###################################################################################################
|
||||
# Optimize gain
|
||||
###################################################################################################
|
||||
print "--------------- Optimize gain --------------- "
|
||||
|
||||
|
||||
#1) Select a BLM to be used in the WSC measurement and enable the WS_START so that it can be extracted out of the MPS and PMT-Gain and attenuation can be adjusted
|
||||
start_blm_ws(ws_blm, 600.0)
|
||||
|
||||
@@ -60,6 +93,8 @@ start_blm_ws(ws_blm, 600.0)
|
||||
#motor_pos=offset - com * math.sqrt(2)
|
||||
|
||||
ws_info = WireScanInfo("ws_info", ws_prefix )
|
||||
|
||||
#self.wire_velocity = Channel(self.prefix + ":SCAN_VELO_SP")
|
||||
motor_pos= ws_info.get_motor_pos(com, ws_wire)
|
||||
caput(ws_prefix+":MOTOR_1.VAL", motor_pos) #DVAL?
|
||||
#LOPR:0.5 HOPR:1.1
|
||||
@@ -74,13 +109,6 @@ st.addScalar("blm1_ws_mode", ws_blm + ":WS_RUNNING", int(100.0 / get_repetition_
|
||||
st.initialize()
|
||||
st.start()
|
||||
st.waitCacheChange(10000) #Wait stream be running before starting scan
|
||||
|
||||
|
||||
def get_gain():
|
||||
return get_blm_ws_gain(ws_blm)
|
||||
|
||||
def set_gain(val):
|
||||
set_blm_ws_gain(ws_blm,val)
|
||||
|
||||
|
||||
def get_loss():
|
||||
@@ -111,14 +139,17 @@ def change_blm_ws_gain(gain):
|
||||
time.sleep(0.1)
|
||||
|
||||
|
||||
#Search loop
|
||||
for pos in frange(MIN_GAIN, MAX_GAIN, OPT_STEP, True):
|
||||
change_blm_ws_gain(pos)
|
||||
loss = get_loss()
|
||||
print "Pos = ", pos, " Loss = ", loss
|
||||
if loss>=target:
|
||||
break
|
||||
stop_blm_ws(ws_blm)
|
||||
try:
|
||||
#Search loop
|
||||
for pos in frange(MIN_GAIN, MAX_GAIN, OPT_STEP, True):
|
||||
change_blm_ws_gain(pos)
|
||||
loss = get_loss()
|
||||
print "Pos = ", pos, " Loss = ", loss
|
||||
if loss>=target:
|
||||
break
|
||||
stop_blm_ws(ws_blm)
|
||||
finally:
|
||||
stop_blm_ws(ws_blm)
|
||||
|
||||
"""
|
||||
if start_val>target:
|
||||
@@ -147,27 +178,25 @@ print get_loss()
|
||||
#set_gain(0.6)
|
||||
#set_gain(0.5)
|
||||
|
||||
|
||||
|
||||
write_ws_gain(pos)
|
||||
|
||||
#UPDATE X1 range
|
||||
#WIRE = 1X, 2X, 1Y, 2Y
|
||||
def set_wire_scan_range(wire, start, end):
|
||||
sel = {'X1':"W1X" , 'Y1': "W1Y", 'X2':"W2X", 'Y2' : "W2Y"}
|
||||
start = min (max(start, -2000), 2000.0)
|
||||
end = min (max(end, -2000), 2000.0)
|
||||
caput((ws_prefix + ":" + sel[wire] +"_START_SP"), x_range_min)
|
||||
caput((ws_prefix + ":" + sel[wire] +"_END_SP"), x_range_max)
|
||||
time.sleep(1.0)
|
||||
|
||||
###################################################################################################
|
||||
# Optimize scan range
|
||||
###################################################################################################
|
||||
|
||||
set_exec_pars(reset=True, defaults=True)
|
||||
|
||||
print "--------------- Optimize scan range --------------- "
|
||||
#caget(ws_blm+":SAT_RAW_SUM")
|
||||
|
||||
args = [ ws_prefix , WireScanner.WireX1, [x_min, x_max, x_min, x_max], 1, ws_speed, [], [ws_blm], 10, plt, False,1]
|
||||
args = [ ws_prefix , ws_wire, [x_min, x_max, x_min, x_max], 1, ws_speed, [], [ws_blm], 10, plt, False,1]
|
||||
ret = run("Diagnostics/WireScan", args)
|
||||
[rms_com, rms_sigma, com, sigma, pos_path, path] = ret
|
||||
|
||||
x_range_min, x_range_max = com - SCAN_RANGE_FACTOR * sigma, com + SCAN_RANGE_FACTOR * sigma
|
||||
print "Optimized range = ", x_range_min , " to " , x_range_max
|
||||
set_wire_scan_range(ws_wire, x_range_min, x_range_max)
|
||||
|
||||
|
||||
@@ -182,4 +211,5 @@ set_wire_scan_range(ws_wire, x_range_min, x_range_max)
|
||||
#10)Once condition 9) is reached, the flag: VALID_SCAN should be enabled and a WSC measurement can be performed according to the number of Cycles set in the control-panel and the optimized values of the scan interval and scan speed.
|
||||
|
||||
|
||||
st.close()
|
||||
st.close()
|
||||
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
import ch.psi.pshell.epics.ChannelDouble as ChannelDouble
|
||||
A1 = ChannelDouble("Offset", "SARUN11-DBPM070:Y-REF-FB")
|
||||
S1 = ChannelDouble("Intensity", "SARFE10-PBPG050:HAMP-INTENSITY")
|
||||
S2 = ChannelDouble("Intensity", "SARFE10-PBPG050:HAMP-INTENSITY")
|
||||
A1.initialize()
|
||||
S1.initialize()
|
||||
S2.initialize()
|
||||
A1_init = A1.read()
|
||||
A1i = A1_init - 0.100
|
||||
A1f = A1_init + 0.100
|
||||
nstep = 21
|
||||
lat = 0.2
|
||||
nav = 10
|
||||
plt = plot(None, title="Output")[0]
|
||||
plt.clear()
|
||||
plt.setStyle(plt.Style.ErrorY)
|
||||
plt.addSeries(LinePlotErrorSeries("Sensor1", Color.red))
|
||||
def after_sample(record, scan):
|
||||
plt.getSeries(0).appendData(record.positions[0], record.values[0].mean, record.values[0].stdev)
|
||||
try:
|
||||
S1_averager = create_averager(S1, nav, lat)
|
||||
S2_averager = create_averager(S2, nav, lat)
|
||||
S2_averager.monitored=True
|
||||
time.sleep(1.0)
|
||||
r = lscan(A1, (S1_averager, S2_averager), A1i, A1f, nstep, latency=lat, after_read = after_sample)
|
||||
Act1 = r.getPositions(0)
|
||||
S1mean = [val.mean for val in r.getReadable(0)]
|
||||
S1rms = [val.stdev for val in r.getReadable(0)]
|
||||
S2mean = [val.mean for val in r.getReadable(1)]
|
||||
S2rmsn = [val.stdev for val in r.getReadable(1)]
|
||||
finally:
|
||||
A1.write(A1_init)
|
||||
A1.close()
|
||||
S1.close()
|
||||
S2.close()
|
||||
Reference in New Issue
Block a user