Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
function [resp,tunes]=semderiv(mach,dpp,fitlist,blist,hslist,vslist,dispfunc)
%SEMDERIV Compute derivatives of response matrix
%
%[resp,tunes]=semderiv(mach,fitidx,bpmidx,hsteeridx,vsteeridx)
%
%MACH: AT machine structure
%FITIDX: Index of varying skew quadrupoles
%BPMIDX: Index of BPMs
%HSTEERIDX: Index of horizontal steerers
%VSTEERIDX: Index of vertical steerers
%
%RESP: response matrix for skew quads: [nbpms*(nhsteer+nvsteer) length(fitidx)]
%TUNES: initial tunes
if nargin < 7, dispfunc=@(i,itot) 0; end
nq=length(fitlist);
nbpm=length(blist);
nhst=length(hslist);
nvst=length(vslist);
[v,j,kdx]=unique([fitlist blist hslist vslist]); %#ok<ASGLU>
qidx=kdx(1:nq);
bidx=kdx(nq+(1:nbpm));
hsidx=kdx(nq+nbpm+(1:nhst));
vsidx=kdx(nq+nbpm+nhst+(1:nvst));
alphal=findspos(mach,length(mach)+1)*mcf(mach);
[lindata,beta,mu,eta]=atavedata(mach,dpp,[v length(mach)+1]);
mutot=lindata(end).mu;
tunes=mutot/2/pi;
phase=mu./mutot(ones(length(lindata),1),:);
hkq=responsem([beta(qidx,1) phase(qidx,1) eta(qidx,1)],[beta(hsidx,1) phase(hsidx,1) eta(hsidx,1)],{tunes(1),alphal});
vqb=responsem([beta(bidx,2) phase(bidx,2)],[beta(qidx,2) phase(qidx,2)],tunes(2));
vkq=responsem([beta(qidx,2) phase(qidx,2)],[beta(vsidx,2) phase(vsidx,2)],tunes(2));
hqb=responsem([beta(bidx,1) phase(bidx,1) eta(bidx,1)],[beta(qidx,1) phase(qidx,1) eta(qidx,1)],{tunes(1),alphal});
resp=zeros(nbpm*(nhst+nvst),nq);
for ib=1:nq
rv=vqb(:,ib)*hkq(ib,:); % ATTENTION
rh=hqb(:,ib)*vkq(ib,:);
resp(:,ib)=[rv(:);rh(:)];
dispfunc(ib,nq);
end