source: MML/trunk/applications/orbit/aspbooster/orbitgui.m @ 4

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

Initial import--MML version from SOLEIL@2013

File size: 6.9 KB
Line 
1%============================
2%Launch ASP Orbit Program
3%============================
4
5disp('   Initializing orbit control panel...');
6
7%Check to see AcceleratorObjects loaded
8global THERING
9if isempty(getao) | ~exist('THERING')
10    disp('Warning: Load Accelerator Model and AcceleratorObjects first');
11    return
12end
13
14%Clear any previous ORBIT figure
15orbfig = findobj(0,'tag','orbfig');  %orbfig "global"
16if ~isempty(orbfig) delete(orbfig); end
17
18%goto orbit directory
19cd(getfamilydata('Directory','Orbit'));
20
21%Software operates in HW units
22switch2hw;
23
24%Clear global structures
25clear global SYS BL BPM COR RSP
26setappdata(0,'SYS',[]);
27setappdata(0,'BPM',[]);
28setappdata(0,'COR',[]);
29setappdata(0,'RSP',[]);
30setappdata(0,'BL' ,[]);
31
32%Declare global structures
33global SYS BL BPM COR RSP
34
35%Load element names via AcceleratorObjects
36BL=getblnames;                            %initialize BL names
37BPM=getbpmnames;                          %initialize BPM names
38COR=getcornames;                          %initialize COR names
39
40%Initialize Structures for Orbit Program (no control parameters)
41BL=blinit_orb(BL);    %do this first   
42BPM=bpminit_orb(BPM);     
43COR=corinit_orb(COR);
44
45
46%SYS parameters required for initialization
47SYS.machine='ASP';
48SYS.restorefile='asprestore.m';
49SYS.mode='ONLINE';
50SYS.bpmode='Bergoz';
51SYS.plane=1;
52SYS.cortype='HCM';  %consistent with SYS.plane=1
53SYS.relative=2;
54SYS.curr=0; SYS.engy=0; SYS.lt=0; SYS.ahr=0;
55SYS.units='HW';   %default to hardware units
56
57%open system log file
58
59%Draw main figure
60orbgui('OrbFig');               %Figure with tag 'orbfig'
61SYS.handles.ahbpm=orbgui('Axes_1');
62setappdata(0,'SYS',SYS);
63orbgui('BPMAxes');              %establish upper axes for BPMs, use ah_1 for BPMs
64orbgui('CorAxes');              %COR axes with tag 'SYS.ahbpm'
65orbgui('SVDAxes');              %SVD axes with tag 'SYS.ahbpm'
66orbgui('BPMbox');               %BPM information display box         
67orbgui('CorBox');               %COR information display box                 
68orbgui('SVDBox');               %SVD information display box                   
69orbgui('LstBox');               %List Box to display program information
70orbgui('PlotMenu');             %Menu for plot options
71orbgui('BPMMenu');              %Menu for BPM options
72orbgui('CORMenu');              %Menu for COR options
73orbgui('BLMenu');               %Menu for Beam line options
74orbgui('SimMenu');              %Menu for Simulation options
75orbgui('RespMenu');             %Menu for Response Matrix options
76orbgui('UIControls');           %UIControls
77orbgui('MachineParameters');    %Text fields for system parameters, load initial values
78orbgui('ZoomAxes');             %Used to zoom absicca
79aspelementicons;             %initialize element icons (append fields to THERING)
80[SYS.elhndl]=elementiconpatch(SYS.handles.ahpos,SYS.elemind,'ShowElem');    %draw initial element icons, return handles
81orbgui('ZoomPatches');          %Initialize icons before zoom patchs (patches on top layer)
82
83%Load Gain and offsets from Physdata
84[BPM,COR,BL]=orbgui('LoadASPPhysData',BPM,COR,BL);
85
86%Read reference orbit (initiates BPM.iref/.abs/.des/.ref)
87BPM=reforb2zero(BPM);
88
89%Restore user parameters, load response matrices, golden orbit
90orbdir=getfamilydata('Directory','Orbit');
91[SYS BPM BL COR RSP]=restoreorbit(orbdir,SYS.restorefile,'auto',SYS,BPM,BL,COR,RSP);  %no graphics commands
92
93
94if strcmpi(SYS.datamode,'REAL')   %convert response matrix to 'real' units NOTE: expect response matrix in hardware units (mm/amp)
95   set(SYS.handles.orbfig,'Name',[get(SYS.handles.orbfig,'Name') ':   Data units Real']);
96   for k=1:2
97   ib=RSP(k).ib;
98   ic=RSP(k).ic;
99   RSP(k).c(ib,ic)=diag(BPM(k).gain(ib))*RSP(k).c(ib,ic);
100   end
101end
102
103    %raw: no change in RSP(k).c
104
105Circumference=getfamilydata('Circumference');
106BPM(1).phi=(15/Circumference)*BPM(1).z(:);        %...phase advance
107BPM(2).phi= (6/Circumference)*BPM(2).z(:);
108COR(1).phi=(15/Circumference)*COR(1).z(:);
109COR(2).phi= (6/Circumference)*COR(2).z(:);
110
111%begin hardware checkouts
112disp('   Checking Beamlines...');
113%BL(2).DevList=getlist('BLOpen',0);                %...valid photon BPMs in middlelayer
114%BL(2).ElemList=dev2elem('BLOpen',BL(2).DevList);
115%BL(2).status=getfamilydata('BLOpen','Status');
116%BL=SortBLs(BL,RSP);                               %sort for avail, ifit
117
118disp('   Checking BPMs...');
119families={'BPMx'; 'BPMy'};
120for k=1:2
121  family=families{k};
122  BPM(k).status=find(getfamilydata(family,'Status'));  %middle layer status indices
123  BPM(k).avail=BPM(k).status;    %if status o.k. default to available
124end
125BPM=sortbpms(BPM,RSP);         %sort for avail, ifit
126
127%Measure actual orbit
128bpmgui('GetAct');              %mm for hardware, meters for physics
129
130disp('   Checking Correctors...');
131families={'HCM'; 'VCM'};
132for k=1:2
133family=families{k};
134COR(k).status=find(getfamilydata(family,'Status'));  %middle layer status indices
135COR(k).avail=COR(k).status;    %if status o.k. default to available
136end
137
138
139
140%corrector reference
141corgui('GetAct');              %amps for hardware, rad for physics
142% COR(1).act=0*COR(1).z;
143% COR(2).act=0*COR(2).z;
144COR(1).ref=COR(1).act;
145COR(2).ref=COR(2).act;
146COR=sortcors(COR,RSP);         %Get COR status, sort for avail, ifit
147   
148setappdata(0,'BPM',BPM);
149setappdata(0,'BL',BL);
150setappdata(0,'COR',COR);
151
152%Plot initial BPM data
153disp('   Initializing Plots...');
154bpmgui('PlotRef_Init');                %...solid red/loaded in BPMInit
155bpmgui('PlotDes_Init');                %...dashed red line
156bpmgui('PlotIcons_Init');              %...hot circles
157bpmgui('PlotAct_Init');                %...initialize blue actual orbit plot
158bpmgui('PlotFit_Init');                %...initialize orbit fit plot
159bpmgui('PlotResp_Init');               %...initialize response matrix plot
160bpmgui('PlotEig_Init');                %...initialize eigenvector plot
161bpmgui('PlotRef');                     %...solid red/loaded in BPMInit
162bpmgui('PlotBPMs');                    %...hot circles/loaded in BPMInit
163bpmgui('PlotAct');                     %...blue line/loaded in BPMInit
164
165%Plot initial cor data
166corgui('PlotCor_Init');                %...initialize corrector patches
167
168%Plot initial SVD data
169respgui('PlotSVD_Init');               %...initialize bpm and corrector eigenvector plots
170
171%Set up program parameters: both planes
172disp('   Setting up program parameters...');
173SYS.plane=1;                           %start with horizontal plane
174for ip=1:2
175%COR=getappdata(0,'COR');
176orbgui('Plane');                       %switch to vertical
177corgui('SaveCorrs',ip);                %saves one plane only, all correctors
178COR(ip).rst=COR(ip).act;               %default reset field for 'REMOVE' button
179setappdata(0,'COR',COR);
180
181orbgui('RescaleBPMAxis');
182orbgui('RescaleCORAxis');
183end
184
185for k=2:-1:1
186SYS.plane=k;
187setappdata(0,'SYS',SYS);
188corgui('HidePlots');
189end
190corgui('ShowPlots');
191
192%load golden orbit
193readwrite('ReadBPMReference','B','Golden');  %load golden orbit, RefreshOrbGUI
194
195orbgui('LBox',' Finished loading Restore File');
196
197
198set(orbfig,'Visible','On');  drawnow; %make figure visible
199disp('   Finished initializing orbit program');
200
201clear k orbfig orbdir;
202
Note: See TracBrowser for help on using the repository browser.