source: MML/trunk/machine/SOLEIL/common/anabpmfirstturn.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: 4.0 KB
Line 
1function varargout = anabpmfirstturn(bpmdevlist,varargin)
2% ANABPMFIRSTTURN - Analyses first turn BPM
3%
4%  INPUTS
5%  1. DeviceList - bpm number (scalar or vector) list
6%  2. Element List
7%
8%  Optional input arguments
9%  2. Optional display
10%     'Display'   - Plot the bpmdata {Default if no outputs exist}
11%     'NoDisplay' - Bpmdata will not be plotted {Default if outputs exist}
12%  3. 'MaxSum'    - First turn is where sum signal is maximum
13%  4. 'Struct'    - Return out as a structure
14%  5. 'File'      - Get from File (interactive)
15%
16%  OUTPUTS
17%  structure output if 'Struct' precised
18%  AM
19%
20%  vector output
21%  1. X - Horizontal data
22%  2. Z - Vertical data
23%  3. Sum - Sum signal data
24%  4. Index of maximum sum
25%
26%  EXAMPLES
27%  1. anabpmfirstturn([1 1]);
28%  2. anabpmfirstturn([1; 2; 3]);
29%  3. all BPMs and store orbit H et V orbit in X and Z
30%     [X, Z] = anabpmfirstturn([],'NoDisplay');
31%
32% See Also getbpmrawdata
33
34%
35% Written by Laurent S. Nadolski
36
37% TODO: relecture d'un fichier
38% Choix du nombre de tours ....
39
40
41MaxSumFlag = 1; % Research of first turn using sum signal
42FileFlag = 0;   % Get data from a file
43ishift = 0;     % Relative turn aroud first turn
44ifirstturn = 7;% index of first turn: used if MaxSumFlag = 0;
45varargin2 = {};
46DisplayFlag = 1;
47
48FileName = '';
49
50if isempty(bpmdevlist)
51    switch getsubmachinename
52        case 'Booster'
53            xpos = 1:22;
54        case 'StorageRing'
55            xpos = 1:120;
56    end
57else
58    xpos = 1:size(bpmdevlist,1);
59end
60
61%exemple pour definir le meme tour partout
62ifirstturn = ones(size(xpos))*12;
63%ifirstturn([10 123 4]) = 11;
64
65for i = length(varargin):-1:1
66    if strcmpi(varargin{i},'Display')
67        DisplayFlag = 1;
68        varargin2 = {varargin2{:} varargin{i}};
69        varargin(i) = [];
70    elseif strcmpi(varargin{i},'NoDisplay')
71        DisplayFlag = 0;
72        varargin2 = {varargin2{:} varargin{i}};
73        varargin(i) = [];
74    elseif strcmpi(varargin{i},'MaxSum')
75        MaxSumFlag = 1;
76        ManualFlag = 0;
77        varargin(i) = [];
78    elseif strcmpi(varargin{i},'NoMaxSum')
79        MaxSumFlag = 0;
80        varargin(i) = [];
81    elseif strcmpi(varargin{i},'Manual')
82        ManualFlag = 1;
83        MaxSumFlag = 0;
84        varargin(i) = [];
85    elseif strcmpi(varargin{i},'NoManual')
86        ManualFlag = 0;
87        varargin(i) = [];
88    elseif strcmpi(varargin{i},'File')
89        FileFlag = 1;
90        varargin(i) = [];
91    elseif strcmpi(varargin{i},'NoArchive')
92        ArchiveFlag = 0;
93        varargin2 = [varargin2 varargin{i}];
94        varargin(i) = [];
95    elseif strcmpi(varargin{i},'Struct')
96        StructureFlag = 1;
97        varargin2 = [varargin2 varargin{i}];
98        varargin(i) = [];
99    end
100end
101
102% Get File by asking users
103if FileFlag
104    DirectoryName = getfamilydata('Directory','BPMData');
105    FileName     = uigetfile(DirectoryName);
106    if  isequal(FileName,0)
107       disp('User pressed cancel')
108       return;
109    else
110        a = load(fullfile(DirectoryName, FileName));
111        AM = getfield(a, 'AM');
112        bpmdevlist = dev2elem('BPMx',AM.DeviceList);
113    end
114   
115else % Online data   
116    AM = getbpmrawdata(bpmdevlist,'Struct',varargin2{:});
117end
118
119if MaxSumFlag % Maxium signal on sum signal
120    [dummy idx] = max(AM.Data.Sum');
121    disp('Maximum peak')
122    if DisplayFlag
123        idx
124    end
125else % Manual selection of the first turn index
126    idx = ifirstturn;
127end
128
129idx2 = sub2ind(size(AM.Data.Sum), xpos, idx+ishift);
130
131if DisplayFlag
132    figure(101)
133   
134    posvect = getspos('BPMx',AM.DeviceList);
135
136    h1 = subplot(7,1,[1 3]);
137    plot(posvect, AM.Data.X(idx2),'b.-');
138    grid on
139    xlabel('s(m)')
140    ylabel('X(mm)')
141    axis([0 getcircumference -20 20]);
142    title('First turn orbit')
143
144    h2 = subplot(7,1,4);
145    drawlattice;
146
147    h3  = subplot(7,1,[5 7]);
148    plot(posvect, AM.Data.Z(idx2),'r.-');
149    grid on
150    xlabel('s(m)')
151    ylabel('Z(mm)')
152    axis([0 getcircumference -11 11]);
153
154    linkaxes([h1,h2,h3],'x');
155
156    addlabel(1,0,datestr(AM.TimeStamp,21));
157end
158
159varargout{1} = AM.Data.X(idx2);
160varargout{2} = AM.Data.Z(idx2);
161varargout{3} = AM.Data.Sum(idx2);
162varargout{4} = idx;
Note: See TracBrowser for help on using the repository browser.