get_multi.pro 3.73 KB
;;
;---------------------------------------

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