aboutsummaryrefslogtreecommitdiff
path: root/noao/rv/rvidlines/idinit.x
diff options
context:
space:
mode:
Diffstat (limited to 'noao/rv/rvidlines/idinit.x')
-rw-r--r--noao/rv/rvidlines/idinit.x352
1 files changed, 352 insertions, 0 deletions
diff --git a/noao/rv/rvidlines/idinit.x b/noao/rv/rvidlines/idinit.x
new file mode 100644
index 00000000..b17f94a1
--- /dev/null
+++ b/noao/rv/rvidlines/idinit.x
@@ -0,0 +1,352 @@
+include <gset.h>
+include <math/curfit.h>
+include "identify.h"
+
+# ID_INIT -- Allocate identify structure
+
+procedure id_init (id, taskid)
+
+int taskid #I Task ID
+pointer id #O ID pointer
+
+begin
+ call calloc (id, LEN_IDSTRUCT, TY_STRUCT)
+
+ ID_TASK(id) = taskid
+ ID_NALLOC(id) = 20
+ ID_NFEATURES(id) = 0
+ ID_CURRENT(id) = 0
+ ID_NID(id) = 0
+ ID_DT(id) = NULL
+
+ call malloc (ID_IMAGE(id), SZ_FNAME, TY_CHAR)
+ call malloc (ID_SECTION(id), SZ_FNAME, TY_CHAR)
+ call malloc (ID_DATABASE(id), SZ_FNAME, TY_CHAR)
+ call malloc (ID_COORDLIST(id), SZ_FNAME, TY_CHAR)
+
+ call malloc (ID_PIX(id), ID_NALLOC(id), TY_DOUBLE)
+ call malloc (ID_FIT(id), ID_NALLOC(id), TY_DOUBLE)
+ call malloc (ID_USER(id), ID_NALLOC(id), TY_DOUBLE)
+ call malloc (ID_WTS(id), ID_NALLOC(id), TY_DOUBLE)
+ call malloc (ID_FWIDTHS(id), ID_NALLOC(id), TY_REAL)
+ call malloc (ID_FTYPES(id), ID_NALLOC(id), TY_INT)
+ call calloc (ID_LABEL(id), ID_NALLOC(id), TY_POINTER)
+end
+
+
+# ID_FREE -- Free identify structure.
+
+procedure id_free (id)
+
+pointer id # ID pointer
+
+int i
+pointer ptr
+
+begin
+ call mfree (ID_IMAGE(id), TY_CHAR)
+ call mfree (ID_SECTION(id), TY_CHAR)
+ call mfree (ID_DATABASE(id), TY_CHAR)
+ call mfree (ID_COORDLIST(id), TY_CHAR)
+ call mfree (ID_APS(id), TY_INT)
+
+ ptr = ID_LABEL(id)
+ do i = 1, ID_NALLOC(id) {
+ call mfree (Memi[ptr], TY_CHAR)
+ ptr = ptr + 1
+ }
+
+ call mfree (ID_PIX(id), TY_DOUBLE)
+ call mfree (ID_FIT(id), TY_DOUBLE)
+ call mfree (ID_USER(id), TY_DOUBLE)
+ call mfree (ID_WTS(id), TY_DOUBLE)
+ call mfree (ID_FWIDTHS(id), TY_REAL)
+ call mfree (ID_FTYPES(id), TY_INT)
+ call mfree (ID_LABEL(id), TY_POINTER)
+
+ if (ID_DT(id) != NULL)
+ call dtunmap (ID_DT(id))
+ call id_free1 (id)
+ call id_unmapll (id)
+ call gt_free (ID_GT(id))
+ call dcvfree (ID_CV(id))
+ call ic_closed (ID_IC(id))
+
+ call mfree (id, TY_STRUCT)
+end
+
+
+# ID_FREE1 -- Free saved identify structures.
+
+procedure id_free1 (id)
+
+pointer id # ID pointer
+
+int i, j
+pointer id1, ptr
+
+begin
+ for (i = 0; i < ID_NID(id); i = i + 1) {
+ id1 = Memi[ID_ID(id)+i]
+
+ ptr = ID_LABEL(id1)
+ do j = 1, ID_NALLOC(id1) {
+ call mfree (Memi[ptr], TY_CHAR)
+ ptr = ptr + 1
+ }
+
+ call mfree (ID_PIX(id1), TY_DOUBLE)
+ call mfree (ID_FIT(id1), TY_DOUBLE)
+ call mfree (ID_USER(id1), TY_DOUBLE)
+ call mfree (ID_WTS(id1), TY_DOUBLE)
+ call mfree (ID_FWIDTHS(id1), TY_REAL)
+ call mfree (ID_FTYPES(id1), TY_INT)
+ call mfree (ID_LABEL(id1), TY_POINTER)
+ if (ID_CV(id1) != NULL)
+ call dcvfree (ID_CV(id1))
+ if (ID_IC(id1) != NULL)
+ call ic_closed (ID_IC(id1))
+ call shdr_close (ID_SH(id1))
+ call mfree (id1, TY_STRUCT)
+ }
+ call mfree (ID_ID(id), TY_POINTER)
+
+ ID_NID(id) = 0
+end
+
+
+# ID_SAVEID -- Save identify information by line.
+
+procedure id_saveid (id, line)
+
+pointer id # IDENTIFY structure
+int line[2] # Save as line
+
+int i
+pointer id1
+
+begin
+ # Check if already saved. If not saved allocate memory.
+ for (i = 1; i <= ID_NID(id); i = i + 1) {
+ id1 = Memi[ID_ID(id)+i-1]
+ if (ID_LINE(id1,1) == line[1] && ID_LINE(id1,2) == line[2])
+ break
+ }
+
+ call id_sid (id, i)
+end
+
+
+
+# ID_SID -- Save identify information by index.
+
+procedure id_sid (id, n)
+
+pointer id # IDENTIFY structure
+int n # Save as index
+
+int i, j, dcvstati(), strlen()
+pointer sp, id1, coeffs, ptr1, ptr2
+
+begin
+ if (n > ID_NID(id)) {
+ if (n == 1)
+ call malloc (ID_ID(id), 1, TY_POINTER)
+ else
+ call realloc (ID_ID(id), n, TY_POINTER)
+ call calloc (id1, LEN_IDSTRUCT, TY_STRUCT)
+ Memi[ID_ID(id)+n-1] = id1
+ ID_NID(id) = n
+ } else
+ id1 = Memi[ID_ID(id)+n-1]
+
+ # Allocate or reallocate memory for features and copy them.
+ if (ID_NFEATURES(id) > 0) {
+ if (ID_NALLOC(id1) == 0) {
+ call malloc (ID_PIX(id1), ID_NFEATURES(id), TY_DOUBLE)
+ call malloc (ID_FIT(id1), ID_NFEATURES(id), TY_DOUBLE)
+ call malloc (ID_USER(id1), ID_NFEATURES(id), TY_DOUBLE)
+ call malloc (ID_WTS(id1), ID_NFEATURES(id), TY_DOUBLE)
+ call malloc (ID_FWIDTHS(id1), ID_NFEATURES(id), TY_REAL)
+ call malloc (ID_FTYPES(id1), ID_NFEATURES(id), TY_INT)
+ call calloc (ID_LABEL(id1), ID_NFEATURES(id), TY_POINTER)
+ } else if (ID_NALLOC(id1) != ID_NFEATURES(id)) {
+ call realloc (ID_PIX(id1), ID_NFEATURES(id), TY_DOUBLE)
+ call realloc (ID_FIT(id1), ID_NFEATURES(id), TY_DOUBLE)
+ call realloc (ID_USER(id1), ID_NFEATURES(id), TY_DOUBLE)
+ call realloc (ID_WTS(id1), ID_NFEATURES(id), TY_DOUBLE)
+ call realloc (ID_FWIDTHS(id1), ID_NFEATURES(id), TY_REAL)
+ call realloc (ID_FTYPES(id1), ID_NFEATURES(id), TY_INT)
+ call realloc (ID_LABEL(id1), ID_NFEATURES(id), TY_POINTER)
+
+ j = ID_NALLOC(id1)
+ i = ID_NFEATURES(id) - j
+ if (i > 0)
+ call aclri (Memi[ID_LABEL(id1)+j], i)
+ }
+ call amovd (PIX(id,1), PIX(id1,1), ID_NFEATURES(id))
+ call amovd (FIT(id,1), FIT(id1,1), ID_NFEATURES(id))
+ call amovd (USER(id,1), USER(id1,1), ID_NFEATURES(id))
+ call amovd (WTS(id,1), WTS(id1,1), ID_NFEATURES(id))
+ call amovr (FWIDTH(id,1), FWIDTH(id1,1), ID_NFEATURES(id))
+ call amovi (FTYPE(id,1), FTYPE(id1,1), ID_NFEATURES(id))
+
+ ptr1 = ID_LABEL(id)
+ ptr2 = ID_LABEL(id1)
+ do i = 1, ID_NFEATURES(id) {
+ call mfree (Memi[ptr2], TY_CHAR)
+ if (Memi[ptr1] != NULL) {
+ j = strlen (Memc[Memi[ptr1]])
+ call malloc (Memi[ptr2], j, TY_CHAR)
+ call strcpy (Memc[Memi[ptr1]], Memc[Memi[ptr2]], j)
+ }
+ ptr1 = ptr1 + 1
+ ptr2 = ptr2 + 1
+ }
+
+ ID_NALLOC(id1) = ID_NFEATURES(id)
+ }
+
+ # Use a SAVE and RESTORE to copy the CURFIT data.
+ if (ID_CV(id1) != NULL)
+ call dcvfree (ID_CV(id1))
+ if (ID_CV(id) != NULL) {
+ call smark (sp)
+ i = dcvstati (ID_CV(id), CVNSAVE)
+ call salloc (coeffs, i, TY_DOUBLE)
+ call dcvsave (ID_CV(id), Memd[coeffs])
+ call dcvrestore (ID_CV(id1), Memd[coeffs])
+ call sfree (sp)
+
+ if (ID_IC(id1) == NULL)
+ call ic_open (ID_IC(id1))
+ call ic_copy (ID_IC(id), ID_IC(id1))
+ }
+
+ #ID_LINE(id1,1) = line[1]
+ #ID_LINE(id1,2) = line[2]
+ ID_LINE(id1,1) = ID_LINE(id,1)
+ ID_LINE(id1,2) = ID_LINE(id,2)
+ ID_AP(id1,1) = ID_AP(id,1)
+ ID_AP(id1,2) = ID_AP(id,2)
+ ID_NFEATURES(id1) = ID_NFEATURES(id)
+ ID_SHIFT(id1) = ID_SHIFT(id)
+ ID_REDSHIFT(id1) = ID_REDSHIFT(id)
+ ID_RMSRED(id1) = ID_RMSRED(id)
+ ID_ZHELIO(id1) = ID_ZHELIO(id)
+ ID_CURRENT(id1) = ID_CURRENT(id)
+
+ ID_NEWFEATURES(id1) = ID_NEWFEATURES(id)
+ ID_NEWCV(id1) = ID_NEWCV(id)
+ ID_NEWDBENTRY(id1) = ID_NEWDBENTRY(id)
+end
+
+
+# ID_GID -- Get saved identify information for specified line.
+
+int procedure id_gid (id, line)
+
+pointer id # IDENTIFY structure
+int line[2] # Line number to get
+
+int i, id_getid()
+
+begin
+ # Check if saved.
+ for (i = 1; i <= ID_NID(id); i = i + 1) {
+ if (ID_LINE(Memi[ID_ID(id)+i-1],1) == line[1] &&
+ ID_LINE(Memi[ID_ID(id)+i-1],2) == line[2])
+ break
+ }
+
+ return (id_getid (id, i))
+end
+
+
+# ID_GETID -- Get saved identify information for specified index.
+
+int procedure id_getid (id, n)
+
+pointer id # IDENTIFY structure
+int n # Index of saved features to be returned
+
+int i, j, dcvstati(), strlen()
+pointer sp, id1, coeffs, ptr1, ptr2
+
+begin
+ if (n < 1 || n > ID_NID(id))
+ return (EOF)
+
+ id1 = Memi[ID_ID(id)+n-1]
+
+ # Reallocate memory for features and copy them.
+ if (ID_NFEATURES(id1) > 0) {
+ if (ID_NALLOC(id1) != ID_NALLOC(id)) {
+ call realloc (ID_PIX(id), ID_NALLOC(id1), TY_DOUBLE)
+ call realloc (ID_FIT(id), ID_NALLOC(id1), TY_DOUBLE)
+ call realloc (ID_USER(id), ID_NALLOC(id1), TY_DOUBLE)
+ call realloc (ID_WTS(id), ID_NALLOC(id1), TY_DOUBLE)
+ call realloc (ID_FWIDTHS(id), ID_NALLOC(id1), TY_REAL)
+ call realloc (ID_FTYPES(id), ID_NALLOC(id1), TY_INT)
+ call realloc (ID_LABEL(id), ID_NALLOC(id1), TY_POINTER)
+
+ j = ID_NALLOC(id)
+ i = ID_NALLOC(id1) - j
+ if (i > 0)
+ call aclri (Memi[ID_LABEL(id)+j], i)
+ }
+ call amovd (PIX(id1,1), PIX(id,1), ID_NFEATURES(id1))
+ call amovd (FIT(id1,1), FIT(id,1), ID_NFEATURES(id1))
+ call amovd (USER(id1,1), USER(id,1), ID_NFEATURES(id1))
+ call amovd (WTS(id1,1), WTS(id,1), ID_NFEATURES(id1))
+ call amovr (FWIDTH(id1,1), FWIDTH(id,1), ID_NFEATURES(id1))
+ call amovi (FTYPE(id1,1), FTYPE(id,1), ID_NFEATURES(id1))
+
+ ptr1 = ID_LABEL(id1)
+ ptr2 = ID_LABEL(id)
+ do i = 1, ID_NFEATURES(id1) {
+ call mfree (Memi[ptr2], TY_CHAR)
+ if (Memi[ptr1] != NULL) {
+ j = strlen (Memc[Memi[ptr1]])
+ call malloc (Memi[ptr2], j, TY_CHAR)
+ call strcpy (Memc[Memi[ptr1]], Memc[Memi[ptr2]], j)
+ }
+ ptr1 = ptr1 + 1
+ ptr2 = ptr2 + 1
+ }
+
+ ID_NALLOC(id) = ID_NALLOC(id1)
+ ID_NFEATURES(id) = ID_NFEATURES(id1)
+ ID_NEWFEATURES(id) = ID_NEWFEATURES(id1)
+ ID_CURRENT(id) = ID_CURRENT(id1)
+ ID_NEWDBENTRY(id) = ID_NEWDBENTRY(id1)
+ }
+
+ # Use a SAVE and RESTORE to copy the CURFIT data.
+ if (ID_CV(id1) != NULL) {
+ if (ID_CV(id) != NULL)
+ call dcvfree (ID_CV(id))
+ call smark (sp)
+ i = dcvstati (ID_CV(id1), CVNSAVE)
+ call salloc (coeffs, i, TY_DOUBLE)
+ call dcvsave (ID_CV(id1), Memd[coeffs])
+ call dcvrestore (ID_CV(id), Memd[coeffs])
+ call sfree (sp)
+
+ call ic_copy (ID_IC(id1), ID_IC(id))
+
+ ID_SHIFT(id) = ID_SHIFT(id1)
+ ID_REDSHIFT(id) = ID_REDSHIFT(id1)
+ ID_RMSRED(id) = ID_RMSRED(id1)
+ ID_ZHELIO(id) = ID_ZHELIO(id1)
+ ID_NEWCV(id) = ID_NEWCV(id1)
+ ID_NEWDBENTRY(id) = ID_NEWDBENTRY(id1)
+ }
+
+ ID_LINE(id,1) = ID_LINE(id1,1)
+ ID_LINE(id,2) = ID_LINE(id1,2)
+ ID_AP(id,1) = ID_AP(id1,1)
+ ID_AP(id,2) = ID_AP(id1,2)
+
+ return (OK)
+end