;docformat='rst' ;+ ; Manages CIPS production processing: sets production flag, calls process_cips.pro ; and sends PAN's to the PDC. ; ; :Author: ; Brian Templeman ; ;- ;+ ; :Params: ; orbit_info_array: in, required, structure ; the start time in as an AIM date; ; will be in year day format if yd keyword is set ; ret_info: out, required, structure ; the structure in which the output data is returned ; ; :Keywords: ; NO_3A: optional, boolean, optional ; if set do not do 3A processing ; just_1a: optional, boolean, optional ; if set do only 1a processing ; just_1b: optional, boolean, optional ; if set do only 1b processing. ignored if 1a processing is set ;- ;+ ; :Examples: ; run_cips, orbit_info_array, ret_info ;- pro process_cips, orbit_info_array, ret_info, just_1a=just_1a, NO_3A=NO_3A, just_1b=just_1b if keyword_set(just_1a) then begin 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 return endif if keyword_set(just_1b) then begin L1B = obj_new(' level_1b_stack_server', obj_new()) 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] 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 ; function level_1b_stack_server::get_data, orbit_info, $ ; kmperpix=kmperpix, rel_path=rel_path, $ ; net_cdf=net_cdf, l1a_server_name=l1a_server_name, $ ; stack_info=stack_info, image_info=image_info result = L1b->get_data(curr_orbits[orbit_idx], /net_cdf, ret_info=ret_info, stack_info=default_stack_info()) ; memory leak management str_free, result endfor ; next orbit return endif ENDFOR ENDIF L2 = obj_new('level_2a_petal_server', obj_new()) L3A = obj_new('level_3A_daisy_server', obj_new()) 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] 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 result = L2->get_data(curr_orbits[orbit_idx], /net_cdf, ret_info=ret_info, stack_info=default_stack_info()) ; memory leak management str_free, result endfor ; next orbit endif IF ~KEYWORD_SET( NO_3A ) THEN BEGIN ; daily daisy ; process each day result = L3A->get_data( curr_orbits, /net_cdf) str_free, result result=0 heap_gc ENDIF print, 'FINISHED PROCESSING DAY ', string(uniq_days[day_idx], format='(i0)') print endfor ; next day obj_destroy, L2 IF ~KEYWORD_SET( NO_3A ) THEN obj_destroy, L3A print, "Maximum memory used was: ", MEMORY( /HIGHWATER ) return end