Viewing contents of file '../idllib/contrib/icur/ftot.pro'
;*********************************************************************8
PRO FTOT,IM,WAVE,FLUX,output,nonorm=nonorm ; SUM TOTAL FLUX
; IM=0 FOR TOTAL FLUX
; IM=1 FOR MEAN
; IM=2 FOR CENTROID, CURSOR POSITION
; IM=3,4 FOR LINEAR INTERPOLATION
COMMON COM1,H,IK,IFT,NSM,C,ndat,ifsm,kblo,h2
COMMON COMXY,XCUR,YCUR,ZERR,resetscale,lu3
common icurunits,xu,yu,title,c1,c2,c3
;
if n_elements(ik) eq 0 then ik=0
IF IM EQ 2 THEN GOTO,CENT
XXL=Xcur
XL=Xcur
i1=xindex(wave,xl) ;TABINV,WAVE,XL,I1
F=Ycur
F1=F
TKP,5,XL,F
opstat,' Waiting'
ZERR0=ZERR
BLOWUP,-1
opstat,' Working'
ZERR=ZERR0
XD=Xcur
i2=xindex(wave,xd) ;TABINV,WAVE,XD,I2
I1=FIX(I1+0.5)
I2=FIX(I2+0.5)
F=Ycur
TKP,5,XD,F
IF I2 LT I1 THEN BEGIN
T=I1
I1=I2
I2=T
T=XD
XD=XL
XL=T
ENDIF
IF IM GE 3 THEN GOTO,INTERP
NP=I2-I1+1
ik=ik+1
IF IM EQ 0 THEN BEGIN
yp=!D.Y_SIZE*!Y.WINDOW(1)-(!D.Y_CH_SIZE+1)*FLOAT(IK)
xp=!D.X_SIZE*!X.WINDOW(1)-!D.X_CH_SIZE*33.
TF=TOTAL(FLUX(I1:I2))
if not keyword_set(nonorm) then tf=tf*(XD-XL)/NP
Z='F='+STRTRIM(STRING(TF,'(G11.3)'),2)+' W='+STRTRIM(STRING(XL,'(F9.3)'),2)
Z=Z+'-'+STRTRIM(STRING(XD,'(F9.3)'),2)
XYOUTs,xp,yp,Z,/DEVICE
PRINT,Z
if n_elements(lu3) gt 0 then begin
PRINTF,lu3,' 1',' ;FTOT: Flux,Wavelengths'
PRINTF,lu3,TF,XL,XD
endif
output=tf
ENDIF
IF IM EQ 1 THEN BEGIN
TF=TOTAL(FLUX(I1:I2))/FLOAT(np)
YCUR=TF
XT=[WAVE(I1),WAVE(I2)]
OPLOT,XT,[TF,TF],psym=0,COLOR=15
TK=(FLUX-TF)*(FLUX-TF)
TK=TOTAL(TK(I1:I2))/FLOAT(NP-1)
RMS=SQRT(TK)
SN=ABS(TF/RMS)
Z='M,S/N:'+STRTRIM(STRING(TF,'(G11.3)'),2)+' '+STRTRIM(STRING(SN,'(F9.3)'),2)
PRINT,Z
yp=!D.Y_SIZE*!Y.WINDOW(1)-(!D.Y_CH_SIZE+1)*FLOAT(IK)
xp=!D.X_SIZE*!X.WINDOW(1)-!D.X_CH_SIZE*22.
xyouts,xp,yp,z,/DEVICE
output=tf
if n_elements(lu3) gt 0 then begin
PRINTF,lu3,' 2',' FTOT: Mean,RMS,S/N,Range'
printf,lu3,TF,RMS,SN,XL,XD
endif
ENDIF
RETURN
;
CENT: ; COMPUTE LINE CENTROID
IK=IK+1
S=SIZE(WAVE)
WL=Xcur
FL=Ycur
IF S(0) EQ 0 THEN GOTO,WAVEL ;MEASURE CURSOR POSITION
i1=xindex(wave,wl) ;TABINV,WAVE,WL,I1
opstat,' Waiting'
ZERR0=ZERR
BLOWUP,-1
opstat,' Working'
ZERR=ZERR0
WL=Xcur
i2=xindex(wave,wl) ;TABINV,WAVE,WL,I2
CENTRD,WAVE,FLUX,FL,I1,I2,XCEN,FD
output=xcen
if n_elements(fd) eq 0 then return ;i1=i2
y1=max(fd)<!y.crange(1)
y2=MIN(FD)>!y.crange(0)
!C=-1
oplot,[xcen,xcen],[y1,y2],color=12,linestyle=1
Z='CNTRD:'+STRTRIM(STRING(XCEN,'(F9.3)'),2)
yp=!D.Y_SIZE*!Y.WINDOW(1)-(!D.Y_CH_SIZE+1)*FLOAT(IK)
xp=!D.X_SIZE*!X.WINDOW(1)-!D.X_CH_SIZE*15.
xyouts,xp,yp,z,/DEVICE
PRINT,Z
if n_elements(lu3) gt 0 then begin
PRINTF,lu3,' 3',' Centroid' & PRINTF,lu3,XCEN
endif
RETURN
;
WAVEL: ; PRINT OUT CURSOR POSITION
Z=STRTRIM(STRING(WL,'(F9.3)'),2)+' '+STRTRIM(STRING(FL,'(G11.3)'),2)
yp=!D.Y_SIZE*!Y.WINDOW(1)-(!D.Y_CH_SIZE+1)*FLOAT(IK)
xp=!D.X_SIZE*!X.WINDOW(1)-!D.X_CH_SIZE*20.
xyouts,xp,yp,z,/DEVICE
output=wl
if n_elements(lu3) gt 0 then begin
printf,lu3,' 4',' Wavelength,Flux' & PRINTF,lu3,WL,FL
endif
TKP,1,WL,FL
RETURN
;
INTERP: ; PERFORM LINEAR INTERPOLATION BETWEEN I1,I2
NB=I2-I1
IF NB LT 1 THEN RETURN
if n_elements(lu3) gt 0 then begin
printf,lu3,'-2',' linear interpolation between points ',I1,' and',I2
printf,lu3,I1,I2
endif
IF IM EQ 3 THEN BEGIN ; USE VALUES OF SURROUNDING POINTS
SL=(FLUX(I2)-FLUX(I1))/FLOAT(NB)
FOR I=I1+1,I2-1 DO FLUX(I)=FLUX(I1)+SL*FLOAT(I-I1)
if n_elements(lu3) gt 0 then begin
printf,lu3,'-2',' fluxes interpolated from adjacent points'
printf,lu3,i1,i2
endif
ENDIF
IF IM EQ 4 THEN BEGIN ; USE CURSOR Y VALUE
; REPLACE FLUX(I2) WITH F, FLUX(I1) WITH F1
SL=(F-F1)/FLOAT(NB)
FOR I=I1+1,I2-1 DO FLUX(I)=F1+SL*FLOAT(I-I1)
if n_elements(lu3) gt 0 then begin
printf,lu3,'-2',' fluxes interpolated from cursor positions'
printf,lu3,i1,i2
endif
ENDIF
RETURN
END