aboutsummaryrefslogtreecommitdiff
path: root/noao/onedspec/splot/eqwidth.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/onedspec/splot/eqwidth.x
downloadiraf-linux-fa080de7afc95aa1c19a6e6fc0e0708ced2eadc4.tar.gz
Initial commit
Diffstat (limited to 'noao/onedspec/splot/eqwidth.x')
-rw-r--r--noao/onedspec/splot/eqwidth.x109
1 files changed, 109 insertions, 0 deletions
diff --git a/noao/onedspec/splot/eqwidth.x b/noao/onedspec/splot/eqwidth.x
new file mode 100644
index 00000000..0594041a
--- /dev/null
+++ b/noao/onedspec/splot/eqwidth.x
@@ -0,0 +1,109 @@
+# EQWIDTH -- Compute equivalent width, flux and center
+
+procedure eqwidth (sh, gfd, wx1, wy1, x, y, n, fd1, fd2)
+
+pointer sh
+int gfd
+real wx1, wy1
+real x[ARB]
+real y[ARB]
+int n
+int fd1, fd2
+
+char command[SZ_FNAME]
+real wx2, wy2, sigma0, invgain
+real flux_diff, rsum[2], esum[2], sum[2], cont, ctr[2]
+int i, wc, key
+pointer sp, s
+
+real clgetr()
+int clgcur()
+double shdr_wl()
+
+begin
+ # Get second position
+ call printf ("e again:")
+ i = clgcur ("cursor", wx2, wy2, wc, key, command, SZ_FNAME)
+
+ if (wx1 == wx2) {
+ call printf ("Cannot get EQW - move cursor")
+ return
+ }
+
+ # Set noise.
+ sigma0 = clgetr ("sigma0")
+ invgain = clgetr ("invgain")
+ if (IS_INDEF(sigma0) || IS_INDEF(invgain) || sigma0<0. || invgain<0.) {
+ sigma0 = INDEF
+ invgain = INDEF
+ }
+ call smark (sp)
+ call salloc (s, n, TY_REAL)
+ if (IS_INDEF(invgain))
+ call amovkr (INDEF, Memr[s], n)
+ else {
+ do i = 1, n {
+ if (y[i] > 0)
+ Memr[s+i-1] = sqrt (sigma0 ** 2 + invgain * y[i])
+ else
+ Memr[s+i-1] = sqrt (sigma0 ** 2)
+ }
+ }
+
+ # Derive the needed values
+ call sumflux (sh, x, y, Memr[s], n, wx1, wx2, wy1, wy2,
+ sum, rsum, esum, ctr)
+
+ # Compute difference in flux between ramp and spectrum
+ flux_diff = sum[1] - rsum[1]
+
+ # Compute eq. width of feature using ramp midpoint as
+ # continuum
+ cont = 0.5 * (wy1 + wy2)
+
+ # Print on status line - save in answer buffer
+ call printf (
+ "center = %9.7g, eqw = %9.4f, continuum = %9.7g flux = %9.6g\n")
+ call pargr (ctr[1])
+ call pargr (esum[1])
+ call pargr (cont)
+ call pargr (flux_diff)
+
+ if (fd1 != NULL) {
+ call fprintf (fd1, " %9.7g %9.7g %9.6g %9.4g\n")
+ call pargr (ctr[1])
+ call pargr (cont)
+ call pargr (flux_diff)
+ call pargr (esum[1])
+ }
+ if (fd2 != NULL) {
+ call fprintf (fd2, " %9.7g %9.7g %9.6g %9.4g\n")
+ call pargr (ctr[1])
+ call pargr (cont)
+ call pargr (flux_diff)
+ call pargr (esum[1])
+ }
+ if (!IS_INDEF(sigma0)) {
+ if (fd1 != NULL) {
+ call fprintf (fd1,
+ " (%7.5g) %9w (%7.4g) (%7.2g)\n")
+ call pargr (ctr[2])
+ call pargr (sum[2])
+ call pargr (esum[2])
+ }
+ if (fd2 != NULL) {
+ call fprintf (fd2,
+ " (%7.5g) %9w (%7.4g) (%7.2g)\n")
+ call pargr (ctr[2])
+ call pargr (sum[2])
+ call pargr (esum[2])
+ }
+ }
+
+ # Draw cursor position
+ i = max (1, min (n, nint (shdr_wl (sh, double(ctr[1])))))
+ call gline (gfd, wx1, wy1, wx2, wy2)
+ call gline (gfd, ctr[1], cont, ctr[1], y[i])
+
+ call sfree (sp)
+end