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/nproto/ace/grow.x | |
download | iraf-linux-fa080de7afc95aa1c19a6e6fc0e0708ced2eadc4.tar.gz |
Initial commit
Diffstat (limited to 'noao/nproto/ace/grow.x')
-rw-r--r-- | noao/nproto/ace/grow.x | 959 |
1 files changed, 959 insertions, 0 deletions
diff --git a/noao/nproto/ace/grow.x b/noao/nproto/ace/grow.x new file mode 100644 index 00000000..a9c84cd2 --- /dev/null +++ b/noao/nproto/ace/grow.x @@ -0,0 +1,959 @@ +include <pmset.h> +include "ace.h" +include "cat.h" +include "objs.h" +include "grow.h" + + +procedure grow (grw, cat, objmask, logfd) + +pointer grw #I Grow parameter structure +pointer cat #I Catalog of objects +pointer objmask #I Object mask +int logfd #I Logfile + +int ngrow #I Number of pixels to grow +real agrow #I Area factor grow + +int i, j, nc, nl, m, n +pointer sp, v, bufs, obuf +pointer buf1, buf2, buf3, obj + +int grow1(), grow2(), grow3(), andi(), ori(), noti() +pointer cathead(), catnext() + +begin + call grw_pars ("open", "", grw) + ngrow = GRW_NGROW(grw) + agrow = GRW_AGROW(grw) + + if (ngrow < 1 && agrow <= 1.) + return + + if (logfd != NULL) { + call fprintf (logfd, " Grow objects: ngrow = %d, agrow = %g\n") + call pargi (ngrow) + call pargr (agrow) + } + + call smark (sp) + call salloc (v, PM_MAXDIM, TY_LONG) + + call pm_gsize (objmask, i, Meml[v], n) + nc = Meml[v]; nl = Meml[v+1] + Meml[v] = 1 + + call salloc (bufs, 3, TY_POINTER) + do i = 1, 3 + call salloc (Memi[bufs+i-1], nc, TY_INT) + call salloc (obuf, nc, TY_INT) + + for (obj=cathead(cat); obj!=NULL; obj=catnext(cat,obj)) { + if (GROWN(obj)) + next + UNSETFLAG (obj, OBJ_EVAL) + OBJ_NDETECT(obj) = OBJ_NPIX(obj) + } + + do j = 1, ngrow { + m = 0 + buf2 = NULL; buf3 = NULL + do i = 1, nl { + buf1 = buf2 + buf2 = buf3 + buf3 = NULL + + if (i != 1 && buf1 == NULL) { + Meml[v+1] = i - 1 + buf1 = Memi[bufs+mod(Meml[v+1],3)] + call pmglpi (objmask, Meml[v], Memi[buf1], 0, nc, 0) + } + if (buf2 == NULL) { + Meml[v+1] = i + buf2 = Memi[bufs+mod(Meml[v+1],3)] + call pmglpi (objmask, Meml[v], Memi[buf2], 0, nc, 0) + } + if (i != nl && buf3 == NULL) { + Meml[v+1] = i+1 + buf3 = Memi[bufs+mod(Meml[v+1],3)] + call pmglpi (objmask, Meml[v], Memi[buf3], 0, nc, 0) + } + + if (i == 1) + n = grow1 (cat, i, Memi[buf2], Memi[buf3], + Memi[obuf], nc, nl) + else if (i == nl) + n = grow3 (cat, i, Memi[buf1], Memi[buf2], + Memi[obuf], nc, nl) + else + n = grow2 (cat, i, Memi[buf1], Memi[buf2], Memi[buf3], + Memi[obuf], nc, nl) + + if (n > 0) { + Meml[v+1] = i + call pmplpi (objmask, Meml[v], Memi[obuf], 0, nc, PIX_SRC) + m = m + n + } + } + + n = 0 + for (obj=cathead(cat); obj!=NULL; obj=catnext(cat,obj)) { + if (GROWN(obj)) + next + if (real (OBJ_NPIX(obj)) / OBJ_NDETECT(obj) >= agrow) + SETFLAG (obj, OBJ_GROW) + else + n = n + 1 + } + + if (n == 0 || m == 0) + break + } + + if (n != 0) { + for (obj=cathead(cat); obj!=NULL; obj=catnext(cat,obj)) { + if (GROWN(obj)) + next + SETFLAG (obj, OBJ_GROW) + } + } + + call sfree (sp) +end + + +int procedure grow1 (cat, line, in2, in3, out, nc, nl) + +pointer cat #I Catalog +int line #I Line +int in2[nc] #I Current line +int in3[nc] #I Next line +int out[nc] #I Output line +int nc, nl #I Dimension of image + +int i, j, n, id, id0, id1, num1, andi() +bool grow +pointer objs, obj, obj1 + +begin + objs = CAT_OBJS(cat) - 1 + obj1 = NULL + n = 0 + do i = 1, nc { + id0 = in2[i] + if (id0 != 0 && MNOTSPLIT(id0)) { + out[i] = id0 + next + } + + id = 0 + j = i - 1 + if (i > 1) { + id1 = in2[j] + num1 = MNUM(id1) + if (num1 >= NUMSTART) { + if (MNOTSPLIT(id1)) { + if (obj1 == NULL) { + obj1 = Memi[objs+num1] + grow = NOTGROWN(obj1) + } else if (OBJ_NUM(obj1) != num1) { + obj1 = Memi[objs+num1] + grow = NOTGROWN(obj1) + } + if (grow) { + if (id == 0) { + id = id1 + obj = obj1 + } else if (id != id1) { + if (OBJ_FLUX(obj) < OBJ_FLUX(obj1)) { + id = id1 + obj = obj1 + } + } + } + } + } + id1 = in3[j] + num1 = MNUM(id1) + if (num1 >= NUMSTART) { + if (MNOTSPLIT(id1)) { + if (obj1 == NULL) { + obj1 = Memi[objs+num1] + grow = NOTGROWN(obj1) + } else if (OBJ_NUM(obj1) != num1) { + obj1 = Memi[objs+num1] + grow = NOTGROWN(obj1) + } + if (grow) { + if (id == 0) { + id = id1 + obj = obj1 + } else if (id != id1) { + if (OBJ_FLUX(obj) < OBJ_FLUX(obj1)) { + id = id1 + obj = obj1 + } + } + } + } + } + } + id1 = in3[i] + num1 = MNUM(id1) + if (num1 >= NUMSTART) { + if (MNOTSPLIT(id1)) { + if (obj1 == NULL) { + obj1 = Memi[objs+num1] + grow = NOTGROWN(obj1) + } else if (OBJ_NUM(obj1) != num1) { + obj1 = Memi[objs+num1] + grow = NOTGROWN(obj1) + } + if (grow) { + if (id == 0) { + id = id1 + obj = obj1 + } else if (id != id1) { + if (OBJ_FLUX(obj) < OBJ_FLUX(obj1)) { + id = id1 + obj = obj1 + } + } + } + } + } + j = i + 1 + if (i < nc) { + id1 = in2[j] + num1 = MNUM(id1) + if (num1 >= NUMSTART) { + if (MNOTSPLIT(id1)) { + if (obj1 == NULL) { + obj1 = Memi[objs+num1] + grow = NOTGROWN(obj1) + } else if (OBJ_NUM(obj1) != num1) { + obj1 = Memi[objs+num1] + grow = NOTGROWN(obj1) + } + if (grow) { + if (id == 0) { + id = id1 + obj = obj1 + } else if (id != id1) { + if (OBJ_FLUX(obj) < OBJ_FLUX(obj1)) { + id = id1 + obj = obj1 + } + } + } + } + } + id1 = in3[j] + num1 = MNUM(id1) + if (num1 >= NUMSTART) { + if (MNOTSPLIT(id1)) { + if (obj1 == NULL) { + obj1 = Memi[objs+num1] + grow = NOTGROWN(obj1) + } else if (OBJ_NUM(obj1) != num1) { + obj1 = Memi[objs+num1] + grow = NOTGROWN(obj1) + } + if (grow) { + if (id == 0) { + id = id1 + obj = obj1 + } else if (id != id1) { + if (OBJ_FLUX(obj) < OBJ_FLUX(obj1)) { + id = id1 + obj = obj1 + } + } + } + } + } + } + + if (id == 0) + out[i] = in2[i] + else { + out[i] = id + OBJ_NPIX(obj) = OBJ_NPIX(obj) + 1 + n = n + 1 + } + } + + return (n) +end + + +int procedure grow2 (cat, line, in1, in2, in3, out, nc, nl) + +pointer cat #I Catalog +int line #I Line +int in1[nc] #I Previous line +int in2[nc] #I Current line +int in3[nc] #I Next line +int out[nc] #I Output line +int nc, nl #I Dimension of image + +int i, j, n, id, id0, id1, num1, andi() +bool grow +pointer objs, obj, obj1 + +begin + objs = CAT_OBJS(cat) - 1 + obj1 = NULL + n = 0 + do i = 2, nc-1 { + id0 = in2[i] + if (id0 != 0 && MNOTSPLIT(id0)) { + out[i] = id0 + next + } + + id = 0 + j = i - 1 + id1 = in1[j] + num1 = MNUM(id1) + if (num1 >= NUMSTART) { + if (MNOTSPLIT(id1)) { + if (obj1 == NULL) { + obj1 = Memi[objs+num1] + grow = NOTGROWN(obj1) + } else if (OBJ_NUM(obj1) != num1) { + obj1 = Memi[objs+num1] + grow = NOTGROWN(obj1) + } + if (grow) { + if (id == 0) { + id = id1 + obj = obj1 + } else if (id != id1) { + if (OBJ_FLUX(obj) < OBJ_FLUX(obj1)) { + id = id1 + obj = obj1 + } + } + } + } + } + id1 = in2[j] + num1 = MNUM(id1) + if (num1 >= NUMSTART) { + if (MNOTSPLIT(id1)) { + if (obj1 == NULL) { + obj1 = Memi[objs+num1] + grow = NOTGROWN(obj1) + } else if (OBJ_NUM(obj1) != num1) { + obj1 = Memi[objs+num1] + grow = NOTGROWN(obj1) + } + if (grow) { + if (id == 0) { + id = id1 + obj = obj1 + } else if (id != id1) { + if (OBJ_FLUX(obj) < OBJ_FLUX(obj1)) { + id = id1 + obj = obj1 + } + } + } + } + } + id1 = in3[j] + num1 = MNUM(id1) + if (num1 >= NUMSTART) { + if (MNOTSPLIT(id1)) { + if (obj1 == NULL) { + obj1 = Memi[objs+num1] + grow = NOTGROWN(obj1) + } else if (OBJ_NUM(obj1) != num1) { + obj1 = Memi[objs+num1] + grow = NOTGROWN(obj1) + } + if (grow) { + if (id == 0) { + id = id1 + obj = obj1 + } else if (id != id1) { + if (OBJ_FLUX(obj) < OBJ_FLUX(obj1)) { + id = id1 + obj = obj1 + } + } + } + } + } + id1 = in1[i] + num1 = MNUM(id1) + if (num1 >= NUMSTART) { + if (MNOTSPLIT(id1)) { + if (obj1 == NULL) { + obj1 = Memi[objs+num1] + grow = NOTGROWN(obj1) + } else if (OBJ_NUM(obj1) != num1) { + obj1 = Memi[objs+num1] + grow = NOTGROWN(obj1) + } + if (grow) { + if (id == 0) { + id = id1 + obj = obj1 + } else if (id != id1) { + if (OBJ_FLUX(obj) < OBJ_FLUX(obj1)) { + id = id1 + obj = obj1 + } + } + } + } + } + id1 = in3[i] + num1 = MNUM(id1) + if (num1 >= NUMSTART) { + if (MNOTSPLIT(id1)) { + if (obj1 == NULL) { + obj1 = Memi[objs+num1] + grow = NOTGROWN(obj1) + } else if (OBJ_NUM(obj1) != num1) { + obj1 = Memi[objs+num1] + grow = NOTGROWN(obj1) + } + if (grow) { + if (id == 0) { + id = id1 + obj = obj1 + } else if (id != id1) { + if (OBJ_FLUX(obj) < OBJ_FLUX(obj1)) { + id = id1 + obj = obj1 + } + } + } + } + } + j = i + 1 + id1 = in1[j] + num1 = MNUM(id1) + if (num1 >= NUMSTART) { + if (MNOTSPLIT(id1)) { + if (obj1 == NULL) { + obj1 = Memi[objs+num1] + grow = NOTGROWN(obj1) + } else if (OBJ_NUM(obj1) != num1) { + obj1 = Memi[objs+num1] + grow = NOTGROWN(obj1) + } + if (grow) { + if (id == 0) { + id = id1 + obj = obj1 + } else if (id != id1) { + if (OBJ_FLUX(obj) < OBJ_FLUX(obj1)) { + id = id1 + obj = obj1 + } + } + } + } + } + id1 = in2[j] + num1 = MNUM(id1) + if (num1 >= NUMSTART) { + if (MNOTSPLIT(id1)) { + if (obj1 == NULL) { + obj1 = Memi[objs+num1] + grow = NOTGROWN(obj1) + } else if (OBJ_NUM(obj1) != num1) { + obj1 = Memi[objs+num1] + grow = NOTGROWN(obj1) + } + if (grow) { + if (id == 0) { + id = id1 + obj = obj1 + } else if (id != id1) { + if (OBJ_FLUX(obj) < OBJ_FLUX(obj1)) { + id = id1 + obj = obj1 + } + } + } + } + } + id1 = in3[j] + num1 = MNUM(id1) + if (num1 >= NUMSTART) { + if (MNOTSPLIT(id1)) { + if (obj1 == NULL) { + obj1 = Memi[objs+num1] + grow = NOTGROWN(obj1) + } else if (OBJ_NUM(obj1) != num1) { + obj1 = Memi[objs+num1] + grow = NOTGROWN(obj1) + } + if (grow) { + if (id == 0) { + id = id1 + obj = obj1 + } else if (id != id1) { + if (OBJ_FLUX(obj) < OBJ_FLUX(obj1)) { + id = id1 + obj = obj1 + } + } + } + } + } + + if (id == 0) + out[i] = in2[i] + else { + out[i] = id + OBJ_NPIX(obj) = OBJ_NPIX(obj) + 1 + n = n + 1 + } + } + + # First pixel + id0 = in2[1] + if (id0 != 0 && MNOTSPLIT(id0)) + out[1] = id0 + else { + id = 0 + id1 = in1[1] + num1 = MNUM(id1) + if (num1 >= NUMSTART) { + if (MNOTSPLIT(id1)) { + if (obj1 == NULL) { + obj1 = Memi[objs+num1] + grow = NOTGROWN(obj1) + } else if (OBJ_NUM(obj1) != num1) { + obj1 = Memi[objs+num1] + grow = NOTGROWN(obj1) + } + if (grow) { + if (id == 0) { + id = id1 + obj = obj1 + } else if (id != id1) { + if (OBJ_FLUX(obj) < OBJ_FLUX(obj1)) { + id = id1 + obj = obj1 + } + } + } + } + } + id1 = in3[1] + num1 = MNUM(id1) + if (num1 >= NUMSTART) { + if (MNOTSPLIT(id1)) { + if (obj1 == NULL) { + obj1 = Memi[objs+num1] + grow = NOTGROWN(obj1) + } else if (OBJ_NUM(obj1) != num1) { + obj1 = Memi[objs+num1] + grow = NOTGROWN(obj1) + } + if (grow) { + if (id == 0) { + id = id1 + obj = obj1 + } else if (id != id1) { + if (OBJ_FLUX(obj) < OBJ_FLUX(obj1)) { + id = id1 + obj = obj1 + } + } + } + } + } + id1 = in1[2] + num1 = MNUM(id1) + if (num1 >= NUMSTART) { + if (MNOTSPLIT(id1)) { + if (obj1 == NULL) { + obj1 = Memi[objs+num1] + grow = NOTGROWN(obj1) + } else if (OBJ_NUM(obj1) != num1) { + obj1 = Memi[objs+num1] + grow = NOTGROWN(obj1) + } + if (grow) { + if (id == 0) { + id = id1 + obj = obj1 + } else if (id != id1) { + if (OBJ_FLUX(obj) < OBJ_FLUX(obj1)) { + id = id1 + obj = obj1 + } + } + } + } + } + id1 = in2[2] + num1 = MNUM(id1) + if (num1 >= NUMSTART) { + if (MNOTSPLIT(id1)) { + if (obj1 == NULL) { + obj1 = Memi[objs+num1] + grow = NOTGROWN(obj1) + } else if (OBJ_NUM(obj1) != num1) { + obj1 = Memi[objs+num1] + grow = NOTGROWN(obj1) + } + if (grow) { + if (id == 0) { + id = id1 + obj = obj1 + } else if (id != id1) { + if (OBJ_FLUX(obj) < OBJ_FLUX(obj1)) { + id = id1 + obj = obj1 + } + } + } + } + } + id1 = in3[2] + num1 = MNUM(id1) + if (num1 >= NUMSTART) { + if (MNOTSPLIT(id1)) { + if (obj1 == NULL) { + obj1 = Memi[objs+num1] + grow = NOTGROWN(obj1) + } else if (OBJ_NUM(obj1) != num1) { + obj1 = Memi[objs+num1] + grow = NOTGROWN(obj1) + } + if (grow) { + if (id == 0) { + id = id1 + obj = obj1 + } else if (id != id1) { + if (OBJ_FLUX(obj) < OBJ_FLUX(obj1)) { + id = id1 + obj = obj1 + } + } + } + } + } + + if (id == 0) + out[1] = in2[1] + else { + out[1] = id + OBJ_NPIX(obj) = OBJ_NPIX(obj) + 1 + n = n + 1 + } + } + + # Last pixel + id0 = in2[nc] + if (id0 != 0 && MNOTSPLIT(id0)) + out[nc] = id0 + else { + id = 0 + j = nc - 1 + id1 = in1[j] + num1 = MNUM(id1) + if (num1 >= NUMSTART) { + if (MNOTSPLIT(id1)) { + if (obj1 == NULL) { + obj1 = Memi[objs+num1] + grow = NOTGROWN(obj1) + } else if (OBJ_NUM(obj1) != num1) { + obj1 = Memi[objs+num1] + grow = NOTGROWN(obj1) + } + if (grow) { + if (id == 0) { + id = id1 + obj = obj1 + } else if (id != id1) { + if (OBJ_FLUX(obj) < OBJ_FLUX(obj1)) { + id = id1 + obj = obj1 + } + } + } + } + } + id1 = in2[j] + num1 = MNUM(id1) + if (num1 >= NUMSTART) { + if (MNOTSPLIT(id1)) { + if (obj1 == NULL) { + obj1 = Memi[objs+num1] + grow = NOTGROWN(obj1) + } else if (OBJ_NUM(obj1) != num1) { + obj1 = Memi[objs+num1] + grow = NOTGROWN(obj1) + } + if (grow) { + if (id == 0) { + id = id1 + obj = obj1 + } else if (id != id1) { + if (OBJ_FLUX(obj) < OBJ_FLUX(obj1)) { + id = id1 + obj = obj1 + } + } + } + } + } + id1 = in3[j] + num1 = MNUM(id1) + if (num1 >= NUMSTART) { + if (MNOTSPLIT(id1)) { + if (obj1 == NULL) { + obj1 = Memi[objs+num1] + grow = NOTGROWN(obj1) + } else if (OBJ_NUM(obj1) != num1) { + obj1 = Memi[objs+num1] + grow = NOTGROWN(obj1) + } + if (grow) { + if (id == 0) { + id = id1 + obj = obj1 + } else if (id != id1) { + if (OBJ_FLUX(obj) < OBJ_FLUX(obj1)) { + id = id1 + obj = obj1 + } + } + } + } + } + id1 = in1[nc] + num1 = MNUM(id1) + if (num1 >= NUMSTART) { + if (MNOTSPLIT(id1)) { + if (obj1 == NULL) { + obj1 = Memi[objs+num1] + grow = NOTGROWN(obj1) + } else if (OBJ_NUM(obj1) != num1) { + obj1 = Memi[objs+num1] + grow = NOTGROWN(obj1) + } + if (grow) { + if (id == 0) { + id = id1 + obj = obj1 + } else if (id != id1) { + if (OBJ_FLUX(obj) < OBJ_FLUX(obj1)) { + id = id1 + obj = obj1 + } + } + } + } + } + id1 = in3[nc] + num1 = MNUM(id1) + if (num1 >= NUMSTART) { + if (MNOTSPLIT(id1)) { + if (obj1 == NULL) { + obj1 = Memi[objs+num1] + grow = NOTGROWN(obj1) + } else if (OBJ_NUM(obj1) != num1) { + obj1 = Memi[objs+num1] + grow = NOTGROWN(obj1) + } + if (grow) { + if (id == 0) { + id = id1 + obj = obj1 + } else if (id != id1) { + if (OBJ_FLUX(obj) < OBJ_FLUX(obj1)) { + id = id1 + obj = obj1 + } + } + } + } + } + + if (id == 0) + out[nc] = in2[nc] + else { + out[nc] = id + OBJ_NPIX(obj) = OBJ_NPIX(obj) + 1 + n = n + 1 + } + } + + return (n) +end + + +int procedure grow3 (cat, line, in1, in2, out, nc, nl) + +pointer cat #I Catalog +int line #I Line +int in1[nc] #I Previous line +int in2[nc] #I Current line +int out[nc] #I Output line +int nc, nl #I Dimension of image + +int i, j, n, id, id0, id1, num1, andi() +bool grow +pointer objs, obj, obj1 + +begin + objs = CAT_OBJS(cat) - 1 + obj1 = NULL + n = 0 + do i = 1, nc { + id0 = in2[i] + if (id0 != 0 && MNOTSPLIT(id0)) { + out[i] = id0 + next + } + + id = 0 + j = i - 1 + if (i > 1) { + id1 = in1[j] + num1 = MNUM(id1) + if (num1 >= NUMSTART) { + if (MNOTSPLIT(id1)) { + if (obj1 == NULL) { + obj1 = Memi[objs+num1] + grow = NOTGROWN(obj1) + } else if (OBJ_NUM(obj1) != num1) { + obj1 = Memi[objs+num1] + grow = NOTGROWN(obj1) + } + if (grow) { + if (id == 0) { + id = id1 + obj = obj1 + } else if (id != id1) { + if (OBJ_FLUX(obj) < OBJ_FLUX(obj1)) { + id = id1 + obj = obj1 + } + } + } + } + } + id1 = in2[j] + num1 = MNUM(id1) + if (num1 >= NUMSTART) { + if (MNOTSPLIT(id1)) { + if (obj1 == NULL) { + obj1 = Memi[objs+num1] + grow = NOTGROWN(obj1) + } else if (OBJ_NUM(obj1) != num1) { + obj1 = Memi[objs+num1] + grow = NOTGROWN(obj1) + } + if (grow) { + if (id == 0) { + id = id1 + obj = obj1 + } else if (id != id1) { + if (OBJ_FLUX(obj) < OBJ_FLUX(obj1)) { + id = id1 + obj = obj1 + } + } + } + } + } + } + id1 = in1[i] + num1 = MNUM(id1) + if (num1 >= NUMSTART) { + if (MNOTSPLIT(id1)) { + if (obj1 == NULL) { + obj1 = Memi[objs+num1] + grow = NOTGROWN(obj1) + } else if (OBJ_NUM(obj1) != num1) { + obj1 = Memi[objs+num1] + grow = NOTGROWN(obj1) + } + if (grow) { + if (id == 0) { + id = id1 + obj = obj1 + } else if (id != id1) { + if (OBJ_FLUX(obj) < OBJ_FLUX(obj1)) { + id = id1 + obj = obj1 + } + } + } + } + } + j = i + 1 + if (i < nc) { + id1 = in1[j] + num1 = MNUM(id1) + if (num1 >= NUMSTART) { + if (MNOTSPLIT(id1)) { + if (obj1 == NULL) { + obj1 = Memi[objs+num1] + grow = NOTGROWN(obj1) + } else if (OBJ_NUM(obj1) != num1) { + obj1 = Memi[objs+num1] + grow = NOTGROWN(obj1) + } + if (grow) { + if (id == 0) { + id = id1 + obj = obj1 + } else if (id != id1) { + if (OBJ_FLUX(obj) < OBJ_FLUX(obj1)) { + id = id1 + obj = obj1 + } + } + } + } + } + id1 = in2[j] + num1 = MNUM(id1) + if (num1 >= NUMSTART) { + if (MNOTSPLIT(id1)) { + if (obj1 == NULL) { + obj1 = Memi[objs+num1] + grow = NOTGROWN(obj1) + } else if (OBJ_NUM(obj1) != num1) { + obj1 = Memi[objs+num1] + grow = NOTGROWN(obj1) + } + if (grow) { + if (id == 0) { + id = id1 + obj = obj1 + } else if (id != id1) { + if (OBJ_FLUX(obj) < OBJ_FLUX(obj1)) { + id = id1 + obj = obj1 + } + } + } + } + } + } + + if (id == 0) + out[i] = in2[i] + else { + out[i] = id + OBJ_NPIX(obj) = OBJ_NPIX(obj) + 1 + n = n + 1 + } + } + + return (n) +end |