Viewing contents of file '../idllib/contrib/icur/fun1.pro'
;******************************************************************
PRO FUN1,WAVE,FLUX,EPS,W1,F1,E1 ; ICUR LOOP 2
; VAX Version 1.0 8/29/86
; CURSOR COMMANDS:
; A: PLOT ALL DATA a: ADD A LINE TO THE DATA
; B: BLOWUP PLOT b: REDEFINE BAD DATA
; C: COMPUTE CENTROID OF FEATURE c: COADD BINS
; D: INDICATE BAD DATA (SAME AS R) d: DIVIDE FLUX BY ND FUNCTION
; E: GET EQUIVALENT WIDTHS e: DIVIDE F1 BY ND FUNCTION
; F: ENTER ICFIT TO FIT LINES f: identify lines
; G: MANUALLY SHIFT SECOND DATA SET g: get new comparison from .STD file
; H: h:
; I: INITIALIZE SCREEN i: PERFORM LINEAR INTERPOLATION
; J: JUMP IN X DIRECTION j: LINEAR INTERPOLATION
; K: SAVE DATA ON GENERIC DISK FILES k: DIVIDE F BY ND FUNCTION
; L: LOCATE WAVELENGTH USING CURSOR
; M: PLOT MEAN BETWEEN LIMITS m: CALL FUN2
; N: RESET !Y.RANGE TO 0.
; O: OVERPLOT SECOND DATA SET o: OVERWRITE INPUT VECTOR
; P: TOGGLE !P.PSYM 0<_>10 p: PRINT STATUS
; Q: QUIT
; R: REPLOT, WITH CURRENT NSM r: ROTATIONAL BROADENING (#2 only)
; S: SMOOTH DATA s: GAUSSIAN SMOOTHING
; T: SUM TOTAL FLUX t: OPLOT BLACK BODY
; U: SCALE F1 TO FLUX u: UNREDDEN DATA
; V: LOCATE AND EXPAND PLOT
; W: RETURN WAVELENGTH AND FLUX
; X: EXPAND IN X DIRECTION x: RESET EPSILON VALUE TO -1111
; Y: EXPAND IN Y DIRECTION
; Z: PAUSE z: ZERO BAD FLUX VECTOR
; +: ADD DATA -: FLUX-F1
; *: FLUX*F1 /: FLUX/F1
; %: PLOT FRACTION &: ADD ONLY GOOD DATA
; 0: DRAW ZERO LINE 1: DRAW LINE AT Y=1
; 2: HALVE FLUX !: TOGGLE DEVICE 'X' <-> PS
; 5: (FLUX-F1)/F1
; ?: LIST CURSOR COMMANDS
COMMON COM1,HD,IK,IFT,NSM,C,NDAT,IFSM,KBLO,H1,ipdv,ihcdev
COMMON COMXY,X,Y,ZERR,resetscale,lu3
COMMON VARS,VAR1,VAR2,VAR3,VAR4,bdf,psdel,prffit,vrot2
common icdisk,icurdisk,icurdata,ismdata,objfile,stdfile,userdata,recno
common custompars,dw,lp,flatback,autofft,eafudge,NREC2
common icurunits,xunits,yunits,title,c1,c2,c3,ch
common radialvelocity,radvel,linid,orv,vc
;
autoscale=1
zcam=' LWP LWR SWP SWR '
npx=30 ;number of points in cross correlations
apb=wave(1)-wave(0)
w1save=w1 & f1save=f1
vp0=[.25,.95,.2,.9]
vph=[.2,.9,.2,.9]
vp=vp0
c1save=c1
BDA=-1 ;NOT IN USE
H0=HD
yt=!y.title
!p.color=c1
IF N_ELEMENTS(W1) EQ 0 THEN W1=WAVE
IF N_ELEMENTS(E1) EQ 0 THEN E1=FIX(W1)*0+100
INITF1,WAVE,FLUX,EPS,W1,F1,E1,F,E,RESET,BADW,BADF
XERA=!D.X_CH_SIZE*12
ERAS=INTARR(XERA,!D.Y_CH_SIZE+2)
CMD=''
;
WHILE (ZERR NE 81) and (zerr ne 113) and (zerr ne 26) DO BEGIN ;<Q> to quit
!p.color=c1
IF STRUPCASE(!D.NAME) EQ 'X' THEN WSHOW
STATUS=' Done'
if (STRUPCASE(!D.NAME) EQ 'X') and (strlen(cmd) gt 0) then opstat,status
BLOWUP,-1 ; CURSOR CALL
if zerr eq 33 then cmd='Command: !!' else cmd='Command: '+string(byte(zerr))
status=' Working'
IF (STRUPCASE(!D.NAME) EQ 'X') and (strlen(cmd) gt 0) then begin
tv,eras,0,0 & xyouts,0,2,cmd,/dev
opstat,status
endif
;
if zerr eq 33 then begin ;!
if !d.name eq ipdv then begin
sp,ihcdev
print,' plot data being output to device ',ihcdev
c1=!p.color
!p.position=[.2,.2,.9,.9]
endif else begin
c1=c1save
lplt,ipdv,nodelete=rdbit(psdel,0),noplot=rdbit(psdel,1)
print,' plot data being output to device ',ipdv
!p.position=[.15,.15,.95,.95]
endelse
endif
Z=WHERE(ZERR EQ KBLO,kz) & IF kz GT 0 THEN begin ;{>,<,^,6}
BLOWUP,ZERR
IF AUTOSCALE NE -1 THEN autoscale=1
endif
IF ZERR EQ 61 THEN BEGIN ;<=>
!p.position=[vph(0),vph(2),vph(1),vph(3)]
PLDATA,10,WAVE,FLUX,BADW,BADF,pcol=ch,psdel=psdel
!p.position=[vp(0),vp(2),vp(1),vp(3)]
ENDIF
IF ZERR EQ 41 THEN IBIT,VAR3,4,-1 ;<(> TOGGLE BIT
IF ZERR EQ 63 THEN HDLST,2 ;<?>
IF ZERR EQ 65 THEN begin ;<A>
PLDATA,-2,WAVE,F
zerr=79
endif
IF ZERR EQ 66 THEN BLOWUP,0 ;<B>
IF ZERR EQ 67 THEN FTOT,2,WAVE,F ;<C>
IF ZERR EQ 69 THEN IFEAT,WAVE,F,BADF ;<E>
IF ZERR EQ 70 THEN ICFIT2,WAVE,F,E ;<F>
IF ZERR EQ 71 THEN BEGIN
BDA=BDF ;BAD DATA FLAG
WSHIFT,1,WAVE,FLUX,EPS,F1,E1,E,W1 ;<G>
ENDIF
IF ZERR EQ 73 THEN PLDATA,-1,0.,0. ;<I>
IF ZERR EQ 74 THEN BEGIN ;<J>
jump
IF AUTOSCALE NE -1 THEN AUTOSCALE=1
ENDIF
IF ZERR EQ 75 THEN BEGIN ;<K>
HX=HD
KDAT,objfile,HX,WAVE,F,E
ENDIF
IF ZERR EQ 76 THEN LOCATE,0,WAVE,F ;<L>
IF ZERR EQ 77 THEN FTOT,1,WAVE,F ;<M>
IF ZERR EQ 78 THEN !Y.RANGE(*)=0. ;<N>
IF ZERR EQ 80 THEN !P.PSYM=((!P.PSYM/10+1) MOD 2)*10 ;<P>
IF ZERR EQ 82 THEN PLDATA,0,WAVE,F ;<R>
IF ZERR EQ 83 THEN ROTVEL,0,WAVE ;<S>
IF ZERR EQ 84 THEN FTOT,0,WAVE,F ;<T>
IF ZERR EQ 85 THEN begin ;<U>
SCALE,0,WAVE,FLUX,F1
autoscale=0 ;turn off oplot autoscaling
endif
IF ZERR EQ 86 THEN BEGIN ;<V>
LOCATE,1,WAVE,F
IF AUTOSCALE NE -1 THEN AUTOSCALE=1
ENDIF
IF (ZERR EQ 87) OR (ZERR EQ 32) THEN WAVEL ;<W>
IF ZERR EQ 88 THEN begin ;<X>
BLOWUP,1
IF AUTOSCALE NE -1 THEN autoscale=1
endif
IF ZERR EQ 89 THEN BLOWUP,2 ;<Y>
IF ZERR EQ 90 THEN STOP,' FUN1 STOP ' ;<Z>
IF (ZERR GE 37) AND (ZERR LT 48) THEN BEGIN
MANIP,FLUX,F1,F,EPS,E1,badf
AUTOSCALE=-1
ENDIF
IF ZERR EQ 48 THEN DRLIN,0. ;<0>
IF ZERR EQ 49 THEN DRLIN,1. ;<1>
IF ZERR EQ 50 THEN F=F/2. ;<2>
IF ZERR EQ 53 THEN MANIP,FLUX,F1,F,EPS,E1,badf ;<5>
IF ZERR EQ 97 THEN ADDLINE,WAVE,F ;<a>
; ZERR EQ 98 ;<b> moved down
IF ZERR EQ 99 THEN begin ;<c>
COADD,WAVE,F,E
if n_elements(lu3) eq 1 then begin
printf,lu3,'-4' & printf,lu3,hd(53),' bins coadded'
endif
zerr=98
endif
; IF (ZERR EQ 100) AND (HD(3) GE 10) THEN DND,IDAT,WAVE,FLUX ;<d>
IF ZERR EQ 100 THEN PLDATA,0,WAVE,F,BADW,BADF*0. ;<d>
IF (ZERR EQ 101) AND (HD(3) GE 10) THEN DND,h1,W1,F1 ;<e>
IF ZERR EQ 102 THEN FINDLIN,WAVE,/noquery,noid=linid ;<f>
if (zerr eq 58) OR (zerr eq 59) then begin ;<:,;> next std record
if n_elements(nrec2) eq 0 then zerr=103 else begin
if zerr eq 58 then nrec2=nrec2-1 else nrec2=nrec2+1
if (nrec2 lt 0) or (nrec2 gt get_nspec(stdfile)-1) then begin
print,' Record out of bounds'
endif else begin
GDAT,stdfile,H1,W1,F1,E1,NREC2
AUTOSCALE=1
IF n_elements(h1) gt 2 THEN BEGIN
if h1(3) le 0 then h1(3)=999 ;model
NDAT=1
f1save=f1
if vrot2 gt 0. then rotsmooth,vrot2,w1,f1
if n_elements(lu3) eq 1 then begin
PRINTF,lu3,'-7'
IF H1(3) LE 4 THEN PRINTF,lu3,H1(3),H1(4),' IUE camera=', $
STRMID(ZCAM,H1(3)*4,4),' IMAGE=',H1(4) $
ELSE PRINTF,lu3,H1(3),H1(4),' : ',string(byte(h1(100:159))>32b)
endif
INITF1,WAVE,FLUX,EPS,W1,F1,E1,F,E,RESET,BADW,BADF
endif ;header exists
endelse
endelse ;nrec2 exists
endif
IF ZERR EQ 103 THEN BEGIN ;<g> GET DATA FROM STANDARD FILE
check_stdfile
READ,' Enter record number: ',nrec2
if nrec2 lt 0 then begin
if hd(3)/10 eq 5 then echel=1 else echel=0
twostar,-1,-1,w1,f1,H1,dm=-99.,/noplot,ech=echel
endif else BEGIN
GDAT,stdfile,H1,W1,F1,E1,NREC2
AUTOSCALE=1
ENDELSE
NDAT=0
IF n_elements(h1) gt 2 THEN BEGIN
if h1(3) le 0 then h1(3)=999 ;model
NDAT=1
f1save=f1
if vrot2 gt 0. then rotsmooth,vrot2,w1,f1
if n_elements(lu3) eq 1 then begin
PRINTF,lu3,'-7'
IF H1(3) LE 4 THEN PRINTF,lu3,H1(3),H1(4),' IUE camera=', $
STRMID(ZCAM,H1(3)*4,4),' IMAGE=',H1(4) $
ELSE PRINTF,lu3,H1(3),H1(4),' : ',string(byte(h1(100:159))>32b)
endif
INITF1,WAVE,FLUX,EPS,W1,F1,E1,F,E,RESET,BADW,BADF
ENDIF else print,' File ',idt1,' not found.'
ENDIF
IF ZERR EQ 104 THEN HBIN,WAVE,FLUX,EPS,F1,E1,E ;<h>
IF ZERR EQ 105 THEN FTOT,3,WAVE,F ;<i>
IF ZERR EQ 106 THEN FTOT,4,WAVE,F ;<j>
; IF (ZERR EQ 107) AND (HD(3) GE 10) THEN DND,h,WAVE,F ;<k>
IF ZERR EQ 107 THEN begin ;<k>
iccor,2,wave,flux,wave,f1,0,a,np=npx,/flat,delay=0.5
PLDATA,0,WAVE,Flux,BADW,BADF*0.,PCOL=C1 ;<D>
shft=a(1)*apb
nw=N_ELEMENTS(WAVE)
NP=N_ELEMENTS(F1)-NW
f1=interpol(f1,wave,wave+shft)
e1=interpol(e1,wave,wave+shft)
oplot,wave,f1,color=c2
zerr=32
endif
if zerr eq 108 then ldat,stdfile ;<l>
IF ZERR EQ 109 THEN FUN2,WAVE,F,E,BADW,BADF,F1 ;<m>
IF ZERR EQ 111 THEN OVERWRT,1,FLUX,EPS,0,F,E,0,RESET ;<o>
IF ZERR EQ 112 THEN PSTAT,1,WAVE ;<p>
IF ZERR EQ 114 THEN begin ;<r>
if vrot2 gt 0. then f1=f1save
vrot2=-1.
ROTsmooth,vrot2,W1,f1
scale,-1,wave,flux,f1
endif
IF ZERR EQ 115 THEN ROTVEL,-1,WAVE ;<s>
IF ZERR EQ 116 THEN BBODY,WAVE,F,E ;<t>
IF ZERR EQ 117 THEN BEGIN
ADDRED,0,WAVE,FLUX ;<u>
F=FLUX
scale,-1,wave,flux,f1
ENDIF
if zerr eq 118 then fwhm,wave,flux ;<v>
if zerr eq 119 then cwhere ;<w>
IF ZERR EQ 68 THEN BEGIN ;<D>
PLDATA,0,WAVE,F,BADW,BADF*0.,PCOL=C1
IF AUTOSCALE NE -1 THEN ZERR=79 ;AUTOMATIC OVERPLOT
ENDIF
IF ZERR EQ 79 THEN begin ;<O>
if (autoscale eq 1) and (rdbit(var3,2) eq 0) then begin ;scale within window
k=where((wave ge !x.crange(0)) and (wave le !x.crange(1)),nk)
if nk gt 1 then begin
fact=total(f(k))/total(f1(k))
f1=f1*fact
fact=abs(10^(hd(35)/100.)*fact)
hd(35)=fix(alog10(fact)*100.)
endif
endif
PLDATA,1,WAVE,F1,PCOL=C2
endif
IF ZERR EQ 98 THEN BEGIN ;<b>
BDATA,HD,-1,WAVE,F,E,BADW,BADF,bdf
IF BDA EQ 0 THEN BDF=0 ;do not reset flag after WSHIFT
BDA=-1
ENDIF
IF ZERR EQ 120 THEN BDATA,HD,X,WAVE,F,E,BADW,BADF ;<x>
IF ZERR EQ 64 THEN IBIT,var3,0,-1 ;<@>
IF ZERR EQ 35 THEN IBIT,var3,1,-1 ;<#>
if (zerr lt 26) or (zerr gt 122) then zrecover
ENDWHILE
IF RESET EQ 0 THEN HD=H0
!y.title=yt
ZERR=112
RETURN
END