Commit d224ee6f authored by Simone Liuzzo's avatar Simone Liuzzo
Browse files

synch with master

parents afa9d40d 4356fac0
......@@ -65,8 +65,11 @@ bpm_name=ebs.bpmname((1:size(hv_bpms,1))');
steerh_name=ebs.hsteername((1:nsth)','srmag/hst-');
steerv_name=ebs.steername((1:nstv)','srmag/vst-');
store_bpm('bpms',hv_bpms,bpm_name);
store_bpm_CSV('bpms',hv_bpms,bpm_name);
store_steerer('h_steerers',h_steerers,steerh_name);
store_steerer('v_steerers',v_steerers,steerv_name);
store_steerer_CSV('h_steerers.csv',h_steerers,steerh_name);
store_steerer_CSV('v_steerers.csv',v_steerers,steerv_name);
% [b,f,pu,npu]=bump_coefs(h_resp,bpm(:,1),steerh(:,1),pm.periods);
% kh=[b' pu-1 npu f];
......@@ -90,3 +93,23 @@ store_variable('matlog','resp',matmode);
end
function store_steerer_CSV(fname,st,st_name)
fid=fopen(fname,'w');
for i=1:size(st,1)
fprintf(fid,'%s,%.6f,%.4f,%.6f,%.5e\n',st_name{i},st(i,1:4));
end
fclose(fid);
end
function store_bpm_CSV(fname,bpm,bpm_name)
fid=fopen(fname,'w');
for i=1:size(bpm,1)
fprintf(fid,'%s,%.6f,%.4f,%.6f,%.4f,%.4f,%.6f\n',bpm_name{i},bpm(i,1:6));
end
fclose(fid);
end
......@@ -26,20 +26,6 @@ pth=args{1};
ebsmodel=ebs.model(pth);
save('modellat','ebsmodel');
r=ebsmodel.ring;
% merge DQ
indDQmark=atgetcells(r,'FamName','PINHOLE_D\w*','CellCenter');
r(indDQmark)=[]; % checklattice should merge all splitted elements.
% merge 2PW and transform back to quadrupole
indQF8dip = find(atgetcells(r,'FamName','QF8\w*') & atgetcells(r,'Class','Bend'))';
r=atsetfieldvalues(r,indQF8dip,'BendingAngle',0);
r=atsetfieldvalues(r,indQF8dip,'Class','Quadrupole');
r=atsetfieldvalues(r,indQF8dip,'PassMethod','StrMPoleSymplectic4Pass');
% rebuild minimal ebs lattice model, just for strengths
ebsmodel=ebs.model(r,'reduce',true);
% file contains quadrupoles (in lttice order, quadrupoles and DQ), then sextupoles, then octupoles.
iq = ebsmodel.get(0,'qp');
idq = ebsmodel.get(0,'dq');
......
......@@ -19,7 +19,6 @@ function [K]=mathcinjectionbump(ebsmodel,bumpamplitude,varargin)
% nominal value and show plot.
% K=ebs.mathcinjectionbump(ebsmodel,[0:0.1:0.9,0.91:0.01:1.1]*(-15e-3),'plot',true)
%
%
%see also: atmatch, ebs.model
p=inputParser;
......@@ -37,9 +36,9 @@ bumpH = p.Results.bumpamplitude;
id_ind=find(atgetcells(ebsmodel,'FamName','ID\w*'))';
ainj=[ebsmodel(id_ind(end-1):end);ebsmodel(1:id_ind(1))];
ainj=[ebsmodel(id_ind(end):end);ebsmodel(1:id_ind(2))];
injpos=length(ebsmodel(id_ind(end-1):end));
injpos=length(ebsmodel(id_ind(end):end));
kickers_ind=find(atgetcells(ainj,'FamName','DR_K[1234]'))';
......
......@@ -105,16 +105,20 @@ for ib = 1:length(bpmidx)
% select BPM for bump,
%selbpm = AllBpm(ib,:) ;
refx=[0 0 0 bumph 0 0 0];
refy=[0 0 0 bumpv 0 0 0];
refx=[0 0 0 0 0 bumph 0 0 0 0 0];
refy=[0 0 0 0 0 bumpv 0 0 0 0 0];
refbumppos = [...
sthidx(min(AllHCor(ib,1),AllVCor(ib,1)))-50 , ...
sthidx(min(AllHCor(ib,1),AllVCor(ib,1)))-10 , ...
sthidx(min(AllHCor(ib,1),AllVCor(ib,1)))-5 , ...
sthidx(min(AllHCor(ib,1),AllVCor(ib,1)))-3 , ...
sthidx(min(AllHCor(ib,1),AllVCor(ib,1)))-4 , ...
sthidx(min(AllHCor(ib,1),AllVCor(ib,1)))-2 , ...
bpmidx(ib) ,...
sthidx(max(AllHCor(ib,3),AllVCor(ib,3)))+3 , ...
sthidx(max(AllHCor(ib,3),AllVCor(ib,3)))+2 , ...
sthidx(max(AllHCor(ib,3),AllVCor(ib,3)))+4, ...
sthidx(max(AllHCor(ib,3),AllVCor(ib,3)))+5 , ...
sthidx(max(AllHCor(ib,3),AllVCor(ib,3)))+10 , ...
sthidx(max(AllHCor(ib,3),AllVCor(ib,3)))+50 , ...
]; % close bump just before/after correctors
......@@ -133,13 +137,13 @@ for ib = 1:length(bpmidx)
% initial closed orbit guess
inCOD =zeros(6,1);
if ib == 1
% first BPM, initial COD ~! 0
inCOD(1)=bumph;
inCOD(3)=bumpv;
end
% if ib == 1
%
% % first BPM, initial COD ~! 0
% inCOD(1)=bumph;
% inCOD(3)=bumpv;
%
% end
disp('ref. positions')
disp(refbumppos)
......@@ -147,6 +151,8 @@ for ib = 1:length(bpmidx)
disp(sthidx(selcorh)')
disp(stvidx(selcorv)')
% no radiation, no RF
r=atsetcavity(r,0.0001e6,0,992);
% invert matrix
[rbump,inCOD,hs,vs]=atcorrectorbit(...
......@@ -155,7 +161,7 @@ for ib = 1:length(bpmidx)
sthidx(selcorh),... % horizontal steerers to use
stvidx(selcorv),... % vertical steerers to use
inCOD,... % initial closed orbit
repmat([3 3],6,1),... % correction iterations and eigenvectors
repmat([3 3],5,1),... % correction iterations and eigenvectors
[false false false],... % no energy, no average zero, rad
1.0,... % scale factor = 100%
[],... ModelRMbump,... % response matrix
......
function resp=resonquad(atmodel)
quad=atmodel.get('qp');
% r = atmodel.ring;
%
% % merge QF8 dipoles to 1 single quadrupole
% indQF8dip = find(atgetcells(r,'FamName','QF8\w*') & atgetcells(r,'Class','Bend'))';
% r=atsetfieldvalues(r,indQF8dip,'BendingAngle',0);
% r=atsetfieldvalues(r,indQF8dip,'Class','Quadrupole');
% r=atsetfieldvalues(r,indQF8dip,'PassMethod','StrMPoleSymplectic4Pass');
%
% % rebuild minimal ebs lattice model, without splitted magnets, just for strengths
% atmodel=ebs.model(r,'reduce',true);
iq = atmodel.get(0,'qp');
idq = atmodel.get(0,'dq');
[~,iqa]= sort([iq;idq]); % get quadrupoles order
q = atmodel.get('qp');
dq = atmodel.get('dq');
Kqa=[q; dq];
quad=Kqa(iqa,:);
% % order magnets as in control system
% idquad=cellfun(@(a)ebs.qpindex(a(find(a==' ',1,'last')+1:end)),tango.Device('Tango://ebs-simu:10000/srmag/m-q/all').PowerSupplyNames.read');
......@@ -15,7 +35,7 @@ pz2=floor(2*nuv);
ampscale=1; % scale to have maximum resonance amplitude ~= 1
% response 8x514
% response 8x514+96
resp=[...
ampscale*r2nux(quad,px1,0.5*px1);... % 2nux=153
ampscale*r2nux(quad,px2,0.5*px2);... % 2nux=152
......
......@@ -16,7 +16,7 @@ args={pwd};
args(1:length(varargin))=varargin;
pth=args{1};
atmodel=ebs.model(pth);
atmodel=ebs.model(pth,'reduce',true);
quadmat=ebs.tuneresponse(atmodel);
......
......@@ -4,8 +4,13 @@ function [resp,devs]=tuneresponse(atmodel)
nuh=atmodel.nuh;
nuv=atmodel.nuv;
%tunemode='QF1QD2';
tunemode='Matching';
tunemode='QF1QD2';
% tunemode='Matching';
% get quadurpole and DQ indexes
iq = atmodel.get(0,'qp');
idq = atmodel.get(0,'dq');
[~,iqa]= sort([iq;idq]); % get order of quadrupoles components in lattice
Mat=[];
......@@ -16,26 +21,36 @@ DQ=.001;
Q1=Q0+[DQ 0.0];
latnewtunes=ebs.model(atmodel);
latnewtunes=ebs.model(atmodel,'reduce',true);
latnewtunes.settune(Q1,tunemode);
DGL=latnewtunes.get(1,'qp') - atmodel.get(1,'qp');
DqGL=latnewtunes.get(1,'dq') - atmodel.get(1,'dq');
DGL=[DGL; DqGL];
Mat(:,1)=DGL/DQ;
Mat(:,1)=DGL(iqa)/DQ;
% change vertical tune
Q1=Q0+[0.0 DQ];
latnewtunes=ebs.model(atmodel);
latnewtunes=ebs.model(atmodel,'reduce',true);
latnewtunes.settune(Q1,tunemode);
DGL=latnewtunes.get(1,'qp') - atmodel.get(1,'qp');
DqGL=latnewtunes.get(1,'dq') - atmodel.get(1,'dq');
DGL=[DGL; DqGL];
Mat(:,2)=DGL/DQ;
Mat(:,2)=DGL(iqa)/DQ;
% select changed gradients and get device familiy names.
[uMat,iq,~]=unique(Mat,'rows');
selnonzero=uMat(:,1)~=0 & uMat(:,2)~=0;
devs=ebs.qpfamname(iq(selnonzero));
%[uMat,iq,~]=unique(Mat,'rows');
%selnonzero=uMat(:,1)~=0 & uMat(:,2)~=0;
uMat = Mat;
selnonzero = 1:length(Mat) ;
devq=ebs.qpname(1:length(iq));
devdq=ebs.dqname(1:length(idq));
devs=[devq devdq];
devs=devs(iqa);
resp=[uMat(selnonzero,1),uMat(selnonzero,2)];
% write to file
......
function [ qemres ] = qemACresponse( qemres )
%QEMACRESPONSE Summary of this function goes here
% Detailed explanation goes here
clear ACres* DCres*
iskew=0;
%========= DC ORMs
%datadir='/machfs/MDT/2017/Dec07/resp1';
DCdatadir='/machfs/MDT/2018/Feb07/resp1';
[DCresph,curh,algoh]=sr.load_resp(DCdatadir,'h',qemres.hlist);
[DCrespv,curv,algov]=sr.load_resp(DCdatadir,'v',qemres.vlist);
[DCresph2v]=sr.load_resp(DCdatadir,'h2v',qemres.hlist);
[DCrespv2h]=sr.load_resp(DCdatadir,'v2h',qemres.vlist);
% remove NAN (broken BPMs)
indx=~isnan(DCrespv(:,1));
%======== AC ORM
%load /users/diag/matlab/libera_data/TimeLabel/TimeLabelMresX07-Feb-2018_14h40.mat
%load /users/diag/matlab/libera_data/TimeLabel/TimeLabelMresZ07-Feb-2018_14h53.mat
load Mres_H_Xamp_8000_188mA.mat
load Mres_V_Zamp_1000_188mA.mat
ACresph=MresH(:,qemres.hlist);
ACrespv=MresV(:,qemres.hlist);
ACresphv=MresVH(:,qemres.hlist);
ACrespvh=MresHV(:,qemres.hlist);
ACresph_norm=-ACresph/2.8;
ACrespvh_norm=-ACrespvh/3.8;
ACrespv_norm=-ACrespv/3.8;
ACresphv_norm=-ACresphv/2.8;
% compute ORM difference before using calibration factors
rms_diff_before=[std2(std2(ACresph_norm(indx,:)-DCresph(indx,:))) ...
std2(std2(ACrespv_norm(indx,:)-DCrespv(indx,:)))]
% compute new calibration factors
GainX=std2(ACresph_norm(indx,:))./std2(DCresph(indx,:));
GainZ=std2(ACrespv_norm(indx,:))./std2(DCrespv(indx,:));
save Gain_new GainX GainZ
% apply new calibration factors
ACresph_norm = bsxfun(@rdivide, ACresph_norm, GainX);
ACrespv_norm = bsxfun(@rdivide, ACrespv_norm, GainZ);
% compute ORM difference after using calibration factors
rms_diff_after=[std2(std2(ACresph_norm(indx,:)-DCresph(indx,:))) ...
std2(std2(ACrespv_norm(indx,:)-DCrespv(indx,:)))]
% ================ off-diagonal blocks ====================================
% compute ORM difference before using calibration factors
rms_diff_before=[std2(std2(ACresphv_norm(indx,:)-DCresph2v(indx,:))) ...
std2(std2(ACrespvh_norm(indx,:)-DCrespv2h(indx,:)))]
% apply new calibration factors
ACresphv_norm = bsxfun(@rdivide, ACresphv_norm, GainX);
ACrespvh_norm = bsxfun(@rdivide, ACrespvh_norm, GainZ);
% compute ORM difference after using calibration factors
rms_diff_after=[std2(std2(ACresphv_norm(indx,:)-DCresph2v(indx,:))) ...
std2(std2(ACrespvh_norm(indx,:)-DCrespv2h(indx,:)))]
%% save for qempanel
fileformat=['%.4f\t%s,%d' repmat('\t%.5f',1,224)];
deltaH=0.08; % from respmat.py
deltaV=0.10; % from respmat.py
acdir = [qemres.datadir '_AC'];
mkdir(acdir);
for ist=1:length(qemres.hlist)
f=fopen([acdir '/steerH' num2str(qemres.hlist(ist),'%.2d')],'w');
fprintf(f,fileformat,deltaH,sr.steername(qemres.hlist(ist),'SR/ST-H%i/C%i/CURRENT'),0,ACresph_norm(:,ist)*1e3);
fclose('all');
f=fopen([acdir '/steerV' num2str(qemres.hlist(ist),'%.2d')],'w');
fprintf(f,fileformat,deltaV,sr.steername(qemres.hlist(ist),'SR/ST-V%i/C%i/CURRENT'),0,ACrespv_norm(:,ist)*1e3);
fclose('all');
% off diagonal
f=fopen([acdir '/steerH2V' num2str(qemres.hlist(ist),'%.2d')],'w');
fprintf(f,fileformat,deltaH,sr.steername(qemres.hlist(ist),'SR/ST-H%i/C%i/CURRENT'),0,ACresphv_norm(:,ist)*1e3);
fclose('all');
f=fopen([acdir '/steerV2H' num2str(qemres.hlist(ist),'%.2d')],'w');
fprintf(f,fileformat,deltaV,sr.steername(qemres.hlist(ist),'SR/ST-V%i/C%i/CURRENT'),0,ACrespvh_norm(:,ist)*1e3);
fclose('all');
end
% copy missing files from DC measurement to resp1_AC
filename={...
'steerF2H00','steerF2V00',...
'iax','iaxemittance.mat','iaxH2V.mat','iaxV.mat',...
'settings.mat'};
for ifile = 1:length(filename)
copyfile(fullfile(DCdatadir,filename{ifile}),fullfile(acdir,filename{ifile}));
end
% copy files created in selected folder to _AC folder
filename={...
'srmag.dat',...
'magcor.dat',...
'skewcor.dat',...
'sextcor.dat',...
'optics'};
for ifile = 1:length(filename)
try
copyfile(fullfile(qemres.datadir,filename{ifile}),fullfile(acdir,filename{ifile}));
catch err
disp(err)
end
end
%% set qemres datadir to AC directory
qemres.datadir = acdir;
end
......@@ -12,6 +12,9 @@ if isempty(orbit0), orbit0=findsyncorbit(mach,dct,bpmidx); end
if isempty(dff), dff=5e-7; end
circ=findspos(mach,length(mach)+1);
d2ct=-circ*dff;
orbitf=(findsyncorbit(mach,dct+d2ct,bpmidx)-orbit0)/dff;
%orbitf=(findsyncorbit(mach,dct+d2ct,bpmidx)-orbit0)/dff;
orbitf=(findsyncorbit(mach,dct+d2ct/2,bpmidx)-...
findsyncorbit(mach,dct-d2ct/2,bpmidx))/dff;
[fresph,frespv]=qembpmcode(orbitf(1,:)',orbitf(3,:)',brot,bhgain,bvgain);
end
No preview for this file type
......@@ -22,7 +22,7 @@ function varargout = qempanel2(varargin)
% Edit the above text to modify the response to help qempanel2
% Last Modified by GUIDE v2.5 20-Nov-2017 12:17:32
% Last Modified by GUIDE v2.5 13-Mar-2018 16:07:38
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
......@@ -82,10 +82,21 @@ function pushbutton1_Callback(hObject, eventdata, handles) %#ok<*DEFNU>
% handles structure with handles and user data (see GUIDATA)
global qemb qemres semres
dirname=qemseldir();
[qemres,semres,qemb]=qempanelset(dirname);
qemres.datadir=dirname;
if get(handles.ACRMcheckbox,'Value')
if ~strcmp(dirname(end-3:end),'_AC')
set(handles.statustext,'String','Preparing AC data');
% format AC data to qempanel readable
qemres = qemACresponse(qemres);
dirname=qemres.datadir;
end
end
[qemres,semres,qemb]=qempanelset(dirname,get(handles.PartialRMcheckbox,'Value'));
handles.qemdata=qempaneldata(dirname,handles);
set(handles.edit1,'String',dirname);
pushbutton2_Callback(hObject, eventdata, handles);
pushbutton2_Callback(hObject, eventdata, handles); % qem check response
guidata(hObject,handles);
......@@ -117,6 +128,13 @@ function pushbutton2_Callback(hObject, eventdata, handles)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global qemb qemres semres
% disable changes in RM . restart qempanel to get them back.
set(handles.ACRMcheckbox,'Enable','off')
set(handles.DCRMcheckbox,'Enable','off')
set(handles.FullRMcheckbox,'Enable','off')
set(handles.PartialRMcheckbox,'Enable','off')
wrongbpms=[];
[semres.resph,semres.respv]=semloadresp(qemres,semres,wrongbpms);
[qemres.resph,qemres.respv,qemres.frespx,semres.frespz]=qemcheckresp(qemres,semres,wrongbpms);
......@@ -126,6 +144,12 @@ qemplotresp(3,qemres.resph,qemres.respv,'response');
set(handles.pushbutton3,'Enable','On');
qemb(2)=qempaneldisp(qemres,semres,qemb(2),qemb(1),handles);
if get(handles.ACRMcheckbox,'Value')
set(handles.statustext,'String','Loaded AC response data');
elseif get(handles.DCRMcheckbox,'Value')
set(handles.statustext,'String','Loaded DC response data');
end
% --- Executes on button press in pushbutton3: Fit Quads
function pushbutton3_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton3 (see GCBO)
......@@ -198,7 +222,7 @@ if ~isempty(answer)
error(messageid,['Cannot create measurement directory: ' message])
end
dirname=qemlinkdir(qemseldir(qeminitdir(measdir,handles)));
[qemres,semres,qemb]=qempanelset(dirname);
[qemres,semres,qemb]=qempanelset(dirname,get(handles.PartialRMcheckbox,'Value'));
handles.qemdata=qempaneldata(dirname,handles);
guidata(hObject,handles);
set(handles.edit1,'String',dirname);
......@@ -214,8 +238,17 @@ function pushbutton8_Callback(hObject, eventdata, handles)
% handles structure with handles and user data (see GUIDATA)
%set(hObject,'Enable','Off');
global qemres
set(handles.statustext,'String','measurement in progress');
[status,out]=termappli('respmat.py -i foc','response matrix',qemres.datadir);
if get(handles.DCRMcheckbox,'Value') % DC/AC
if get(handles.PartialRMcheckbox,'Value') % FULL/PARTIAL
set(handles.statustext,'String','DC Partial RM measurement in progress');
[status,out]=termappli('respmat.py -i foc','response matrix',qemres.datadir);
elseif get(handles.FullRMcheckbox,'Value')
set(handles.statustext,'String','DC Full RM measurement in progress');
[status,out]=termappli('respmat.py -i -g 0 full','response matrix',qemres.datadir);
end
else
set(handles.statustext,'String','AC RM measurement not available.ABORT');
end
set(hObject,'Enable','On');
if status ~= 0, error('qem:noexec',out); end
set(handles.statustext,'String','measurement completed');
......@@ -501,3 +534,60 @@ function AnalyticFitCheck_Callback(hObject, eventdata, handles)
% handles structure with handles and user data (see GUIDATA)
% Hint: get(hObject,'Value') returns toggle state of AnalyticFitCheck
set(handles.NumericFitcheckbox,'Value',0.0)
set(handles.AnalyticFitCheck,'Value',1.0)
% --- Executes on button press in PartialRMcheckbox.
function PartialRMcheckbox_Callback(hObject, eventdata, handles)
% hObject handle to PartialRMcheckbox (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 PartialRMcheckbox
set(handles.PartialRMcheckbox,'Value',1.0)
set(handles.FullRMcheckbox,'Value',0.0)
% --- Executes on button press in FullRMcheckbox.
function FullRMcheckbox_Callback(hObject, eventdata, handles)
% hObject handle to FullRMcheckbox (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 FullRMcheckbox
set(handles.PartialRMcheckbox,'Value',0.0)
set(handles.FullRMcheckbox,'Value',1.0)
% --- Executes on button press in NumericFitcheckbox.
function NumericFitcheckbox_Callback(hObject, eventdata, handles)
% hObject handle to NumericFitcheckbox (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 NumericFitcheckbox
set(handles.NumericFitcheckbox,'Value',1.0)
set(handles.AnalyticFitCheck,'Value',0.0)
% --- Executes on button press in DCRMcheckbox.
function DCRMcheckbox_Callback(hObject, eventdata, handles)
% hObject handle to DCRMcheckbox (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 DCRMcheckbox
set(handles.DCRMcheckbox,'Value',1.0)
set(handles.ACRMcheckbox,'Value',0.0)
% --- Executes on button press in ACRMcheckbox.
function ACRMcheckbox_Callback(hObject, eventdata, handles)
% hObject handle to ACRMcheckbox (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 ACRMcheckbox
set(handles.ACRMcheckbox,'Value',1.0)
set(handles.DCRMcheckbox,'Value',0.0)
function [qemres,semres,qemb]=qempanelset(dirname)
function [qemres,semres,qemb]=qempanelset(dirname,full_partial)
%QEMPANELSET
%
%[QEMB,QEMRES,SEMRES]=QEMPANELSET((DIRNAME)
%[QEMB,QEMRES,SEMRES]=QEMPANELSET((DIRNAME,full_partial)
%
% full_partial = 1 partial, 0 full
%
%QEMB: Table of structures with fields q,cor,bh,bv,eta
% QEMB(1): with no errors
% QEMB(2): with errors
......@@ -18,8 +20,13 @@ catch %#ok<*CTCH>
qemres=struct();
end
qemres.bhscale=1;
qemres.hlist=1:6:96;
qemres.vlist=1:6:96;
if full_partial
qemres.hlist=1:6:96;
qemres.vlist=1:6:96;
else
qemres.hlist=1:1:96;
qemres.vlist=1:1:96;
end
%qemres.qpcode=6; % 32 quad correctors
qemres.qpcode=106; % 31 quad correctors (n4/c4 removed)
%qemres.skcode=7; % 32 skew correctors
......@@ -29,8 +36,8 @@ qemres.datadir=dirname;
qemres.opticsdir=fullfile(dirname,'optics','');
semres=struct();
semres.hlist=1:6:96;
semres.vlist=1:6:96;
semres.hlist=qemres.hlist;
semres.vlist=qemres.vlist;
semres.iaxemz=NaN(14,1);
semres.wdisp=0;
semres.bvscale=1;
......
No preview for this file type
......@@ -22,7 +22,7 @@ function varargout = sempanel2(varargin)
% Edit the above text to modify the response to help sempanel2
% Last Modified by GUIDE v2.5 20-Nov-2017 12:21:38
% Last Modified by GUIDE v2.5 22-Mar-2018 16:54:55
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
......@@ -497,3 +497,16 @@ function AnalyticFitCheck_Callback(hObject, eventdata, handles)
% handles structure with handles and user data (see GUIDATA)
% Hint: get(hObject,'Value') returns toggle state of AnalyticFitCheck
set(handles.checkbox2,'Value',0.0)
set(handles.AnalyticFitCheck,'Value',1.0)
% --- Executes on button press in checkbox2.
function checkbox2_Callback(hObject, eventdata, handles)
% 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
set(handles.checkbox2,'Value',1.0)
set(handles.AnalyticFitCheck,'Value',0.0)
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment