;+
; NAME:
;    SPINMODEL_GET_INFO.PRO
;
; PURPOSE:
;    Given a probe string or spinmodel pointer, return information
;    about the valid time range or shadow times.
;
; CATEGORY:
;   TDAS
;
; CALLING SEQUENCE:
;   spinmodel_get_info,model=modelptr,min_shadow_duration=min_shadow_duration,$
;      shadow_count=shadow_count, $
;      shadow_start=shadow_start,shadow_end=shadow_end,$
;      start_time=start_time, end_time=end_time
;
;  INPUTS:
;    Model: pointer to s spinmodel structure
;    Probe: a string identifying the probe.
;       The caller must specify either a model pointer or probe string.
;    min_shadow_duration: Optional parameter specifying the minimum
;       gap between BAU sun sensor crossing times to be considered a shadow 
;       interval. Defaults to 60.0 sec.
;
;  OUTPUTS: (all optional)
;    shadow_count: Number of shadow intervals found.
;    shadow_start: Double precision array of shadow start times.
;    shadow_end: Double precision array of shadow end times.
;    start_time: Double precision scalar indicating start time
;       of loaded spinmodel data
;    end_time: Double precision scalar indicating end time of
;       loaded spinmodel data 
;
;  PROCEDURE:
;     Shadow intervals consist of spinmodel segments where the
;       "maxgap" parameter exceeds the min_shadow_duration threshold.
;     Start time is the start time of the first segment.
;     End time is the end time of the last segment.
;     If no spinmodel data is loaded for the requested probe,
;     start_time = end_time = 0.0D.
;     If no shadows are found, shadow_count is set to zero and
;     no start/end times are returned.
;  
;  EXAMPLE:
;     timespan,'2007-03-23',1,/days
;     thm_load_state,probe='a',/get_support_data
;
;     spinmodel_get_info,probe='a',shadow_count=shadow_count,$
;       shadow_start=shadow_start, shadow_end=shadow_end,$
;       start_time=start_time,end_time=end_time
;
;-

pro spinmodel_get_info,model=model,probe=probe,min_shadow_duration=min_shadow_duration,$
   shadow_count=shadow_count,shadow_start=shadow_start,shadow_end=shadow_end,$
   start_time=start_time,end_time=end_time

  if ((n_elements(model) GT 1) OR (n_elements(probe) GT 1)) then begin
     message,'Multiple probes not supported'
  end
 
  if keyword_set(probe) then begin
     valid_probes=['a','b','c','d','e','f'] 
     idx=where(strcmp(probe,valid_probes) EQ 1,count)
     if (count NE 1) then begin
        message,'Unrecognized probe string: valid choices are ''a'',''b'',''c'',''d'',''e'', or ''f'' '
     end
  end

  if keyword_set(model) then begin
     mptr=model
  endif else if keyword_set(probe) then begin
     mptr=spinmodel_get_ptr(probe)
  endif else begin
     message,'No model or probe string specified'
  endelse

  ; If no state support data is loaded yet for *any* probe, spinmodel_get_ptr
  ; returns null.

  if ~obj_valid(mptr) then begin
     if arg_present(shadow_count) then shadow_count = 0L
     if arg_present(start_time) then start_time=0.0D
     if arg_present(end_time) then end_time=0.0D
     return
  end
 
  if ~keyword_set(min_shadow_duration) then min_shadow_duration = 60.0D

  mptr->get_info,min_shadow_duration=min_shadow_duration,$
   shadow_count=shadow_count,shadow_start=shadow_start,shadow_end=shadow_end,$
   start_time=start_time,end_time=end_time
end