source: MML/trunk/machine/SOLEIL/StorageRing/insertions/IDStarter/idCreateModelOrbDistMatr.m @ 4

Last change on this file since 4 was 4, checked in by zhangj, 11 years ago

Initial import--MML version from SOLEIL@2013

File size: 3.3 KB
Line 
1%function outM = idCreateModelOrbDistMatr(x_or_z, ModelData, indUpstrBPM, sectLenBwBPMs, idCenPos, idLen, idKickOfst)
2function 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
7indDownstrBPM = GeomParUnd.indUpstrBPM + 1; % To precise this
8if indDownstrBPM == 121
9    indDownstrBPM = 1;
10end
11
12ringCircum = ModelData.circ; %354; % [m]
13alpMomCompact = 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
23Bt = ModelData.Btx; Alp = ModelData.Alpx; Eta = ModelData.Etax; Ph = ModelData.Phx; Nu = ModelData.Nuxz(1);
24if strcmp(x_or_z, 'z') ~= 0
25        Bt = ModelData.Btz; Alp = ModelData.Alpz; Eta = ModelData.Etaz; Ph = ModelData.Phz; Nu = ModelData.Nuxz(2);
26end
27
28distUpstrBPM_Kick1 = GeomParUnd.idCenPos - 0.5*GeomParUnd.sectLenBwBPMs - 0.5*GeomParUnd.idLen + GeomParUnd.idKickOfst;
29distUpstrBPM_Kick2 = GeomParUnd.idCenPos - 0.5*GeomParUnd.sectLenBwBPMs + 0.5*GeomParUnd.idLen - GeomParUnd.idKickOfst;
30btUpstr = Bt(GeomParUnd.indUpstrBPM);
31alpUpstr = Alp(GeomParUnd.indUpstrBPM);
32etaUpstr = Eta(GeomParUnd.indUpstrBPM);
33etaDownstr = Eta(indDownstrBPM);
34phUpstr = Ph(GeomParUnd.indUpstrBPM);
35%phDownstr = Ph(indDownstrBPM);
36
37gamUpstr = (1 + alpUpstr*alpUpstr)/btUpstr;
38twoAlpUpstr = 2*alpUpstr;
39btKick1 = btUpstr - distUpstrBPM_Kick1*twoAlpUpstr + distUpstrBPM_Kick1*distUpstrBPM_Kick1*gamUpstr;
40btKick2 = btUpstr - distUpstrBPM_Kick2*twoAlpUpstr + distUpstrBPM_Kick2*distUpstrBPM_Kick2*gamUpstr;
41
42etaDifBwBPMs = etaDownstr - etaUpstr;
43etaKick1 = etaUpstr + (distUpstrBPM_Kick1/GeomParUnd.sectLenBwBPMs)*etaDifBwBPMs; % Ask Laurent or Pascale
44etaKick2 = 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;
49phKick1 = phUpstr + atan(alpUpstr) + atan(gamUpstr*distUpstrBPM_Kick1 - alpUpstr);
50phKick2 = phUpstr + atan(alpUpstr) + atan(gamUpstr*distUpstrBPM_Kick2 - alpUpstr);
51
52invTwoSinPiNu = 1./(2.*sin(pi*Nu));
53invAlpCircum = 1./(alpMomCompact*ringCircum);
54numBPMsAr = size(Bt);
55numBPMs = numBPMsAr(1);
56%outM = zeros(numBPMs - numBPMsToSkip, 2);
57outM = zeros(numBPMs, 2);
58
59%countBPM = 1;
60for 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;
80end
Note: See TracBrowser for help on using the repository browser.