PRO SUB_SURFACE_CORRECT_AK19, region, TYPE, INARRAY, OUTARRAY, SURFI ;locate water surface and correct data array ;TYPE is type of surface algorithm ;0 is peak detection ;1 is maximum slope ;>1 is peak/100 + TYPE samples to get peak near surface ;<0 is shitf array using -TYPE as SURFI ;INARRAY is initial array ;OUTARRAY is corrected array ;SURFI is surface sample number inarray2 = reform(inarray) SLOPE = FLTARR(2000) if region eq 'sea' then OUTARRAY = FLTARR(506) else OUTARRAY = fltarr(1335) if type eq 0 then begin surf = max(inarray,surfi) endif ;IF TYPE EQ 0 THEN BEGIN ; background = mean(inarray2[1900:1999]) ; high_signal = where(inarray2 gt 10*background) ; high_signal[-1] is last value ; if high_signal[0] lt 500 then surfi = 0 else begin ; SURF = MAX(INARRAY[high_signal[-1]-fix(30.0/0.1089):high_signal[-1]], SURFI) ; SURFI = SURFI + high_signal[-1] - fix(30.0/0.1089) ; endelse ;ENDIF IF TYPE EQ 1 THEN BEGIN FOR J = 2, 1997 DO BEGIN SLOPE[J] = mean(INARRAY[J+1:J+2]) - mean(INARRAY[J-2:J-1]) ENDFOR SURF = MAX(SLOPE, SURFI) ENDIF IF TYPE GT 1 THEN BEGIN SURF = MAX(INARRAY, SURFI) SURFI = SURFI>2 I = SURFI WHILE ((INARRAY[I-1] GT 0.1*INARRAY[SURFI]) $ AND (I GT 2)) DO I = I - 1 SURFI = I + TYPE ENDIF ;make sure SURFI is within range of data ;SURFI = SURFI > 46 ;SURFI = SURFI < 540 if type lt 0 then surfi = -type ; calculate surface-corrected arrays if surfi gt 0 then begin if region eq 'sea' then begin FOR I = 0>(46-surfi), 505<(1999-surfi+46) DO BEGIN OUTARRAY[I] = INARRAY[I+SURFI-46] ;starts 46 samples above surface ENDFOR endif else begin FOR I = 0, 1334