1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
|
# SKYSUB -- Sky subtract fiber spectra.
# Subtract the selected sky apertures from the selected object apertures.
# The object apertures may include the sky apertures if desired.
# The sky apertures are combined to a single master sky which is subtracted
# from each selected object aperture. match. The subtracted sky may be
# saved in an image with the prefix "sky" and the same output name. Note
# that existing output images are clobbered.
procedure skysub (input)
string input = "" {prompt="Input spectra to sky subtract"}
string output = "" {prompt="Output sky subtracted spectra"}
string objaps = "" {prompt="Object apertures"}
string skyaps = "" {prompt="Sky apertures"}
string objbeams = "" {prompt="Object beam numbers"}
string skybeams = "" {prompt="Sky beam numbers"}
bool skyedit = yes {prompt="Edit the sky spectra?"}
string combine = "average" {prompt="Combining option",
enum="average|median|sum"}
string reject = "avsigclip" {prompt="Sky rejection option",
enum="none|minmax|avsigclip"}
string scale = "none" {prompt="Sky scaling option",
enum="none|mode|median|mean"}
bool saveskys = yes {prompt="Save sky spectra?"}
file logfile = "" {prompt="Logfile"}
struct *fd1
struct *fd2
struct *fd3
begin
string imtype, mstype
string in, out, out1, sky, log, aps, str, str2
file temp1, temp2, temp3, temp4
int i, j, n
imtype = "." // envget ("imtype")
i = stridx (",", imtype)
if (i > 0)
imtype = substr (imtype, 1, i-1)
n = strlen (imtype)
temp1 = mktemp ("tmp$iraf")
temp2 = mktemp ("tmp$iraf")
temp3 = mktemp ("tmp$iraf")
temp4 = mktemp ("tmp$iraf")
if (logfile == "")
log = "dev$null"
else
log = logfile
sections (input, option="fullname", > temp1)
sections (output, option="fullname", > temp2)
fd1 = temp1
fd2 = temp2
while (fscan (fd1, in) != EOF) {
i = strlen (in)
if (i > n && substr (in, i-n+1, i) == imtype)
in = substr (in, 1, i-n)
if (fscan (fd2, out) < 1)
out = in
out1 = out
i = strlen (out1)
if (i > 3 && substr (out1, i-2, i) == ".ms")
out1 = substr (out1, 1, i-3)
aps = skyaps
sky = "sky" // out1
if (access (sky // imtype))
imdelete (sky, verify=no)
if (skyedit) {
scopy (in, sky, w1=INDEF, w2=INDEF, apertures=aps, bands="1",
beams=skybeams, apmodulus=0, offset=0, clobber=yes,
format="multispec", merge=no, renumber=no,
verbose=yes, >> "dev$null")
specplot (sky, apertures="", bands="1", autolayout=no,
autoscale=yes, fraction=1., scale=1., offset=0.,
step=0., ptype="1", labels="user", ulabels="",
sysid=yes, yscale=yes, xlpos=1.02, ylpos=0.,
title="Edit sky spectra from "//in, xlabel="",
ylabel="", xmin=INDEF, xmax=INDEF, ymin=INDEF,
ymax=INDEF, logfile=temp4, graphics="stdgraph")
imdelete (sky, verify=no)
system.match (sky, temp4, stop=no) |
fields (fields="2", lines="1-9999") |
system.sort (column=0, ignore=yes, numeric=no,
reverse_sort=no) |
lists.unique (> temp3)
delete (temp4, verify=no)
aps = "@" // temp4
fd3 = temp3
while (fscan (fd3, str) != EOF) {
i = stridx ("(", str)
j = stridx (")", str)
if (i > 0 && j > i)
str = substr(str,i+1,j-1)
else
str = ""
print (str, >> temp4)
}
fd3 = ""; delete (temp3, verify=no)
reject.p_mode="q"
str = reject
reject.p_mode="h"
}
if (skybeams == "") {
scombine (in, sky, noutput="", logfile=logfile,
apertures=aps, group="all", combine=combine,
reject=reject, first=yes, scale=scale, zero="none",
weight="none", sample="", lthreshold=INDEF,
hthreshold=INDEF, nlow=1, nhigh=1, nkeep=1, mclip=yes,
lsigma=3., hsigma=2., rdnoise="0.", gain="1.", snoise="0.",
sigscale=0., pclip=-0.5, grow=0, blank=0.)
} else {
temp3 = mktemp ("sky")
scopy (in, sky, w1=INDEF, w2=INDEF, apertures=aps, bands="",
beams=skybeams, apmodulus=0, offset=0, clobber=yes,
format="multispec", merge=no, renumber=no,
verbose=yes, >> log)
scombine (sky, temp3, noutput="", logfile=logfile,
apertures=aps, group="all", combine=combine,
reject=reject, first=yes, scale=scale, zero="none",
weight="none", sample="", lthreshold=INDEF,
hthreshold=INDEF, nlow=1, nhigh=1, nkeep=1, mclip=yes,
lsigma=3., hsigma=2., rdnoise="0.", gain="1.", snoise="0.",
sigscale=0., pclip=-0.5, grow=0, blank=0.)
flpr
imdelete (sky, verify=no)
imrename (temp3, sky, verbose=yes, >> log)
}
sarith (in, "-", sky, out, w1=INDEF, w2=INDEF, apertures=objaps,
bands="", beams=objbeams, reverse=no, ignoreaps=yes,
format="multispec", renumber=no, offset=0, clobber=yes,
merge=no, errval=0., verbose=yes, >> log)
if (!saveskys)
imdelete (sky, verify=no)
}
fd1 = ""; delete (temp1, verify=no)
fd2 = ""; delete (temp2, verify=no)
delete (temp4, verify=no, >>& "dev$null")
end
|