libIMP.pl
author A.M. Thurnherr <athurnherr@yahoo.com>
Fri, 18 Nov 2022 12:54:01 -0500
changeset 54 00ed1e8dcfa4
parent 53 95af2535e4bb
permissions -rw-r--r--
2022 A16N pre-cruise
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
33
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
     1
#======================================================================
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
     2
#                    L I B I M P . P L 
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
     3
#                    doc: Tue Nov 26 21:59:40 2013
54
00ed1e8dcfa4 2022 A16N pre-cruise
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 53
diff changeset
     4
#                    dlm: Tue Sep 13 12:56:28 2022
33
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
     5
#                    (c) 2017 A.M. Thurnherr
54
00ed1e8dcfa4 2022 A16N pre-cruise
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 53
diff changeset
     6
#                    uE-Info: 76 60 NIL 0 0 70 0 2 4 NIL ofnI
33
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
     7
#======================================================================
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
     8
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
     9
# HISTORY:
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    10
#	Nov 26, 2013: - created
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    11
#	Dec  1, 2013: - removed HDG_ROT
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    12
#				  - added support for IMP data gaps
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    13
#	Mar  4, 2014: - added support for DATA_SOURCE_ID
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    14
#	May 22, 2014: - use +/-2deg to assess quality of heading offset
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    15
#	May 23, 2014: - added $dhist_binsize, $dhist_min_pirom
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    16
#	Jul 27, 2016: - updated variable names for consistency
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    17
#	Jul 28, 2016: - major re-write if merging routines
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    18
#	Jul 29, 2016: - cosmetics
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    19
#				  - increased heading-offset resolution from 2 to 1 degrees
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    20
#				  - BUG: inconsistent heading definition used (from old IMP with
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    21
#						 confused coordinates)
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    22
#				  - modified initial timelag guess (there was a bug and it is 
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    23
#				    likely more robust based on end time rather than start time)
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    24
#	Aug  5, 2016: - BUG: weird statement accessing LADCP_begin-1
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    25
#				  - BUG: DSID of first ensemble was not left original
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    26
#	Aug 22, 2016: - major changes to timelagging
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    27
#	Aug 23, 2016: - changed semantics for removing ensembles with bad attitudes:
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    28
#					instead of setting attitude to undef (or large pitch/roll),
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    29
#					clearEns() is used
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    30
#	Aug 24, 2016: - overhauled time-lagging
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    31
#	Aug 25, 2016: - significant code cleanup
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    32
#	Aug 26, 2016: - added _hdg_err.ps output plot
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    33
#	Oct 13, 2016: - made hdg nan for invalid records (BUG with current versions of IMP+LADCP, IMPatchPD0)
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    34
#	Nov 22, 2016: - added heading-offset plot
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    35
#				  - added sensor info to plots
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    36
#	Nov 29, 2016: - added stats to compass error plot
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    37
#	Dec 29, 2016: - improved histogram plot
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    38
#	Nov 16, 2017: - adapted rot_vecs() to KVM coordinates
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    39
#				  - made sensor information optional in
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    40
#	Nov 20, 2017: - major code cleanup
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    41
#	Nov 22, 2017: - replaced "IMP" output in routines used by KVH by "IMU"
35
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 33
diff changeset
    42
#	Dec  8, 2017: - replaced remaing "IMP" output (e.g. in plot) by "IMU"
36
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 35
diff changeset
    43
#	May 22, 2018: - added data trimming to rot_vec
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 35
diff changeset
    44
#	May 23, 2018: - added horizontal field strength to mag calib plot
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 35
diff changeset
    45
#				  - added support for S/N 8 board inside UL WH300 (neg_piro == 2)
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 35
diff changeset
    46
#	May 24, 2018: - continued working (coord_trans == 2)
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 35
diff changeset
    47
#	May 25, 2018: - continued working
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 35
diff changeset
    48
#	May 30, 2018: - BUG: trimming did not re-calculate elapsed time
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 35
diff changeset
    49
#	Jun  5, 2018: - BUG: on -c main magnetometer and accelerometer vectors were
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 35
diff changeset
    50
#						 modified twice
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 35
diff changeset
    51
#	Jun  7, 2018: - relaxed definition of -e
39
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 36
diff changeset
    52
#	Jun  9, 2018: - BUG: some "edge" data (beyond the valid profile) were bogus (does
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 36
diff changeset
    53
#						 not matter in practice)
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 36
diff changeset
    54
#	Jun 30, 2019: - renamed -s in IMP+LADCP to -o (option not used in KVH+LADCP)
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 36
diff changeset
    55
#				  - changed semantics so that offset histogram is plotted even on -o
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 36
diff changeset
    56
#				  - made create_merge_plots return errors
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 36
diff changeset
    57
#	Jul  1, 2019: - BUG: pre-deployment output cleared IMU pitch/roll fields (1 record
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 36
diff changeset
    58
#						 affected)
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 36
diff changeset
    59
#				  - modified output of pre-/post-cast records to include all LADCP
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 36
diff changeset
    60
#				    but no IMU data
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 36
diff changeset
    61
#				  - BUG: GIMBAL_PITCH had not only been defined for in-water records
40
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 39
diff changeset
    62
#	Jun  9, 2018: - BUG: some "edge" data (beyond the valid profile) were bogus (does not matter in practice)
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 39
diff changeset
    63
#	Apr 12, 2020: - modified rot_vecs to pass all records with non-numerical elapsed 
41
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 40
diff changeset
    64
#	Apr 13, 2020: - added prep_piro_ADCP
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 40
diff changeset
    65
#				  - BUG: dhist_binsize != 1 did not work
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 40
diff changeset
    66
#				  - BUG: dhist agreement % was not rounded
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 40
diff changeset
    67
#	Apr 14, 2020: - cosmetics
46
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 41
diff changeset
    68
#	Jul 12, 2021: - improvements to histogram plot
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 41
diff changeset
    69
#	Jul 24, 2021: - updated docu
52
cab17f0c5e88 after P2E
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 46
diff changeset
    70
#	Jul  6, 2022: - added support for $suppress_rot_acc_output, @copyFields
cab17f0c5e88 after P2E
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 46
diff changeset
    71
#	Jul 14, 2022: - BUG: unshift used instead of push
cab17f0c5e88 after P2E
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 46
diff changeset
    72
#				  - BUG: acc was rotated regardless of $suppress_rot_acc_output
53
95af2535e4bb after whoosher merge
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 52
diff changeset
    73
#	Sep 12, 2022: - improved error message formatting on verbose
54
00ed1e8dcfa4 2022 A16N pre-cruise
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 53
diff changeset
    74
#				  - stopped merge_plots to bomb with division by zero errors
00ed1e8dcfa4 2022 A16N pre-cruise
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 53
diff changeset
    75
#	Sep 13, 2022: - BUG: histogram plot was wrong when -o was used
00ed1e8dcfa4 2022 A16N pre-cruise
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 53
diff changeset
    76
#				  - added offset red line to histogram plots
46
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 41
diff changeset
    77
# HISTORY END
33
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    78
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    79
#----------------------------------------------------------------------
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    80
# gRef() library
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    81
#----------------------------------------------------------------------
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    82
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    83
sub pl_mag_calib_begin($$$)															# initialize mag_calib plot
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    84
{
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    85
	my($pfn,$plotsize,$axlim) = @_;
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    86
	my($xmin,$xmax) = (-$axlim,$axlim);
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    87
	my($ymin,$ymax) = (-$axlim,$axlim);
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    88
	GMT_begin($pfn,"-JX${plotsize}","-R$xmin/$xmax/$ymin/$ymax",'-X6 -Y4 -P');
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    89
	GMT_psxy('-Sc0.05');
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    90
}
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    91
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    92
sub pl_mag_calib_plot($$$)															# plot data point
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    93
{
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    94
	my($valid,$magX,$magY) = @_;
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    95
	if ($valid)	{ print(GMT "> -Wred -Gred\n$magX $magY\n"); }
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    96
	else 		{ print(GMT "> -Wgreen -Ggreen\n$magX $magY\n"); }
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    97
}
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    98
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    99
sub pl_mag_calib_end($$)															# finish mag_calib plot
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   100
{
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   101
	my($axlim,$HF_mag,$sensor_info) = @_;
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   102
	
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   103
	GMT_psxy('-Sc0.1 -Gblue');														# calibration circle
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   104
	for (my($a)=0; $a<2*$pi; $a+=0.075) {
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   105
		printf(GMT "%f %f\n",$HF_mag*sin($a),$HF_mag*cos($a));
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   106
	}
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   107
	
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   108
	if ($axlim <= 0.1) {															# axes labels
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   109
		GMT_psbasemap('-Bg1a.04f.001:"X Magnetic Field [Gauss]":/g1a0.02f0.001:"Y Magnetic Field [Gauss]":WeSn');
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   110
	} else {
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   111
		GMT_psbasemap('-Bg1a.1f.01:"X Magnetic Field [Gauss]":/g1a0.1f0.01:"Y Magnetic Field [Gauss]":WeSn');
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   112
	}
36
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 35
diff changeset
   113
    GMT_unitcoords();																# horizontal field strength
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 35
diff changeset
   114
    GMT_pstext('-F+f12,Helvetica,blue+jTR -N');
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 35
diff changeset
   115
   	printf(GMT "0.98 0.98 HF = %.2f Gauss\n",$HF_mag);
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 35
diff changeset
   116
   	
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 35
diff changeset
   117
   	printf(GMT "0.98 0.94 $sensor_info\n")											# sensor info
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 35
diff changeset
   118
		if ($sensor_info ne '');
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 35
diff changeset
   119
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 35
diff changeset
   120
    GMT_pstext('-F+f14,Helvetica,blue+jTL -N');										# profile id
33
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   121
    printf(GMT "0.01 1.06 $P{profile_id}\n");
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   122
	GMT_end();
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   123
}
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   124
52
cab17f0c5e88 after P2E
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 46
diff changeset
   125
#-------------------------------------------------------------------------------------------
cab17f0c5e88 after P2E
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 46
diff changeset
   126
# global variables used:
cab17f0c5e88 after P2E
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 46
diff changeset
   127
#	@vecs						field number triplets of vector data
cab17f0c5e88 after P2E
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 46
diff changeset
   128
#	@piro						[chip id, pitch field, roll field] 
cab17f0c5e88 after P2E
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 46
diff changeset
   129
#	@bias						bias triples for vector data
cab17f0c5e88 after P2E
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 46
diff changeset
   130
#	$suppress_rot_acc_output	set to true to suppress output of rotated accelerometer data
cab17f0c5e88 after P2E
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 46
diff changeset
   131
#	@copyFields					field numbers to copy from input to output
cab17f0c5e88 after P2E
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 46
diff changeset
   132
#-------------------------------------------------------------------------------------------
cab17f0c5e88 after P2E
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 46
diff changeset
   133
36
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 35
diff changeset
   134
sub rot_vecs(@) 																	# rotate & output IMU vector data 
33
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   135
{
36
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 35
diff changeset
   136
	my($coord_trans,$min_elapsed,$max_elapsed,$plot_milapsed,$plot_malapsed) = @_;		# negate KVH pitch/roll data if first arg set to 1
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 35
diff changeset
   137
	$min_elapsed = 0 unless defined($min_elapsed);
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 35
diff changeset
   138
	$max_elapsed = 9e99 unless defined($max_elapsed);
52
cab17f0c5e88 after P2E
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 46
diff changeset
   139
	$plot_minlapsed = $min_elapsed unless defined($plot_milapsed);
36
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 35
diff changeset
   140
	$plot_malapsed = $max_elapsed unless defined($plot_malapsed);
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 35
diff changeset
   141
33
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   142
	while (&antsIn()) {
40
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 39
diff changeset
   143
		next if numberp($ants_[0][$elapsedF]) && ($ants_[0][$elapsedF] < $min_elapsed);	# trim data
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 39
diff changeset
   144
		last if numberp($ants_[0][$elapsedF]) && ($ants_[0][$elapsedF] > $max_elapsed);
36
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 35
diff changeset
   145
		
33
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   146
		my($cpiro) = -1;															# current pitch/roll accelerometer
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   147
		my(@R); 																	# rotation matrix
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   148
		for (my($i)=0; $i<@vecs; $i++) {											# rotate vector data
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   149
			if ($piro[$i][0] != $cpiro) {											# next sensor chip
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   150
				$cpiro = $piro[$i][0];
36
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 35
diff changeset
   151
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 35
diff changeset
   152
				my($accX) = $ants_[0][$vecs[$cpiro][0]];
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 35
diff changeset
   153
				my($accY) = $ants_[0][$vecs[$cpiro][1]];
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 35
diff changeset
   154
				my($accZ) = $ants_[0][$vecs[$cpiro][2]];
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 35
diff changeset
   155
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 35
diff changeset
   156
				if ($coord_trans == 2) {											# S/N 8 inside UL WH300
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 35
diff changeset
   157
					$accY *= -1; $accZ *= -1;
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 35
diff changeset
   158
				}
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 35
diff changeset
   159
				
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 35
diff changeset
   160
				my($roll)  = atan2($accY,$accZ); 									# eqn 25 from Freescale AN3461
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 35
diff changeset
   161
				my($pitch) = atan2($accX,sqrt($accY**2+$accZ**2));     				# eqn 26 from <Freescale AN3461
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 35
diff changeset
   162
				if ($coord_trans == 1) {											# KVH
33
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   163
					$pitch *= -1;
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   164
					$roll  *= -1;
36
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 35
diff changeset
   165
                }
33
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   166
				$ants_[0][$piro[$i][1]] = deg($pitch);								# add pitch/roll to data
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   167
				$ants_[0][$piro[$i][2]] = deg($roll);
36
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 35
diff changeset
   168
33
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   169
				my($sp) = sin($pitch); my($cp) = cos($pitch);						# define rotation matrix
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   170
				my($sr) = sin($roll);  my($cr) = cos($roll);
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   171
				@R = ([ $cp,	 0,   -$sp	  ],
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   172
					  [-$sp*$sr, $cr, -$cp*$sr],
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   173
					  [ $sp*$cr, $sr,  $cp*$cr]);
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   174
			}
36
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 35
diff changeset
   175
			my($xval) = $ants_[0][$vecs[$i][0]];
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 35
diff changeset
   176
			my($yval) = $ants_[0][$vecs[$i][1]];
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 35
diff changeset
   177
			my($zval) = $ants_[0][$vecs[$i][2]];
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 35
diff changeset
   178
			
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 35
diff changeset
   179
			if ($coord_trans == 2) {												# S/N 8 inside UL WH300
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 35
diff changeset
   180
				$yval *= -1; $zval *= -1;
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 35
diff changeset
   181
			}
52
cab17f0c5e88 after P2E
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 46
diff changeset
   182
cab17f0c5e88 after P2E
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 46
diff changeset
   183
			next if ($suppress_rot_acc_output && $i==$cpiro);
36
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 35
diff changeset
   184
			
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 35
diff changeset
   185
			$ants_[0][$vecs[$i][0]] = ($xval-$bias[$i][0]) * $R[0][0] +
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 35
diff changeset
   186
									  ($yval-$bias[$i][1]) * $R[0][1] +
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 35
diff changeset
   187
									  ($zval-$bias[$i][2]) * $R[0][2];
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 35
diff changeset
   188
			$ants_[0][$vecs[$i][1]] = ($xval-$bias[$i][0]) * $R[1][0] +
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 35
diff changeset
   189
			  						  ($yval-$bias[$i][1]) * $R[1][1] +
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 35
diff changeset
   190
									  ($zval-$bias[$i][2]) * $R[1][2];
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 35
diff changeset
   191
			$ants_[0][$vecs[$i][2]] = ($xval-$bias[$i][0]) * $R[2][0] +
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 35
diff changeset
   192
									  ($yval-$bias[$i][1]) * $R[2][1] +
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 35
diff changeset
   193
									  ($zval-$bias[$i][2]) * $R[2][2];
33
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   194
		}
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   195
	
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   196
		my($magX) = $ants_[0][$magXF];
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   197
		my($magY) = $ants_[0][$magYF];
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   198
		my($magZ) = $ants_[0][$magZF];
36
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 35
diff changeset
   199
		my($accX) = $ants_[0][$accXF];
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 35
diff changeset
   200
		my($accY) = $ants_[0][$accYF];
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 35
diff changeset
   201
		my($accZ) = $ants_[0][$accZF];
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 35
diff changeset
   202
33
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   203
		my($HF)   = sqrt($magX**2+$magY**2);
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   204
		my($valid)= ($HF >= $minfac*$HF_mag) && ($HF <= $maxfac*$HF_mag);
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   205
		my($hdg)  = $valid ? mag_heading($magX,$magY) : nan;
36
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 35
diff changeset
   206
52
cab17f0c5e88 after P2E
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 46
diff changeset
   207
		@cpFields = ();
cab17f0c5e88 after P2E
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 46
diff changeset
   208
		foreach my $fnr (@copyFields) {
cab17f0c5e88 after P2E
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 46
diff changeset
   209
			push(@cpFields,$ants_[0][$fnr]);
cab17f0c5e88 after P2E
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 46
diff changeset
   210
        }
cab17f0c5e88 after P2E
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 46
diff changeset
   211
cab17f0c5e88 after P2E
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 46
diff changeset
   212
		if ($suppress_rot_acc_output) {
cab17f0c5e88 after P2E
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 46
diff changeset
   213
			&antsOut($ants_[0][$elapsedF]-$min_elapsed,$ants_[0][$tempF],
cab17f0c5e88 after P2E
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 46
diff changeset
   214
					 RDI_pitch($ants_[0][$pitchF],$ants_[0][$rollF]),$ants_[0][$rollF],
cab17f0c5e88 after P2E
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 46
diff changeset
   215
					 $hdg,$magX,$magY,$magZ,
cab17f0c5e88 after P2E
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 46
diff changeset
   216
	                 vel_u($HF,$hdg),vel_v($HF,$hdg),$valid,@cpFields);
cab17f0c5e88 after P2E
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 46
diff changeset
   217
        } else {
cab17f0c5e88 after P2E
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 46
diff changeset
   218
			&antsOut($ants_[0][$elapsedF]-$min_elapsed,$ants_[0][$tempF],
cab17f0c5e88 after P2E
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 46
diff changeset
   219
					 RDI_pitch($ants_[0][$pitchF],$ants_[0][$rollF]),$ants_[0][$rollF],
cab17f0c5e88 after P2E
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 46
diff changeset
   220
					 $hdg,$accX,$accY,$accZ,$magX,$magY,$magZ,
cab17f0c5e88 after P2E
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 46
diff changeset
   221
	                 vel_u($HF,$hdg),vel_v($HF,$hdg),$valid,@cpFields);
cab17f0c5e88 after P2E
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 46
diff changeset
   222
        }
36
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 35
diff changeset
   223
33
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   224
		pl_mag_calib_plot($valid,$magX,$magY)
36
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 35
diff changeset
   225
			if defined($P{profile_id}) &&
40
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 39
diff changeset
   226
				(!numberp($ants_[0][$elapsedF]) ||
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 39
diff changeset
   227
					($ants_[0][$elapsedF] >= $plot_milapsed) &&
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 39
diff changeset
   228
					($ants_[0][$elapsedF] <= $plot_malapsed));
33
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   229
	}
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   230
}
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   231
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   232
#----------------------------------------------------------------------
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   233
# LADCP merging library
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   234
#----------------------------------------------------------------------
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   235
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   236
#-----------------------------------------------------
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   237
# Instrument Offset Estimation
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   238
#
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   239
#	1: resolution of histogram in deg
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   240
#		1 deg okay for good sensors
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   241
#		2 deg sometimes required (2016 P18 003 2nd sensor)
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   242
#	2: min tilt anom to consider for offset estimation
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   243
#		0.3 deg works even for calm casts
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   244
#		increased values improve histogram
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   245
#		2.0 deg is too high for quiet casts (2016 P18 003)
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   246
#	3: minimum fraction of hist mode required
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   247
#		10% default
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   248
#		decreasing histogram resolution is better than
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   249
#			decreasing this value, I think
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   250
#-----------------------------------------------------
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   251
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   252
#----------------------------------------------------------------------
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   253
# trim_out_of_water()
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   254
#	- attempt to remove out-of-water records from time-series of
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   255
#	  horizontal acceleration
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   256
#----------------------------------------------------------------------
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   257
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   258
sub trim_out_of_water($)
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   259
{
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   260
	my($verbose) = @_;
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   261
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   262
	#--------------------------------------------------------------------------
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   263
	# first-difference horizontal acceleration at full resolution to pass-filter
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   264
	# dangling motion
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   265
	#--------------------------------------------------------------------------
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   266
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   267
	$IMP{Ah}[0] 	= sqrt($ants_[0][$accXF]**2+$ants_[0][$accYF]**2);
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   268
	$IMP{dAhdt}[0]	= nan;
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   269
	for (my($r)=1; $r<@ants_; $r++) {
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   270
		$IMP{Ah}[$r] = sqrt($ants_[$r][$accXF]**2+$ants_[$r][$accYF]**2);
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   271
		$IMP{dAhdt}[$r] = ($IMP{Ah}[$r]-$IMP{Ah}[$r-1]) / ($ants_[$r][$elapsedF]-$ants_[$r-1][$elapsedF]);
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   272
	}
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   273
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   274
	#--------------------------------------------------------------------------------------
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   275
	# create 10-s binned time series to calculate rms values of this quantity (dAhdt), and
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   276
	# scale this with cos(sqrt($$pitch**2+$$roll**2)) to dampen underwater peaks (when the
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   277
	# instrument has a large tilt because it is being dragged)
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   278
	#	NB: dAhdt, pitch and roll are only set up to last full bin (not so, sum and n)
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   279
	#--------------------------------------------------------------------------------------
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   280
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   281
	my(@dAhdt,@pitch,@roll,@dAhdt_rms);
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   282
	my(@sum) = my(@sume) = my(@sump) = my(@sumr) = my(@n) = (0);
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   283
	
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   284
	my($bin_start) = $ants_[0][$elapsedF];
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   285
	for (my($r)=1; $r<@ants_; $r++) {   
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   286
	
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   287
		if ($ants_[$r][$elapsedF] - $bin_start <= 10) { 						# within 10-s bin
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   288
			$sum[$#sum] += $IMP{dAhdt}[$r]; 									# sums
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   289
			$sume[$#sume] += $ants_[$r][$elapsedF];
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   290
			$sump[$#sump] += $ants_[$r][$pitchF];
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   291
			$sumr[$#sumr] += $ants_[$r][$rollF];
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   292
			$n[$#n]++;
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   293
			next;
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   294
		}
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   295
	
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   296
		$dAhdt[$#sum] = $sum[$#sum] / $n[$#n];								# bin done => means
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   297
		$elapsed[$#sum] = $sume[$#sume] / $n[$#n];
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   298
		$pitch[$#sum] = $sump[$#sump] / $n[$#n];
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   299
		$roll[$#sum] = $sumr[$#sumr] / $n[$#n];
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   300
	
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   301
		my($sumsq) = 0; 													# sum of squares for rms(accel)
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   302
		for (my($rr)=$r-$n[$#n]; $rr<$r; $rr++) {
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   303
			$sumsq += ($IMP{dAhdt}[$rr] - $dAhdt[$#sum])**2;
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   304
		}
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   305
		$dAhdt_rms[$#sum] = sqrt($sumsq / $n[$#n]);
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   306
	    
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   307
		push(@sum,$IMP{dAhdt}[$r]); 										# begin next bin
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   308
		push(@sume,$ants_[$r][$elapsedF]);
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   309
		push(@sump,$ants_[$r][$pitchF]);
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   310
		push(@sumr,$ants_[$r][$rollF]);
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   311
		push(@n,1);
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   312
		$bin_start = $ants_[$r][$elapsedF];
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   313
	}
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   314
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   315
	#--------------------------------------------
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   316
	# trim beginning/end when IMP is out of water
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   317
	#--------------------------------------------
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   318
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   319
	my($i,$si);
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   320
	for ($i=int(@dAhdt_rms/2); $i>0; $i--) {
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   321
		last if ($dAhdt_rms[$i] * cos(rad(sqrt($pitch[$i]**2+$roll[$i]**2))) > 1.0);
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   322
	}
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   323
	if ($dAhdt_rms[$i] * cos(rad(sqrt($pitch[$i]**2+$roll[$i]**2))) > 1.0) {
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   324
		for ($si=0; $ants_[$si][$elapsedF]<=$elapsed[$i]; $si++) {}
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   325
		splice(@ants_,0,$si);
35
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 33
diff changeset
   326
		printf(STDERR "\n\t\t%5d  leading out-of-water IMU records removed",$si)
33
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   327
			if ($si>0 && $verbose);
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   328
	} else {
35
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 33
diff changeset
   329
		print(STDERR "\n\t\tWARNING: no leading out-of-water IMU records detected/removed") if $verbose;
33
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   330
	}
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   331
	
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   332
	for ($i=int(@dAhdt_rms/2); $i<@dAhdt_rms; $i++) {
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   333
		last if ($dAhdt_rms[$i] * cos(rad(sqrt($pitch[$i]**2+$roll[$i]**2))) > 1.0);
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   334
	}
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   335
	if ($dAhdt_rms[$i] * cos(rad(sqrt($pitch[$i]**2+$roll[$i]**2))) > 1.0) {
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   336
		for ($si=$#ants_; $ants_[$si][$elapsedF]>=$elapsed[$i]; $si--) {}
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   337
		my($rem) = @ants_ - $si;
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   338
		splice(@ants_,$si);
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   339
		printf(STDERR "\n\t\t%5d trailing out-of-water IMU records removed",$rem)
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   340
			if ($rem>0 && $verbose);
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   341
	} else {
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   342
		print(STDERR "\n\t\tWARNING: no trailing out-of-water IMU records detected/removed") if $verbose;
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   343
	}
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   344
	
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   345
	printf(STDERR "\n\t\tcast duration		  : %.1f min",
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   346
		($ants_[$#ants_][$elapsedF] - $ants_[0][$elapsedF]) / 60)
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   347
	        if $verbose;
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   348
}
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   349
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   350
#--------------------------------------------------------------------------------
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   351
# prep_piro_IMP()
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   352
# 	- calculate pitch/roll offsets & tilt azimuth for IMP
41
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 40
diff changeset
   353
#	- if first_rec and last_rec are provided, the mean calculation will 
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 40
diff changeset
   354
#	  be restricted to this range (TILT_AZIM, _ANOM calculated for all recs)
33
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   355
#	- during an attempt to improve time lagging for the 2015 IOPAS data set,
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   356
#	  it was noticed that one particular instrument, WHM300#12973 maxes out
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   357
#	  pitch at 27.36 degrees, whereas the roll may not be maxed out at 28.76 deg,
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   358
#	  the max observed during the cruise.
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   359
#	- therefore, IMP{TILT_AZIM} and IMP{TILT_ANOM} are calculated here, first,
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   360
#	  with a pitch/roll cutoff value of 29 degrees
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   361
#	- after the time lagging, when the LADCP start and end times are known,
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   362
#	  the TILT values are re-calculated without the pitch/roll limit, and
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   363
#	  using only the correct time range
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   364
#---------------------------------------------------------------------------------
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   365
41
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 40
diff changeset
   366
sub prep_piro_IMP($@)
33
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   367
{
41
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 40
diff changeset
   368
	my($verbose,$first_rec,$last_rec) = @_;
33
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   369
	my($RDI_max_tilt) = 29; 
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   370
	my($IMP_pitch_mean,$IMP_roll_mean,$nPR) = (0,0,0);
41
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 40
diff changeset
   371
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 40
diff changeset
   372
	$first_rec = 0 			unless defined($first_rec);
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 40
diff changeset
   373
	$last_rec  = $#ants_	unless defined($last_rec);
33
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   374
	
41
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 40
diff changeset
   375
	for (my($r)=$first_rec; $r<=$last_rec; $r++) {
33
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   376
		next unless numbersp($ants_[$r][$pitchF],$ants_[$r][$rollF]);
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   377
		$nPR++;
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   378
		$IMP_pitch_mean += min($ants_[$r][$pitchF],$RDI_max_tilt);
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   379
		$IMP_roll_mean	+= min($ants_[$r][$rollF],$RDI_max_tilt);
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   380
	}
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   381
	$IMP_pitch_mean /= $nPR;
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   382
	$IMP_roll_mean /= $nPR;
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   383
	printf(STDERR "\n\t\tIMU mean pitch/roll	  : %.1f/%.1f deg",$IMP_pitch_mean,$IMP_roll_mean)
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   384
			if $verbose;
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   385
	
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   386
	for (my($r)=0; $r<@ants_; $r++) {
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   387
		next unless numbersp($ants_[$r][$pitchF],$ants_[$r][$rollF]);
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   388
		$IMP{TILT_AZIMUTH}[$r] = tilt_azimuth(min($ants_[$r][$pitchF],$RDI_max_tilt)-$IMP_pitch_mean,
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   389
											  min($ants_[$r][$rollF],$RDI_max_tilt) -$IMP_roll_mean);
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   390
		$IMP{TILT_ANOM}[$r] = angle_from_vertical(min($ants_[$r][$pitchF],$RDI_max_tilt)-$IMP_pitch_mean,
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   391
												  min($ants_[$r][$rollF],$RDI_max_tilt) -$IMP_roll_mean);
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   392
	}
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   393
	return ($IMP_pitch_mean,$IMP_roll_mean);
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   394
}
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   395
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   396
#----------------------------------------------------------------------
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   397
# prep_piro_LADCP()
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   398
#	- calculate pitch/roll offsets & tilt azimuth of LADCP
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   399
#----------------------------------------------------------------------
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   400
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   401
sub prep_piro_LADCP($)
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   402
{
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   403
	my($verbose) = @_;
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   404
41
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 40
diff changeset
   405
	$first_ens = 0 			unless defined($first_ens);
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 40
diff changeset
   406
	$last_ens  = $#ants_	unless defined($last_ens);
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 40
diff changeset
   407
33
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   408
	my($LADCP_pitch_mean,$LADCP_roll_mean) = (0,0);
39
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 36
diff changeset
   409
	for (my($ens)=0; $ens<=$#{$LADCP{ENSEMBLE}}; $ens++) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 36
diff changeset
   410
		$LADCP{ENSEMBLE}[$ens]->{GIMBAL_PITCH} =
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 36
diff changeset
   411
			gimbal_pitch($LADCP{ENSEMBLE}[$ens]->{PITCH},$LADCP{ENSEMBLE}[$ens]->{ROLL});
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 36
diff changeset
   412
	}
33
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   413
	for (my($ens)=$LADCP_begin; $ens<=$LADCP_end; $ens++) {
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   414
		$LADCP{ENSEMBLE}[$ens]->{GIMBAL_PITCH} =
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   415
			gimbal_pitch($LADCP{ENSEMBLE}[$ens]->{PITCH},$LADCP{ENSEMBLE}[$ens]->{ROLL});
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   416
		$LADCP_pitch_mean += $LADCP{ENSEMBLE}[$ens]->{GIMBAL_PITCH};
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   417
		$LADCP_roll_mean  += $LADCP{ENSEMBLE}[$ens]->{ROLL};
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   418
	}
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   419
	$LADCP_pitch_mean /= ($LADCP_end-$LADCP_begin+1);
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   420
	$LADCP_roll_mean  /= ($LADCP_end-$LADCP_begin+1);
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   421
	printf(STDERR "\n\t\tLADCP mean pitch/roll	  : %.1f/%.1f deg",$LADCP_pitch_mean,$LADCP_roll_mean)
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   422
			if $verbose;
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   423
	
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   424
	for (my($ens)=$LADCP_begin; $ens<=$LADCP_end; $ens++) {
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   425
		$LADCP{ENSEMBLE}[$ens]->{TILT_AZIMUTH} =
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   426
			tilt_azimuth($LADCP{ENSEMBLE}[$ens]->{GIMBAL_PITCH}-$LADCP_pitch_mean,
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   427
						 $LADCP{ENSEMBLE}[$ens]->{ROLL}-$LADCP_roll_mean);
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   428
		$LADCP{ENSEMBLE}[$ens]->{TILT_ANOM} =
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   429
			angle_from_vertical($LADCP{ENSEMBLE}[$ens]->{GIMBAL_PITCH}-$LADCP_pitch_mean,
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   430
								$LADCP{ENSEMBLE}[$ens]->{ROLL}-$LADCP_roll_mean);
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   431
	}
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   432
	
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   433
	print(STDERR "\n") if $verbose;
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   434
	return ($LADCP_pitch_mean,$LADCP_roll_mean);
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   435
}
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   436
41
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 40
diff changeset
   437
#----------------------------------------------------------------------
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 40
diff changeset
   438
# prep_piro_ADCP()
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 40
diff changeset
   439
#	- calculate pitch/roll offsets & tilt azimuth of moored ADCP
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 40
diff changeset
   440
#	- very similar to prep_piro_LADCP() but using windowing as in
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 40
diff changeset
   441
#	  prep_piro_IMP()
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 40
diff changeset
   442
#	- window ens are indices, not ensemble numbers
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 40
diff changeset
   443
#----------------------------------------------------------------------
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 40
diff changeset
   444
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 40
diff changeset
   445
sub prep_piro_ADCP($@)
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 40
diff changeset
   446
{
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 40
diff changeset
   447
	my($verbose,$window_first_ens,$window_last_ens) = @_;
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 40
diff changeset
   448
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 40
diff changeset
   449
	$window_first_ens = 0 					unless defined($window_first_ens);
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 40
diff changeset
   450
	$window_last_ens  = $#{$ADCP{ENSEMBLE}}	unless defined($window_last_ens);
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 40
diff changeset
   451
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 40
diff changeset
   452
	for (my($ens)=0; $ens<=$#{$ADCP{ENSEMBLE}}; $ens++) {
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 40
diff changeset
   453
		$ADCP{ENSEMBLE}[$ens]->{GIMBAL_PITCH} =
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 40
diff changeset
   454
			gimbal_pitch($ADCP{ENSEMBLE}[$ens]->{PITCH},$ADCP{ENSEMBLE}[$ens]->{ROLL});
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 40
diff changeset
   455
	}
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 40
diff changeset
   456
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 40
diff changeset
   457
	my($ADCP_pitch_mean,$ADCP_roll_mean) = (0,0);
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 40
diff changeset
   458
	for (my($ens)=$window_first_ens; $ens<=$window_last_ens; $ens++) {
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 40
diff changeset
   459
		$ADCP_pitch_mean += $ADCP{ENSEMBLE}[$ens]->{GIMBAL_PITCH};
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 40
diff changeset
   460
		$ADCP_roll_mean  += $ADCP{ENSEMBLE}[$ens]->{ROLL};
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 40
diff changeset
   461
	}
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 40
diff changeset
   462
	$ADCP_pitch_mean /= ($window_last_ens-$window_first_ens+1);
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 40
diff changeset
   463
	$ADCP_roll_mean  /= ($window_last_ens-$window_first_ens+1);
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 40
diff changeset
   464
	printf(STDERR "\n\t\tADCP mean pitch/roll       : %.1f/%.1f deg",$ADCP_pitch_mean,$ADCP_roll_mean)
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 40
diff changeset
   465
			if $verbose;
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 40
diff changeset
   466
	
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 40
diff changeset
   467
	for (my($ens)=0; $ens<=$#{$ADCP{ENSEMBLE}}; $ens++) {
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 40
diff changeset
   468
		$ADCP{ENSEMBLE}[$ens]->{TILT_AZIMUTH} =
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 40
diff changeset
   469
			tilt_azimuth($ADCP{ENSEMBLE}[$ens]->{GIMBAL_PITCH}-$ADCP_pitch_mean,
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 40
diff changeset
   470
						 $ADCP{ENSEMBLE}[$ens]->{ROLL}-$ADCP_roll_mean);
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 40
diff changeset
   471
		$ADCP{ENSEMBLE}[$ens]->{TILT_ANOM} =
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 40
diff changeset
   472
			angle_from_vertical($ADCP{ENSEMBLE}[$ens]->{GIMBAL_PITCH}-$ADCP_pitch_mean,
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 40
diff changeset
   473
								$ADCP{ENSEMBLE}[$ens]->{ROLL}-$ADCP_roll_mean);
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 40
diff changeset
   474
	}
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 40
diff changeset
   475
	
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 40
diff changeset
   476
	print(STDERR "\n") if $verbose;
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 40
diff changeset
   477
	return ($ADCP_pitch_mean,$ADCP_roll_mean);
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 40
diff changeset
   478
}
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 40
diff changeset
   479
33
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   480
#------------------------------------------------------------------
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   481
# sub calc_hdg_offset()
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   482
#	- estimate heading offset from tilt time series
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   483
#	- returns heading offset and updated IMP mean tilts
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   484
#	- also creates diagnostic plot with pl_hdg_offset()
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   485
#------------------------------------------------------------------
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   486
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   487
sub pl_hdg_offset($@)
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   488
{
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   489
	my($dhist_binsize,$modefrac,@dhist) = @_;
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   490
	
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   491
	my($plotsize) = '13c';
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   492
	my($xmin,$xmax) = (-180.5,180.5);
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   493
	my($ymin) = 0;
46
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 41
diff changeset
   494
	my($ymax) = 0;
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 41
diff changeset
   495
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 41
diff changeset
   496
	for (my($i)=0; $i<@dhist; $i++) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 41
diff changeset
   497
		$ymax = $dhist[$i] if ($dhist[$i] > $ymax);
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 41
diff changeset
   498
    }
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 41
diff changeset
   499
	$ymax = 1.05 * $ymax;
33
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   500
	    
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   501
	GMT_begin("$P{profile_id}${opt_a}_hdg_offset.ps","-JX${plotsize}","-R$xmin/$xmax/$ymin/$ymax",'-X6 -Y4 -P');
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   502
	GMT_psxy("-Sb${dhist_binsize}u -GCornFlowerBlue");
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   503
	for (my($i)=0; $i<@dhist; $i++) {
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   504
		next unless $dhist[$i];
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   505
		printf(GMT "%f $dhist[$i]\n",$i*$dhist_binsize>180 ? $i*$dhist_binsize-360 : $i*$dhist_binsize);
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   506
	}
54
00ed1e8dcfa4 2022 A16N pre-cruise
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 53
diff changeset
   507
	GMT_psxy("-W1,red");
00ed1e8dcfa4 2022 A16N pre-cruise
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 53
diff changeset
   508
	printf(GMT "%f %f\n%f %f\n",angle($HDG_offset),0,angle($HDG_offset),$ymax);
00ed1e8dcfa4 2022 A16N pre-cruise
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 53
diff changeset
   509
	if ($ymax > 200) {
00ed1e8dcfa4 2022 A16N pre-cruise
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 53
diff changeset
   510
		GMT_psbasemap('-Bg45a90f15:"IMU Heading Offset [\260]":/ga100f10:"Frequency":WeSn');
00ed1e8dcfa4 2022 A16N pre-cruise
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 53
diff changeset
   511
    } else {
00ed1e8dcfa4 2022 A16N pre-cruise
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 53
diff changeset
   512
		GMT_psbasemap('-Bg45a90f15:"IMU Heading Offset [\260]":/ga20f10:"Frequency":WeSn');
00ed1e8dcfa4 2022 A16N pre-cruise
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 53
diff changeset
   513
    }
33
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   514
	GMT_unitcoords();
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   515
	GMT_pstext('-F+f14,Helvetica,CornFlowerBlue+jTR -N');
39
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 36
diff changeset
   516
	if (defined($opt_o)) {
41
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 40
diff changeset
   517
		printf(GMT "0.99 1.06 -o %g\260 offset (%d%% agreement)\n",angle($HDG_offset),round(100*$modefrac));
39
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 36
diff changeset
   518
	} else {
41
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 40
diff changeset
   519
		printf(GMT "0.99 1.06 %g\260 offset (%d%% agreement)\n",angle($HDG_offset),round(100*$modefrac));
39
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 36
diff changeset
   520
	}
33
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   521
	GMT_pstext('-F+f14,Helvetica,blue+jTL -N');
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   522
	printf(GMT "0.01 1.06 $P{profile_id} $opt_a\n");
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   523
    GMT_end();
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   524
}
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   525
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   526
sub calc_hdg_offset($)
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   527
{
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   528
	my($verbose) = @_;
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   529
35
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 33
diff changeset
   530
	print(STDERR "\n\tRe-calculating IMU pitch/roll anomalies") if $verbose;
33
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   531
	($IMP_pitch_mean,$IMP_roll_mean,$nPR) = (0,0,0);
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   532
	for (my($ens)=$LADCP_begin; $ens<=$LADCP_end; $ens++) {
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   533
		my($r) = int(($LADCP{ENSEMBLE}[$ens]->{ELAPSED_TIME} + $IMP{TIME_LAG} - $ants_[0][$elapsedF]) / $IMP{DT});
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   534
		if ($r < 0 && $ens == $LADCP_begin) {
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   535
			$r = int(($LADCP{ENSEMBLE}[++$ens]->{ELAPSED_TIME} + $IMP{TIME_LAG} - $ants_[0][$elapsedF]) / $IMP{DT})
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   536
				while ($r < 0);
35
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 33
diff changeset
   537
			printf(STDERR "\n\tIMU data begin with instrument already in water => skipping %ds of LADCP data",
33
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   538
				$LADCP{ENSEMBLE}[$ens]->{ELAPSED_TIME}-$LADCP{ENSEMBLE}[$LADCP_begin]->{ELAPSED_TIME})
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   539
					if ($verbose);
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   540
			$LADCP_begin = $ens;
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   541
		}
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   542
		if ($r > $#ants_) {
35
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 33
diff changeset
   543
			printf(STDERR "\n\tIMU data end while instrument is still in water => truncating %ds of LADCP data",
33
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   544
				$LADCP{ENSEMBLE}[$LADCP_end]->{ELAPSED_TIME}-$LADCP{ENSEMBLE}[$ens]->{ELAPSED_TIME})
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   545
					if ($verbose);
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   546
			$LADCP_end = $ens - 1;
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   547
			last;
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   548
		}
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   549
		next unless numberp($IMP{TILT_AZIMUTH}[$r]);
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   550
		$nPR++;
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   551
		$IMP_pitch_mean += $ants_[$r][$pitchF];
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   552
		$IMP_roll_mean	+= $ants_[$r][$rollF];
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   553
	}
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   554
	$IMP_pitch_mean /= $nPR;
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   555
	$IMP_roll_mean /= $nPR;
40
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 39
diff changeset
   556
33
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   557
	for (my($ens)=$LADCP_begin; $ens<=$LADCP_end; $ens++) {
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   558
		my($r) = int(($LADCP{ENSEMBLE}[$ens]->{ELAPSED_TIME} + $IMP{TIME_LAG} - $ants_[0][$elapsedF]) / $IMP{DT});
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   559
		next unless numberp($IMP{TILT_AZIMUTH}[$r]);
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   560
		$LADCP{ENSEMBLE}[$ens]->{IMP_TILT_AZIMUTH} =
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   561
			$IMP{TILT_AZIMUTH}[$r] = tilt_azimuth($ants_[$r][$pitchF]-$IMP_pitch_mean,
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   562
												  $ants_[$r][$rollF] -$IMP_roll_mean);
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   563
		$LADCP{ENSEMBLE}[$ens]->{IMP_TILT_ANOM} =
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   564
			$IMP{TILT_ANOM}[$r] = angle_from_vertical($ants_[$r][$pitchF]-$IMP_pitch_mean,
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   565
													  $ants_[$r][$rollF] -$IMP_roll_mean);
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   566
	}
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   567
	
35
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 33
diff changeset
   568
	printf(STDERR "\n\t\tIMU mean pitch/roll: %.1f/%.1f deg",$IMP_pitch_mean,$IMP_roll_mean)
33
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   569
			if $verbose;
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   570
	
39
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 36
diff changeset
   571
	my($dhist_binsize,$dhist_min_pirom,$dhist_min_mfrac) = split(/,/,$opt_e);
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 36
diff changeset
   572
	croak("$0: cannot decode -e $opt_e\n")
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 36
diff changeset
   573
		unless ($dhist_binsize > 0 && $dhist_min_pirom > 0 && $dhist_min_mfrac >= 0);
33
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   574
	
39
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 36
diff changeset
   575
	my(@dhist); my($nhist) = my($modeFreq) = 0;
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 36
diff changeset
   576
	for (my($ens)=$LADCP_begin; $ens<=$LADCP_end; $ens++) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 36
diff changeset
   577
		my($r) = int(($LADCP{ENSEMBLE}[$ens]->{ELAPSED_TIME} + $IMP{TIME_LAG} - $ants_[0][$elapsedF]) / $IMP{DT});
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 36
diff changeset
   578
		next unless numberp($IMP{TILT_AZIMUTH}[$r]);
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 36
diff changeset
   579
		next unless (abs($ants_[$r][$pitchF]-$IMP_pitch_mean) >= $dhist_min_pirom &&
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 36
diff changeset
   580
					 abs($ants_[$r][$rollF] -$IMP_roll_mean) >= $dhist_min_pirom);
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 36
diff changeset
   581
		$dhist[int(angle_pos($LADCP{ENSEMBLE}[$ens]->{TILT_AZIMUTH}-$IMP{TILT_AZIMUTH}[$r])/$dhist_binsize+0.5)]++;
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 36
diff changeset
   582
		$nhist++;
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 36
diff changeset
   583
	}
54
00ed1e8dcfa4 2022 A16N pre-cruise
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 53
diff changeset
   584
	unless ($nhist) {
00ed1e8dcfa4 2022 A16N pre-cruise
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 53
diff changeset
   585
		print(STDERR "$0: empty histogram\n");
00ed1e8dcfa4 2022 A16N pre-cruise
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 53
diff changeset
   586
		return (0,$IMP_pitch_mean,$IMP_roll_mean);
00ed1e8dcfa4 2022 A16N pre-cruise
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 53
diff changeset
   587
    }
33
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   588
	
39
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 36
diff changeset
   589
	if (defined($opt_o)) {												# set heading offset, either with -o
54
00ed1e8dcfa4 2022 A16N pre-cruise
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 53
diff changeset
   590
		$HDG_offset = angle_pos($opt_o);
39
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 36
diff changeset
   591
	} else {															# or from the data
33
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   592
		$HDG_offset = 0;
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   593
		for (my($i)=1; $i<@dhist-1; $i++) { 							# make sure mode is not on edge
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   594
			$HDG_offset = $i if ($dhist[$i] >= $dhist[$HDG_offset]);
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   595
		}
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   596
		$HDG_offset *= $dhist_binsize;
39
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 36
diff changeset
   597
	}
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 36
diff changeset
   598
41
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 40
diff changeset
   599
	my($modefrac) = ($dhist[$HDG_offset/$dhist_binsize]+$dhist[$HDG_offset/$dhist_binsize-1]+$dhist[$HDG_offset/$dhist_binsize+1]) / $nhist;
39
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 36
diff changeset
   600
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 36
diff changeset
   601
	unless (defined($opt_o)) {	    									# make sure data are consistent (unless -o is used)
33
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   602
		if ($opt_f) {
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   603
			printf(STDERR "\n\nIGNORED WARNING (-f): Cannot determine reliable heading offset; $HDG_offset+/-$dhist_binsize deg accounts for only %f%% of total\n",$modefrac*100)
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   604
				if ($modefrac < $dhist_min_mfrac);
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   605
		} else {
53
95af2535e4bb after whoosher merge
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 52
diff changeset
   606
			if ($modefrac < $dhist_min_mfrac) {
95af2535e4bb after whoosher merge
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 52
diff changeset
   607
				print(STDERR "\n") if $verbose;
95af2535e4bb after whoosher merge
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 52
diff changeset
   608
				croak(sprintf("$0: Cannot determine reliable heading offset; $HDG_offset+/-$dhist_binsize deg accounts for only %.1f%% of total\n",$modefrac*100))
95af2535e4bb after whoosher merge
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 52
diff changeset
   609
            }
33
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   610
		}
39
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 36
diff changeset
   611
	}
33
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   612
	
39
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 36
diff changeset
   613
	printf(STDERR "\n\t") if $verbose;
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 36
diff changeset
   614
	if ($opt_o) {
41
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 40
diff changeset
   615
		printf(STDERR "IMU heading offset = -o %g deg (%d%% agreement)\n",angle($HDG_offset),round(100*$modefrac))
39
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 36
diff changeset
   616
			if $verbose;
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 36
diff changeset
   617
	} else {
41
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 40
diff changeset
   618
		printf(STDERR "IMU heading offset = %g deg (%d%% agreement)\n",angle($HDG_offset),round(100*$modefrac))
39
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 36
diff changeset
   619
			if $verbose;
33
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   620
	}
39
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 36
diff changeset
   621
54
00ed1e8dcfa4 2022 A16N pre-cruise
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 53
diff changeset
   622
	pl_hdg_offset($dhist_binsize,$modefrac,@dhist);
00ed1e8dcfa4 2022 A16N pre-cruise
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 53
diff changeset
   623
33
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   624
	return ($HDG_offset,$IMP_pitch_mean,$IMP_roll_mean);
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   625
}
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   626
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   627
#-----------------------------------------------------------
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   628
# rot_IMP()
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   629
# 	- rotate IMP Data Into LADCP Instrument Coords
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   630
#	- also replaced pitch/roll by corresponding anomalies!!!
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   631
#-----------------------------------------------------------
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   632
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   633
sub rot_IMP($)
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   634
{
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   635
	my($verbose) = @_;
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   636
	my($crho) = cos(rad($HDG_offset));
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   637
	my($srho) = sin(rad($HDG_offset));
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   638
	
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   639
	for (my($ens)=$LADCP_begin; $ens<=$LADCP_end; $ens++) {
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   640
		my($r) = int(($LADCP{ENSEMBLE}[$ens]->{ELAPSED_TIME} + $IMP{TIME_LAG} - $ants_[0][$elapsedF]) / $IMP{DT});
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   641
	
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   642
		if (numbersp($ants_[$r][$pitchF],$ants_[$r][$rollF])) { 				# pitch/roll
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   643
			my($rot_p) = (($ants_[$r][$pitchF]-$IMP_pitch_mean)*$crho +
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   644
						  ($ants_[$r][$rollF]-$IMP_roll_mean)*$srho);
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   645
			my($rot_r) = (-($ants_[$r][$pitchF]-$IMP_pitch_mean)*$srho +
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   646
						   ($ants_[$r][$rollF]-$IMP_roll_mean)*$crho);
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   647
			$ants_[$r][$pitchF] = $rot_p;
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   648
			$ants_[$r][$rollF]	= $rot_r;
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   649
		}
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   650
	    
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   651
		$ants_[$r][$hdgF] = angle_pos($ants_[$r][$hdgF] - $HDG_offset)
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   652
			if numberp($ants_[$r][$hdgF]);
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   653
	}
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   654
	
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   655
	my($rot_p) =  $IMP_pitch_mean * $crho + $IMP_roll_mean * $srho; 			# mean pitch roll
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   656
	my($rot_r) = -$IMP_pitch_mean * $srho + $IMP_roll_mean * $crho;
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   657
	$IMP_pitch_mean = $rot_p;
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   658
	$IMP_roll_mean	= $rot_r;
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   659
	
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   660
	print(STDERR "\n") if $verbose;
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   661
	return ($IMP_pitch_mean,$IMP_roll_mean);
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   662
}
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   663
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   664
#----------------------------------------------------------------------
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   665
# create_merge_plots()
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   666
#   - tilt time series (*_time_lag.ps)
39
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 36
diff changeset
   667
#	- heading errors (*_hdg_err.ps)
33
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   668
#----------------------------------------------------------------------
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   669
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   670
sub create_merge_plots($$$)
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   671
{
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   672
    my($basename,$plotsize,$verbose) = @_;
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   673
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   674
	#---------------------------------
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   675
	# Tilt Time Series (*_time_lag.ps)
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   676
	#---------------------------------
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   677
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   678
	my($mint,$maxt) = (99,-99);
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   679
	for (my($ens)=$LADCP_begin; $ens<=$LADCP_end; $ens++) {
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   680
		if (($LADCP{ENSEMBLE}[$ens]->{ELAPSED_TIME}-$LADCP{ENSEMBLE}[$LADCP_begin]->{ELAPSED_TIME} <= 180) ||
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   681
			($LADCP{ENSEMBLE}[$LADCP_end]->{ELAPSED_TIME}-$LADCP{ENSEMBLE}[$ens]->{ELAPSED_TIME} <= 180)) {
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   682
				$mint = $LADCP{ENSEMBLE}[$ens]->{IMP_TILT_ANOM} if ($LADCP{ENSEMBLE}[$ens]->{IMP_TILT_ANOM} < $mint);
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   683
				$maxt = $LADCP{ENSEMBLE}[$ens]->{IMP_TILT_ANOM} if ($LADCP{ENSEMBLE}[$ens]->{IMP_TILT_ANOM} > $maxt);
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   684
				$mint = $LADCP{ENSEMBLE}[$ens]->{TILT_ANOM} if ($LADCP{ENSEMBLE}[$ens]->{TILT_ANOM} < $mint);
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   685
				$maxt = $LADCP{ENSEMBLE}[$ens]->{TILT_ANOM} if ($LADCP{ENSEMBLE}[$ens]->{TILT_ANOM} > $maxt);
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   686
		}
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   687
	}
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   688
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   689
	my($xmin,$xmax) = (-90,90);
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   690
	my($ymin) = round($mint-0.5);
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   691
	my($ymax) = round($maxt+0.5);
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   692
	
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   693
	GMT_begin("${basename}_time_lag.ps","-JX${plotsize}","-R$xmin/$xmax/$ymin/$ymax",'-X6 -Y4 -P');
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   694
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   695
	GMT_psxy('-W2,coral');
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   696
	for (my($ens) = $LADCP_begin + 5; 
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   697
		 $LADCP{ENSEMBLE}[$ens]->{ELAPSED_TIME}-$LADCP{ENSEMBLE}[$LADCP_begin]->{ELAPSED_TIME} <= 90;
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   698
		 $ens++) {
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   699
			printf(GMT "%f %f\n",$LADCP{ENSEMBLE}[$ens]->{ELAPSED_TIME}-$LADCP{ENSEMBLE}[$LADCP_begin]->{ELAPSED_TIME},
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   700
								 $LADCP{ENSEMBLE}[$ens]->{IMP_TILT_ANOM});
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   701
	}
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   702
	GMT_psxy('-W1');
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   703
	for (my($ens) = $LADCP_begin + 5; 
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   704
		 $LADCP{ENSEMBLE}[$ens]->{ELAPSED_TIME}-$LADCP{ENSEMBLE}[$LADCP_begin]->{ELAPSED_TIME} <= 90;
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   705
		 $ens++) {
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   706
			printf(GMT "%f %f\n",$LADCP{ENSEMBLE}[$ens]->{ELAPSED_TIME}-$LADCP{ENSEMBLE}[$LADCP_begin]->{ELAPSED_TIME},
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   707
								 $LADCP{ENSEMBLE}[$ens]->{TILT_ANOM});
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   708
	}
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   709
	GMT_psxy('-W2,SeaGreen');
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   710
	for (my($ens) = $LADCP_end - 5; 
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   711
		 $LADCP{ENSEMBLE}[$LADCP_end]->{ELAPSED_TIME}-$LADCP{ENSEMBLE}[$ens]->{ELAPSED_TIME} <= 90;
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   712
		 $ens--) {
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   713
			printf(GMT "%f %f\n",$LADCP{ENSEMBLE}[$ens]->{ELAPSED_TIME}-$LADCP{ENSEMBLE}[$LADCP_end]->{ELAPSED_TIME},
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   714
								 $LADCP{ENSEMBLE}[$ens]->{IMP_TILT_ANOM});
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   715
	}
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   716
	GMT_psxy('-W1');
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   717
	for (my($ens) = $LADCP_end - 5; 
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   718
		 $LADCP{ENSEMBLE}[$LADCP_end]->{ELAPSED_TIME}-$LADCP{ENSEMBLE}[$ens]->{ELAPSED_TIME} <= 90;
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   719
		 $ens--) {
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   720
			printf(GMT "%f %f\n",$LADCP{ENSEMBLE}[$ens]->{ELAPSED_TIME}-$LADCP{ENSEMBLE}[$LADCP_end]->{ELAPSED_TIME},
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   721
								 $LADCP{ENSEMBLE}[$ens]->{TILT_ANOM});
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   722
	}
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   723
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   724
    GMT_psbasemap('-Bg30a30f10:"Elapsed Time [sec]":/g5a5f1:"Tilt Magnitude [\260]":WeSn');
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   725
	GMT_unitcoords();
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   726
    GMT_pstext('-F+f14,Helvetica,Coral+jTL');
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   727
	    printf(GMT "0.52 0.98 downcast\n");
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   728
    GMT_pstext('-F+f14,Helvetica,SeaGreen+jTR');
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   729
	    printf(GMT "0.48 0.98 upcast\n");	    
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   730
	GMT_psxy('-W4,LightSkyBlue');
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   731
		printf(GMT "0.5 0\n0.5 1\n");
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   732
    GMT_pstext('-F+f14,Helvetica,blue+jTL -N');
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   733
	    printf(GMT "0.01 1.06 $P{profile_id} $opt_a\n");
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   734
	GMT_end();
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   735
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   736
	#------------------------------
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   737
	# Heading Errors (*_hdg_err.ps)
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   738
	#------------------------------
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   739
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   740
	my(@err_binned,@err_nsamp);
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   741
	my($sumErr) = 0; my($nErr) = $LADCP_end - $LADCP_begin + 1;
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   742
	for (my($ens)=$LADCP_begin; $ens<=$LADCP_end; $ens++) {
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   743
		next unless ($LADCP{ENSEMBLE}[$ens]->{TILT_ANOM} < 10);
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   744
		my($r) = int(($LADCP{ENSEMBLE}[$ens]->{ELAPSED_TIME} + $IMP{TIME_LAG} - $ants_[0][$elapsedF]) / $IMP{DT});
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   745
		my($bi) = int($ants_[$r][$hdgF]/5);
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   746
		my($err) = angle_diff($ants_[$r][$hdgF],$LADCP{ENSEMBLE}[$ens]->{HEADING});
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   747
		next unless numberp($err);
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   748
		$err_binned[$bi] += $err; $sumErr += $err;
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   749
		$err_nsamp[$bi]++;
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   750
	}
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   751
	for (my($bi)=0; $bi<@err_nsamp; $bi++) {
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   752
		$err_binned[$bi] = ($err_nsamp[$bi] >= 5)
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   753
						 ? $err_binned[$bi]/$err_nsamp[$bi]
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   754
						 : undef;
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   755
	}
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   756
	my(@err_dssq);
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   757
	for (my($ens)=$LADCP_begin; $ens<=$LADCP_end; $ens++) {
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   758
		next unless ($LADCP{ENSEMBLE}[$ens]->{TILT_ANOM} < 10);
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   759
		my($r) = int(($LADCP{ENSEMBLE}[$ens]->{ELAPSED_TIME} + $IMP{TIME_LAG} - $ants_[0][$elapsedF]) / $IMP{DT});
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   760
		my($bi) = int($ants_[$r][$hdgF]/5);
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   761
		my($err) = angle_diff($ants_[$r][$hdgF],$LADCP{ENSEMBLE}[$ens]->{HEADING});
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   762
		next unless numberp($err);
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   763
		$err_dssq[$bi] += ($err-$err_binned[$bi])**2;
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   764
	}
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   765
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   766
	my($xmin,$xmax) = (0,360);
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   767
	my($ymin,$ymax) = (-45,45);
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   768
	GMT_begin("${basename}_hdg_err.ps","-JX${plotsize}","-R$xmin/$xmax/$ymin/$ymax",'-X6 -Y4 -P');
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   769
	GMT_psxy('-Ey/3,CornFlowerBlue');
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   770
	my($sumSq,$sumBe) = my($nSq,$nBe) = (0,0);
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   771
	for (my($bi)=0; $bi<@err_binned; $bi++) {
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   772
		next unless ($err_nsamp[$bi] >= 2);
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   773
		next unless numberp($err_binned[$bi]);
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   774
		$sumSq += $err_binned[$bi]**2; $nSq++;
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   775
		$sumBe += $err_binned[$bi]; $nBe++;
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   776
#		printf(GMT "%f %f\n",2.5+5*$bi,$err_binned[$bi]);
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   777
		printf(GMT "%f %f %f\n",2.5+5*$bi,$err_binned[$bi],sqrt($err_dssq[$bi]/($err_nsamp[$bi]-1)));
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   778
	}
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   779
    GMT_psbasemap('-Bg90a45f5:"ADCP Heading [\260]":/g15a15f5:"ADCP Compass Error [\260]":WeSn');
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   780
	GMT_unitcoords();
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   781
    GMT_pstext('-F+f12,Helvetica,CornFlowerBlue+jTR -Gwhite -C25%');
54
00ed1e8dcfa4 2022 A16N pre-cruise
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 53
diff changeset
   782
	my($rms) = ($nSq > 0) ? sqrt($sumSq/$nSq) : NaN;
00ed1e8dcfa4 2022 A16N pre-cruise
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 53
diff changeset
   783
    printf(GMT "0.98 0.98 rms error = %7.1f\260\n",$rms);
41
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 40
diff changeset
   784
    printf(GMT "0.98 0.94 time-averaged error = %7.1f\260\n",$sumErr/$nErr);
54
00ed1e8dcfa4 2022 A16N pre-cruise
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 53
diff changeset
   785
	my($havgerr) = ($nBe > 0) ? $sumBe/$nBe : NaN;
00ed1e8dcfa4 2022 A16N pre-cruise
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 53
diff changeset
   786
    printf(GMT "0.98 0.90 heading-averaged error = %7.1f\260\n",$havgerr);
33
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   787
    GMT_pstext('-F+f14,Helvetica,blue+jTL -N');
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   788
    printf(GMT "0.01 1.06 $P{profile_id} $opt_a\n");
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   789
    GMT_end();
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   790
	                        
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   791
	print(STDERR "\n") if $verbose;
54
00ed1e8dcfa4 2022 A16N pre-cruise
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 53
diff changeset
   792
	return ($rms,$sumErr/$nErr,$havgerr);
33
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   793
}
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   794
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   795
#----------------------------------------------------------------------
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   796
# output_merged()
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   797
#	- output merged data
39
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 36
diff changeset
   798
#	- there must be exactly one record for each PD0 ensemble
33
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   799
#----------------------------------------------------------------------
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   800
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   801
sub output_merged($)
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   802
{
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   803
	my($verbose) = @_;
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   804
	
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   805
	my($tazimF)		= &antsNewField('tilt_azimuth');
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   806
	my($tanomF)		= &antsNewField('tilt_magnitude');
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   807
	my($L_tazimF) 	= &antsNewField('LADCP_tilt_azimuth');
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   808
	my($L_tanomF) 	= &antsNewField('LADCP_tilt_magnitude');
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   809
	my($L_elapsedF) = &antsNewField('LADCP_elapsed');
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   810
	my($L_ensF) 	= &antsNewField('LADCP_ens');
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   811
	my($L_depthF) 	= &antsNewField('LADCP_depth_estimate');
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   812
	my($L_pitchF)	= &antsNewField('LADCP_pitch');
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   813
	my($L_rollF)	= &antsNewField('LADCP_roll');
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   814
	my($L_hdgF)		= &antsNewField('LADCP_hdg');
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   815
	my($dcF)		= &antsNewField('downcast');
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   816
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   817
	for (my($ens)=0; $ens<=$#{$LADCP{ENSEMBLE}}; $ens++) {
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   818
		my($r) = int(($LADCP{ENSEMBLE}[$ens]->{ELAPSED_TIME} + $IMP{TIME_LAG} - $ants_[0][$elapsedF]) / $IMP{DT});
36
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 35
diff changeset
   819
#		print(STDERR "$r\[$ens\,$LADCP{ENSEMBLE}[$ens]->{NUMBER}] = int(($LADCP{ENSEMBLE}[$ens]->{ELAPSED_TIME} + $IMP{TIME_LAG} - $ants_[0][$elapsedF]) / $IMP{DT});\n");
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 35
diff changeset
   820
		if ($r<0 || $r>$#ants_) {												# ensemble beyond limits of IMU data
33
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   821
			my(@out);
36
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 35
diff changeset
   822
			if ($ens >= $LADCP_begin && $ens <= $LADCP_end) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 35
diff changeset
   823
				$out[$elapsedF] 	= $LADCP{ENSEMBLE}[$ens]->{ELAPSED_TIME} + $IMP{TIME_LAG};
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 35
diff changeset
   824
				$out[$L_elapsedF] 	= $LADCP{ENSEMBLE}[$ens]->{ELAPSED_TIME};
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 35
diff changeset
   825
			}
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 35
diff changeset
   826
			$out[$L_ensF]			= $LADCP{ENSEMBLE}[$ens]->{NUMBER};
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 35
diff changeset
   827
			$out[$dcF]				= ($ens <= $LADCP_bottom);
33
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   828
			&antsOut(@out);
36
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 35
diff changeset
   829
		} elsif ($ens < $LADCP_begin || $ens > $LADCP_end) {					# pre deplyment or post recovery
39
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 36
diff changeset
   830
			my(@out);															# correct IMP record NOT known
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 36
diff changeset
   831
			$out[$L_elapsedF] 		= undef;
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 36
diff changeset
   832
			$out[$L_ensF] 			= $LADCP{ENSEMBLE}[$ens]->{NUMBER};
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 36
diff changeset
   833
			$out[$L_pitchF]			= $LADCP{ENSEMBLE}[$ens]->{GIMBAL_PITCH} - $LADCP_pitch_mean;
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 36
diff changeset
   834
			$out[$L_rollF]			= $LADCP{ENSEMBLE}[$ens]->{ROLL} - $LADCP_roll_mean;
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 36
diff changeset
   835
			$out[$L_hdgF]			= $LADCP{ENSEMBLE}[$ens]->{HEADING};							    
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 36
diff changeset
   836
			&antsOut(@out);
33
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   837
		} else {
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   838
			$ants_[$r][$tazimF] 	= angle($LADCP{ENSEMBLE}[$ens]->{IMP_TILT_AZIMUTH} + $HDG_offset);
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   839
			$ants_[$r][$tanomF] 	= $LADCP{ENSEMBLE}[$ens]->{IMP_TILT_ANOM};
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   840
			$ants_[$r][$L_tazimF]	= $LADCP{ENSEMBLE}[$ens]->{TILT_AZIMUTH};
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   841
			$ants_[$r][$L_tanomF]	= $LADCP{ENSEMBLE}[$ens]->{TILT_ANOM};
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   842
			$ants_[$r][$L_elapsedF] = $LADCP{ENSEMBLE}[$ens]->{ELAPSED_TIME};
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   843
			$ants_[$r][$L_ensF] 	= $LADCP{ENSEMBLE}[$ens]->{NUMBER};
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   844
			$ants_[$r][$L_depthF]	= $LADCP{ENSEMBLE}[$ens]->{DEPTH};
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   845
			$ants_[$r][$L_pitchF]	= $LADCP{ENSEMBLE}[$ens]->{GIMBAL_PITCH} - $LADCP_pitch_mean;
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   846
			$ants_[$r][$L_rollF]	= $LADCP{ENSEMBLE}[$ens]->{ROLL} - $LADCP_roll_mean;
39
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 36
diff changeset
   847
			$ants_[$r][$L_hdgF] 	= $LADCP{ENSEMBLE}[$ens]->{HEADING};							    
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 36
diff changeset
   848
			$ants_[$r][$dcF]        = ($ens <= $LADCP_bottom) ? 1 : 0;
33
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   849
			&antsOut(@{$ants_[$r]});
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   850
		}
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   851
	}
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   852
	
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   853
	print(STDERR "\n") if $verbose;
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   854
}
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   855
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   856
#----------------------------------------------------------------------
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   857
f891ea33a728 after Hamburg visit
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   858
1; # return true for all the world to see