aboutsummaryrefslogtreecommitdiff
path: root/noao/onedspec/sensfunc/sfvstats.x
diff options
context:
space:
mode:
Diffstat (limited to 'noao/onedspec/sensfunc/sfvstats.x')
-rw-r--r--noao/onedspec/sensfunc/sfvstats.x104
1 files changed, 104 insertions, 0 deletions
diff --git a/noao/onedspec/sensfunc/sfvstats.x b/noao/onedspec/sensfunc/sfvstats.x
new file mode 100644
index 00000000..add49da7
--- /dev/null
+++ b/noao/onedspec/sensfunc/sfvstats.x
@@ -0,0 +1,104 @@
+include "sensfunc.h"
+
+# SF_VSTATS -- Verbose statistics output.
+
+procedure sf_vstats (fd, stds, nstds, cv, wextn, extn, nextn, ecv)
+
+int fd # Output file descriptor (may be STDOUT)
+pointer stds[nstds] # Standard star data
+int nstds # Number of standard stars
+pointer cv # Sensitivity function curve
+real wextn[nextn] # Extinction table wavelength
+real extn[nextn] # Extinction table values
+int nextn # Number of extinction table values
+pointer ecv # Residual extinction curve
+
+int i, j, n, nwaves
+real w, fit, ext, dext, cveval()
+double sum, sum2, s
+pointer sp, waves, sens, xp, yp, zp
+
+begin
+ nwaves = 0
+ do i = 1, nstds-1
+ if (STD_FLAG(stds[i]) != SF_EXCLUDE)
+ nwaves = nwaves + STD_NWAVES(stds[i])
+
+ call smark (sp)
+ call salloc (waves, nwaves, TY_REAL)
+ call salloc (sens, nwaves, TY_REAL)
+
+ nwaves = 0
+ do i = 1, nstds-1 {
+ if (STD_FLAG(stds[i]) == SF_EXCLUDE)
+ next
+ n = STD_NWAVES(stds[i])
+ xp = STD_WAVES(stds[i])
+ yp = STD_SENS(stds[i])
+ zp = STD_WTS(stds[i])
+ do j = 1, n {
+ if (Memr[zp] != 0.) {
+ Memr[waves+nwaves] = Memr[xp]
+ Memr[sens+nwaves] = Memr[yp]
+ nwaves = nwaves + 1
+ }
+ xp = xp + 1
+ yp = yp + 1
+ zp = zp + 1
+ }
+ }
+ call xt_sort2 (Memr[waves], Memr[sens], nwaves)
+
+ call fprintf (fd, "%8s %7s %7s %7s %7s %5s %7s %7s\n")
+ call pargstr ("Lambda")
+ call pargstr ("Fit")
+ call pargstr ("Avg")
+ call pargstr ("Resid")
+ call pargstr ("SD Avg")
+ call pargstr ("N")
+ call pargstr ("Ext")
+ call pargstr ("Dext")
+
+ dext = 0.
+ n = 0
+ sum = 0.
+ sum2 = 0.
+ do i = 0, nwaves-1 {
+ w = Memr[waves+i]
+ s = Memr[sens+i]
+ n = n + 1
+ sum = sum + s
+ sum2 = sum2 + s * s
+
+ if ((i < nwaves-1) && (w == Memr[waves+i+1]))
+ next
+
+ sum = sum / n
+ sum2 = sum2 / n - sum * sum
+ if (sum2 > 0)
+ sum2 = sqrt (sum2 / n)
+ else
+ sum2 = 0.
+ fit = cveval (cv, w)
+ call intrp (1, wextn, extn, nextn, w, ext, j)
+ if (ecv != NULL)
+ dext = cveval (ecv, w)
+ call fprintf (fd, "%8.2f %7.3f %7.3f %7.4f %7.4f %5d %7.4f %7.4f\n")
+ call pargr (w)
+ call pargr (fit)
+ call pargd (sum)
+ call pargd (sum - fit)
+ call pargd (sum2)
+ call pargi (n)
+ call pargr (ext)
+ call pargr (dext)
+ n = 0
+ sum = 0.
+ sum2 = 0.
+ }
+
+ # Trailing spacer
+ call fprintf (fd, "\n")
+
+ call sfree (sp)
+end