RDI_Coords.pl
changeset 13 b176da8559b3
parent 8 7ad053ea1742
child 14 8c79b38a7086
equal deleted inserted replaced
12:0f89b1523648 13:b176da8559b3
     1 #======================================================================
     1 #======================================================================
     2 #                    R D I _ C O O R D S . P L 
     2 #                    R D I _ C O O R D S . P L 
     3 #                    doc: Sun Jan 19 17:57:53 2003
     3 #                    doc: Sun Jan 19 17:57:53 2003
     4 #                    dlm: Sun Jan 15 20:04:13 2012
     4 #                    dlm: Wed Aug  7 11:18:51 2013
     5 #                    (c) 2003 A.M. Thurnherr
     5 #                    (c) 2003 A.M. Thurnherr
     6 #                    uE-Info: 33 74 NIL 0 0 72 0 2 4 NIL ofnI
     6 #                    uE-Info: 199 23 NIL 0 0 72 0 2 4 NIL ofnI
     7 #======================================================================
     7 #======================================================================
     8 
     8 
     9 # RDI Workhorse Coordinate Transformations
     9 # RDI Workhorse Coordinate Transformations
    10 
    10 
    11 # HISTORY:
    11 # HISTORY:
    29 #	Dec 20, 2010: - cosmetics
    29 #	Dec 20, 2010: - cosmetics
    30 #	Dec 23, 2010: - added &velBeamToBPInstrument
    30 #	Dec 23, 2010: - added &velBeamToBPInstrument
    31 #	Jan 22, 2011: - made velApplyHdgBias calculate sin/cos every time to allow
    31 #	Jan 22, 2011: - made velApplyHdgBias calculate sin/cos every time to allow
    32 #				    per-ensemble corrections
    32 #				    per-ensemble corrections
    33 #	Jan 15, 2012: - replaced defined(@...) by (@...) to get rid of warning
    33 #	Jan 15, 2012: - replaced defined(@...) by (@...) to get rid of warning
       
    34 #	Aug  7, 2013: - BUG: &velBeamToBPInstrument did not return any val unless
       
    35 #						 all beam velocities are defined
    34 
    36 
    35 use strict;
    37 use strict;
    36 use POSIX;
    38 use POSIX;
    37 
    39 
    38 my($PI) = 3.14159265358979;
    40 my($PI) = 3.14159265358979;
   157 	sub velBeamToBPEarth(@)
   159 	sub velBeamToBPEarth(@)
   158 	{
   160 	{
   159 		my($dta,$ens,$b1,$b2,$b3,$b4) = @_;
   161 		my($dta,$ens,$b1,$b2,$b3,$b4) = @_;
   160 		my($v12,$w12,$v34,$w34);
   162 		my($v12,$w12,$v34,$w34);
   161 
   163 
   162 		return (undef,undef,undef,undef)
       
   163 			unless defined($b1) && defined($b2) && defined($b3) && defined($b4);
       
   164 
       
   165 		unless (defined($TwoCosBAngle)) {
   164 		unless (defined($TwoCosBAngle)) {
   166 			$TwoCosBAngle = 2 * cos(rad($dta->{BEAM_ANGLE}));
   165 			$TwoCosBAngle = 2 * cos(rad($dta->{BEAM_ANGLE}));
   167 			$TwoSinBAngle = 2 * sin(rad($dta->{BEAM_ANGLE}));
   166 			$TwoSinBAngle = 2 * sin(rad($dta->{BEAM_ANGLE}));
   168 		}
   167 		}
   169 		my($roll)  = rad($dta->{ENSEMBLE}[$ens]->{ROLL});							
   168 		my($roll)  = rad($dta->{ENSEMBLE}[$ens]->{ROLL});							
   194 			$v12 = $v12_ic*$cr + $w12_ic*$sr + $w34_ic*$sp;
   193 			$v12 = $v12_ic*$cr + $w12_ic*$sr + $w34_ic*$sp;
   195 			$w34 = $w34_ic*$cp - $v34_ic*$sp - $v12_ic*$sr;
   194 			$w34 = $w34_ic*$cp - $v34_ic*$sp - $v12_ic*$sr;
   196         	$v34 = $v34_ic*$cp + $w34_ic*$sp + $w12_ic*$sr;
   195         	$v34 = $v34_ic*$cp + $w34_ic*$sp + $w12_ic*$sr;
   197 		}
   196 		}
   198 
   197 
       
   198 		$v12=$w12=undef unless (defined($b1) && defined($b2));
       
   199 		$v34=$w34=undef unless (defined($b3) && defined($b4));
       
   200 
   199 		return ($v12,$w12,$v34,$w34);
   201 		return ($v12,$w12,$v34,$w34);
   200 	}
   202 	}
   201 }
   203 }
   202 
   204 
   203 #===================================================================
   205 #===================================================================