imacntplot.pro 3.5 KB
pro imacntplot, Mission, azMin, azMax, enMin, enMax, elevation

  common GraphC, Graph, GraphN, Item
  common Etab, FlagVex, EtabVex, FlagMex, EtabMex

   ;------- Energy table -----------------
    if (Mission eq 'vex') then Tab = fix(*EtabVex[0].val) else Tab = fix(*EtabMex[0].val);
    EnNum = 96
    Energy = fltarr(EnNum)
     
    RetSize = call_external(!PROJLIB + 'imainfo.so','GetImaEner_idl', Energy, Tab[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


  ;  FillValue = Graph[GraphN].FillValue[0]
;--------------------- 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, 16, 96, 16, N_Time))  
      LocVal =  azMax GT azMin ? total(total(Val[azMin:azMax,*,0:15, *],1),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, 16, 96, N_Time));
      LocVal =  azMax GT azMin ? total(Val[azMin:azMax,*,*],1) : 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
;--------------------------------------------------------------------