Utilities/post_merge_TL_check.pl
author A.M. Thurnherr <athurnherr@yahoo.com>
Thu, 16 Mar 2017 11:53:27 -0400
changeset 48 d9309804b6cf
parent 11 9e5eba6992f7
permissions -rw-r--r--
V1.3 release
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
11
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     1
#======================================================================
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     2
#                    U T I L I T I E S / P O S T _ M E R G E _ T L _ C H E C K . P L 
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     3
#                    doc: Wed Oct 12 10:23:58 2011
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     4
#                    dlm: Wed Oct 17 12:06:02 2012
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     5
#                    (c) 2011 A.M. Thurnherr
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     6
#                    uE-Info: 33 15 NIL 0 0 72 2 2 4 NIL ofnI
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     7
#======================================================================
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     8
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     9
# HISTORY:
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    10
#	Oct 12, 2012: - created as an experimental time-lagging filter
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    11
#	Oct 17, 2012: - turned into this utility
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    12
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    13
#----------------------------------------------------------------------
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    14
# This code is used to verify (or improve) time lagging
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    15
#	- for each ensemble, a "narrow-band" time lagging is performed
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    16
#	  to determine the optimal scan offset
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    17
#	- time-lag window is taken from 2nd value of -w
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    18
#	- max search radius is hard-coded in $scan_offset_search_window
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    19
#----------------------------------------------------------------------
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    20
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    21
$post_merge_hook = sub {							# arguments: firstGoodEns, lastGoodEns
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    22
	my($fe,$le) = @_;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    23
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    24
	progress("Writing optimal lags for all ensembles to $data_subdir/$out_basename.TLcheck...\n");
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    25
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    26
	my($scan_offset_search_window) = 10;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    27
	my($ew_hwidth) =								# window half-width in ensembles
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    28
		int($length_of_timelag_windows[1]/2 / $LADCP{MEAN_DT} + 0.5);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    29
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    30
	my(@mad,$nsamp);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    31
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    32
	@antsNewLayout = ('ensemble','best_scan_offset','mad');
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    33
	open(STDOUT,">$data_subdir/$out_basename.TLcheck")
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    34
		|| croak("$data_subdir/$out_basename.TLcheck: $!\n");
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    35
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    36
	for (my($e)=$fe; $e<=$le; $e++) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    37
		next unless numberp($LADCP{ENSEMBLE}[$e]->{CTD_DEPTH});						# skip non-valid
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    38
		
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    39
		for (my($so)=-$scan_offset_search_window; $so<=$scan_offset_search_window; $so++) {			# find narrowband best lag
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    40
			$mad[$so + $scan_offset_search_window] = $nsamp = 0;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    41
			for (my($i)=max($fe,$e-$ew_hwidth); $i<=min($le,$e+$ew_hwidth); $i++) {	# calc mad in window
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    42
				next unless numberp($LADCP{ENSEMBLE}[$i]->{CTD_DEPTH});
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    43
				$mad[$so + $scan_offset_search_window] +=
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    44
					abs($LADCP{ENSEMBLE}[$i]->{REFLR_W} - $CTD{W}[$LADCP{ENSEMBLE}[$i]->{CTD_SCAN}+$so]);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    45
				$nsamp++;					
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    46
			} # for $i
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    47
			if ($nsamp > 0) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    48
				$mad[$so + $scan_offset_search_window] /= $nsamp;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    49
			} else {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    50
				$mad[$so + $scan_offset_search_window] = 9e99;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    51
			}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    52
		} # for $so
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    53
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    54
		my($best_so) = min_i(@mad) - $scan_offset_search_window;		
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    55
		&antsOut($e,$best_so,$mad[$best_so + $scan_offset_search_window]);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    56
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    57
	}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    58
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    59
	&antsOut('EOF'); open(STDOUT,'>&2');
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    60
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    61
};
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    62
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    63
1;