aboutsummaryrefslogtreecommitdiff
path: root/noao/digiphot/daophot/group/dpwrtgroup.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 /noao/digiphot/daophot/group/dpwrtgroup.x
downloadiraf-linux-fa080de7afc95aa1c19a6e6fc0e0708ced2eadc4.tar.gz
Initial commit
Diffstat (limited to 'noao/digiphot/daophot/group/dpwrtgroup.x')
-rw-r--r--noao/digiphot/daophot/group/dpwrtgroup.x448
1 files changed, 448 insertions, 0 deletions
diff --git a/noao/digiphot/daophot/group/dpwrtgroup.x b/noao/digiphot/daophot/group/dpwrtgroup.x
new file mode 100644
index 00000000..97b9a714
--- /dev/null
+++ b/noao/digiphot/daophot/group/dpwrtgroup.x
@@ -0,0 +1,448 @@
+include <mach.h>
+include <time.h>
+include <tbset.h>
+include "../lib/daophotdef.h"
+include "../lib/apseldef.h"
+
+define NCOLUMN 6
+
+# DP_TGNEWGRP -- Create a new GROUP output ST table.
+
+procedure dp_tgnewgrp (tp, colpoint)
+
+pointer tp # pointer to outpu ST table
+pointer colpoint[ARB] # array of pointers to columns
+
+pointer sp, colnames, colunits, colformat, col_dtype, col_len
+
+begin
+ # Allocate space for table definition.
+ call smark (sp)
+ call salloc (colnames, NCOLUMN * (SZ_COLNAME + 1), TY_CHAR)
+ call salloc (colunits, NCOLUMN * (SZ_COLUNITS + 1), TY_CHAR)
+ call salloc (colformat, NCOLUMN * (SZ_COLFMT + 1), TY_CHAR)
+ call salloc (col_dtype, NCOLUMN, TY_INT)
+ call salloc (col_len, NCOLUMN, TY_INT)
+
+ # Set up the column definitions.
+ call strcpy (GROUP, Memc[colnames], SZ_COLNAME)
+ call strcpy (ID, Memc[colnames+SZ_COLNAME+1], SZ_COLNAME)
+ call strcpy (XCENTER, Memc[colnames+2*SZ_COLNAME+2], SZ_COLNAME)
+ call strcpy (YCENTER, Memc[colnames+3*SZ_COLNAME+3], SZ_COLNAME)
+ call strcpy (MAG, Memc[colnames+4*SZ_COLNAME+4], SZ_COLNAME)
+ call strcpy (SKY, Memc[colnames+5*SZ_COLNAME+5], SZ_COLNAME)
+
+ # Set up the format definitions.
+ call strcpy ("%6d", Memc[colformat], SZ_COLFMT)
+ call strcpy ("%6d", Memc[colformat+SZ_COLFMT+1], SZ_COLFMT)
+ call strcpy ("%10.3f", Memc[colformat+2*SZ_COLFMT+2], SZ_COLFMT)
+ call strcpy ("%10.3f", Memc[colformat+3*SZ_COLFMT+3], SZ_COLFMT)
+ call strcpy ("%12.3f", Memc[colformat+4*SZ_COLFMT+4], SZ_COLFMT)
+ call strcpy ("%15.7g", Memc[colformat+5*SZ_COLFMT+5], SZ_COLFMT)
+
+ # Set up the unit definitions.
+ call strcpy ("##", Memc[colunits], SZ_COLUNITS)
+ call strcpy ("##", Memc[colunits+SZ_COLUNITS+1], SZ_COLUNITS)
+ call strcpy ("PIXELS", Memc[colunits+2*SZ_COLUNITS+2], SZ_COLUNITS)
+ call strcpy ("PIXELS", Memc[colunits+3*SZ_COLUNITS+3], SZ_COLUNITS)
+ call strcpy ("MAGNITUDES", Memc[colunits+4*SZ_COLUNITS+4], SZ_COLUNITS)
+ call strcpy ("ADC", Memc[colunits+5*SZ_COLUNITS+5], SZ_COLUNITS)
+
+ # Set up the data type definitions.
+ Memi[col_dtype] = TY_INT
+ Memi[col_dtype+1] = TY_INT
+ Memi[col_dtype+2] = TY_REAL
+ Memi[col_dtype+3] = TY_REAL
+ Memi[col_dtype+4] = TY_REAL
+ Memi[col_dtype+5] = TY_REAL
+
+ # Define the column lengths.
+ Memi[col_len] = 1
+ Memi[col_len+1] = 1
+ Memi[col_len+2] = 1
+ Memi[col_len+3] = 1
+ Memi[col_len+4] = 1
+ Memi[col_len+5] = 1
+
+ # Define and create the table.
+ call tbcdef (tp, colpoint, Memc[colnames], Memc[colunits],
+ Memc[colformat], Memi[col_dtype], Memi[col_len], NCOLUMN)
+ call tbtcre (tp)
+
+ call sfree (sp)
+end
+
+
+# DP_XGGRPPARS -- Write out the parameters to the header of the GROUP text
+# output file.
+
+procedure dp_xggrppars (dao, tp)
+
+pointer dao # pointer to the DAOPHOT structure
+int tp # the output file descriptor
+
+pointer sp, outstr, date, time, psffit
+int envfind()
+
+begin
+ # Allocate working space.
+ call smark (sp)
+ call salloc (outstr, SZ_LINE, TY_CHAR)
+ call salloc (date, SZ_DATE, TY_CHAR)
+ call salloc (time, SZ_DATE, TY_CHAR)
+
+ psffit = DP_PSFFIT(dao)
+
+ # Write the id.
+ if (envfind ("version", Memc[outstr], SZ_LINE) <= 0)
+ call strcpy ("NOAO/IRAF", Memc[outstr], SZ_LINE)
+ call dp_rmwhite (Memc[outstr], Memc[outstr], SZ_LINE)
+ call dp_sparam (tp, "IRAF", Memc[outstr], "version", "")
+ if (envfind ("userid", Memc[outstr], SZ_LINE) > 0)
+ call dp_sparam (tp, "USER", Memc[outstr], "name", "")
+ call gethost (Memc[outstr], SZ_LINE)
+ call dp_sparam (tp, "HOST", Memc[outstr], "computer", "")
+ call dp_date (Memc[date], Memc[time], SZ_DATE)
+ call dp_sparam (tp, "DATE", Memc[date], "yyyy-mm-dd", "")
+ call dp_sparam (tp, "TIME", Memc[time], "hh:mm:ss", "")
+ call dp_sparam (tp, "PACKAGE", "daophot", "name", "")
+ call dp_sparam (tp, "TASK", "group", "name", "")
+
+ # Write the file name parameters.
+ call dp_imroot (DP_INIMAGE(dao), Memc[outstr], SZ_LINE)
+ call dp_sparam (tp, "IMAGE", Memc[outstr], "imagename", "")
+ call dp_froot (DP_INPHOTFILE(dao), Memc[outstr], SZ_LINE)
+ call dp_sparam (tp, "PHOTFILE", Memc[outstr], "filename", "")
+ call dp_imroot (DP_PSFIMAGE(dao), Memc[outstr], SZ_LINE)
+ call dp_sparam (tp, "PSFIMAGE", Memc[outstr], "imagename", "")
+ call dp_froot (DP_OUTPHOTFILE(dao), Memc[outstr], SZ_LINE)
+ call dp_sparam (tp, "GRPFILE", Memc[outstr], "filename", "")
+
+ # Write out relevant data parameters.
+ call dp_rparam (tp, "SCALE", DP_SCALE(dao), "units/pix", "")
+ call dp_rparam (tp, "DATAMIN", DP_MINGDATA(dao), "counts", "")
+ call dp_rparam (tp, "DATAMAX", DP_MAXGDATA(dao), "counts", "")
+ call dp_rparam (tp, "GAIN", DP_PHOTADU(dao), "number", "")
+ call dp_rparam (tp, "READNOISE", DP_READNOISE(dao), "electrons", "")
+
+ # Write out the observing parameters.
+ call dp_sparam (tp, "OTIME", DP_OTIME(dao), "timeunit", "")
+ call dp_rparam (tp, "XAIRMASS", DP_XAIRMASS(dao), "number", "")
+ call dp_sparam (tp, "IFILTER", DP_IFILTER(dao), "filter", "")
+
+ # Write out the daophot parameters.
+ call dp_rparam (tp, "PSFRAD", DP_SPSFRAD(dao), "scaleunit", "")
+ call dp_rparam (tp, "FITRAD", DP_SFITRAD(dao), "scaleunit", "")
+ call dp_rparam (tp, "PSFMAG", DP_PSFMAG(psffit), "magnitude", "")
+ call dp_rparam (tp, "CRITSNRATIO", DP_CRITSNRATIO(dao), "sigma", "")
+ call dp_iparam (tp, "MAXGROUP", DP_MAXGROUP(dao), "number", "")
+ #call dp_iparam (tp, "MAXNSTAR", DP_MAXNSTAR(dao), "number", "")
+
+ # Write out the group size parameters.
+ # call dp_iparam (tp, "MINSZGROUP", 1, "number", "")
+ # call dp_iparam (tp, "MAXSZGROUP", MAX_INT, "number", "")
+
+ call sfree(sp)
+end
+
+
+# DP_TGGRPPARS -- Write out the parameters to the header of the GROUP output
+# ST table file.
+
+procedure dp_tggrppars (dao, tp)
+
+pointer dao # pointer to the DAOPHOT structure
+pointer tp # pointer to the output table
+
+pointer sp, outstr, date, time, psffit
+int envfind()
+
+begin
+ # Allocate working space.
+ call smark (sp)
+ call salloc (outstr, SZ_LINE, TY_CHAR)
+ call salloc (date, SZ_DATE, TY_CHAR)
+ call salloc (time, SZ_DATE, TY_CHAR)
+
+ psffit = DP_PSFFIT(dao)
+
+ # Write the id.
+ if (envfind ("version", Memc[outstr], SZ_LINE) <= 0)
+ call strcpy ("NOAO/IRAF", Memc[outstr], SZ_LINE)
+ call dp_rmwhite (Memc[outstr], Memc[outstr], SZ_LINE)
+ call tbhadt (tp, "IRAF", Memc[outstr])
+ if (envfind ("userid", Memc[outstr], SZ_LINE) > 0)
+ call tbhadt (tp, "USER", Memc[outstr])
+ call gethost (Memc[outstr], SZ_LINE)
+ call tbhadt (tp, "HOST", Memc[outstr])
+ call dp_date (Memc[date], Memc[time], SZ_DATE)
+ call tbhadt (tp, "DATE", Memc[date])
+ call tbhadt (tp, "TIME", Memc[time])
+ call tbhadt (tp, "PACKAGE", "daophot")
+ call tbhadt (tp, "TASK", "group")
+
+ # Write the file name parameters.
+ call dp_imroot (DP_INIMAGE(dao), Memc[outstr], SZ_LINE)
+ call tbhadt (tp, "IMAGE", Memc[outstr])
+ call dp_froot (DP_INPHOTFILE(dao), Memc[outstr], SZ_LINE)
+ call tbhadt (tp, "PHOTFILE", Memc[outstr])
+ call dp_imroot (DP_PSFIMAGE(dao), Memc[outstr], SZ_LINE)
+ call tbhadt (tp, "PSFIMAGE", Memc[outstr])
+ call dp_froot (DP_OUTPHOTFILE(dao), Memc[outstr], SZ_LINE)
+ call tbhadt (tp, "GRPFILE", Memc[outstr])
+
+ # Write out relevant data parameters.
+ call tbhadr (tp, "SCALE", DP_SCALE(dao))
+ call tbhadr (tp, "DATAMIN", DP_MINGDATA(dao))
+ call tbhadr (tp, "DATAMAX", DP_MAXGDATA(dao))
+ call tbhadr (tp, "GAIN", DP_PHOTADU(dao))
+ call tbhadr (tp, "READNOISE", DP_READNOISE(dao))
+
+ # Write out the observing parameters.
+ call tbhadt (tp, "OTIME", DP_OTIME(dao))
+ call tbhadr (tp, "XAIRMASS", DP_XAIRMASS(dao))
+ call tbhadt (tp, "IFILTER", DP_IFILTER(dao))
+
+ # Write out the daophot parameters.
+ call tbhadr (tp, "PSFRAD", DP_SPSFRAD(dao))
+ call tbhadr (tp, "FITRAD", DP_SFITRAD(dao))
+ call tbhadr (tp, "PSFMAG", DP_PSFMAG(psffit))
+ call tbhadr (tp, "CRITSNRATIO", DP_CRITSNRATIO(dao))
+ call tbhadi (tp, "MAXGROUP", DP_MAXGROUP(dao))
+ #call tbhadi (tp, "MAXNSTAR", DP_MAXNSTAR(dao))
+
+ # call tbhadi (tp, "MINSZGROUP", 1)
+ # call tbhadi (tp, "MAXSZGROUP", MAX_INT)
+
+ call sfree(sp)
+end
+
+
+# DP_WRTGROUP -- Write out each group into a text file or an ST table.
+
+procedure dp_wrtgroup (dao, im, grp, number, index, group_size, maxgroup)
+
+pointer dao # pointer to daophot structure
+pointer im # the input image descriptor
+int grp # the output file descriptor
+int number[ARB] # number in group of each size
+int index[ARB] # index to results
+int group_size[ARB] # size of groups
+int maxgroup # maximum group size
+
+begin
+ if (DP_TEXT(dao) == YES)
+ call dp_xwrtgroup (dao, im, grp, number, index, group_size,
+ maxgroup)
+ else
+ call dp_twrtgroup (dao, im, grp, number, index, group_size,
+ maxgroup)
+end
+
+
+define GR_NAMESTR "#N%4tGROUP%10tID%16tXCENTER%26tYCENTER%36tMAG%48tMSKY\
+%80t\\\n"
+define GR_UNITSTR "#U%4t##%10t##%16tpixels%26tpixels%36tmagnitudes%48tcounts\
+%80t\\\n"
+define GR_FORMATSTR "#F%4t%%-9d%10t%%-6d%16t%%-10.3f%26t%%-10.3f%36t%%-12.3f\
+%48t%%-15.7g%80t \n"
+define GR_DATASTR "%-9d%10t%-6d%16t%-10.3f%26t%-10.3f%36t%-12.3f%48t%-15.7g\
+%80t \n"
+
+
+# DP_XWRTGROUP -- Write each group into the GROUP output ST table.
+
+procedure dp_xwrtgroup (dao, im, grp, number, index, group_size, maxgroup)
+
+pointer dao # pointer to the daophot structure
+pointer im # the input image descriptor
+int grp # the output file descriptor
+int number[ARB] # number in group of each size
+int index[ARB] # index to results
+int group_size[ARB] # size of groups
+int maxgroup # maximum group size
+
+int i, j, k, id, ngroup, nstars, first_ingrp
+pointer apsel
+real x, y, mag, sky
+
+begin
+ # Get the daophot pointer.
+ apsel = DP_APSEL(dao)
+
+ # Print results to the standard output.
+ if (DP_VERBOSE(dao) == YES) {
+ call printf (" Size of Number of\n")
+ call printf (" group groups\n\n")
+ do i = 1, maxgroup {
+ if (number[i] <= 0)
+ next
+ call printf ("%8d %9d\n")
+ call pargi (i)
+ call pargi (number[i])
+ }
+ }
+
+ # Add header parameters to the table.
+ call dp_xggrppars (dao, grp)
+
+ # Write out the banner.
+ call fprintf (grp, "#\n")
+ call fprintf (grp, GR_NAMESTR)
+ call fprintf (grp, GR_UNITSTR)
+ call fprintf (grp, GR_FORMATSTR)
+ call fprintf (grp, "#\n")
+
+ # Write out each group.
+ ngroup = 1
+ first_ingrp = 1
+ while (first_ingrp <= DP_APNUM(apsel)) {
+
+ do j = first_ingrp, first_ingrp + group_size[first_ingrp] - 1 {
+
+ # Test the center.
+ k = index[j]
+ x = Memr[DP_APXCEN(apsel)+k-1]
+ y = Memr[DP_APYCEN(apsel)+j-1]
+ if (IS_INDEFR(x) || IS_INDEFR(y))
+ break
+ call dp_wout (dao, im, x, y, x, y, 1)
+
+ # Get the rest of the numbers.
+ id = Memi[DP_APID(apsel)+k-1]
+ mag = Memr[DP_APMAG(apsel)+k-1]
+ sky = Memr[DP_APMSKY(apsel)+k-1]
+
+ # Write the results.
+ call fprintf (grp, GR_DATASTR)
+ call pargi (ngroup)
+ call pargi (id)
+ call pargr (x)
+ call pargr (y)
+ call pargr (mag)
+ call pargr (sky)
+ }
+
+ ngroup = ngroup + 1
+ first_ingrp = first_ingrp + group_size[first_ingrp]
+ }
+
+ # Compute the number of groups and the number of stars.
+ ngroup = 0
+ nstars = 0
+ do i = 1, maxgroup {
+ if (number[i] <= 0)
+ next
+ nstars = nstars + i * number[i]
+ ngroup = ngroup + number[i]
+ }
+
+ if (DP_VERBOSE(dao) == YES) {
+ call printf ("\nTotal of %d stars in %d groups\n")
+ call pargi (nstars)
+ call pargi (ngroup)
+ }
+end
+
+
+# DP_TWRTGROUP -- Write each group into the GROUP output text file.
+
+procedure dp_twrtgroup (dao, im, grp, number, index, group_size, maxgroup)
+
+pointer dao # pointer to the daophot structure
+pointer im # the input image descriptor
+pointer grp # pointer to group output file
+int number[ARB] # number in group of each size
+int index[ARB] # index to results
+int group_size[ARB] # size of groups
+int maxgroup # maximum group size
+
+int row, first_ingrp, ngroup, nstars, i, j, k, id
+pointer apsel, sp, colpoint
+real x, y, mag, sky
+
+begin
+ # Get the daophot pointer.
+ apsel = DP_APSEL(dao)
+
+ # Allocate space for the column pointers.
+ call smark( sp)
+ call salloc (colpoint, NCOLUMN, TY_INT)
+
+ # Get the necessary info to create the ST table.
+ call dp_tgnewgrp (grp, Memi[colpoint])
+
+ # Add header parameters to the ST table.
+ call dp_tggrppars (dao, grp)
+
+ # Optionally print results to the standard output.
+ if (DP_VERBOSE(dao) == YES) {
+ call printf (" Size of Number of\n")
+ call printf (" group groups\n\n")
+ do i = 1, maxgroup {
+ if (number[i] <= 0)
+ next
+ call printf (" %d %d\n")
+ call pargi (i)
+ call pargi (number[i])
+ }
+ }
+
+ # Initialize for writing.
+ ngroup = 1
+ row = 0
+
+ # Initialize for reading.
+ first_ingrp = 1
+
+ # Write out the data for all the groups.
+ while (first_ingrp <= DP_APNUM(apsel)) {
+
+ do j = first_ingrp, first_ingrp + group_size[first_ingrp] - 1 {
+
+ # Test the center.
+ k = index[j]
+ x = Memr[DP_APXCEN(apsel)+k-1]
+ y = Memr[DP_APYCEN(apsel)+j-1]
+ if (IS_INDEFR(x) || IS_INDEFR(y))
+ break
+ call dp_wout (dao, im, x, y, x, y, 1)
+
+ # Get the rest of the values.
+ id = Memi[DP_APID(apsel)+k-1]
+ mag = Memr[DP_APMAG(apsel)+k-1]
+ sky = Memr[DP_APMSKY(apsel)+k-1]
+
+ # Copy the values to the correct table row.
+ row = row + 1
+ call tbrpti (grp, Memi[colpoint], ngroup, 1, row)
+ call tbrpti (grp, Memi[colpoint+1], id, 1, row)
+ call tbrptr (grp, Memi[colpoint+2], x, 1, row)
+ call tbrptr (grp, Memi[colpoint+3], y, 1, row)
+ call tbrptr (grp, Memi[colpoint+4], mag, 1, row)
+ call tbrptr (grp, Memi[colpoint+5], sky, 1, row)
+ }
+
+ ngroup = ngroup + 1
+ first_ingrp = first_ingrp + group_size[first_ingrp]
+ }
+
+ # Compute the number of groups and the number of stars.
+ ngroup = 0
+ nstars = 0
+ do i = 1, maxgroup {
+ if (number[i] <= 0)
+ next
+ nstars = nstars + i * number[i]
+ ngroup = ngroup + number[i]
+ }
+
+ # Optionally print out a summary of the results.
+ if (DP_VERBOSE(dao) == YES) {
+ call printf ("\nTotal of %d stars in %d groups\n")
+ call pargi (nstars)
+ call pargi (ngroup)
+ }
+
+ call sfree (sp)
+end