get_multi.pro
3.73 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
;;
;---------------------------------------
pro GET_MULTI, st, dt
common Multi_Commom, getStart, N_VIs, DataCommon
common GraphC, graph, GraphN, Item
FillValue = !Values.F_NAN
StartTime = call_external(!DDLIB +'DD_idl.so','GetDTime', st, /D_VALUE)
TimeCalc = dindgen(Graph[GraphN].ppp)*Graph[GraphN].Step + StartTime + Graph[GraphN].Step/2.0;
k = 0;
for i = 0, N_VIs[graphN] - 1 do begin
if(Graph[GraphN].CurrentSec EQ Graph[GraphN].Sections-1) then $
*(DataCommon[i, GraphN].data) = Call_Function(DataCommon[i, GraphN].name, st, dt, Time, RetSize, Sampling, /close) $
else *(DataCommon[i, GraphN].data) = Call_Function(DataCommon[i, GraphN].name, st, dt, Time, RetSize, Sampling)
if (RetSize GT 0) then begin
;
; Different processing if 1D array and RetSize = 1
;
Yinfo = size(*DataCommon[i, GraphN].data);
if (Yinfo[0] eq 1) then begin
if (RetSize gt 1) then begin
(*DataCommon[i, GraphN].data) = reform((*DataCommon[i, GraphN].data),1, RetSize);
DataCommon[i, GraphN].size[1] = 1;
endif else (*DataCommon[i, GraphN].data) = reform((*DataCommon[i, GraphN].data), Yinfo[1], RetSize);
endif else DataCommon[i, GraphN].size[1] = Yinfo[1]
*(DataCommon[i, GraphN].Time) = Time;
; Several data sections
if (Graph[GraphN].Sections gt 1) then begin
if (N_elements(*(DataCommon[i, GraphN].LastTime)) GT 0) then $
if (*(DataCommon[i, GraphN].LastTime) LT Time[0]) then begin
*(DataCommon[i, GraphN].Time) = [*(DataCommon[i, GraphN].LastTime),Time]
TempArr = fltarr(DataCommon[i, GraphN].size[1],Retsize+1)
TempArr[*,0] = *(DataCommon[i, GraphN].LastData)
TempArr[*,1:*] = *(DataCommon[i, GraphN].data)
*(DataCommon[i, GraphN].data) = TempArr
*(DataCommon[i, GraphN].LastTime) = Time[RetSize-1];
*(DataCommon[i, GraphN].LastData) = (*DataCommon[i, GraphN].data)[*,RetSize-1];
RetSize += 1;
endif else begin
*(DataCommon[i, GraphN].LastTime) = Time[RetSize-1];
*(DataCommon[i, GraphN].LastData) = (*DataCommon[i, GraphN].data)[*,RetSize-1];
endelse
endif ; if (Graph[GraphN].Sections gt 1)
TempArr = 0.0
endif ; if (RetSize GT 0)
DataCommon[i, GraphN].size[0] = RetSize;
DataCommon[i, GraphN].Sampling = Sampling;
if (DataCommon[i, GraphN].Sampling LT Graph[GraphN].Step/2.0) then begin
Y = reform(replicate(FillValue, DataCommon[i, GraphN].size[1]*Graph[GraphN].ppp), DataCommon[i, GraphN].size[1], Graph[GraphN].ppp);
Flag = intarr(N_elements(TimeCalc));
averaging_, *(DataCommon[i, GraphN].time), *(DataCommon[i, GraphN].data), TimeCalc, Y, Flag;
*DataCommon[i, GraphN].data = Y;
*(DataCommon[i, GraphN].Time) = TimeCalc;
endif
indices = *(DataCommon[i, GraphN].indices);
if (N_Elements(indices) gt 0) then begin
for j = 0, N_Elements(indices) - 1 do begin
*(Graph[GraphN].Val)[k] = getStart[GraphN] ? [*(Graph[GraphN].Val)[k],reform((*DataCommon[i, GraphN].data)[indices[j],*])] : reform((*DataCommon[i, GraphN].data)[indices[j],*]);
*(Graph[GraphN].Time)[k] = getStart[GraphN] ? [*(Graph[GraphN].Time)[k], *(DataCommon[i, GraphN].Time)-Graph[GraphN].TimeBase] : *(DataCommon[i, GraphN].Time)-Graph[GraphN].TimeBase;
k += 1;
endfor
endif else begin
*(Graph[GraphN].Val)[k] = getStart[GraphN] ? [*(Graph[GraphN].Val)[k],*(DataCommon[i, GraphN].data)] : *(DataCommon[i, GraphN].data);
*(Graph[GraphN].Time)[k] = getStart[GraphN] ? [*(Graph[GraphN].Time)[k], *(DataCommon[i, GraphN].Time)-Graph[GraphN].TimeBase] : *(DataCommon[i, GraphN].Time)-Graph[GraphN].TimeBase;
k += 1;
endelse
endfor
Graph[GraphN].DataFlags = 1
Graph[GraphN].ErrorFlag = 0
getStart[GraphN] = 1;
return
end