pro process_cips_v5, orbit_info_array, ret_info, just_1a=just_1a, NO_3A=NO_3A, no_raa=no_raa

  cam_px_level_1a_image_server = obj_new('level_1A_image_server', self, "px")
  cam_mx_level_1a_image_server = obj_new('level_1A_image_server', self, "mx")
  cam_py_level_1a_image_server = obj_new('level_1A_image_server', self, "py")
  cam_my_level_1a_image_server = obj_new('level_1A_image_server', self, "my")

  days = orbit_info_array.mission_day
  uniq_days = days[uniq(days[sort(days)])]

  ; process each day
  for day_idx=0, (n_elements(uniq_days)-1) do begin

    curr_day = string(uniq_days[day_idx], format='(i04)')
    print, 'PROCESSING AIM MISSION DAY ', curr_day, '...'

    ; process current day's orbits
    curr_day_idx = where(uniq_days[day_idx] eq orbit_info_array.mission_day, n_idx)
    if n_idx gt 0 then begin

      curr_orbits = orbit_info_array[curr_day_idx]
      ; process each orbit
      for orbit_idx=0, (n_elements(curr_orbits)-1) do begin
        ;-------------------------------------------------
        ;               catch, error_status
        ;               if error_status ne 0 then begin
        ;                  PRINT, STRMESSAGE( error_status, /NAME )
        ;                  catch, /cancel
        ;                  handle_error, error_status
        ;                  if get_debug_level() gt 9 then check_memory
        ;                  continue
        ;               endif

        px_images = cam_px_level_1a_image_server->get_data(curr_orbits[orbit_idx], /net_cdf)
        str_free, px_images
        px_images = 0
        mx_images = cam_mx_level_1a_image_server->get_data(curr_orbits[orbit_idx], /net_cdf)
        str_free, mx_images
        mx_images = 0
        py_images = cam_py_level_1a_image_server->get_data(curr_orbits[orbit_idx], /net_cdf)
        str_free, py_images
        py_images = 0
        my_images = cam_my_level_1a_image_server->get_data(curr_orbits[orbit_idx], /net_cdf)
        str_free, my_images
        my_images = 0

        check_memory

      endfor

    endif
    print, 'FINISHED PROCESSING DAY ', string(uniq_days[day_idx], format='(i0)')
    print
  endfor
  obj_destroy, cam_px_level_1a_image_server
  obj_destroy, cam_mx_level_1a_image_server
  obj_destroy, cam_px_level_1a_image_server
  obj_destroy, cam_px_level_1a_image_server
  if keyword_set(just_1a) then return

  ; this is the new, v5.0 retrieval
  print, get_routine_name() + '  path before proc_all_ci_ret: ' + !path 
  proc_all_level_1p, 'north_2022', /time ;added for v5.2

  ; moved this to run before proc_all_ci_ret since the PMC processing
  ; fails in the early season before PMC's show up.
  IF ~KEYWORD_SET( no_raa ) THEN BEGIN
     print, 'Starting RAA retrieval...'
     ;season = 'north_2018'
     proc_all_raa_ret, 'north_2022'
  endif else begin
     print, 'RAA Retrieval was skipped ...'
  endelse

  proc_all_ci_ret, 'north_2022', /time, /status, /write_png, /preliminary
;  proc_all_ci_ret, 'north_2021', /time, /status, /write_png
;;; JVC removed the line below on April 9, 2018 to run RAA v1.1 which is
;;; incompatible with this version of RAA
  ;proc_all_ci_ret, 'south_2017', /status, /write_png ;this is for L2 v5.1
  ; This step is no longer needed because it is done by 'proc_all_ci_ret'
;  generate_l2_orbit_strip, orbit_info_array

  ; process each day
  print, get_routine_name() + '  path before level_3A_daisy_server: ' + !path 
  IF ~KEYWORD_SET( NO_3A ) THEN BEGIN
;    l3a_daisy_v52, orbit_info_array, /pca_preliminary
    l3a_daisy_v52, orbit_info_array
;    L3A = obj_new('level_3A_daisy_server', obj_new())
;    days = orbit_info_array.mission_day
;    uniq_days = days[uniq(days[sort(days)])]
;
;    for day_idx=0, (n_elements(uniq_days)-1) do begin
;
;      curr_day = string(uniq_days[day_idx], format='(i04)')
;      print, 'PROCESSING AIM MISSION DAY ', curr_day, '...'
;
;      ; daily daisy
;      ; process each day
;      result = L3A->get_data( orbit_info_array, /net_cdf )
;      str_free, result
;      result=0
;      heap_gc
;      print, 'FINISHED PROCESSING DAY ', string(uniq_days[day_idx], format='(i0)')
;      print
;
;    endfor ; next day
;    obj_destroy, L3A
  endif ; ~ no 3A

  print, "Maximum memory used was: ", MEMORY( /HIGHWATER )

  return

end

