1
! @(#)spemerge.prg 19.1 (ES0-DMD) 02/25/03 14:29:21
2
!+++++++++++++++++++++++++++++++++++++++++++++++++++++++
4
!.COPYRIGHT (C) 1992 European Southern Observatory
6
!.AUTHOR Pascal Ballester, ESO - Garching
7
!.KEYWORDS Spectroscopy, Echelle,
8
!.PURPOSE Command MERGE/SPECTRUM
9
!.VERSION 1.0 Creation 12-AUG-1992
11
!-------------------------------------------------------
13
DEFINE/PARAM P1 ? IMA "Spectrum 1:"
14
DEFINE/PARAM P2 ? IMA "Spectrum 2:"
15
DEFINE/PARAM P3 ? IMA "Output name:"
16
DEFINE/PARAM P4 5 NUM "Interval (in pixels):"
17
DEFINE/PARAM P5 CONSTANT CHAR "Merging mode (RAMP, CONSTANT, OPTIMAL):"
18
DEFINE/PARAM P8 CCODE CHAR "Option for Optimal: CCODE or PROC"
20
IF P5(1:1) .EQ. "O" .AND. P8(1:1) .EQ. "C" THEN
31
DEFINE/LOCAL STEP/D/1/2 0.,0.
32
DEFINE/LOCAL START/D/1/2 0.,0.
33
DEFINE/LOCAL END/D/1/2 0.,0.
34
DEFINE/LOCAL NPIX/I/1/3 0,0,0
35
DEFINE/LOCAL TEMPD/D/1/1 0.
36
DEFINE/LOCAL TEMPI/I/1/1 0
37
DEFINE/LOCAL TEMPC/C/1/60 XXX
38
DEFINE/LOCAL SPEC1/C/1/60 {P1}
39
DEFINE/LOCAL SPEC2/C/1/60 {P2}
40
DEFINE/LOCAL INTERV/I/1/1 {P4}
42
COPY/DK {P1} STEP/D/1/1 STEP/D/1/1
43
COPY/DK {P2} STEP/D/1/1 STEP/D/2/1
44
COPY/DK {P1} START/D/1/1 START/D/1/1
45
COPY/DK {P2} START/D/1/1 START/D/2/1
46
COPY/DK {P1} NPIX/I/1/1 NPIX/I/1/1
47
COPY/DK {P2} NPIX/I/1/1 NPIX/I/2/1
49
IF STEP(1) .NE. STEP(2) THEN
50
WRITE/OUT "Error: Spectra {P1} and {P2} must have the same step"
54
IF START(2) .LT. START(1) THEN
61
WRITE/KEYW TEMPC {SPEC2}
62
WRITE/KEYW SPEC2 {SPEC1}
63
WRITE/KEYW SPEC1 {TEMPC}
66
END(1) = START(1) + (NPIX(1)-1)*STEP(1)
67
END(2) = START(2) + (NPIX(2)-1)*STEP(2)
68
NPIX(3) = (END(2) - START(1))/STEP(1) + 1
69
CREATE/IMAGE {P3} 1,{NPIX(3)} {START(1)},{STEP(1)}
71
DEFINE/LOCAL LIMIT/I/1/2 0.,0.
73
LIMIT(2) = {{SPEC1},NPIX(1)} - INTERV
74
EXTRACT/IMAGE &a = {SPEC1}[@{LIMIT(1)}:@{LIMIT(2)}]
77
LIMIT(2) = {{SPEC2},NPIX(1)} - INTERV
78
EXTRACT/IMAGE &b = {SPEC2}[@{LIMIT(1)}:@{LIMIT(2)}]
81
IF START(2) .GE. END(1) THEN
82
WRITE/OUT "Warning: No overlap between the spectra"
84
IF P5(1:1) .EQ. "R" THEN ! Method RAMP
85
COMPUTE/IMAGE &o = &a+&b
86
CREATE/IMAGE &r 1,{&o,NPIX(1)} {&o,START(1)},{&o,STEP(1)} POLY 0.,1.
87
COMPUTE/IMAGE &r = &r - {&r[@1]}
88
COMPUTE/IMAGE &r = &r / {&r[@{&r,NPIX(1)}]}
89
COMPUTE/IMAGE &o = &a*(1.-&r) + &b*&r
91
IF P5(1:1) .EQ. "O" THEN ! Method OPTIMAL
92
COMPUTE/IMAGE &v = {P6}*{P6}
93
COMPUTE/IMAGE &w = {P7}*{P7}
94
COMPUTE/IMAGE &o = (&a*&v + &b*&w)/(&v+&w)
96
IF P5(1:1) .EQ. "C" THEN ! Method CONSTANT
97
COMPUTE/IMAGE &o = (&a+&b)/2.
104
!**********************************************************
108
DEFINE/PARAM P1 ? IMA "Enter input/output image"
109
DEFINE/PARAM P2 0 N "Reference order"
110
DEFINE/PARAM P3 ? N "Bin size"
112
DEFINE/LOCAL NORD/I/1/1 {{P1},NPIX(2)}
113
DEFINE/LOCAL ORD/I/1/1 0
114
DEFINE/LOCAL ORD1/I/1/1 0
115
DEFINE/LOCAL FACTOR/D/1/1 0.
116
DEFINE/LOCAL LOOP/I/1/1 0
117
DEFINE/LOCAL BIN/R/1/1 {P3}
119
DEFINE/LOCAl POSMAX/I/1/1 0
120
DEFINE/LOCAl POS0/I/1/1 0
121
DEFINE/LOCAl POS1/I/1/1 0
122
DEFINE/LOCAL COEF0/R/1/1 0
123
DEFINE/LOCAL COEFM/R/1/1 0
124
DEFINE/LOCAL COEF1/R/1/1 0
125
DEFINE/LOCAL SCOEF/R/1/1 0
126
DEFINE/LOCAL POSGRAV/R/1/1 0
127
DEFINE/LOCAL CORD/I/1/1 {P2}
129
IF NORD .EQ. 1 RETURN
132
IF CORD .EQ. 0 CORD = NORD/2
135
! SET/GRAPH yaxis xaxis=0.,2.
139
IF ORD .NE. CORD THEN
141
COMP/TABLE &t :AUX = #{ORD}/#{CORD}
142
COMP/HISTO &a = middummt.tbl :AUX {BIN} 0.1 10.
146
IF POS0 .LT. 1 POS0 = 1
148
COEF0 = {&a[@{POS0}]}
149
COEFM = {&a[@{POSMAX}]}
150
COEF1 = {&a[@{POS1}]}
151
SCOEF = COEF0 + COEFM + COEF1
152
POSGRAV = (POS0*COEF0+POSMAX*COEFM+POS1*COEF1)/SCOEF
153
FACTOR = (POSGRAV-1)*{middumma,STEP(1)}+{middumma,START(1)}
154
WRITE/OUT "Order {ORD}. Normalization {FACTOR}"
155
COMP/TABLE &t #{ORD} = #{ORD} / {FACTOR}
162
DELETE/COLUMN &t :AUX