source: MML/trunk/machine/SOLEIL/StorageRing/insertions/idCalcFeedForwardCorTables.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 [mCHE, mCVE, mCHS, mCVS] = idCalcFeedForwardCorTables(idName, idParams, fileNamesMeasCOD, dirMeasCOD, dirMeasCorResp, arIndsBPMsToSkip)
2%Calculate Feed-Forward Correction Tables vs Undulator Parameters for 2 Horizontal and 2 Vertical correctors.
3%NOTE: Horizontal correctors are those displacing electron orbit in Horizontal direction (by means of Vertical magnetic field)
4
5mCHE = []; mCVE = []; mCHS = []; mCVS = [];
6
7numUndParams = length(idParams);
8if((numUndParams < 0) || (numUndParams > 2))
9    sprintf('Number of ID parameters for the correction tables should be 1 or 2');
10    return;
11end
12
13numValsUndParam1 = length(idParams{1}{2});
14undParamName1 = idParams{1}{1};
15
16numValsUndParam2 = 1;
17undParamName2 = '';
18if(numUndParams > 1)
19    numValsUndParam2 = length(idParams{2}{2});
20    undParamName2 = idParams{2}{1};
21end
22
23if((numValsUndParam2 <= 1) && (strcmp(undParamName2, '') ~= 0))
24    numValsUndParam2 = 1;
25    undParamName2 = 'dummy';
26end
27
28mCHE = zeros(numValsUndParam2, numValsUndParam1);
29mCVE = zeros(numValsUndParam2, numValsUndParam1);
30mCHS = zeros(numValsUndParam2, numValsUndParam1);
31mCVS = zeros(numValsUndParam2, numValsUndParam1);
32
33mCorRespX = zeros(120, 2);
34mCorRespZ = zeros(120, 2);
35
36corEfficiencyDependsOnUndParam = 1;
37if((strcmp(undParamName1, 'gap') == 0) && (strcmp(undParamName2, 'gap') == 0))
38        [mCorRespX, mCorRespZ] = idCalcCorRespMatr(idName, 0, dirMeasCorResp);
39        corEfficiencyDependsOnUndParam = 0;
40elseif((strcmp(undParamName1, 'gap') ~= 0) && (strcmp(undParamName2, '') ~= 0))
41        [mCorRespX, mCorRespZ] = idCalcCorRespMatr(idName, 0, dirMeasCorResp);
42    mCorRespXgl = zeros(120, 2);
43    mCorRespZgl = zeros(120, 2);
44        [mCorRespXgl, mCorRespZgl] = idCalcCorRespMatr(idName, 250, dirMeasCorResp);
45    corEfficiencyDependsOnUndParam = 0;
46    for i = 1:length(mCorRespX)
47        if((mCorRespXgl(i,1) ~= mCorRespX(i,1)) || (mCorRespXgl(i,2) ~= mCorRespX(i,2)))
48            corEfficiencyDependsOnUndParam = 1;
49            break;
50        end
51        if((mCorRespZgl(i,1) ~= mCorRespZ(i,1)) || (mCorRespZgl(i,2) ~= mCorRespZ(i,2)))
52            corEfficiencyDependsOnUndParam = 1;
53            break;
54        end
55    end
56end
57
58indMeasCOD = 1;
59for i = 1:numValsUndParam1
60    undParam1 = idParams{1}{2}(i);
61    if(corEfficiencyDependsOnUndParam)
62        if(strcmp(undParamName1, 'gap'))
63            [mCorRespX, mCorRespZ] = idCalcCorRespMatr(idName, undParam1, dirMeasCorResp);
64        end
65    end
66
67    for j = 1:numValsUndParam2
68        undParam2 = 0;
69        if(numUndParams > 1)
70            undParam2 = idParams{2}{2}(j);
71        end
72        if(corEfficiencyDependsOnUndParam)
73            if(strcmp(undParamName2, 'gap'))
74                [mCorRespX, mCorRespZ] = idCalcCorRespMatr(idName, undParam2, dirMeasCorResp);
75            end
76        end
77
78        fileNameMeasMain = char(fileNamesMeasCOD{indMeasCOD}{1});
79        fileNameMeasBkg = char(fileNamesMeasCOD{indMeasCOD}{2});
80
81        dirStart = pwd;
82        if strcmp(dirMeasCOD, '')
83            dirMeasCOD = getfamilydata('Directory',idName);
84        end
85        cd(dirMeasCOD);
86        stMeasMain = load(fileNameMeasMain);
87        stMeasBkg = load(fileNameMeasBkg);
88        cd(dirStart);
89
90        vCODx = stMeasMain.X - stMeasBkg.X;
91        curCorX = idLeastSqLinFit(mCorRespX, vCODx, arIndsBPMsToSkip);
92
93        vCODz = stMeasMain.Z - stMeasBkg.Z;
94        curCorZ = idLeastSqLinFit(mCorRespZ, vCODz, arIndsBPMsToSkip);
95
96        mCHE(j, i) = -curCorX(1);
97        mCVE(j, i) = -curCorZ(1);
98        mCHS(j, i) = -curCorX(2);
99        mCVS(j, i) = -curCorZ(2);
100        indMeasCOD = indMeasCOD + 1;
101    end
102end
103
104if(numUndParams > 1)
105    fprintf('VERTICAL dimension in tables (i.e. row no. is variable; column no. is const) corresponds to variation of  %s\n', undParamName2);
106    fprintf('HORIZONTAL dimension in tables (i.e. row no. is const; column no. is variable) corresponds to variation of  %s\n', undParamName1);
107end
Note: See TracBrowser for help on using the repository browser.