1
! @(#)mosdefine.prg 19.1 (ESO-DMD) 02/25/03 14:26:43
2
! +++++++++++++++++++++++++++++++++++++++++++++++++
3
!.COPYRIGHT (C) 1994 Landessternwarte Heidelberg
5
!.AUTHORS Sabine Moehler (LSW)
7
!.KEYWORDS Spectroscopy, MOS
9
!.PURPOSE execute the command DEFINE/MOS
11
!.VERSION 1.0 Creation 02/07/94
13
! DEFINE/MOS image mos_table windows_table threshold window binning plot_option
15
! -------------------------------------------------
17
CROSSREF OBJECT MOS WINDOWS THRESH WIND XBIN CENTMET
19
DEFINE/PARAM P1 {OBJ} IMAGE "Enter input image:"
20
DEFINE/PARAM P2 {MOS} TABLE "Enter MOS table:"
21
DEFINE/PARAM P3 {WINDOWS} TABLE "Enter output table:"
22
DEFINE/PARAM P4 {THRESH} NUMBER "Threshold:"
23
DEFINE/PARAM P5 {WIND} NUMBER "Window:"
24
DEFINE/PARAM P6 {XBIN} NUMBER "binning in X:"
25
DEFINE/PARAM P7 {SCAN_POS} NUMBER "center for scan (world coordinates)"
26
DEFINE/PARAM P8 0. NUMBER "Plot option"
27
!-------------------------------------------------
29
!-------------------------------------------------
30
DEFINE/LOCAL PLOTPAR1/I/1/1 0.
31
DEFINE/LOCAL PLOTPAR2/I/1/1 0.
32
DEFINE/LOCAL PLOTPAR3/I/1/1 0.
33
DEFINE/LOCAL PLOTPAR4/I/1/1 0.
34
define/local tmp1/d/1/1 0.
35
define/local tmp2/i/1/2 0.,0.
36
define/local tmp3/i/1/1 0.
37
define/local tmp4/i/1/1 0.
39
DEFINE/LOCAL CONT/C/1/1 y
41
DEFINE/LOCAL PATH/I/1/2 0.,0.
43
DEFINE/LOCAL I/I/1/1 0
44
DEFINE/LOCAL J/I/1/1 0
46
DEFINE/LOCAL POSR/R/1/3 0.,0.,0.
48
DEFINE/LOCAL QUALIF/C/1/4 " " all
50
DEFINE/LOCAL SCAN/D/1/1 0.
52
DEFINE/LOCAL SELECT/I/1/1 0.
53
! Keyword to determine whether slitlet has been searched
54
DEFINE/LOCAL FOUND/I/1/1 0.
56
!define/local OUT_A/c/1/60 "{p3}"
57
WRITE/KEYW QUALIF {MID$CMND(11:14)}
61
define/local OUT_D/c/1/60 "{P3}"
62
WRITE/KEYW INPUTI {P5},{P6},{P8}
63
WRITE/KEYW INPUTR {P4}
66
COPY/DK {IN_A} START/D/1/1 PLOTPAR1
67
COPY/DK {IN_A} STEP/D/1/1 TMP1
68
COPY/DK {IN_A} NPIX/I/1/2 TMP2
71
SCAN = TMP2/2*TMP1+PLOTPAR1
75
!-------------------------------------------------------------------------------
77
!-------------------------------------------------------------------------------
79
IF {INPUTI(3)} .eq. 1 .or. {INPUTI(3)} .eq. 3 THEN
81
!-------------------------------------------------------------------------------
83
!-------------------------------------------------------------------------------
86
WRITE/OUT "object = blue"
88
PLOTPAR3 = PLOTPAR1+{TMP1}*({TMP2(1)}-1)
90
COPY/DK {OUT_D}.tbl NOBJ/I/1/1 NOBJ
93
PLOTPAR2 = {{OUT_D},:Obj_Strt,{I}}
94
PLOTPAR4 = {{OUT_D},:Obj_End,{I}}
95
SET/MIDAS OUTPUT=LOGONLY
96
DRAW/RECTA {PLOTPAR1},{PLOTPAR2},{PLOTPAR3},{PLOTPAR4} F ? 5 ?
101
write/keyw cont/c/1/1 y
102
if m$existk("alltutos") .eq. 1 then
103
if alltutos .eq. 1 goto cont_check
106
inquire/keyw cont "Press return to plot sky, n to stop"
109
IF cont .eq. "y" then
110
WRITE/OUT "sky = green "
111
COPY/DK {OUT_D}.tbl NSKY/I/1/1 NSKY
114
PLOTPAR2 = {{OUT_D},:Sky_Strt,{I}}
115
PLOTPAR4 = {{OUT_D},:Sky_End,{I}}
116
SET/MIDAS OUTPUT=LOGONLY
117
DRAW/RECTA {PLOTPAR1},{PLOTPAR2},{PLOTPAR3},{PLOTPAR4} F ? 4 ?
122
WRITE/KEYW cont/c/1/1 y
126
IF INPUTI(3) .ge. 2 THEN
128
!-------------------------------------------------------------------------------
130
!-------------------------------------------------------------------------------
132
WRITE/OUT "Now computing 1-dimensional frames"
133
TMP3 = SCAN-{INPUTI(2)}/2
134
TMP4 = SCAN+{INPUTI(2)}/2
135
AVER/COLUMN MIDTMPC = {P1} {TMP3},{TMP4}
136
TMP3 = PLOTPAR1+{TMP1}*{INPUTI(1)}
137
TMP4 = PLOTPAR1+{TMP1}*({INPUTI(1)}+{INPUTI(2)})
138
AVER/COLUMN MIDTMPS = {P1} {TMP3},{TMP4}
139
TMP3 = PLOTPAR1+{TMP1}*({TMP2(1)}-{INPUTI(1)}-{INPUTI(2)})
140
TMP4 = PLOTPAR1+{TMP1}*({TMP2(1)}-{INPUTI(1)})
141
AVER/COLUMN MIDTMPE = {P1} {TMP3},{TMP4}
142
write/key OUT_D "{p3}"
143
SET/GRAP COLOUR=1 LTYPE=1
145
SET/GRAP COLOUR=1 LTYPE=2
148
SET/GRAP COLOUR=4 LTYPE=1
149
COPY/DK {OUT_D}.tbl NOBJ/I/1/1 NOBJ
151
PLOTPAR1 = {PLRGRAP(5)}*0.5+{PLRGRAP(6)}*0.5
152
PLOTPAR2 = {{OUT_D},:Obj_Strt,{I}}
153
PLOTPAR4 = {{OUT_D},:Obj_End,{I}}
154
OVERPLOT/LINE 1 {PLOTPAR2},{PLRGRAP(5)} {PLOTPAR2},{PLRGRAP(6)}
155
OVERPLOT/LINE 1 {PLOTPAR4},{PLRGRAP(5)} {PLOTPAR4},{PLRGRAP(6)}
156
OVERPLOT/LINE 1 {PLOTPAR2},{PLOTPAR1} {PLOTPAR4},{PLOTPAR1}
159
COPY/DK {OUT_D}.tbl NSKY/I/1/1 NSKY
161
PLOTPAR1 = {PLRGRAP(5)}*0.5+{PLRGRAP(6)}*0.5
162
PLOTPAR2 = {{OUT_D},:Sky_Strt,{I}}
163
PLOTPAR4 = {{OUT_D},:Sky_End,{I}}
164
OVERPLOT/LINE 1 {PLOTPAR2},{PLRGRAP(5)} {PLOTPAR2},{PLRGRAP(6)}
165
OVERPLOT/LINE 1 {PLOTPAR4},{PLRGRAP(5)} {PLOTPAR4},{PLRGRAP(6)}
166
OVERPLOT/LINE 1 {PLOTPAR2},{PLOTPAR1} {PLOTPAR4},{PLOTPAR1}
172
!-------------------------------------------------------------------------------
173
! Possibility to change objects' and sky positions
174
!-------------------------------------------------------------------------------
177
write/key cont/c/1/1 y
178
if m$existk("alltutos") .eq. 1 then
179
if alltutos .eq. 1 goto end
182
INQUIRE/KEYW cont "Are you satisfied with this? Default = y"
183
IF cont .eq. "y" GOTO end
186
WRITE/KEYW cont/c/1/1 y
187
WRITE/OUT "Do you want to ..."
188
WRITE/OUT "... delete an object? --> 1"
189
WRITE/OUT "... add an object? --> 2"
190
WRITE/OUT "... delete a sky region? --> 3"
191
WRITE/OUT "... add a sky region? --> 4"
192
WRITE/OUT "... change an object ? --> 5"
193
WRITE/OUT "... change a sky region? --> 6"
194
WRITE/OUT "... have a closer look? --> 7"
195
WRITE/OUT "... stop? --> 8"
196
inquire/keyw path/i/1/1 "Enter choice: "
197
IF path(1) .eq. 8 GOTO end
199
!-------------------------------------------------------------------------------
200
! Plot only slitlet to deal with
201
!-------------------------------------------------------------------------------
203
INQUIRE/KEYW J "Enter number of slitlet"
207
IF {INPUTI(3)} .le. 1 THEN
208
WRITE/OUT "Now computing 1-dimensional frames"
210
TMP3 = SCAN-{INPUTI(2)}/2
211
TMP4 = SCAN+{INPUTI(2)}/2
212
AVER/COLUMN MIDTMPC = {P1} {TMP3},{TMP4}
213
TMP3 = PLOTPAR1+{TMP1}*{INPUTI(1)}
214
TMP4 = PLOTPAR1+{TMP1}*({INPUTI(1)}+{INPUTI(2)})
215
AVER/COLUMN MIDTMPS = {P1} {TMP3},{TMP4}
216
TMP3 = PLOTPAR1+{TMP1}*({TMP2(1)}-{INPUTI(1)}-{INPUTI(2)})
217
TMP4 = PLOTPAR1+{TMP1}*({TMP2(1)}-{INPUTI(1)})
218
AVER/COLUMN MIDTMPE = {P1} {TMP3},{TMP4}
219
WRITE/KEYW INPUTI/I/3/3 2
222
TMP3 = {{IN_B},:ystart,@{J}}
223
TMP4 = {{IN_B},:yend,@{J}}
224
PLOT MIDTMPC ? {TMP3},{TMP4}
225
SET/GRAP COLOUR=1 LTYPE=2
229
!-------------------------------------------------------------------------------
231
!-------------------------------------------------------------------------------
233
SET/GRAP COLOUR=4 LTYPE=1
234
COPY/DK {OUT_D}.tbl NOBJ/I/1/1 NOBJ
236
SELECT = {{OUT_D},:Obj_Slit,{I}}
237
IF SELECT .EQ. PATH(2) THEN
238
PLOTPAR1 = {PLRGRAP(5)}*0.5+{PLRGRAP(6)}*0.5
239
PLOTPAR2 = {{OUT_D},:Obj_Strt,{I}}
240
PLOTPAR4 = {{OUT_D},:Obj_End,{I}}
241
OVERPLOT/LINE 1 {PLOTPAR2},{PLRGRAP(5)} {PLOTPAR2},{PLRGRAP(6)}
242
OVERPLOT/LINE 1 {PLOTPAR4},{PLRGRAP(5)} {PLOTPAR4},{PLRGRAP(6)}
243
OVERPLOT/LINE 1 {PLOTPAR2},{PLOTPAR1} {PLOTPAR4},{PLOTPAR1}
244
WRITE/KEYW FOUND/I/1/1 1
248
!-------------------------------------------------------------------------------
250
!-------------------------------------------------------------------------------
253
COPY/DK {OUT_D}.tbl NSKY/I/1/1 NSKY
255
SELECT = {{OUT_D},:Sky_Slit,{I}}
256
IF SELECT .EQ. PATH(2) THEN
257
PLOTPAR1 = {PLRGRAP(5)}*0.5+{PLRGRAP(6)}*0.5
258
PLOTPAR2 = {{OUT_D},:Sky_Strt,{I}}
259
PLOTPAR4 = {{OUT_D},:Sky_End,{I}}
260
OVERPLOT/LINE 1 {PLOTPAR2},{PLRGRAP(5)} {PLOTPAR2},{PLRGRAP(6)}
261
OVERPLOT/LINE 1 {PLOTPAR4},{PLRGRAP(5)} {PLOTPAR4},{PLRGRAP(6)}
262
OVERPLOT/LINE 1 {PLOTPAR2},{PLOTPAR1} {PLOTPAR4},{PLOTPAR1}
263
WRITE/KEYW FOUND/I/1/1 1
269
WRITE/OUT " *** No results for this slitlet ***"
271
WRITE/KEYW FOUND/I/1/1 0.
274
IF path(1) .eq. 1 THEN
276
ELSEIF path(1) .eq. 2 THEN
278
ELSEIF path(1) .eq. 3 THEN
280
ELSEIF path(1) .eq. 4 THEN
282
ELSEIF path(1) .eq. 5 THEN
284
ELSEIF path(1) .eq. 6 THEN
286
ELSEIF path(1) .eq. 7 THEN
288
ELSEIF path(1) .gt. 8 THEN
293
!-------------------------------------------------------------------------------
295
!-------------------------------------------------------------------------------
297
WRITE/OUT "Click on object you want to delete"
299
WRITE/KEYW POSR/R/1/1 {OUTPUTR(5)}
300
write/keyw OUT_A/c/1/60 {OUT_D(1:60)}
301
RUN STD_EXE:CHANGEDEF
302
WRITE/KEYW cont/c/1/1 y
303
WRITE/KEYW path/i/1/1 9
304
WRITE/OUT "Results..."
308
!-------------------------------------------------------------------------------
309
! Define new object or sky
310
!-------------------------------------------------------------------------------
312
IF path(1) .eq. 2 THEN
313
WRITE/OUT "Click on object you want to add"
314
ELSEIF path(1) .eq. 4 THEN
315
WRITE/OUT "Click on sky you want to add"
317
WRITE/OUT "First left/lower limit"
319
WRITE/KEYW POSR/R/1/1 {OUTPUTR(5)}
320
WRITE/OUT "Now right/upper limit"
322
WRITE/KEYW POSR/R/2/2 {OUTPUTR(5)}
323
!-------------------------------------------------------------------------------
324
! Check new object resp. sky
325
!-------------------------------------------------------------------------------
327
OVERPLOT/LINE 1 {POSR(1)},{PLRGRAP(5)} {POSR(1)},{PLRGRAP(6)}
328
OVERPLOT/LINE 1 {POSR(2)},{PLRGRAP(5)} {POSR(2)},{PLRGRAP(6)}
330
INQUIRE/KEYW cont "Are you satisfied with this? Default = y"
331
IF cont .eq. "y" then
332
write/keyw OUT_A/c/1/60 {OUT_D(1:60)}
333
RUN STD_EXE:CHANGEDEF
335
WRITE/KEYW cont/c/1/1 y
338
WRITE/KEYW path/i/1/1 9
339
WRITE/OUT "Results..."
343
!-------------------------------------------------------------------------------
345
!-------------------------------------------------------------------------------
347
WRITE/OUT "Click on sky you want to delete"
349
WRITE/KEYW POSR/R/1/1 {OUTPUTR(5)}
350
write/keyw OUT_A/c/1/60 {OUT_D(1:60)}
351
RUN STD_EXE:CHANGEDEF
352
WRITE/KEYW cont/c/1/1 y
353
WRITE/KEYW path/i/1/1 9
354
WRITE/OUT "Results..."
358
!-------------------------------------------------------------------------------
360
!-------------------------------------------------------------------------------
362
WRITE/KEYW cont/c/1/1 y
363
IF path(1) .eq. 5 THEN
364
WRITE/OUT "Click on object you want to change"
365
WRITE/OUT "First old object"
366
ELSEIF path(1) .eq. 6 THEN
367
WRITE/OUT "Click on sky you want to change"
368
WRITE/OUT "First old sky"
371
WRITE/KEYW POSR/R/3/3 {OUTPUTR(5)}
372
INQUIRE/KEYW cont "Do you want to change left/lower limit? Default = y"
373
IF cont .eq. "n" then
374
WRITE/KEYW POSR/R/1/1 -9999.9
377
WRITE/KEYW POSR/R/1/1 {OUTPUTR(5)}
379
WRITE/KEYW cont/c/1/1 y
380
INQUIRE/KEYW cont "Do you want to change right/upper limit? Default = y"
381
IF cont .eq. "n" then
382
WRITE/KEYW POSR/R/2/2 -9999.9
385
WRITE/KEYW POSR/R/2/2 {OUTPUTR(5)}
387
WRITE/KEYW cont/c/1/1 y
388
!-------------------------------------------------------------------------------
389
! Check new object/sky
390
!-------------------------------------------------------------------------------
392
OVERPLOT/LINE 1 {POSR(1)},{PLRGRAP(5)} {POSR(1)},{PLRGRAP(6)}
393
OVERPLOT/LINE 1 {POSR(2)},{PLRGRAP(5)} {POSR(2)},{PLRGRAP(6)}
395
INQUIRE/KEYW cont "Are you satisfied with this? Default = y"
396
IF cont .eq. "y" then
397
write/keyw OUT_A/c/1/60 {OUT_D(1:60)}
398
RUN STD_EXE:CHANGEDEF
400
WRITE/KEYW cont/c/1/1 y
403
WRITE/KEYW path/i/1/1 9
404
WRITE/OUT "Results..."