1 | %function outM = idCreateModelOrbDistMatr(x_or_z, ModelData, indUpstrBPM, sectLenBwBPMs, idCenPos, idLen, idKickOfst) |
---|
2 | function outM = idCreateModelOrbDistMatr(x_or_z, ModelData, GeomParUnd) |
---|
3 | |
---|
4 | % Creates orbit distortion matrix to simulate effect of an ID on e-beam |
---|
5 | % transverse positions along the ring |
---|
6 | |
---|
7 | indDownstrBPM = GeomParUnd.indUpstrBPM + 1; % To precise this |
---|
8 | if indDownstrBPM == 121 |
---|
9 | indDownstrBPM = 1; |
---|
10 | end |
---|
11 | |
---|
12 | ringCircum = ModelData.circ; %354; % [m] |
---|
13 | alpMomCompact = ModelData.alp1; %0.0004; % Ask Laurent or Pascale |
---|
14 | |
---|
15 | %numBPMsToSkip = length(arIndsBPMsToSkip); |
---|
16 | |
---|
17 | %[Btx, Btz] = modelbeta(strBPM); |
---|
18 | %[Alpx, Alpz] = modeltwiss('alpha', strBPM); |
---|
19 | %[Etax, Etaz] = modeldisp(strBPM); % Ask Laurent or Pascale |
---|
20 | %[Phx, Phz] = modelphase(strBPM); |
---|
21 | %Nuxz = modeltune; |
---|
22 | |
---|
23 | Bt = ModelData.Btx; Alp = ModelData.Alpx; Eta = ModelData.Etax; Ph = ModelData.Phx; Nu = ModelData.Nuxz(1); |
---|
24 | if strcmp(x_or_z, 'z') ~= 0 |
---|
25 | Bt = ModelData.Btz; Alp = ModelData.Alpz; Eta = ModelData.Etaz; Ph = ModelData.Phz; Nu = ModelData.Nuxz(2); |
---|
26 | end |
---|
27 | |
---|
28 | distUpstrBPM_Kick1 = GeomParUnd.idCenPos - 0.5*GeomParUnd.sectLenBwBPMs - 0.5*GeomParUnd.idLen + GeomParUnd.idKickOfst; |
---|
29 | distUpstrBPM_Kick2 = GeomParUnd.idCenPos - 0.5*GeomParUnd.sectLenBwBPMs + 0.5*GeomParUnd.idLen - GeomParUnd.idKickOfst; |
---|
30 | btUpstr = Bt(GeomParUnd.indUpstrBPM); |
---|
31 | alpUpstr = Alp(GeomParUnd.indUpstrBPM); |
---|
32 | etaUpstr = Eta(GeomParUnd.indUpstrBPM); |
---|
33 | etaDownstr = Eta(indDownstrBPM); |
---|
34 | phUpstr = Ph(GeomParUnd.indUpstrBPM); |
---|
35 | %phDownstr = Ph(indDownstrBPM); |
---|
36 | |
---|
37 | gamUpstr = (1 + alpUpstr*alpUpstr)/btUpstr; |
---|
38 | twoAlpUpstr = 2*alpUpstr; |
---|
39 | btKick1 = btUpstr - distUpstrBPM_Kick1*twoAlpUpstr + distUpstrBPM_Kick1*distUpstrBPM_Kick1*gamUpstr; |
---|
40 | btKick2 = btUpstr - distUpstrBPM_Kick2*twoAlpUpstr + distUpstrBPM_Kick2*distUpstrBPM_Kick2*gamUpstr; |
---|
41 | |
---|
42 | etaDifBwBPMs = etaDownstr - etaUpstr; |
---|
43 | etaKick1 = etaUpstr + (distUpstrBPM_Kick1/GeomParUnd.sectLenBwBPMs)*etaDifBwBPMs; % Ask Laurent or Pascale |
---|
44 | etaKick2 = etaUpstr + (distUpstrBPM_Kick2/GeomParUnd.sectLenBwBPMs)*etaDifBwBPMs; |
---|
45 | |
---|
46 | %phDifBwBPMs = phDownstr - phUpstr; |
---|
47 | %phKick1 = phUpstr + (distUpstrBPM_Kick1/GeomParUnd.sectLenBwBPMs)*phDifBwBPMs; % Ask Laurent or Pascale |
---|
48 | %phKick2 = phUpstr + (distUpstrBPM_Kick2/GeomParUnd.sectLenBwBPMs)*phDifBwBPMs; |
---|
49 | phKick1 = phUpstr + atan(alpUpstr) + atan(gamUpstr*distUpstrBPM_Kick1 - alpUpstr); |
---|
50 | phKick2 = phUpstr + atan(alpUpstr) + atan(gamUpstr*distUpstrBPM_Kick2 - alpUpstr); |
---|
51 | |
---|
52 | invTwoSinPiNu = 1./(2.*sin(pi*Nu)); |
---|
53 | invAlpCircum = 1./(alpMomCompact*ringCircum); |
---|
54 | numBPMsAr = size(Bt); |
---|
55 | numBPMs = numBPMsAr(1); |
---|
56 | %outM = zeros(numBPMs - numBPMsToSkip, 2); |
---|
57 | outM = zeros(numBPMs, 2); |
---|
58 | |
---|
59 | %countBPM = 1; |
---|
60 | for i = 1:numBPMs |
---|
61 | %if(numBPMsToSkip > 0) |
---|
62 | % skipThisBPM = 0; |
---|
63 | % for j = 1:numBPMsToSkip |
---|
64 | % if(i == arIndsBPMsToSkip(j)) |
---|
65 | % skipThisBPM = 1; |
---|
66 | % break; |
---|
67 | % end |
---|
68 | % end |
---|
69 | % if(skipThisBPM ~= 0) |
---|
70 | % continue; |
---|
71 | % end |
---|
72 | %end |
---|
73 | |
---|
74 | %outM(countBPM, 1) = invTwoSinPiNu*sqrt(Bt(i)*btKick1)*cos(abs(Ph(i) - phKick1) - pi*Nu) + invAlpCircum*Eta(i)*etaKick1; |
---|
75 | %outM(countBPM, 2) = invTwoSinPiNu*sqrt(Bt(i)*btKick2)*cos(abs(Ph(i) - phKick2) - pi*Nu) + invAlpCircum*Eta(i)*etaKick2; |
---|
76 | %countBPM = countBPM + 1; |
---|
77 | |
---|
78 | outM(i, 1) = invTwoSinPiNu*sqrt(Bt(i)*btKick1)*cos(abs(Ph(i) - phKick1) - pi*Nu) + invAlpCircum*Eta(i)*etaKick1; |
---|
79 | outM(i, 2) = invTwoSinPiNu*sqrt(Bt(i)*btKick2)*cos(abs(Ph(i) - phKick2) - pi*Nu) + invAlpCircum*Eta(i)*etaKick2; |
---|
80 | end |
---|