source: MML/trunk/applications/orbit/lib/quadalign.m

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

Initial import--MML version from SOLEIL@2013

File size: 2.0 KB
Line 
1function quadalign(sx,sy);
2%locate quadrupoles in AO and apply random alignment
3%function quadalign(sx,sy);  sx and sy are sigma values for randn;
4%units are meters
5if nargin<2
6    disp('Error in quadalign - must supply alignment spreads');
7    return
8end
9
10global THERING
11AO = getao;
12
13ATindx=[];   %indices of quadrupoles
14mx=[];
15my=[];
16len=findspos(THERING,length(THERING)+1);
17
18aofields=fieldnames(AO);
19for ii=1:length(aofields)
20    if strcmpi(AO.(aofields{ii}).FamilyType,'quad')
21        indx=AO.(aofields{ii}).AT.ATIndex;
22       
23        %assign random alignment error to first magnet
24        mx=[mx; sx*randn];
25        my=[my; sy*randn];
26
27        % assign random error to rest of family
28        tol=1e-6; %tolerance for spacing between magnets
29        for jj=2:length(indx)
30           
31            %check for split magnets
32            if AO.(aofields{ii}).Position(jj)-THERING{indx(jj)}.Length - AO.(aofields{ii}).Position(jj-1)<tol   %magnet split
33               disp(['   Split magnet ' AO{ii}.FamilyName ' found in function quadalign with index  ', num2str(indx(jj))]);
34               mx=[mx; -mx(end)];
35               my=[my; -my(end)];
36           else   %magnet not split
37               mx=[mx; sx*randn];   
38               my=[my; sy*randn];
39           end
40           
41        end
42       
43        %check if first/last element split in THERING
44        if abs(AO.(aofields{ii}).Position(1))  < tol  & ...    %first element near zero
45           abs((len - AO.(aofields{ii}).Position(end) - THERING{indx(end)}.Length < tol))      %last element near end
46           disp(['   Split magnet ' AO.(aofields{ii}).FamilyName ' found in function quadalign with index  ',...
47           num2str(indx(1)), ' ',num2str(indx(end))]);
48           mx(end)=-mx(end-length(indx)+1);       %error on last quad same as error on first quad in family
49           my(end)=-my(end-length(indx)+1);
50        end
51       
52        ATindx=[ATindx; indx];
53    end  %end quad condition
54end  %end loop over families
55
56% my=sy*randn(1,length(ATindx));
57% mx=sx*randn(1,length(ATindx));
58setshift(ATindx,mx,my);
59
Note: See TracBrowser for help on using the repository browser.