1127 lines
39 KiB
Matlab
Executable File
1127 lines
39 KiB
Matlab
Executable File
function varargout = emit_meas_phase4p(varargin)
|
|
% EMIT_MEAS_PHASE4 M-file for emit_meas_phase4.fig
|
|
% EMIT_MEAS_PHASE4, by itself, creates a new EMIT_MEAS_PHASE4 or raises the existing
|
|
% singleton*.
|
|
%
|
|
% H = EMIT_MEAS_PHASE4 returns the handle to a new EMIT_MEAS_PHASE4 or the handle to
|
|
% the existing singleton*.
|
|
%
|
|
% EMIT_MEAS_PHASE4('CALLBACK',hObject,eventData,handles,...) calls the local
|
|
% function named CALLBACK in EMIT_MEAS_PHASE4.M with the given input arguments.
|
|
%
|
|
% EMIT_MEAS_PHASE4('Property','Value',...) creates a new EMIT_MEAS_PHASE4 or raises the
|
|
% existing singleton*. Starting from the left, property value pairs are
|
|
% applied to the GUI before emit_meas_phase4_OpeningFcn gets called. An
|
|
% unrecognized property name or invalid value makes property application
|
|
% stop. All inputs are passed to emit_meas_phase4_OpeningFcn via varargin.
|
|
%
|
|
% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one
|
|
% instance to run (singleton)".
|
|
%
|
|
% See also: GUIDE, GUIDATA, GUIHANDLES
|
|
|
|
% Edit the above text to modify the response to help emit_meas_phase4
|
|
|
|
% Last Modified by GUIDE v2.5 15-Jan-2014 11:43:41
|
|
|
|
% Begin initialization code - DO NOT EDIT
|
|
gui_Singleton = 1;
|
|
gui_State = struct('gui_Name', mfilename, ...
|
|
'gui_Singleton', gui_Singleton, ...
|
|
'gui_OpeningFcn', @emit_meas_phase4_OpeningFcn, ...
|
|
'gui_OutputFcn', @emit_meas_phase4_OutputFcn, ...
|
|
'gui_LayoutFcn', [] , ...
|
|
'gui_Callback', []);
|
|
if nargin && ischar(varargin{1})
|
|
gui_State.gui_Callback = str2func(varargin{1});
|
|
end
|
|
|
|
if nargout
|
|
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
|
|
else
|
|
gui_mainfcn(gui_State, varargin{:});
|
|
end
|
|
% End initialization code - DO NOT EDIT
|
|
|
|
|
|
% --- Executes just before emit_meas_phase4 is made visible.
|
|
function emit_meas_phase4_OpeningFcn(hObject, eventdata, handles, varargin)
|
|
% This function has no output args, see OutputFcn.
|
|
% hObject handle to figure
|
|
% eventdata reserved - to be defined in a future version of MATLAB
|
|
% handles structure with handles and user data (see GUIDATA)
|
|
% varargin command line arguments to emit_meas_phase4 (see VARARGIN)
|
|
|
|
% Choose default command line output for emit_meas_phase4
|
|
handles.output = hObject;
|
|
|
|
% Update handles structure
|
|
guidata(hObject, handles);
|
|
|
|
% UIWAIT makes emit_meas_phase4 wait for user response (see UIRESUME)
|
|
% uiwait(handles.emit_meas);
|
|
|
|
|
|
% --- Outputs from this function are returned to the command line.
|
|
function varargout = emit_meas_phase4_OutputFcn(hObject, eventdata, handles)
|
|
% varargout cell array for returning output args (see VARARGOUT);
|
|
% hObject handle to figure
|
|
% eventdata reserved - to be defined in a future version of MATLAB
|
|
% handles structure with handles and user data (see GUIDATA)
|
|
|
|
% Get default command line output from handles structure
|
|
varargout{1} = handles.output;
|
|
|
|
|
|
% --- Executes on button press in pushbutton1.
|
|
function pushbutton1_Callback(hObject, eventdata, handles)
|
|
% hObject handle to pushbutton1 (see GCBO)
|
|
% eventdata reserved - to be defined in a future version of MATLAB
|
|
% handles structure with handles and user data (see GUIDATA)
|
|
|
|
|
|
global LOCATION SYSTEM APPNAME DAQFILENAME energy nmeas coupling nslices meas_type
|
|
global phase0 phase_steps phase_dif phase_range
|
|
global bunch_l bunch_l_err cal cal_error oper right_q
|
|
global PROFILEMONITOR K_STEPS
|
|
global background screen
|
|
global TDC_cal
|
|
|
|
freq = 2997.912e6; %frequency of TDC
|
|
|
|
if meas_type==1 % projected multi quad
|
|
quad_names = {'F10D1_MQUA35','F10D1_MQUA45','F10D1_MQUA55'}; % EPICs names
|
|
elseif meas_type==0 % projected single quad
|
|
quad_names = {'F10D1_MQUA55'}; % EPICs name
|
|
elseif meas_type==2 % slice in x using the TDC
|
|
quad_names = {'F10D1_MQUA35','F10D1_MQUA40','F10D1_MQUA45','F10D1_MQUA50','F10D1_MQUA55'}; % EPICs names
|
|
elseif meas_type==3 %slice in y using dispersion
|
|
quad_names = {'F10D1_MQUA10','F10D1_MQUA20','F10D1_MQUA30','F10D1_MQUA40','F10D1_MQUA50'}; % EPICs names
|
|
elseif meas_type==4 % slice in x using dispersion
|
|
quad_names = {'F10D1_MQUA35','F10D1_MQUA40','F10D1_MQUA45','F10D1_MQUA50','F10D1_MQUA55'}; % EPICs names
|
|
end
|
|
screen = PROFILEMONITOR;
|
|
|
|
% set proper values for quadrupoles
|
|
if right_q==0
|
|
% measurement kl-values for the 10 quads between BC and FODO
|
|
if meas_type==4
|
|
kld(1) = 4.525199912180098*0.15; %F10D1.MQUA10
|
|
kld(2) = 3.874148656932072*0.15; %F10D1.MQUA20
|
|
kld(3) = -3.249774821515966*0.15; %F10D1.MQUA30
|
|
kld(4) = -4.797555982557675*0.15; %F10D1.MQUA40
|
|
kld(5) = 3.615370265142409*0.15; %F10D1.MQUA50
|
|
kld(6) = 0; %F10D1.MQUA60
|
|
kld(7) = 0; %F10D1.MQUA70
|
|
kld(8) = 0; %F10D1.MQUA80
|
|
kld(9) = 0; %F10D1.MQUA90
|
|
kld(10) = 0; %F10D1.MQUA100
|
|
else
|
|
kld(1) = 1.335685250670285*0.15; %F10D1.MQUA10
|
|
kld(2) = 5.211233759043508e-001*0.15; %F10D1.MQUA20
|
|
kld(3) = -3.108334644187179e-001*0.15; %F10D1.MQUA30
|
|
kld(4) = 0; %F10D1.MQUA40
|
|
kld(5) = -9.113260060549501e-001*0.15; %F10D1.MQUA50
|
|
kld(6) = -2.190291790302469*0.15; %F10D1.MQUA60
|
|
kld(7) = 0.3966673632905451*0.15; %F10D1.MQUA70
|
|
kld(8) = 2.731046534825306*0.15; %F10D1.MQUA80
|
|
kld(9) = -0.5417341705156887*0.15; %F10D1.MQUA90
|
|
kld(10) = 0; %F10D1.MQUA100
|
|
end
|
|
qnames0 = {'F10D1-MQUA10','F10D1-MQUA15','F10D1-MQUA20','F10D1-MQUA25','F10D1-MQUA30',...
|
|
'F10D1-MQUA35','F10D1-MQUA40','F10D1-MQUA45','F10D1-MQUA50','F10D1-MQUA55','F10D1-MQUA60','F10D1-MQUA65',...
|
|
'F10D1-MQUA70','F10D1-MQUA80','F10D1-MQUA85','F10D1-MQUA90','F10D1-MQUA95'};
|
|
|
|
% I exclude the quads upstream the TDC, since sometimes are used to match the beam
|
|
exc5 = 0;
|
|
if exc5
|
|
qnames0 = qnames0(6:12);
|
|
kld = kld(6:10);
|
|
end
|
|
for i=1:length(kld)
|
|
Id(i)=KLquad2Curr(kld(i),energy);
|
|
end
|
|
|
|
% since the safe-set button is less reliable than the mood of my
|
|
% girlfriend, I will first cycle all quads, and then set the current
|
|
|
|
% delay the gun before cycling
|
|
SetPV('FINSS-RLLE-RIOC:RF-ENABLE',2)
|
|
BeamOnOff(0); % close the shutter before cycling
|
|
for i=1:length(qnames0)
|
|
ch=[qnames0{i} ':B-CYC'];
|
|
SetPV(ch,0)
|
|
SetPV(ch,1)
|
|
end
|
|
pause(20); % wait 20 seconds until cycling is done (15s should be fine)
|
|
BeamOnOff; % restore the previous state
|
|
|
|
if (meas_type==1)||(meas_type==2)||(meas_type==4)
|
|
%set design optics for the 5 quads between BC and TDC
|
|
if ~exc5
|
|
for i=1:5
|
|
ch=[qnames0{i} ':I-SET'];
|
|
%ch=[qnames0{i} ':SEQ-ISET'];
|
|
ch = regexprep(ch, '\.', '-');
|
|
SetPV(ch, Id(i))
|
|
end
|
|
end
|
|
elseif meas_type==0
|
|
%set design for the 10 quads
|
|
if ~exc5
|
|
for i=1:10
|
|
ch=[qnames0{i} ':I-SET'];
|
|
SetPV(ch,Id(i))
|
|
end
|
|
else
|
|
for i=1:5
|
|
ch=[qnames0{i} ':I-SET'];
|
|
SetPV(ch,Id(i))
|
|
end
|
|
end
|
|
end
|
|
% put the gun at the right timing again
|
|
SetPV('FINSS-RLLE-RIOC:RF-ENABLE',1)
|
|
end
|
|
|
|
|
|
%knob definition ---------------------------------------------------------
|
|
knob = LoadKnobDefinition('PhaseAdvanceScanXYquads103050screen10');
|
|
|
|
switch screen
|
|
case {'F10D1_DSCR75_CCAM1', 'F10D1_DSCR75_CCAM2'}
|
|
Ldx = 0; % additional drift as compared to the pre-calculated files
|
|
Ld = 10.831-0.15; % drift between the used quad and the screen
|
|
case 'F10D1_DSCR80_CCAM1'
|
|
Ldx = 0.386;
|
|
Ld = 11.217-0.15;
|
|
otherwise
|
|
error('unknown screen')
|
|
end
|
|
|
|
|
|
if meas_type==1 % projected multi quad
|
|
load proj_emitx_20110905.mat
|
|
k0 = k;
|
|
load proj_emity_20110905.mat
|
|
kini = [[k0];[k]];
|
|
elseif meas_type==0 % projected single quad
|
|
Lq = 0.15;
|
|
beta_x = 15;
|
|
%beta_y = 15;
|
|
%alpha_x = 1.38490;
|
|
%alpha_y = 1.38490;
|
|
mu = [15:5:165];
|
|
k0 = ((1 - (Ld./(sind(mu).*beta_x)) .* (cosd(mu)+beta_x.*sind(mu)/Ld)) / Ld)/Lq;
|
|
kini = k0';
|
|
quads = {'F10D1.MQUA100'};
|
|
elseif meas_type==2 % slice in x using the TDC
|
|
load slice_emit_20110905.mat
|
|
kini = k;
|
|
elseif meas_type==3 % slice in y using dispersion
|
|
%load slice_emit_20121218.mat % this was for optics in phase3
|
|
load slice_emit_20130515.mat % this is for optics in phase 4
|
|
kini = k;
|
|
elseif meas_type==4
|
|
load slice_emit_20130430.mat
|
|
kini = k;
|
|
end
|
|
|
|
k = kini([1:K_STEPS:length(kini)],:);
|
|
|
|
if meas_type==0
|
|
k=k';
|
|
end
|
|
Lm = 0.15;
|
|
|
|
% prepare Knobs for daq.m
|
|
for i=1:length(quads)
|
|
temp = size(k);
|
|
if (meas_type==1)||(meas_type==2)||(meas_type==3)||(meas_type==4)
|
|
for j=1:length(k(:,1))
|
|
I(j,i) = KLquad2Curr(k(j,i)*Lm,energy);
|
|
end
|
|
knob.Conversions{i} = [[1:1:temp(1)]',[I(:,i)]];
|
|
knob.SetpointValues = 1:temp(1);
|
|
elseif meas_type==0
|
|
for j=1:length(k)
|
|
I(j,i) = KLquad2Curr(k(j)*Lm,energy);
|
|
end
|
|
knob.Conversions{i} = [[1:1:length(k)]',[I(:)]];
|
|
knob.SetpointValues = [1:1:length(k)];
|
|
end
|
|
knob.Knobs{i}=LoadKnobDefinition(quad_names{i});
|
|
|
|
if meas_type==0
|
|
knob.Knobs(3) = [];
|
|
knob.Knobs(2) = [];
|
|
knob.Conversions(3) = [];
|
|
knob.Conversions(2) = [];
|
|
end
|
|
end
|
|
|
|
|
|
% define knobs for slice emittance measurement (add TDC phase and more)
|
|
if meas_type==2
|
|
if TDC_cal
|
|
temp = knob.Conversions;
|
|
|
|
ind_p = length(quad_names) + 1;
|
|
knob.Knobs{ind_p}.Name = 'F10D1_RLLE_RUPC_PHASE';
|
|
knob.Knobs{ind_p}.Description = 'Phase from Transverse Deflector F10D1';
|
|
knob.Knobs{ind_p}.Author = 'Eduard Prat';
|
|
knob.Knobs{ind_p}.SetpointAddress = 'F10D1-RLLE-RUPC:PHASE';
|
|
knob.Knobs{ind_p}.HowToDetermineSuccess = 'SetAndForget';
|
|
knob.Knobs{ind_p}.WaitTime = 0.2;
|
|
knob.Knobs{ind_p}.ReadbackAddress = 'F10D1-RLLE-RUPC:PHASE';
|
|
knob.Knobs{ind_p}.Max = 360;
|
|
knob.Knobs{ind_p}.Min = -360;
|
|
|
|
phase_range = [(phase0-phase_steps*phase_dif):phase_dif:(phase0+phase_steps*phase_dif)];
|
|
|
|
for i=1:length(quads)
|
|
for m=1:size(k,1)
|
|
for j=1:length(phase_range)
|
|
ind0 = length(phase_range)*(m-1)+j;
|
|
temp2 = temp{i}(m,2);
|
|
knob.Conversions{i}(ind0,2) = temp2;
|
|
knob.Conversions{i}(ind0,1) = ind0;
|
|
|
|
% values for the phase
|
|
knob.Conversions{length(quads)+1}(ind0,1) = ind0;
|
|
knob.Conversions{length(quads)+1}(ind0,2) = phase_range(j);
|
|
knob.SetpointValues(ind0) = ind0;
|
|
end
|
|
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
% instrument definition --------------------------------------------------
|
|
instrument = LoadInstrumentDefinition(screen);
|
|
|
|
if (meas_type == 2)||(meas_type)==0 ||(meas_type==3)||(meas_type==4)
|
|
coupling = 0;
|
|
end
|
|
|
|
|
|
instrument.Actions = [];
|
|
N=0;
|
|
instrument.Actions{N+1}.Function = 'StartServer';
|
|
instrument.Actions{N+1}.Active = 0; % not required for DSCR80
|
|
instrument.Actions{N+1}.Parameters = [];
|
|
N=N+1;
|
|
instrument.Actions{N+1}.Function = 'StoreCameraData';
|
|
instrument.Actions{N+1}.Active = 1;
|
|
instrument.Actions{N+1}.Parameters = [];
|
|
|
|
if background == 1
|
|
N=N+1;
|
|
instrument.Actions{N+1}.Function = 'MultipleBackgroundImages';
|
|
instrument.Actions{N+1}.Active = 0;
|
|
instrument.Actions{N+1}.Parameters.NumberBackgroundImages = 5;
|
|
instrument.Actions{N+1}.Parameters.StoreBackgroundImages = 1;
|
|
N=N+1;
|
|
instrument.Actions{N+1}.Function = 'SubtractBackgroundImage';
|
|
instrument.Actions{N+1}.Active = 1;
|
|
instrument.Actions{N+1}.Parameters.NumberBackgroundImages = 10;
|
|
instrument.Actions{N+1}.Parameters.StoreBackgroundImages = 1;
|
|
elseif background == 2
|
|
N=N+1;
|
|
instrument.Actions{N+1}.Function = 'MultipleBackgroundImages';
|
|
instrument.Actions{N+1}.Active = 1;
|
|
instrument.Actions{N+1}.Parameters.NumberBackgroundImages = 5;
|
|
instrument.Actions{N+1}.Parameters.StoreBackgroundImages = 1;
|
|
N=N+1;
|
|
instrument.Actions{N+1}.Function = 'SubtractBackgroundImage';
|
|
instrument.Actions{N+1}.Active = 0;
|
|
instrument.Actions{N+1}.Parameters.NumberBackgroundImages = 10;
|
|
instrument.Actions{N+1}.Parameters.StoreBackgroundImages = 1;
|
|
end
|
|
|
|
N=N+1;
|
|
instrument.Actions{N+1}.Function = 'SubtractOffset';
|
|
instrument.Actions{N+1}.Active = 0;
|
|
instrument.Actions{N+1}.Parameters = [];
|
|
N=N+1;
|
|
instrument.Actions{N+1}.Function = 'GaussFit';
|
|
instrument.Actions{N+1}.Active = 1;
|
|
if coupling
|
|
instrument.Actions{N+1}.Parameters.AdaptiveROI = 1;
|
|
instrument.Actions{N+1}.Parameters.AllowOffset = 0;
|
|
else
|
|
instrument.Actions{N+1}.Parameters = [];
|
|
end
|
|
if coupling
|
|
N=N+1;
|
|
instrument.Actions{N+1}.Function = 'NoiseCut';
|
|
instrument.Actions{N+1}.Active = 1;
|
|
instrument.Actions{N+1}.Parameters.Threshold = 0.2;
|
|
N=N+1;
|
|
instrument.Actions{N+1}.Function = 'xy_slope';
|
|
instrument.Actions{N+1}.Active = 1;
|
|
instrument.Actions{N+1}.Parameters = [];
|
|
end
|
|
|
|
|
|
%info --------------------------------------------------------------------
|
|
if oper
|
|
Info.OperatorPresent = 1;
|
|
else
|
|
Info.OperatorPresent = 0;
|
|
end
|
|
Info.Author = APPNAME;
|
|
Info.Title = 'Multiknob Emittance Measurement';
|
|
Info.eLog = Localize('eLog',LOCATION);
|
|
Info.Text = [];
|
|
Info.StartTime = now;
|
|
|
|
%set up ------------------------------------------------------------------
|
|
Setup.Function = 'scan';
|
|
Setup.Repeat = nmeas;
|
|
Setup.SaveSR = 1;
|
|
|
|
|
|
% load transfer matrices to put them in Setup
|
|
if meas_type==1
|
|
load mat_f10d165_quad6080100.mat
|
|
elseif meas_type==2
|
|
load mat_slice_phase3.mat
|
|
elseif meas_type==3
|
|
%load mat_slicey_phase3.mat % this is for phase 3 optics
|
|
load mat_slicey_phase4.mat % this is for phase 4 optics
|
|
R11=R33;
|
|
R12=R34;
|
|
R22=R44;
|
|
R21=R43;
|
|
elseif meas_type==4
|
|
load mat_slicex_phase3.mat
|
|
end
|
|
|
|
% add an additional drift (this depends on the screen; see the definition of Ldx above)
|
|
if meas_type==1 || meas_type==2 || meas_type==3 || meas_type==4
|
|
Mdx = Drift(Ldx); % additional drift between DSCR75 and DSCR80
|
|
for i=1:length(kini)
|
|
M0 = [R11(i) R12(i) 0 0; R21(i) R22(i) 0 0; 0 0 R33(i) R34(i); 0 0 R43(i) R44(i)];
|
|
M = Mdx * M0;
|
|
R11(i) = M(1,1);
|
|
R12(i) = M(1,2);
|
|
R21(i) = M(2,1);
|
|
R22(i) = M(2,2);
|
|
R33(i) = M(3,3);
|
|
R34(i) = M(3,4);
|
|
R43(i) = M(4,3);
|
|
R44(i) = M(4,4);
|
|
end
|
|
elseif meas_type==0 %in this case I calculate the matrices directly here
|
|
phi10 = Lq*sqrt(abs(kini));
|
|
Md1 = [[1 Ld 0 0 0 0];[0 1 0 0 0 0];[0 0 1 Ld 0 0];[0 0 0 1 0 0];[0 0 0 0 1 0];[0 0 0 0 0 1]];
|
|
for i=1:length(kini)
|
|
|
|
if kini(i)<0
|
|
Mq10 = [[cosh(phi10(i)) sinh(phi10(i))/sqrt(abs(kini(i))) 0 0 0 0]; [sqrt(abs(kini(i)))*sinh(phi10(i)) cosh(phi10(i)) 0 0 0 0];[0 0 cos(phi10(i)) sin(phi10(i))/sqrt(abs(kini(i))) 0 0];[0 0 -sin(phi10(i))*sqrt(abs(kini(i))) cos(phi10(i)) 0 0];[0 0 0 0 1 0];[0 0 0 0 0 1]];
|
|
elseif kini(i)==0
|
|
Mq10 = [[1 Lq 0 0 0 0];[0 1 0 0 0 0];[0 0 1 Lq 0 0];[0 0 0 1 0 0];[0 0 0 0 1 0];[0 0 0 0 0 1]];
|
|
else
|
|
Mq10 = [[cos(phi10(i)) sin(phi10(i))/sqrt(abs(kini(i))) 0 0 0 0];[-sin(phi10(i))*sqrt(abs(kini(i))) cos(phi10(i)) 0 0 0 0];[0 0 cosh(phi10(i)) sinh(phi10(i))/sqrt(abs(kini(i))) 0 0]; [0 0 sqrt(abs(kini(i)))*sinh(phi10(i)) cosh(phi10(i)) 0 0];[0 0 0 0 1 0];[0 0 0 0 0 1]];
|
|
end
|
|
M=Md1*Mq10;
|
|
R11(i) = M(1,1);
|
|
R12(i) = M(1,2);
|
|
R21(i) = M(2,1);
|
|
R22(i) = M(2,2);
|
|
R33(i) = M(3,3);
|
|
R34(i) = M(3,4);
|
|
R43(i) = M(4,3);
|
|
R44(i) = M(4,4);
|
|
end
|
|
end
|
|
|
|
R11 = R11([1:K_STEPS:length(kini)]);
|
|
R12 = R12([1:K_STEPS:length(kini)]);
|
|
R21 = R21([1:K_STEPS:length(kini)]);
|
|
R22 = R22([1:K_STEPS:length(kini)]);
|
|
R33 = R33([1:K_STEPS:length(kini)]);
|
|
R34 = R34([1:K_STEPS:length(kini)]);
|
|
R43 = R43([1:K_STEPS:length(kini)]);
|
|
R44 = R44([1:K_STEPS:length(kini)]);
|
|
|
|
Setup.AnalyzeTripleQuadScan.R = {R11, R12, 0, 0; R21, R22, 0, 0; 0, 0, R33, R34; 0, 0, R43, R44};
|
|
Setup.AnalyzeTripleQuadScan.k = k;
|
|
Setup.AnalyzeTripleQuadScan.energy = energy;
|
|
%design optical functions and emittance (entrance of F10D1.MQUA60)
|
|
if meas_type==0
|
|
Setup.AnalyzeTripleQuadScan.beta_x0 = 15*1;
|
|
Setup.AnalyzeTripleQuadScan.beta_y0 = 15*1;
|
|
Setup.AnalyzeTripleQuadScan.alpha_x0 = 1.3849*1;
|
|
Setup.AnalyzeTripleQuadScan.alpha_y0 = 1.3849*1;
|
|
elseif (meas_type==1)||(meas_type==2)
|
|
Setup.AnalyzeTripleQuadScan.beta_x0 = 9.4801;
|
|
Setup.AnalyzeTripleQuadScan.beta_y0 = 40.0155;
|
|
Setup.AnalyzeTripleQuadScan.alpha_x0 = -1.0220;
|
|
Setup.AnalyzeTripleQuadScan.alpha_y0 = -0.0207;
|
|
elseif meas_type==3 % entrance of quad10
|
|
Setup.AnalyzeTripleQuadScan.beta_y0 = 8.5084;
|
|
Setup.AnalyzeTripleQuadScan.beta_x0 = 19.2849;
|
|
Setup.AnalyzeTripleQuadScan.alpha_y0 = -1.4147;
|
|
Setup.AnalyzeTripleQuadScan.alpha_x0 = 0.6847;
|
|
elseif meas_type==4
|
|
Setup.AnalyzeTripleQuadScan.beta_x0 = 31.4326;
|
|
Setup.AnalyzeTripleQuadScan.beta_y0 = 17.12275;
|
|
Setup.AnalyzeTripleQuadScan.alpha_x0 = -9.497579;
|
|
Setup.AnalyzeTripleQuadScan.alpha_y0 = 6.811337;
|
|
end
|
|
|
|
Setup.AnalyzeTripleQuadScan.gamma_x0 = (1+Setup.AnalyzeTripleQuadScan.alpha_x0^2)/Setup.AnalyzeTripleQuadScan.beta_x0;
|
|
Setup.AnalyzeTripleQuadScan.gamma_y0 = (1+Setup.AnalyzeTripleQuadScan.alpha_y0^2)/Setup.AnalyzeTripleQuadScan.beta_y0;
|
|
|
|
% data acquisition -------------------------------------------------------
|
|
[DAQFileName, Setup, knob, instrument, Info] = daq(Setup,{knob},{instrument},Info);
|
|
%[Setup, Info, knob, instrument] = RetrieveData('/afs/psi.ch/intranet/FIN/Data/FIN250-Phase4+/2014-10-08/MKE20141008T132836.h5');
|
|
|
|
% put the quadrupole back to zero in the single quad scan
|
|
if meas_type==0
|
|
SetPV('F10D1-MQUA55:I-SET.VAL',0)
|
|
end
|
|
|
|
|
|
% get TDC calibration and other longitudinal parameters for the different
|
|
% quad configurations
|
|
clear bunch_l bunch_l_err
|
|
if meas_type==2
|
|
if TDC_cal
|
|
indg = find(abs(phase_range-phase0)<0.001);
|
|
% first get all vertical centroids and beam sizes
|
|
for i=1:length(phase_range)*size(k,1)
|
|
% all values are in mm
|
|
rms_y0(i) = mean(instrument{1}.BeamSizeGaussfit(2,:,i));
|
|
rms_err_y0(i) = sqrt(var(instrument{1}.BeamSizeGaussfit(2,:,i)));
|
|
|
|
y0(i) = mean(instrument{1}.BeamPositionGaussfit(2,:,i));
|
|
y_err0(i) = sqrt(var(instrument{1}.BeamPositionGaussfit(2,:,i)));
|
|
end
|
|
|
|
rms_y = reshape(rms_y0,length(phase_range),size(k,1))';
|
|
rms_err_y = reshape(rms_err_y0,length(phase_range),size(k,1))';
|
|
y = reshape(y0,length(phase_range),size(k,1))';
|
|
y_err = reshape(y_err0,length(phase_range),size(k,1))';
|
|
|
|
for i=1:size(k,1)
|
|
y2 = y(i,:);
|
|
y_err2 = y_err(i,:);
|
|
|
|
if nmeas>1
|
|
[p,s] = polyfit3(phase_range,y2,1,[],1./y_err2); % linear fit weighthing with measurement errors
|
|
elseif nmeas==1
|
|
[p,s] = polyfit(phase_range,y2,1);
|
|
end
|
|
%y_pred = polyval(p,phase_range);
|
|
|
|
% error of the fit
|
|
ste = sqrt(diag(inv(s.R)*inv(s.R')).*s.normr.^2./s.df);
|
|
|
|
% calibration in mm per ps
|
|
cal(i) = p(1)*360*freq/1e12;
|
|
% calibration error
|
|
cal_err(i) = ste(1)*360*freq/1e12;
|
|
|
|
% bunch length (in ps)
|
|
bunch_l(i,:) = abs(rms_y(i,:)/cal(i));
|
|
|
|
% bunch length error (assuming no correlation between calibration error and vertical beam size measurement error)
|
|
bunch_l_err(i,:) = bunch_l(i,:) .* ( (cal_err(i)/cal(i))^2 + (rms_err_y(i,:)./rms_y(i,:)).^2 ) .^ 0.5;
|
|
% slice separation for the analysis
|
|
y_sep0(i,:) = rms_y(i,:) / nslices;
|
|
for j=1:length(phase_range)
|
|
% determine valid measurements (no significant bunch length variation from zero phase)
|
|
if (bunch_l(i,indg) < (bunch_l(i,j)+bunch_l_err(i,j)))
|
|
if (bunch_l(i,indg) > (bunch_l(i,j)-bunch_l_err(i,j)))
|
|
indb0(i,j) = i;
|
|
else
|
|
indb0(i,j) = 0;
|
|
end
|
|
else
|
|
indb0(i,j) = 0;
|
|
end
|
|
end
|
|
%ysep1(i) = mean(y_sep0(~(indb0(i,:)==0)));
|
|
end
|
|
% slice image analysis
|
|
input.ind = reshape(indb0',length(phase_range)*size(k,1),1);
|
|
input.y_sep = reshape(y_sep0',1,length(phase_range)*size(k,1))';
|
|
input.cur_cut = 0.3;
|
|
%
|
|
[output] = Slicer(instrument,input);
|
|
instrument{1}.input = input;
|
|
output.y_sep = mean(mean(bunch_l))/nslices;
|
|
instrument{1}.slice = output;
|
|
instrument{1}.ind_val = input.ind;
|
|
else
|
|
for i=1:size(k,1)
|
|
% all values are in mm
|
|
rms_y0(i) = mean(instrument{1}.BeamSizeGaussfit(2,:,i));
|
|
rms_err_y0(i) = sqrt(var(instrument{1}.BeamSizeGaussfit(2,:,i)));
|
|
|
|
y0(i) = mean(instrument{1}.BeamPositionGaussfit(2,:,i));
|
|
y_err0(i) = sqrt(var(instrument{1}.BeamPositionGaussfit(2,:,i)));
|
|
end
|
|
|
|
rms_y = reshape(rms_y0,1,size(k,1))';
|
|
rms_err_y = reshape(rms_err_y0,1,size(k,1))';
|
|
y = reshape(y0,1,size(k,1))';
|
|
y_err = reshape(y_err0,1,size(k,1))';
|
|
|
|
|
|
% slice image analysis
|
|
input.y_sep = reshape(rms_y' / nslices,1,size(k,1))';
|
|
input.yflip = 0;
|
|
[output] = Slicer(instrument,input);
|
|
instrument{1}.input = input;
|
|
instrument{1}.slice = output;
|
|
end
|
|
end
|
|
|
|
if meas_type==3
|
|
% first get all horizontal centroids and beam sizes
|
|
for i=1:size(k,1)
|
|
% all values are in mm
|
|
rms_x0(i) = mean(instrument{1}.BeamSizeGaussfit(1,:,i));
|
|
rms_err_x0(i) = sqrt(var(instrument{1}.BeamSizeGaussfit(1,:,i)));
|
|
|
|
x0(i) = mean(instrument{1}.BeamPositionGaussfit(1,:,i));
|
|
x_err0(i) = sqrt(var(instrument{1}.BeamPositionGaussfit(1,:,i)));
|
|
end
|
|
|
|
rms_x = reshape(rms_x0,1,size(k,1))';
|
|
rms_err_x = reshape(rms_err_x0,1,size(k,1))';
|
|
x = reshape(x0,1,size(k,1))';
|
|
x_err = reshape(x_err0,1,size(k,1))';
|
|
|
|
|
|
% slice image analysis
|
|
input.y_sep = reshape(rms_x' / nslices,1,size(k,1))';
|
|
input.yflip = 1;
|
|
[output] = Slicer(instrument,input);
|
|
instrument{1}.input = input;
|
|
instrument{1}.slice = output;
|
|
end
|
|
|
|
if meas_type==4
|
|
% first get all horizontal centroids and beam sizes
|
|
for i=1:size(k,1)
|
|
% all values are in mm
|
|
rms_y0(i) = mean(instrument{1}.BeamSizeGaussfit(2,:,i));
|
|
rms_err_y0(i) = sqrt(var(instrument{1}.BeamSizeGaussfit(2,:,i)));
|
|
|
|
y0(i) = mean(instrument{1}.BeamPositionGaussfit(2,:,i));
|
|
y_err0(i) = sqrt(var(instrument{1}.BeamPositionGaussfit(2,:,i)));
|
|
end
|
|
|
|
rms_y = reshape(rms_y0,1,size(k,1))';
|
|
rms_err_y = reshape(rms_err_y0,1,size(k,1))';
|
|
y = reshape(y0,1,size(k,1))';
|
|
y_err = reshape(y_err0,1,size(k,1))';
|
|
|
|
|
|
% slice image analysis
|
|
input.y_sep = reshape(rms_y' / nslices,1,size(k,1))';
|
|
input.yflip = 0;
|
|
[output] = Slicer(instrument,input);
|
|
instrument{1}.input = input;
|
|
instrument{1}.slice = output;
|
|
end
|
|
|
|
%-------------------------------------------------------------------------
|
|
% calculation of emittance and optics
|
|
|
|
%save workspace
|
|
|
|
if (meas_type==1)||(meas_type==0)
|
|
[ResultStructure, figh, analfile] ...
|
|
= AnalyzeTripleQuadScanCoupling(Setup, knob, instrument, Info)
|
|
elseif meas_type==2 || meas_type==3 || meas_type==4
|
|
[ResultStructure, figh, analfile] ...
|
|
= AnalyzeTripleQuadScanCouplingSliceEnergy(Setup, knob, instrument, Info)
|
|
end
|
|
|
|
|
|
% make entry in the logbook
|
|
eLog = Localize('eLog',LOCATION);
|
|
MakeLogbookEntry(eLog,'Multiknob Emittance Measurement','','Nice operator',DAQFileName,analfile,figh)
|
|
|
|
%set(handles.pushbutton2,'Enable','on')
|
|
|
|
|
|
|
|
function edit1_Callback(hObject, eventdata, handles)
|
|
% hObject handle to edit1 (see GCBO)
|
|
% eventdata reserved - to be defined in a future version of MATLAB
|
|
% handles structure with handles and user data (see GUIDATA)
|
|
|
|
% Hints: get(hObject,'String') returns contents of edit1 as text
|
|
% str2double(get(hObject,'String')) returns contents of edit1 as a double
|
|
global energy
|
|
energy = str2double(get(hObject,'String'));
|
|
|
|
% --- Executes during object creation, after setting all properties.
|
|
function edit1_CreateFcn(hObject, eventdata, handles)
|
|
% hObject handle to edit1 (see GCBO)
|
|
% eventdata reserved - to be defined in a future version of MATLAB
|
|
% handles empty - handles not created until after all CreateFcns called
|
|
global energy
|
|
set(hObject,'String',energy)
|
|
|
|
% Hint: edit controls usually have a white background on Windows.
|
|
% See ISPC and COMPUTER.
|
|
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
|
|
set(hObject,'BackgroundColor','white');
|
|
end
|
|
|
|
|
|
% --- Executes during object creation, after setting all properties.
|
|
function emit_meas_CreateFcn(hObject, eventdata, handles)
|
|
% hObject handle to emit_meas (see GCBO)
|
|
% eventdata reserved - to be defined in a future version of MATLAB
|
|
% handles empty - handles not created until after all CreateFcns called
|
|
%addpath /afs/psi.ch/intranet/FIN/Applications/Development/Eduard/MatchingTool/trunk
|
|
|
|
% set useful defaults
|
|
|
|
global LOCATION SYSTEM APPNAME DAQFILENAME energy nmeas coupling
|
|
global meas_type nslices phase0 phase_dif phase_steps oper right_q
|
|
global PROFILEMONITOR K_STEPS
|
|
global background en_chirp
|
|
global TDC_cal
|
|
|
|
TDC_cal = 1;
|
|
energy = 220; % energy in MeV -- if this is changed, change also the GUI default string
|
|
en_chirp = 0; % energgy chirp along the bunch in %
|
|
nmeas = 10; %number of measurements per measurement point
|
|
coupling = 0; %include coupling?
|
|
meas_type = 0; % 1 is projected measurement with triple quads scan, 0 is projected with single quad, 2 is slice
|
|
nslices = 5; % number of slices for slice emittance measurement
|
|
oper=0; %operator present
|
|
right_q = 1; %right initial values for quads?
|
|
K_STEPS = 2; % skip every other setpoint
|
|
background = 1; % 1 is single background subtraction, 2 is multiple
|
|
|
|
SetPath
|
|
|
|
LOCATION= 'wlha';
|
|
SYSTEM = 'epics';
|
|
APPNAME = 'Multiknob emittance measurement';
|
|
DAQFILENAME = 'MKE';
|
|
|
|
% phase control parameters (for TDC calibration measurements)
|
|
phase0 = GetPV('F10D1-RLLE-RUPC:PHASE');
|
|
phase_dif = 1;
|
|
phase_steps = 1;
|
|
|
|
PROFILEMONITOR = 'F10D1_DSCR80_CCAM1';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function edit2_Callback(hObject, eventdata, handles)
|
|
% hObject handle to edit2 (see GCBO)
|
|
% eventdata reserved - to be defined in a future version of MATLAB
|
|
% handles structure with handles and user data (see GUIDATA)
|
|
|
|
global nmeas
|
|
nmeas = str2double(get(hObject,'String'));
|
|
|
|
% --- Executes during object creation, after setting all properties.
|
|
function edit2_CreateFcn(hObject, eventdata, handles)
|
|
% hObject handle to edit2 (see GCBO)
|
|
% eventdata reserved - to be defined in a future version of MATLAB
|
|
% handles empty - handles not created until after all CreateFcns called
|
|
|
|
global nmeas
|
|
set(hObject,'String',nmeas)
|
|
|
|
|
|
% --- Executes on button press in check_coupling.
|
|
function check_coupling_Callback(hObject, eventdata, handles)
|
|
% hObject handle to check_coupling (see GCBO)
|
|
% eventdata reserved - to be defined in a future version of MATLAB
|
|
% handles structure with handles and user data (see GUIDATA)
|
|
global coupling
|
|
|
|
if get(hObject,'Value')
|
|
coupling =1;
|
|
else
|
|
coupling=0;
|
|
end
|
|
% Hint: get(hObject,'Value') returns toggle state of check_coupling
|
|
|
|
|
|
% --- Executes during object creation, after setting all properties.
|
|
function check_coupling_CreateFcn(hObject, eventdata, handles)
|
|
global coupling all_objects meas_type
|
|
|
|
all_objects.coupling = hObject;
|
|
|
|
if coupling
|
|
set(hObject,'Value',1)
|
|
else
|
|
set(hObject,'Value',0)
|
|
end
|
|
|
|
if (meas_type==0)||(meas_type==2)
|
|
set(hObject,'Enable','off')
|
|
else
|
|
set(hObject,'Enable','on')
|
|
end
|
|
|
|
% hObject handle to check_coupling (see GCBO)
|
|
% eventdata reserved - to be defined in a future version of MATLAB
|
|
% handles empty - handles not created until after all CreateFcns called
|
|
|
|
|
|
% --- Executes on button press in pushbutton2.
|
|
function pushbutton2_Callback(hObject, eventdata, handles)
|
|
matching_phase4p
|
|
% hObject handle to pushbutton2 (see GCBO)
|
|
% eventdata reserved - to be defined in a future version of MATLAB
|
|
% handles structure with handles and user data (see GUIDATA)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function edit3_Callback(hObject, eventdata, handles)
|
|
global nslices
|
|
nslices = str2double(get(hObject,'String'));
|
|
% hObject handle to edit3 (see GCBO)
|
|
% eventdata reserved - to be defined in a future version of MATLAB
|
|
% handles structure with handles and user data (see GUIDATA)
|
|
|
|
% Hints: get(hObject,'String') returns contents of edit3 as text
|
|
% str2double(get(hObject,'String')) returns contents of edit3 as a double
|
|
|
|
|
|
% --- Executes during object creation, after setting all properties.
|
|
function edit3_CreateFcn(hObject, eventdata, handles)
|
|
global nslices all_objects
|
|
set(hObject,'String',nslices)
|
|
all_objects.nslices = hObject;
|
|
% hObject handle to edit3 (see GCBO)
|
|
% eventdata reserved - to be defined in a future version of MATLAB
|
|
% handles empty - handles not created until after all CreateFcns called
|
|
|
|
% Hint: edit controls usually have a white background on Windows.
|
|
% See ISPC and COMPUTER.
|
|
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
|
|
set(hObject,'BackgroundColor','white');
|
|
end
|
|
|
|
|
|
|
|
function edit4_Callback(hObject, eventdata, handles)
|
|
global phase_steps
|
|
phase_steps = str2double(get(hObject,'String'));
|
|
% hObject handle to edit4 (see GCBO)
|
|
% eventdata reserved - to be defined in a future version of MATLAB
|
|
% handles structure with handles and user data (see GUIDATA)
|
|
|
|
% Hints: get(hObject,'String') returns contents of edit4 as text
|
|
% str2double(get(hObject,'String')) returns contents of edit4 as a double
|
|
|
|
|
|
% --- Executes during object creation, after setting all properties.
|
|
function edit4_CreateFcn(hObject, eventdata, handles)
|
|
global phase_steps all_objects
|
|
set(hObject,'String',phase_steps)
|
|
all_objects.phase_steps = hObject;
|
|
|
|
% hObject handle to edit4 (see GCBO)
|
|
% eventdata reserved - to be defined in a future version of MATLAB
|
|
% handles empty - handles not created until after all CreateFcns called
|
|
|
|
% Hint: edit controls usually have a white background on Windows.
|
|
% See ISPC and COMPUTER.
|
|
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
|
|
set(hObject,'BackgroundColor','white');
|
|
end
|
|
|
|
|
|
|
|
function edit5_Callback(hObject, eventdata, handles)
|
|
global phase_dif
|
|
phase_dif = str2double(get(hObject,'String'));
|
|
% hObject handle to edit5 (see GCBO)
|
|
% eventdata reserved - to be defined in a future version of MATLAB
|
|
% handles structure with handles and user data (see GUIDATA)
|
|
|
|
% Hints: get(hObject,'String') returns contents of edit5 as text
|
|
% str2double(get(hObject,'String')) returns contents of edit5 as a double
|
|
|
|
|
|
% --- Executes during object creation, after setting all properties.
|
|
function edit5_CreateFcn(hObject, eventdata, handles)
|
|
global phase_dif all_objects
|
|
set(hObject,'String',phase_dif)
|
|
all_objects.phase_dif = hObject;
|
|
|
|
% hObject handle to edit5 (see GCBO)
|
|
% eventdata reserved - to be defined in a future version of MATLAB
|
|
% handles empty - handles not created until after all CreateFcns called
|
|
|
|
% Hint: edit controls usually have a white background on Windows.
|
|
% See ISPC and COMPUTER.
|
|
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
|
|
set(hObject,'BackgroundColor','white');
|
|
end
|
|
|
|
|
|
|
|
function edit6_Callback(hObject, eventdata, handles)
|
|
global phase0
|
|
phase0 = str2double(get(hObject,'String'));
|
|
% hObject handle to edit6 (see GCBO)
|
|
% eventdata reserved - to be defined in a future version of MATLAB
|
|
% handles structure with handles and user data (see GUIDATA)
|
|
|
|
% Hints: get(hObject,'String') returns contents of edit6 as text
|
|
% str2double(get(hObject,'String')) returns contents of edit6 as a double
|
|
|
|
|
|
% --- Executes during object creation, after setting all properties.
|
|
function edit6_CreateFcn(hObject, eventdata, handles)
|
|
global phase0 all_objects
|
|
set(hObject,'String',phase0)
|
|
all_objects.phase0 = hObject;
|
|
|
|
% hObject handle to edit6 (see GCBO)
|
|
% eventdata reserved - to be defined in a future version of MATLAB
|
|
% handles empty - handles not created until after all CreateFcns called
|
|
|
|
% Hint: edit controls usually have a white background on Windows.
|
|
% See ISPC and COMPUTER.
|
|
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
|
|
set(hObject,'BackgroundColor','white');
|
|
end
|
|
|
|
% --- Executes during object creation, after setting all properties.
|
|
function pushbutton2_CreateFcn(hObject, eventdata, handles)
|
|
global all_objects
|
|
all_objects.matching = hObject;
|
|
% hObject handle to pushbutton2 (see GCBO)
|
|
% eventdata reserved - to be defined in a future version of MATLAB
|
|
% handles empty - handles not created until after all CreateFcns called
|
|
|
|
|
|
% --- Executes when selected object is changed in uipanel4.
|
|
function uipanel4_SelectionChangeFcn(hObject, eventdata, handles)
|
|
global meas_type
|
|
if strcmp(get(hObject,'String'),'Projected multi quad')
|
|
meas_type = 1;
|
|
elseif strcmp(get(hObject,'String'),'Slice X (TDC)')
|
|
meas_type = 2;
|
|
elseif strcmp(get(hObject,'String'),'Projected single quad')
|
|
meas_type = 0;
|
|
elseif strcmp(get(hObject,'String'),'Slice Y (disp.)')
|
|
meas_type = 3;
|
|
elseif strcmp(get(hObject,'String'),'Slice X (disp.)')
|
|
meas_type = 4;
|
|
end
|
|
|
|
en_dis(hObject, eventdata, handles)
|
|
|
|
% hObject handle to the selected object in uipanel4
|
|
% eventdata structure with the following fields (see UIBUTTONGROUP)
|
|
% EventName: string 'SelectionChanged' (read only)
|
|
% OldValue: handle of the previously selected object or empty if none was selected
|
|
% NewValue: handle of the currently selected object
|
|
% handles structure with handles and user data (see GUIDATA)
|
|
|
|
|
|
% --- Executes on button press in checkbox2.
|
|
function checkbox2_Callback(hObject, eventdata, handles)
|
|
global oper
|
|
|
|
if get(hObject,'Value')
|
|
oper =1;
|
|
else
|
|
oper = 0;
|
|
end
|
|
% hObject handle to checkbox2 (see GCBO)
|
|
% eventdata reserved - to be defined in a future version of MATLAB
|
|
% handles structure with handles and user data (see GUIDATA)
|
|
|
|
% Hint: get(hObject,'Value') returns toggle state of checkbox2
|
|
|
|
|
|
% --- Executes during object creation, after setting all properties.
|
|
function checkbox2_CreateFcn(hObject, eventdata, handles)
|
|
global oper all_objects
|
|
|
|
all_objects.oper = hObject;
|
|
|
|
if oper
|
|
set(hObject,'Value',1)
|
|
else
|
|
set(hObject,'Value',0)
|
|
end
|
|
|
|
% hObject handle to checkbox2 (see GCBO)
|
|
% eventdata reserved - to be defined in a future version of MATLAB
|
|
% handles empty - handles not created until after all CreateFcns called
|
|
|
|
|
|
% --- Executes on button press in checkbox3.
|
|
function checkbox3_Callback(hObject, eventdata, handles)
|
|
global right_q
|
|
|
|
if get(hObject,'Value')
|
|
right_q =1;
|
|
else
|
|
right_q = 0;
|
|
end
|
|
% hObject handle to checkbox3 (see GCBO)
|
|
% eventdata reserved - to be defined in a future version of MATLAB
|
|
% handles structure with handles and user data (see GUIDATA)
|
|
|
|
% Hint: get(hObject,'Value') returns toggle state of checkbox3
|
|
|
|
|
|
% --- Executes during object creation, after setting all properties.
|
|
function checkbox3_CreateFcn(hObject, eventdata, handles)
|
|
global right_q all_objects
|
|
|
|
all_objects.right_q = hObject;
|
|
|
|
if right_q
|
|
set(hObject,'Value',1)
|
|
else
|
|
set(hObject,'Value',0)
|
|
end
|
|
|
|
% hObject handle to checkbox3 (see GCBO)
|
|
% eventdata reserved - to be defined in a future version of MATLAB
|
|
% handles empty - handles not created until after all CreateFcns called
|
|
|
|
|
|
% --- Executes on selection change in SelectProfileMonitor.
|
|
function SelectProfileMonitor_Callback(hObject, eventdata, handles)
|
|
global PROFILEMONITOR
|
|
% we can just take the instrument name from the string of this menu
|
|
contents = cellstr(get(hObject,'String'));
|
|
PROFILEMONITOR = contents{get(hObject,'Value')};
|
|
|
|
|
|
function SelectStepSize_Callback(hObject, eventdata, handles)
|
|
global K_STEPS
|
|
K_STEPS = str2double(get(hObject,'String'));
|
|
|
|
% --- Bogus functions
|
|
function SelectProfileMonitor_CreateFcn(hObject, eventdata, handles)
|
|
function SelectStepSize_CreateFcn(hObject, eventdata, handles)
|
|
|
|
|
|
% --- Executes on selection change in popupmenu3.
|
|
function popupmenu3_Callback(hObject, eventdata, handles)
|
|
% hObject handle to popupmenu3 (see GCBO)
|
|
% eventdata reserved - to be defined in a future version of MATLAB
|
|
% handles structure with handles and user data (see GUIDATA)
|
|
global background
|
|
background = get(hObject,'Value');
|
|
|
|
% Hints: contents = cellstr(get(hObject,'String')) returns popupmenu3 contents as cell array
|
|
% contents{get(hObject,'Value')} returns selected item from popupmenu3
|
|
|
|
|
|
% --- Executes during object creation, after setting all properties.
|
|
function popupmenu3_CreateFcn(hObject, eventdata, handles)
|
|
% hObject handle to popupmenu3 (see GCBO)
|
|
% eventdata reserved - to be defined in a future version of MATLAB
|
|
% handles empty - handles not created until after all CreateFcns called
|
|
|
|
% Hint: popupmenu controls usually have a white background on Windows.
|
|
% See ISPC and COMPUTER.
|
|
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
|
|
set(hObject,'BackgroundColor','white');
|
|
end
|
|
|
|
|
|
% --- Executes during object creation, after setting all properties.
|
|
function radiobutton1_CreateFcn(hObject, eventdata, handles)
|
|
% hObject handle to radiobutton1 (see GCBO)
|
|
% eventdata reserved - to be defined in a future version of MATLAB
|
|
% handles empty - handles not created until after all CreateFcns called
|
|
|
|
|
|
% --- Executes during object creation, after setting all properties.
|
|
function meas_type_CreateFcn(hObject, eventdata, handles)
|
|
% hObject handle to meas_type (see GCBO)
|
|
% eventdata reserved - to be defined in a future version of MATLAB
|
|
% handles empty - handles not created until after all CreateFcns called
|
|
|
|
|
|
|
|
function edit8_Callback(hObject, eventdata, handles)
|
|
global en_chirp
|
|
en_chirp = str2double(get(hObject,'String'));
|
|
% hObject handle to edit8 (see GCBO)
|
|
% eventdata reserved - to be defined in a future version of MATLAB
|
|
% handles structure with handles and user data (see GUIDATA)
|
|
|
|
% Hints: get(hObject,'String') returns contents of edit8 as text
|
|
% str2double(get(hObject,'String')) returns contents of edit8 as a double
|
|
|
|
|
|
% --- Executes during object creation, after setting all properties.
|
|
function edit8_CreateFcn(hObject, eventdata, handles)
|
|
% hObject handle to edit8 (see GCBO)
|
|
% eventdata reserved - to be defined in a future version of MATLAB
|
|
% handles empty - handles not created until after all CreateFcns called
|
|
|
|
global en_chirp all_objects
|
|
set(hObject,'String',en_chirp)
|
|
|
|
all_objects.en_chirp = hObject;
|
|
|
|
|
|
% Hint: edit controls usually have a white background on Windows.
|
|
% See ISPC and COMPUTER.
|
|
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
|
|
set(hObject,'BackgroundColor','white');
|
|
end
|
|
|
|
|
|
% --- Executes on button press in checkbox4.
|
|
function checkbox4_Callback(hObject, eventdata, handles)
|
|
global TDC_cal
|
|
|
|
if get(hObject,'Value')
|
|
TDC_cal =1;
|
|
else
|
|
TDC_cal = 0;
|
|
end
|
|
% hObject handle to checkbox4 (see GCBO)
|
|
% eventdata reserved - to be defined in a future version of MATLAB
|
|
% handles structure with handles and user data (see GUIDATA)
|
|
|
|
% Hint: get(hObject,'Value') returns toggle state of checkbox4
|
|
|
|
|
|
% --- Executes during object creation, after setting all properties.
|
|
function checkbox4_CreateFcn(hObject, eventdata, handles)
|
|
global TDC_cal all_objects
|
|
|
|
all_objects.TDC_cal = hObject;
|
|
|
|
if TDC_cal
|
|
set(hObject,'Value',1)
|
|
else
|
|
set(hObject,'Value',0)
|
|
end
|
|
% hObject handle to checkbox4 (see GCBO)
|
|
% eventdata reserved - to be defined in a future version of MATLAB
|
|
% handles empty - handles not created until after all CreateFcns called
|