1 | function [vI1x, vI2x, vI1z, vI2z, vKickX1, vKickX2, vKickZ1, vKickZ2] = idCalcFldIntFromElecBeamMeasForUndSOLEIL(idName, dirMeasData, fileNamesMeasMain, fileNamesMeasBkgr, dirModel, arIndsBPMsToSkip, kick2x_rad, kick2z_rad) |
---|
2 | |
---|
3 | %Calculates effective first and second horizontal and vertical field |
---|
4 | %integrals of SOLEIL undulators from COD |
---|
5 | |
---|
6 | GeomParUnd = idGetGeomParamForUndSOLEIL(idName); |
---|
7 | |
---|
8 | ElecBeamModelData = idReadElecBeamModel(dirModel); |
---|
9 | [mCODx, vR0x] = idCreateModelOrbDistMatr('x', ElecBeamModelData, GeomParUnd); |
---|
10 | [mCODz, vR0z] = idCreateModelOrbDistMatr('z', ElecBeamModelData, GeomParUnd); |
---|
11 | |
---|
12 | numMeas = length(fileNamesMeasMain); |
---|
13 | numMeasBkgr = length(fileNamesMeasBkgr); |
---|
14 | if(numMeas ~= numMeasBkgr) |
---|
15 | sprintf('Inconsistent numbers of the main and background measurements\n'); |
---|
16 | return; |
---|
17 | end |
---|
18 | |
---|
19 | vI1x = zeros(numMeas, 1); |
---|
20 | vI2x = zeros(numMeas, 1); |
---|
21 | vI1z = zeros(numMeas, 1); |
---|
22 | vI2z = zeros(numMeas, 1); |
---|
23 | vKickX1 = zeros(numMeas, 1); |
---|
24 | vKickX2 = zeros(numMeas, 1); |
---|
25 | vKickZ1 = zeros(numMeas, 1); |
---|
26 | vKickZ2 = zeros(numMeas, 1); |
---|
27 | |
---|
28 | if strcmp(dirMeasData, '') |
---|
29 | dirMeasData = getfamilydata('Directory',idName); |
---|
30 | end |
---|
31 | |
---|
32 | for i = 1:numMeas |
---|
33 | dirStart = pwd; |
---|
34 | |
---|
35 | %if strcmp(dirMeasData, '') == 0 |
---|
36 | cd(dirMeasData); |
---|
37 | %end |
---|
38 | |
---|
39 | %ElecBeamMeasMain = load(char(fileNamesMeasMain(i))); |
---|
40 | %ElecBeamMeasBkgr = load(char(fileNamesMeasBkgr(i))); |
---|
41 | ElecBeamMeasMain = load(fileNamesMeasMain{i}); |
---|
42 | ElecBeamMeasBkgr = load(fileNamesMeasBkgr{i}); |
---|
43 | |
---|
44 | cd(dirStart); |
---|
45 | |
---|
46 | [vI1x(i), vI2x(i), vI1z(i), vI2z(i)] = idCalcFldIntFromElecBeamMeas(ElecBeamMeasMain, ElecBeamMeasBkgr, mCODx, mCODz, arIndsBPMsToSkip, GeomParUnd.idLen, GeomParUnd.idKickOfst, ElecBeamModelData.E, kick2x_rad, kick2z_rad, vR0x, vR0z); |
---|
47 | |
---|
48 | DX_Meas = ElecBeamMeasMain.X - ElecBeamMeasBkgr.X; |
---|
49 | DZ_Meas = ElecBeamMeasMain.Z - ElecBeamMeasBkgr.Z; |
---|
50 | KicksX = idLeastSqLinFit(mCODx, DX_Meas, arIndsBPMsToSkip); |
---|
51 | KicksZ = idLeastSqLinFit(mCODz, DZ_Meas, arIndsBPMsToSkip); |
---|
52 | vKickX1(i) = KicksX(1); |
---|
53 | vKickX2(i) = KicksX(2); |
---|
54 | vKickZ1(i) = KicksZ(1); |
---|
55 | vKickZ2(i) = KicksZ(2); |
---|
56 | end |
---|
57 | |
---|
58 | |
---|