icacntplot.pro 3.61 KB
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
;--------------------------------------------------------------------