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