source: MML/trunk/machine/SOLEIL/StorageRing/insertions/idMeasElecBeam.m @ 17

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

To have a stable version on the server.

  • Property svn:executable set to *
File size: 3.8 KB
Line 
1function outStructElecBeam = idMeasElecBeam(inStructElecBeam, inclPerturbMeas, dispData)
2% Function called by the idMeasElecBeamUnd function.
3% Adds the following fields to the inStructElecBeam:
4%   - X :       horizontal orbit                        (vector [120 x 1])
5%   - Z :       vertical orbit                          (vector [120 x 1])
6%   - current : stored current                          (scalar)
7%   - tune :    horizontal and vertical tunes           (vector [2 x1]
8%   - dx :      horizontal dispersion function          (scalar)
9%   - dz :      vertical dispersion function            (scalar)
10%   - ksi :     horizontal and vertical chromaticities  (vector [2 x 1])
11%   - date :    date                                    string
12%
13% Modified by F. Briquez on 08/11/2010: orbit measurements since no NaN
14% got.
15
16% On and Off e-beam size meas :
17inclSizeMeas = 0; %1;
18
19% Pause duration between eventual measurements of the dispersion functions and chromatisities:
20pauseTime_s = 5;
21
22% Orbits
23% catched until no NaN in them
24WrongMeasurement=1;
25MaxNumberOfOrbitMeasurements=5;
26OrbitMeasurementIndex=1;
27
28while(WrongMeasurement&&OrbitMeasurementIndex<=MaxNumberOfOrbitMeasurements)
29    inStructElecBeam.X = getx;
30    inStructElecBeam.Z = getz;
31    NumberOfNaNinXorbit=sum(isnan(inStructElecBeam.X));
32    NumberOfNaNinZorbit=sum(isnan(inStructElecBeam.Z));
33    WrongMeasurement=NumberOfNaNinXorbit~=0||NumberOfNaNinZorbit~=0;
34    OrbitMeasurementIndex=OrbitMeasurementIndex+1;
35end
36
37% Stored electron beam current
38inStructElecBeam.current = getdcct;
39% Tunes
40inStructElecBeam.tune = gettune;
41% Beam lifetime
42%temp = tango_read_attribute2('ANS/DG/PUB-LifeTime','double_scalar');
43%inStructElecBeam.tau = temp.value(1);
44
45if inclPerturbMeas ~= 0
46        % Measure dispersion functions. ATTENTION, it perturbes e-beam !
47        [dx dz] = measdisp('Physics');
48        inStructElecBeam.dx = dx;
49        inStructElecBeam.dz = dz;
50    %inStructElecBeam,
51    pause(pauseTime_s);
52
53        % Measure chromaticities. ATTENTION, it perturbes e-beam !
54        inStructElecBeam.ksi = measchro('Physics');
55else
56        inStructElecBeam.dx = 0;
57        inStructElecBeam.dz = 0;
58    inStructElecBeam.ksi = [0, 0];
59end
60
61%E-Beam Size / Emittance measurements
62if inclSizeMeas ~= 0
63    devemit = 'ANS-C02/DG/PHC-EMIT';
64
65    numPinholeMeas = 20;
66    pauseTimePinhole_s = 1;
67    sumSigX = 0;
68    sumSigZ = 0;
69    sumEmitX = 0;
70    sumEmitZ = 0;
71    sumCoupling = 0;
72    for j = 1:numPinholeMeas
73        sumSigX = sumSigX + readattribute([devemit '/SrcPointSigmaH']);
74        sumSigZ = sumSigZ + readattribute([devemit '/SrcPointSigmaV']);
75        sumEmitX = sumEmitX + readattribute([devemit '/EmittanceH']);
76        sumEmitZ = sumEmitZ + readattribute([devemit '/EmittanceV']);
77        sumCoupling = sumCoupling + readattribute([devemit '/Coupling']);
78        pause(pauseTimePinhole_s);
79    end
80    inStructElecBeam.SigX = sumSigX/numPinholeMeas;
81    inStructElecBeam.SigZ = sumSigZ/numPinholeMeas;
82    inStructElecBeam.EmitX = sumEmitX/numPinholeMeas;
83    inStructElecBeam.EmitZ = sumEmitZ/numPinholeMeas;
84    inStructElecBeam.Coupling = sumCoupling/numPinholeMeas;
85end
86
87inStructElecBeam.date = datestr(now); % convert date to string
88outStructElecBeam = inStructElecBeam;
89
90if dispData ~= 0
91        fprintf('I = %f\n', outStructElecBeam.current);
92    %fprintf('Tau = %f\n', outStructElecBeam.tau);
93    %fprintf('P=%d\n',pres)
94    fprintf('nux = %f\n', outStructElecBeam.tune(1));
95    fprintf('nuz = %f\n', outStructElecBeam.tune(2));
96    fprintf('ksix = %f\n', outStructElecBeam.ksi(1));
97    fprintf('ksiz = %f\n', outStructElecBeam.ksi(2));
98   
99    if inclSizeMeas ~= 0
100        fprintf('SigX = %f;  EmitX = %f\n', inStructElecBeam.SigX, inStructElecBeam.EmitX);
101        fprintf('SigZ = %f;  EmitZ = %f\n', inStructElecBeam.SigZ, inStructElecBeam.EmitZ);
102        fprintf('Coupling = %f\n', inStructElecBeam.Coupling);
103    end
104end
105
Note: See TracBrowser for help on using the repository browser.