icacntplot.pro
3.61 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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
pro icacntplot, azMin, azMax, enMin, enMax, elevation
common GraphC, Graph, GraphN, Item
common Etab, Flag, ETab
;------- Energy table -----------------
Tab = fix(*ETab[0].val);
VI = "ros:ica:all";
ID = Long(graph[GraphN].DataID[Item]);
EnNum = 96
Energy = fltarr(EnNum)
numTab = uniq(Tab,sort(Tab));
uniqTab = Tab[numTab];
temp = fltarr(96L,2L);
err = call_external(!PROJLIB + '/libParam.so', 'getInfo', $
ID, VI, "Energy", 2L*96L, temp)
Energy = temp[*, uniqTab[0]];
Energy = temporary(Energy(where(Energy GT 0)));
EnNum = N_elements(Energy)
;-------- Cat in the Energy range ------------
E0 = min(Energy)
E1 = max(Energy)
eindex = where((Energy GE E0) AND $
(Energy LE E1) AND $
(Energy GT 0.0),counte)
if counte GT 0 then begin
EBounds = fltarr(EnNum+1)
EBounds(min(eindex)) = Energy(min(eindex))
EBounds(max(eindex+1)) = Energy(max(eindex))
for ie = min(eindex+1), max(eindex) do EBounds(ie) = sqrt(Energy(ie-1)*Energy(ie))
endif else return
;--------------------- No DATA - just axes -----------------------
if (N_Elements(*Graph[GraphN].Time[0]) eq 0) then begin
nodata
return
endif
Time = (*Graph[GraphN].Time[0])
Val = (*Graph[GraphN].Val[0])
N_Time = N_elements(Time);
if (elevation) then begin
Val = temporary(reform(Val, 96, 16, 16, N_Time))
LocVal = azMax GT azMin ? total(total(Val[*, azMin:azMax, 0:15, *],2),2) : reform(total(Val[*,azMin,0:15,*],3), 96, N_time);
newTime = Time;
deltaT = 96.0;
gapT = deltaT*10.0 ;
endif else begin
; elevation as TIME
newTime = dblarr(N_Time*16);
for i = 0, N_Time - 1 do for j = 0, 15 do newTime[i*16 + j] = Time[i] + j*12.D0
N_Time *= 16;
Val = temporary(reform(Val, 96, 16, N_Time));
LocVal = azMax GT azMin ? total(Val[*,azMin:azMax,*],2) : reform(Val[*,azMin,*], 96, N_time);
deltaT = 6.0;
gapT = deltaT*10.0;
endelse
num0 = where(EBounds ge enMin, Index0);
num1 = where(EBounds ge enMax, Index1);
if (Index1 eq 0) then numStop = 0 else numStop = num1[Index1-1];
if (Index0 eq EnNum+1) then numStart = 95 else numStart = num0[Index0-1];
Data = numStart ne numStop ? total(LocVal[numStop:numStart,*],1) : reform(LocVal[numStart,*], N_Time);
numMinMax = where(finite(Data), IndexMinMax)
MinVal = min(Data[numMinMax]) > 0.1;
MaxVal = max(Data[numMinMax]);
if Graph[GraphN].Ly.range[0] eq Graph[GraphN].Ly.range[1] then begin
Graph[GraphN].Ly.range = Graph[GraphN].AxisF eq 'logaxis' ? [MinVal, MaxVal] : [0.0, MaxVal]
Graph[GraphN].Ly.style = 0
endif else Graph[GraphN].Ly.style = 1
!y = Graph[GraphN].Ly;
if (execute(Graph[GraphN].AxisF) NE 1) then plot, newTime, Data, MAX_VALUE=MaxValue, color = !dnc-1, /NODATA, /NOERASE
plots, newTime[0]+deltaT, Data[0], /DATA
for i = 1, N_elements(newTime) - 1 do begin
if (newTime[i] LE Graph[GraphN].TotalTime) then begin
if (data[i] lt Graph[GraphN].Ly.range[0]) then data[i] = Graph[GraphN].Ly.range[0];
if (data[i] gt Graph[GraphN].Ly.range[1]) then data[i] = Graph[GraphN].Ly.range[1];
if (newTime[i] - newTime[i-1] LE gapT) then $
plots, newTime[i]+deltaT, data[i], color=col, /CONTINUE, /DATA $
else plots, newTime[i]+deltaT, data[i], /DATA
endif
endfor
return
end
;--------------------------------------------------------------------