aboutsummaryrefslogtreecommitdiff
path: root/pkg/utilities/nttools/tmatch/getnorm.x
diff options
context:
space:
mode:
authorJoseph Hunkeler <jhunkeler@gmail.com>2015-07-08 20:46:52 -0400
committerJoseph Hunkeler <jhunkeler@gmail.com>2015-07-08 20:46:52 -0400
commitfa080de7afc95aa1c19a6e6fc0e0708ced2eadc4 (patch)
treebdda434976bc09c864f2e4fa6f16ba1952b1e555 /pkg/utilities/nttools/tmatch/getnorm.x
downloadiraf-linux-fa080de7afc95aa1c19a6e6fc0e0708ced2eadc4.tar.gz
Initial commit
Diffstat (limited to 'pkg/utilities/nttools/tmatch/getnorm.x')
-rw-r--r--pkg/utilities/nttools/tmatch/getnorm.x67
1 files changed, 67 insertions, 0 deletions
diff --git a/pkg/utilities/nttools/tmatch/getnorm.x b/pkg/utilities/nttools/tmatch/getnorm.x
new file mode 100644
index 00000000..fed277c6
--- /dev/null
+++ b/pkg/utilities/nttools/tmatch/getnorm.x
@@ -0,0 +1,67 @@
+include <math.h>
+
+#* HISTORY *
+#* B.Simon 24-Aug-94 original
+#* B.Simon 18-Sep-00 Revised computation of proj and added abnorm
+
+# GETNORM -- Compute the squared norm between two table rows
+
+procedure getnorm (in1, in2, ncol, col1, col2, row1, row2, weight, sphere,
+ proj, abnorm, norm)
+
+pointer in1 # i: first table descriptor
+pointer in2 # i: second table descriptor
+int ncol # i: number of match columns
+pointer col1[ARB] # i: match columns in first table
+pointer col2[ARB] # i: match columns in second table
+int row1 # i: row number in first table
+int row2 # i: row number in second table
+double weight[ARB] # i: weights used in computing norm
+bool sphere # i: apply spherical correction to first column?
+double proj # o: projection of norm on first axis
+double abnorm # o: norm, possibly without spherical correction
+double norm # o: norm (distance) between rows in two tables
+#--
+int i
+double val1, val2, dif
+
+begin
+ # Calculate first component of norm
+
+ call tbegtd (in1, col1[1], row1, val1)
+ call tbegtd (in2, col2[1], row2, val2)
+
+ dif = weight[1] * (val1 - val2)
+ proj = dif * dif
+ abnorm = proj
+
+ # Apply correction for spherical coordinates
+
+ if (sphere) {
+ if (dif > 180) {
+ dif = dif - 360
+ } else if (dif < -180) {
+ dif = dif + 360
+ }
+
+ call tbegtd (in1, col1[2], row1, val1)
+ call tbegtd (in2, col2[2], row2, val2)
+
+ val1 = 0.5 * weight[2] * (val1 + val2)
+ dif = dif * cos (DEGTORAD(val1))
+ }
+
+ # Compute remaining components
+
+ norm = dif * dif
+ do i = 2, ncol {
+ call tbegtd (in1, col1[i], row1, val1)
+ call tbegtd (in2, col2[i], row2, val2)
+
+ dif = weight[i] * (val1 - val2)
+ abnorm = abnorm + dif * dif
+ norm = norm + dif * dif
+ }
+
+end
+