mrqcof.pl
author Andreas Thurnherr <ant@ldeo.columbia.edu>
Mon, 13 Apr 2020 11:06:22 -0400
changeset 40 c1803ae2540f
parent 0 a5233793bf69
permissions -rw-r--r--
.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     1
#======================================================================
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     2
#                    M R Q C O F . P L 
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     3
#                    doc: Wed Feb 24 15:14:39 1999
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     4
#                    dlm: Thu Feb 27 09:40:41 2003
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     5
#                    (c) 1999 A.M. Thurnherr
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     6
#                    uE-Info: 30 0 NIL 0 0 72 2 2 4 NIL ofnI
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     7
#======================================================================
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     8
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     9
# MRQCOF routine from Numerical Recipes adapted for ANTS
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    10
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    11
# Notes:
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    12
#	- data which has $antsFlagged[] TRUE is ignored
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    13
#	- x,y,sig are field numbers for data in $ants_
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    14
#	- if sig is a negative number, -sig is used as constant input stddev
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    15
#	- @A, @listA, @alpha, @beta, $chisq, &funcs are passed as references
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    16
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    17
# HISTORY:
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    18
# 	- Feb 24, 1999: - ported from c-source
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    19
#	- Jul 31, 1999: - BUG: first elt in $ants_ was ignored!
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    20
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    21
require "$ANTS/nrutil.pl";
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    22
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    23
sub mrqcof($$$$$$$$$)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    24
{
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    25
	my($xfnr,$yfnr,$sig,$AR,$listAR,$alphaR,$betaR,$chiSqR,$funcsR) = @_;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    26
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    27
	my($k,$j,$i);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    28
	my($ymod,$wt,$sig2i,$dy,@dyda);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    29
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    30
	&vector(\@dyda,1,$#{$AR});
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    31
	for ($j=1; $j<=$#{$listAR}; $j++) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    32
		for ($k=1; $k<=$j; $k++) { $alphaR->[$j][$k] = 0.0; }
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    33
		$betaR->[$j] = 0.0;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    34
	}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    35
	$$chiSqR = 0.0;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    36
	for ($i=0; $i<=$#ants_; $i++) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    37
		next if ($antsFlagged[$i]);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    38
	    $ymod = &$funcsR($ants_[$i][$xfnr],$AR,\@dyda);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    39
	    if ($sig > 0) {									# field number
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    40
			$sig2i = 1.0/($ants_[$i][$sig]*$ants_[$i][$sig]);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    41
		} else {										# const value
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    42
			$sig2i = 1.0/($sig*$sig);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    43
		}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    44
		$dy = $ants_[$i][$yfnr] - $ymod;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    45
		for ($j=1; $j<=$#{$listAR}; $j++) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    46
			$wt = $dyda[$listAR->[$j]]*$sig2i;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    47
			for ($k=1; $k<=$j; $k++) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    48
				$alphaR->[$j][$k] += $wt*$dyda[$listAR->[$k]];
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    49
#				print(STDERR "alpha[$j][$k] = $alphaR->[$j][$k]\n");
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    50
#				print(STDERR "$wt,$dyda[$listAR->[$k]]\n");
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    51
			}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    52
			$betaR->[$j] += $dy*$wt;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    53
		}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    54
		$$chiSqR += $dy*$dy*$sig2i;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    55
	}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    56
	for ($j=2; $j<=$#{$listAR}; $j++) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    57
		for ($k=1; $k<=$j-1; $k++) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    58
			$alphaR->[$k][$j] = $alphaR->[$j][$k];
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    59
		}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    60
	}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    61
}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    62
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    63
1;