Home > machine > Soleil > StorageRing > updateatindex.m

updateatindex

PURPOSE ^

UPDATEATINDEX - Updates the AT indices in the MiddleLayer with the present AT lattice (THERING)

SYNOPSIS ^

function updateatindex

DESCRIPTION ^

UPDATEATINDEX - Updates the AT indices in the MiddleLayer with the present AT lattice (THERING)

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

0001 function updateatindex
0002 %UPDATEATINDEX - Updates the AT indices in the MiddleLayer with the present AT lattice (THERING)
0003 
0004 %
0005 % Adapted by Laurent S. Nadolski
0006 
0007 global THERING
0008 
0009 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0010 % Append Accelerator Toolbox information %
0011 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0012 
0013 % Since changes in the AT model could change the AT indexes, etc,
0014 % It's best to regenerate all the model indices whenever a model is loaded
0015 
0016 % Sort by family first (findcells is linear and slow)
0017 Indices = atindex(THERING);
0018 
0019 AO = getao;
0020 
0021 % BPMS
0022 try
0023     ifam = 'BPMx';
0024     AO.(ifam).AT.ATType = 'X';
0025     AO.(ifam).AT.ATIndex = Indices.BPM(:); % findcells(THERING,'FamName','BPM')';
0026     AO.(ifam).Position = findspos(THERING, AO.(ifam).AT.ATIndex)';
0027 
0028     ifam = 'BPMz';
0029     AO.(ifam).AT.ATType = 'Z';
0030     AO.(ifam).AT.ATIndex = Indices.BPM(:); % findcells(THERING,'FamName','BPM')';
0031     AO.(ifam).Position = findspos(THERING, AO.(ifam).AT.ATIndex)';
0032 catch
0033     warning('BPM family not found in the model.');
0034 end
0035 
0036 
0037 % CORRECTORS
0038 try
0039     ifam = 'HCOR';
0040     % Horizontal correctors are at every AT corrector
0041     AO.(ifam).AT.ATType = ifam;
0042     AO.(ifam).AT.ATIndex = buildatindex(AO.(ifam).FamilyName, Indices.COR);
0043     AO.(ifam).Position = findspos(THERING, AO.(ifam).AT.ATIndex(:,1))';
0044 
0045     % Vertical correctors are at every AT corrector
0046     ifam = 'VCOR';
0047     AO.(ifam).AT.ATType = ifam;
0048     AO.(ifam).AT.ATIndex = buildatindex(AO.(ifam).FamilyName, Indices.COR);
0049     AO.(ifam).Position = findspos(THERING, AO.(ifam).AT.ATIndex(:,1))';
0050 
0051     % Fast Horizontal correctors are at every AT corrector
0052     ifam = 'FHCOR';
0053     AO.(ifam).AT.ATType = ifam;
0054     AO.(ifam).AT.ATIndex = buildatindex(AO.(ifam).FamilyName, Indices.COR);
0055     AO.(ifam).Position = findspos(THERING, AO.(ifam).AT.ATIndex(:,1))';
0056 
0057     % Fast vertical correctors are at every AT corrector
0058     ifam = 'FVCOR';
0059     AO.(ifam).AT.ATType = ifam;
0060     AO.(ifam).AT.ATIndex = buildatindex(AO.(ifam).FamilyName, Indices.COR);
0061     AO.(ifam).Position = findspos(THERING, AO.(ifam).AT.ATIndex(:,1))';
0062 catch
0063     warning('Corrector family not found in the model.');
0064 end
0065 
0066 
0067 % QUADRUPOLES
0068 try
0069     for k = 1:10,
0070         ifam = ['Q' num2str(k)];
0071         AO.(ifam).AT.ATType = 'QUAD';
0072         AO.(ifam).AT.ATIndex = buildatindex(AO.(ifam).FamilyName, Indices.(ifam));
0073         AO.(ifam).Position = findspos(THERING, AO.(ifam).AT.ATIndex(:,1))';
0074     end
0075 catch
0076     warning('%s family not found in the model.',ifam);
0077 end
0078 
0079 
0080 % SEXTUPOLES
0081 try
0082     for k = 1:10,
0083         ifam = ['S' num2str(k)];
0084         AO.(ifam).AT.ATType = 'SEXT';
0085         AO.(ifam).AT.ATIndex = buildatindex(AO.(ifam).FamilyName, Indices.(ifam));
0086         AO.(ifam).Position = findspos(THERING, AO.(ifam).AT.ATIndex(:,1))';
0087     end
0088 catch
0089     warning('Sextupole families not found in the model.');
0090 end
0091 
0092 
0093 % BEND
0094 
0095 try
0096     % Combine BEND
0097     AO.BEND.AT.ATType = 'BEND';
0098     ATIndex = Indices.BEND(:);
0099     AO.BEND.AT.ATIndex = buildatindex(AO.BEND.FamilyName, sort(ATIndex));
0100     AO.BEND.Position = findspos(THERING, AO.BEND.AT.ATIndex(:,1))';
0101 catch
0102     warning('BEND family not found in the model.');
0103 end
0104 
0105 % RF CAVITY
0106 try
0107     AO.RF.AT.ATType = 'RF Cavity';
0108     AO.RF.AT.ATIndex = findcells(THERING,'Frequency')';
0109     AO.RF.Position = findspos(THERING, AO.RF.AT.ATIndex(:,1))';
0110 catch
0111     warning('RF cavity not found in the model.');
0112 end
0113 
0114 setao(AO);
0115 
0116 % Set TwissData at the start of the storage ring
0117 try
0118 
0119     % BTS twiss parameters at the input
0120     TwissData.alpha = [0 0]';
0121     TwissData.beta  = [13.8467 2.2582]';
0122     TwissData.mu    = [0 0]';
0123     TwissData.ClosedOrbit = [0 0 0 0]';
0124     TwissData.dP = 0;
0125     TwissData.dL = 0;
0126     TwissData.Dispersion  = [.06 0 0 0]';
0127 
0128     setpvmodel('TwissData', '', TwissData);  % Same as, THERING{1}.TwissData = TwissData;
0129 
0130 catch
0131     warning('Setting the twiss data parameters in the MML failed.');
0132 end

Generated on Mon 21-May-2007 15:35:27 by m2html © 2003