source: MML/trunk/machine/SOLEIL/StorageRing/insertions/IDStarter/idAuxCalcIndMeasAtGivenUndParams.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: 2.0 KB
Line 
1function absIndFound = idAuxCalcIndMeasAtGivenUndParams(allUndParams, undParamsToFind)
2%Calculates absolute flat index of element in multi-dim. array of undulator parameters
3%list of all un. params to look through: allUndParams = {{'phase', [-40, -20, 0, 20, 40]}, {'gap', [15.5, 25]}}
4%undulator parameters to find: undParamsToFind = {{'gap', 15.5}, {'phase', 40}}
5
6numAllParams = length(allUndParams);
7numParamsToFind = length(undParamsToFind);
8
9%maxNumParams = 3;
10if(numAllParams <= 0) %|| (numAllParams > maxNumParams))
11    absIndFound = -1;
12    return;
13end
14if(numParamsToFind <= 0) %|| (numParamsToFind > maxNumParams))
15    absIndFound = -1;
16    return;
17end
18if(numAllParams ~= numParamsToFind)
19    absIndFound = -1;
20    return;   
21end
22
23arPerInd = zeros(numAllParams, 1);
24%fill-in array of periods
25arPerInd(numAllParams) = 1;
26prodSizes = 1;
27for i = 1:(numAllParams - 1)
28        curParamInf = allUndParams{numAllParams - i + 1};
29    curParamValues = curParamInf{2};
30    prodSizes = prodSizes*length(curParamValues);
31    arPerInd(numAllParams - i) = prodSizes;
32end
33
34absIndFound = -1;
35absIndCount = 0;
36%prevRelInd = -1;
37for i = 1:numAllParams
38    curParamInf = allUndParams{i};
39    curParamName = curParamInf{1};
40   
41    carParamValueToFind = 1e+23;
42    for j = 1:numParamsToFind
43        curParamToFindInf = undParamsToFind{j};
44        curParamNameToFind = curParamToFindInf{1};
45        if(strcmp(curParamName, curParamNameToFind))
46            carParamValueToFind = curParamToFindInf{2};
47            break;
48        end
49    end
50    if(carParamValueToFind == 1e+23)
51       return;
52    end
53    curParamValues = curParamInf{2};
54    numCurParamValues = length(curParamValues);
55    absMinDif = 1e+23;
56    indMinDif = -1;
57    for k = 1:numCurParamValues
58        curAbsDif = abs(curParamValues(k) - carParamValueToFind);
59        if(absMinDif > curAbsDif)
60            absMinDif = curAbsDif;
61            indMinDif = k;
62        end
63    end
64    %prevRelInd = indMinDif;
65    absIndCount = absIndCount + (indMinDif - 1)*arPerInd(i);
66end
67absIndFound = absIndCount + 1;
Note: See TracBrowser for help on using the repository browser.