diff options
author | Joseph Hunkeler <jhunkeler@gmail.com> | 2015-07-08 20:46:52 -0400 |
---|---|---|
committer | Joseph Hunkeler <jhunkeler@gmail.com> | 2015-07-08 20:46:52 -0400 |
commit | fa080de7afc95aa1c19a6e6fc0e0708ced2eadc4 (patch) | |
tree | bdda434976bc09c864f2e4fa6f16ba1952b1e555 /noao/rv/rvidlines/idinit.x | |
download | iraf-linux-fa080de7afc95aa1c19a6e6fc0e0708ced2eadc4.tar.gz |
Initial commit
Diffstat (limited to 'noao/rv/rvidlines/idinit.x')
-rw-r--r-- | noao/rv/rvidlines/idinit.x | 352 |
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 |