aboutsummaryrefslogtreecommitdiff
path: root/synthe/plotobsimcol.for
diff options
context:
space:
mode:
Diffstat (limited to 'synthe/plotobsimcol.for')
-rw-r--r--synthe/plotobsimcol.for1129
1 files changed, 1129 insertions, 0 deletions
diff --git a/synthe/plotobsimcol.for b/synthe/plotobsimcol.for
new file mode 100644
index 0000000..461d787
--- /dev/null
+++ b/synthe/plotobsimcol.for
@@ -0,0 +1,1129 @@
+ PROGRAM PLOTobsim
+c revised 23jan93
+C TAPE7 IS CALCULATED SPECTRUM
+C TAPE55 READ BY OBSERV
+C TAPE56 READ BY OBSERV1
+C TAPE57 READ BY OBSERV2
+C TAPE58 READ BY OBSENGV
+C TAPE59 READ BY OBSHALL
+C TAPE60 READ BY OBSKPNO
+C TAPE61 READ BY OBSKPK
+C TAPE62 READ BY OBSSACP
+C TAPE63 READ BY OBSHAWA
+C TAPE64 READ BY OBSNRL
+C TAPE65 READ BY OBSPROC
+C TAPE66 READ BY OBSSIR
+C TAPE67 READ BY OBSARC
+C TAPE68 READ BY OBSSUNF
+C TAPE69 READ BY OBSSOIR
+C TAPE71 READ BY OBSFTS2
+C TAPE72 READ BY OBSFTS2
+C TAPE73 READ BY OBSFTS
+C TAPE74 READ BY OBSJUNG
+C TAPE76 READ BY LABEL5 AFCRL LINE LIST
+C TAPE77 READ BY LABEL9 PIERCE AND BRECKENRIDGE
+C TAPE93 IS TEMPORARY STORAGE FOR LABEL DATA
+C
+C IFLABL=N LINES ARE LABELLED. A NUMBER N ENDING IN THE DIGIT I
+C PRODUCES A CALL TO SUBROUTINE LABELI
+C =1 NORMAL LABELS FOR CALCULATED SPECTRUM, 25/INCH, TWO ROWS
+C =11 NORMAL LABELS FOR CALCULATED SPECTRUM, 12.5/INCH, ONE ROW
+C =21
+C =31 NORMAL LABELS FOR CALCULATED SPECTRUM, 12.5/INCH,
+C LOWER ROW ATOMS, UPPER ROW MOLECULES
+C =2
+C =3
+C =4
+C =5 LABEL AFCRL TERRESTRIAL LINES 25/INCH, TWO ROWS
+C =15 LABEL AFCRL TERRESTRIAL LINES 12.5/INCH, ONE ROW
+C =6
+C =7 NORMAL LABELS FOR CALCULATED OPACITY SPECTRUM, 25/INCH
+C =8
+C =9 LABEL PIERCE AND BRECKENRIDGE LINES
+C IFLABL=0 NO LABELS
+C IFABSO=0 THE PLOT IS IN RESIDUAL INTENSITY OR FLUX
+C IFABSO=1 THE PLOT IS IN ABSOLUTE UNITS
+C IFCONT=1 AND IFABSO=1 THE CONTINUUM IS PLOTTED
+C IFCONT=0 NO CONTINUUM
+C IFCONT=2 CONTINUUM USED FOR MAXIMUM BUT NOT PLOTTED
+C IFCONT=3 ONLY CONTINUUM IS PLOTTED
+C IFGRID=1 A BACKGROUND GRID IS PLOTTED IF XSCALE= 2.
+C IFDLINE=1 SPECTRUM LINES ARE DOUBLE WEIGHT
+C IFLOG=1 PLOT IS LOG WITH CYCLES CYCLES
+C IFLOG=0 PLOT IS LINEAR
+C JUST1=0 ALL PANELS ARE PLOTTED
+C JUST1 GREATER THAN 0 A TABLE OF SWITCHES FOR EACH PANEL IS READ
+C NOWAVE=1 DO NOT PUT WAVELENGTH IN BANNER AT ENDS OF PANELS
+C NOWAVE=0 PUT WAVELENGTH IN BANNER AT ENDS OF PANELS
+C IFNEWW CHANGE TO NEW STARTING AND STOPPING WAVELENGTHS AS READ IN
+C NOCALC=0 CALCULATIONS ARE TO BE READ
+C NOCALC=1 NO CALCULATIONS ARE TO BE READ REQUIRES IFNEWW=1
+C IFDUM1
+C IFNOAX=1 AXES ARE NOT LABELLED
+C IFNOAX=-1 AXES ARE LABELLED. Y TWICE 0 TO 1 AND .9 TO 1
+C IFMU=0 PLOT FIRST ANGLE OR FLUX
+C IFMU=1 TO 20 PLOT ANGLE IFMU
+C NOPRNT=0 PRINT ALL LINE DATA
+C NOPRNT=1 NO PRINTING OF LINE DATA
+C NOPRNT=2 PRINT LINE DATA ONLY FOR LINES THAT ARE LABELLED
+C IFKPNO.GT.0 PLOT KITT PEAK PRELIMINARY SOLAR ATLAS
+C IFKPK.GT.0 PLOT KOHL, PARKINSON, AND KURUCZ SOLAR ATLAS
+C IFSACP.GT.0 PLOT SAC PEAK SOLAR FLUX ATLAS
+C IFHAWA.GT.0 PLOT HAWAII SOLAR ATLAS
+C IFNRL.GT.0 PLOT NRL SOLAR ATLAS
+C IFPROC.GT.0 PLOT GRIFFIN PROCYON ATLAS
+C IFDUM2
+C IFSIR.GT.0 PLOT FURENLID SIRIUS ATLAS
+C IFARC.GT.0 PLOT GRIFFIN ARCTURUS ATLAS
+C IFSUNF.GT.0 PLOT FURENLID AND KURUCZ SOLAR FLUX ATLAS
+C IFSOIR.GT.0 PLOT INFRARED FTS SOLAR ATLAS
+C IFHALL.GT.0 PLOT HALL INFRARED SUNSPOT ATLAS
+C IFENGV.GT.0 PLOT ENGVOLD SUNSPOT ATLAS
+C IFOPAC=N INPUT CALCULATED SPECTRUM IS MASS ABSORPTION COEFFICIENT
+C OUTPUT FROM SYNTHE. USE ASYNTH(N). PLOT MUST USUALLY BE LOG.
+C IFFTS.GT.0 PLOT AN FTS SPECTRUM FROM KITT PEAK
+C IFFTS2.GT.0 PLOT THE RATIO OF TWO FTS SPECTRA FROM KITT PEAK
+C IFJUNG.GT.0 PLOT JUNGFRAUJOCH SOLAR ATLAS
+C YSCALE IS THE HEIGHT OF THE PLOT IN MULTIPLES OF 3.125
+C DEFAULT=1. FOR XSCALE.GT.0 AND XSCALE.LT.1
+C DEFAULT=2. FOR XSCALE.GT.1
+C OTHERWISE YTOP=6.25
+C XSCALE=1. 10 IN/NM
+C XSCALE=2. 20 IN/NM
+C XSCALE=4. 40 IN/NM
+C XSCALE=8. 80 IN/NM
+C WEAK IS 1.-RESIDUAL INTENSITY OF THE WEAKEST LINES TO BE LABELED
+C IF WEAK = 0 ALL LINES ARE LABELED
+C PANEL IS MAXIMUM LENGTH OF EACH PLOT PANEL
+C AN ADDITIONAL .1NM IS ADDED FOR OVERLAP BETWEEN PANELS
+C CYCLES IS NUMBER OF CYCLES IF PLOT IS LOG
+C OFFSET IS THE NUMBER OF INCHES BY WHICH THE PLOT IS DISPLACED
+C VERTICALLY
+C RMIN IS THE RESIDUAL INTENSITY AT THE BOTTOM OF THE PLOT
+C RMAX IS THE RESIDUAL INTENSITY AT THE TOP OF THE PLOT. DEFAULT 1.
+C TOP FIXES THE VALUE OF THE TOP OF THE PLOT IF IFABSO = 1
+C IF TOP=0. THE TOP IS SET TO THE MAXIMUM VAUE IN EACH PANEL
+C WNEW1 IS A NEW STARTING WAVELENGTH
+C WNEW2 IS A NEW STOPPING WAVELENGTH
+C TICKTOP IS THE SIZE AND DIRECTION OF TICK MARKS AT THE TOP OF THE PLOT
+C TICKBOT IS THE SIZE AND DIRECTION OF TICK MARKS AT THE BOTTOM OF THE PLOT
+C DEFAULT IS -0.15 AND +0.15
+C SMOOTH IS A SMOOTHING PARAMETER TO BE TRANSMITTED TO OBS SUBROUTINES
+C IT WOULD GENERALLY BE THE FWHM IN POINT NUMBERS OF A GAUSSIAN
+C IF NEGATIVE IT IS THE CENTRAL WEIGHT FOR THREE POINT SMOOTHING
+C DOPOBS IS A DOPPLER SHIFT IN KM/S FOR THE OBSERVED SPECTRA
+C DOPCALC IS A DOPPLER SHIFT IN KM/S FOR THE CALCULATED SPECTRUM
+C DOPTERR IS A DOPPLER SHIFT IN KM/S FOR TERRESTRIAL SPECTRUM OR LABELS
+C SCALOBS IS A FACTOR BY WHICH AN OBSERVED SPECTRUM IS TO BE SCALED
+C ZEROOBS IS A ZERO LEVEL CORRECTION TO AN OBSERVED SPECTRUM
+C RMIN2 THE COMPUTED SPECTRUM IS PLOTTED TWICE, SECOND WITH RMIN2
+C RMAX2 THE COMPUTED SPECTRUM IS PLOTTED TWICE, SECOND WITH RMAX2
+C XOFFSET IS THE NUMBER OF INCHES THE PLOT IS DISPLACED IN X
+C SCALOB2 IF 0 = SCALOBS
+C IF NOT 0 SCALOBS IS THE SCALING FACTOR FOR THE BEGINNING AND
+C SCALOB2 IS THE SCALING FACTOR FOR THE END AND
+C INTERMEDIATE VALUES ARE LINEARLY INTERPOLATED
+C DUMMY7
+ COMMON /PARAMS/XSCALE,
+ 1 RMIN,WEAK,TOP,PANEL,CYCLES,WBEGIN,WEND,W1,W2,YTOP,
+ 2 HMAX,HMIN,YSCALE,OFFSET,RMAX,
+ 3 WNEW1,WNEW2,SMOOTH,DOPOBS,DOPCALC,DOPTERR,
+ 4 SCALOBS,ZEROOBS,RMIN2,RMAX2,XOFFSET,SCALOB2,IUERM,
+ 5 IFLABL,IFABSO,IFCONT,IFGRID,IFDLIN,IFLOG,IFMU,NOCALC
+ 6 IFVAC,NOPRNT
+ REAL*8 WBEGIN,WEND,W1,W2,RESOLU,RATIO,WNEW1,WNEW2,WAVEL
+ REAL*8 WAVE,WBEGDOP
+ REAL*8 TITLE(74),XMU(20),WLEDGE(200),TEFF,GLOG
+ COMMON /CELL/MAXCEL,IFCELL(40000)
+ REAL*8 Q2(40)
+C REAL*4 MESSAGE(20,9),ASYNTH(64),TURBV,ALINEC(64)
+ REAL*4 ASYNTH(64),TURBV,ALINEC(64)
+ CHARACTER*79 MESSAGE(9)
+ INTEGER VLO,VUP
+CCRAY REAL*8 WORDS(3)
+ REAL*4 WORDS(6)
+ COMMON /LINDAT/WL,E,EP,LABEL(2),LABELP(2),OTHER1(2),OTHER2(2),
+ 1 WLVAC,CENTER,CONCEN, NELION,GAMMAR,GAMMAS,GAMMAW,REF,
+ 2 NBLO,NBUP,ISO1,X1,ISO2,X2,GFLOG,XJ,XJP,CODE,ELO,GF,GS,GR,GW,
+ 3 DWL,DGFLOG,DGAMMAR,DGAMMAS,DGAMMAW,EXTRA1,EXTRA2,EXTRA3
+ REAL*8 LINDAT8(14)
+ REAL*4 LINDAT(28)
+ EQUIVALENCE (LINDAT8(1),WL),(LINDAT(1),NELION)
+ REAL*8 RATIOLG,SIGMA2,WLBEG,WLEND
+ REAL*8 WL,E,EP,WLVAC,CENTER,CONCEN
+ REAL*8 LABEL,LABELP,OTHER1,OTHER2
+ COMMON/COLOR/COLOROBS
+ CHARACTER*10 COLOROBS
+ DIMENSION IFPANL(80)
+ COMMON /HEADERDATA/USERID(2),FILENAME(2),
+ 1 IDATE(3),ITIME(2),JOBID(2)
+ REAL*8 USERID,FILENAME
+ CHARACTER*9 HEADERDATA(5)
+ CHARACTER*6 WW6,STRING6
+ CHARACTER*9 STRING9
+ DATA IFPANL/80*1/
+C CALL FILEREP
+C CALL BEGTIME
+C CALL RDYOUTF(6,0)
+ IUERM=0
+ READ(5,1001)IFLABL,IFABSO,IFCONT,IFGRID,IFDLIN,IFLOG,JUST1,NOWAVE,
+ 1NOCALC,IFDUM1
+ 1001 FORMAT(10I8)
+ WRITE(6,1002)IFLABL,IFABSO,IFCONT,IFGRID,IFDLIN,IFLOG,JUST1,
+ 1NOWAVE,NOCALC,IFDUM1
+ 1002 FORMAT(1X,10I8/' IFLABL IFABSO IFCONT IFGRID IFDLIN',
+ 1' IFLOG JUST1 NOWAVE NOCALC IFDUM1')
+ READ(5,1001)
+ READ(5,1001)IFNOAX,IFMU,NOPRNT,IFKPNO,IFKPK,IFSACP,IFHAWA,IFNRL,
+ 1IFPROC,IFSIR
+ WRITE(6,1003)IFNOAX,IFMU,NOPRNT,IFKPNO,IFKPK,IFSACP,IFHAWA,IFNRL,
+ 1IFPROC,IFDUM2
+ 1003 FORMAT(1X,10I8/' IFNOAX IFMU NOPRNT IFKPNO IFKPK'
+ 1' IFSACP IFHAWA IFNRL IFPROC IFDUM2')
+ READ(5,1001)
+ READ(5,1001)IFSIR,IFARC,IFSUNF,IFSOIR,IFHALL,IFENGV,IFOPAC,IFFTS,
+ 1IFFTS2,IFJUNG
+ WRITE(6,1004)IFSIR,IFARC,IFSUNF,IFSOIR,IFHALL,IFENGV,IFOPAC,
+ 1IFFTS,IFFTS2,IFJUNG
+ 1004 FORMAT(1X,10I8/' IFSIR IFARC IFSUNF IFSOIR IFHALL',
+ 1' IFENGV IFOPAC IFFTS IFFTS2 IFJUNG')
+ READ(5,1001)
+ READ(5,1005)YSCALE,XSCALE,WEAK,PANEL,CYCLES,OFFSET,RMIN,RMAX
+ 1005 FORMAT(8F10.3)
+ WRITE(6,1006)YSCALE,XSCALE,WEAK,PANEL,CYCLES,OFFSET,RMIN,RMAX
+ 1006 FORMAT(1X,8F10.3/75H YSCALE XSCALE WEAK PANEL CYCLE
+ 1S OFFSET RMIN RMAX)
+ READ(5,1001)
+ READ(5,1007)TOP,WNEW1,WNEW2,TICKTOP,TICKBOT,SMOOTH,DOPOBS,DOPCALC
+ 1007 FORMAT(E10.3,7F10.3)
+ WRITE(6,1008)TOP,WNEW1,WNEW2,TICKTOP,TICKBOT,SMOOTH,DOPOBS,DOPCALC
+ 1008 FORMAT(1PE10.3,0P7F10.3/79H TOP WNEW1 WNEW2 TICKTOP
+ 1 TICKBOT SMOOTH DOPOBS DOPCALC )
+ READ(5,1001)
+ READ(5,1027)DOPTERR,SCALOBS,ZEROOBS,RMIN2,RMAX2,XOFFSET,SCALOB2,
+ 1COLOROBS
+ 1027 FORMAT(7F10.3,A10)
+ WRITE(6,1028)DOPTERR,SCALOBS,ZEROOBS,RMIN2,RMAX2,XOFFSET,SCALOB2,
+ 1COLOROBS
+ 1028 FORMAT(7F10.3,A10
+ 1 /' DOPTERR SCALOBS ZEROOBS RMIN2 RMAX2
+ 1 XOFFSET SCALOB2 COLOROBS' )
+ READ(5,1001)
+ READ(5,1009)IFPANL
+ 1009 FORMAT(80I1)
+ WRITE(6,1010)IFPANL
+ 1010 FORMAT(1X,80I1/81H 12345678901234567890123456789012345678901234567
+ 1890123456789012345678901234567890)
+ READ(5,1001)
+ MU=IFMU
+ IF(IFMU.EQ.0)MU=1
+ IF(JUST1.GT.0)GO TO 1020
+ DO 1019 IPANEL=1,80
+ 1019 IFPANL(IPANEL)=1
+ 1020 CONTINUE
+ READ(5,2)MESSAGE
+ 2 FORMAT(1X,A79)
+ WRITE(6,2)MESSAGE
+ 5 CONTINUE
+ IF(RMAX.EQ.0.)RMAX=1.
+ IFRMAX2=0
+ IF(RMIN2.NE.0.)IFRMAX2=1
+ IF(RMAX2.NE.0.)IFRMAX2=1
+ IF(RMAX2.EQ.0.)RMAX2=1.
+ Y=YSCALE
+ IF(XSCALE.EQ.0.)XSCALE=2.
+ YSCALE=2.
+ IF(XSCALE.LT.1.)YSCALE=1.
+ IF(Y.GT.0.)YSCALE=Y
+ IF(PANEL.EQ.0.)PANEL=5.
+ IF(SCALOBS.EQ.0.)SCALOBS=1.
+ IF(SCALOB2.EQ.0.)SCALOB2=SCALOBS
+C OPEN(UNIT=55,READONLY,SHARED,TYPE='OLD',FORM='UNFORMATTED')
+ IF(NOCALC.EQ.1)GO TO 207
+C OPEN(UNIT=7,READONLY,SHARED,TYPE='OLD',FORM='UNFORMATTED')
+ REWIND 7
+ IF(IFOPAC.NE.0)GO TO 205
+ READ(7)TEFF,GLOG,TITLE,WBEGIN,RESOLU,NWL,IFSURF,NMU,XMU,NEDGE,
+ 1WLEDGE
+ NMU2=NMU+NMU
+ MUNMU=MU+NMU
+ WRITE(6,4)TEFF,GLOG,TITLE,WBEGIN,RESOLU,NWL,IFSURF
+ 4 FORMAT(F10.1,F10.3,3X,74A1/F12.4,F10.1,2I10)
+ IFVAC=1
+ IF(TITLE(74).EQ.1HA)IFVAC=0
+C WBEGIN IS THE FIRST CALCULATED WAVELENGTH
+C WSTART IS THE FIRST PLOTTED WAVELENGTH
+ WSTART=WBEGIN
+ RATIO=1.+1./RESOLU
+ WEND=WBEGIN*RATIO**(NWL-1)
+ IWEND=WEND*10.+.5
+ WEND=FLOAT(IWEND)/10.
+ IWSTART=WBEGIN*10.+.5
+ WSTART=FLOAT(IWSTART)/10.
+ IF(WNEW1.EQ.0.)WNEW1=WSTART
+ IF(WNEW2.EQ.0.)WNEW2=WEND
+ GO TO 207
+ 205 CONTINUE
+ READ(7)WBEGIN,RESOLU,WLEND,NWL,NRHOX,LINOUT,TURBV,IFVAC
+ READ(7)
+ WRITE(6,214)WBEGIN,RESOLU,NWL,NRHOX,IFVAC
+ 214 FORMAT(F10.3,F10.1,3I10)
+ IWSTART=WBEGIN*10.+.5
+ WSTART=FLOAT(IWSTART)/10.
+ RATIO=1.+1./RESOLU
+ WEND=WBEGIN*RATIO**(NWL-1)
+ IWEND=WEND*10.+.5
+ WEND=FLOAT(IWEND)/10.
+ IF(WNEW1.EQ.0.)WNEW1=WBEGIN
+ IF(WNEW2.EQ.0.)WNEW2=WEND
+ 207 CONTINUE
+ IF(IFLABL.GT.0.AND.NOCALC.EQ.0)THEN
+ DO 2207 I=1,NWL
+ 2207 READ(7)
+ READ(7)NLINES
+ WRITE(93)NLINES
+ DO 2208 I=1,NLINES
+ READ(7)LINDAT8,LINDAT
+ 2208 WRITE(93)LINDAT8,LINDAT
+ ENDIF
+ CALL MAXLENGTH(500)
+ CALL INITPLT(70)
+C CALL START AT (1.,.5)
+C CALL START AT (0.,OFFSET)
+ if(ifdlin.eq.0)call weight(1)
+ if(ifdlin.eq.1)call weight(2)
+ END=0.
+ NPANEL=(WNEW2-WNEW1+PANEL-.001)/PANEL
+ IPAN1=0
+ DO 100 IPANEL=1,NPANEL
+ W1=WNEW1+FLOAT(IPANEL-1)*PANEL
+ W2= MIN (W1+PANEL+.1,WNEW2)
+C W2=AMIN1(W1+PANEL+.1,WNEW2)
+ WRITE(6,2990)IPANEL,W1,W2
+ 2990 FORMAT(6H PANEL,I3,2F10.3)
+ IF(IFPANL(IPANEL).EQ.0)GO TO 100
+ IF(IPAN1.GT.0)CALL PAGE
+C IF(IPAN1.GT.0)CALL START AT (10.,0.)
+C CALL START AT (4.85,.5+OFFSET)
+c CALL START AT (1.0+XOFFSET,.5+OFFSET)
+ CALL START AT (1.0+XOFFSET,.5+OFFSET)
+ IPAN1=1
+ WW=W1
+ ENCODE(6,2993,WW6)WW
+ 2993 FORMAT(F6.1)
+ ENCODE(9,2991,HEADERDATA(1))USERID
+ ENCODE(9,3992,HEADERDATA(2))JOBID
+ 3992 FORMAT(A4,A4)
+ ENCODE(9,3992,HEADERDATA(3))ITIME
+ ENCODE(9,3993,HEADERDATA(4))IDATE
+ 3993 FORMAT(A4,A4,A1)
+ ENCODE(9,2991,HEADERDATA(5))FILENAME
+ 2991 FORMAT(A8,A1)
+c canon is 0.5 higher than xerox THESE ARE CANON
+ CANON=0.
+ CANON=.5
+c IF(NOWAVE.EQ.0)THEN
+c CALL STRINGX10(WW6,0.,14.20-OFFSET+CANON)
+c CALL STRINGX10(WW6,19.5,14.20-OFFSET+CANON)
+c CALL STRINGX(HEADERDATA(1),4.0,14.85-OFFSET+CANON)
+c CALL STRINGX(HEADERDATA(2),4.0,14.70-OFFSET+CANON)
+c CALL STRINGX(HEADERDATA(3),4.0,14.55-OFFSET+CANON)
+c CALL STRINGX(HEADERDATA(4),4.0,14.40-OFFSET+CANON)
+c CALL STRINGX(HEADERDATA(5),4.0,14.25-OFFSET+CANON)
+c ENDIF
+c CALL STRINGX(MESSAGE(1),6.,14.85-OFFSET+CANON)
+c CALL STRINGX(MESSAGE(2),6.,14.70-OFFSET+CANON)
+c CALL STRINGX(MESSAGE(3),6.,14.55-OFFSET+CANON)
+c CALL STRINGX(MESSAGE(4),6.,14.40-OFFSET+CANON)
+c CALL STRINGX(MESSAGE(5),6.,14.25-OFFSET+CANON)
+c CALL STRINGX(MESSAGE(6),12.,14.70-OFFSET+CANON)
+c CALL STRINGX(MESSAGE(7),12.,14.55-OFFSET+CANON)
+c CALL STRINGX(MESSAGE(8),12.,14.40-OFFSET+CANON)
+c CALL STRINGX(MESSAGE(9),12.,14.25-OFFSET+CANON)
+ CALL STRINGX(MESSAGE(1),3.,10.20)
+ CALL STRINGX(MESSAGE(2),3.,9.95)
+ CALL STRINGX(MESSAGE(3),3.,9.70)
+ CALL STRINGX(MESSAGE(4),3.,9.45)
+ CALL STRINGX(MESSAGE(5),3.,9.20)
+ CALL STRINGX(MESSAGE(6),9.,9.95)
+ CALL STRINGX(MESSAGE(7),9.,9.70)
+ CALL STRINGX(MESSAGE(8),9.,9.45)
+ CALL STRINGX(MESSAGE(9),9.,9.20)
+ CALL COLOR BLACK
+C
+C DRAW BOX
+ END=(W2-W1)*10.*XSCALE
+ CALL JUMP TO (0.,0.)
+ CALL LINE TO (END,0.)
+ YTOP=3.125*YSCALE
+ CALL LINE TO (END,YTOP)
+ CALL LINE TO (0.,YTOP)
+ CALL LINE TO (0.,0.)
+C
+C X AXIS
+ N=(W2-W1)*10.+1.5
+ IF(TICKTOP.EQ.0.)TICKTOP=-.15
+ IF(TICKBOT.EQ.0.)TICKBOT=.15
+ DO 11 I=1,N
+ HALF=1.
+ IF(XSCALE.LT.1..AND.MOD(I,5).NE.1)HALF=.5
+ IF(XSCALE.LT..05.AND.MOD(I,100).NE.1)HALF=.5
+ IF(XSCALE.LT..01.AND.MOD(I,500).NE.1)HALF=.5
+ IF(XSCALE.LT..05.AND.MOD(I,10).NE.1)GO TO 11
+ IF(XSCALE.LT..01.AND.MOD(I,100).NE.1)GO TO 11
+ X=FLOAT(I-1)*XSCALE
+ CALL JUMP TO (X,0.)
+ CALL LINE TO (X,TICKBOT*HALF)
+ CALL JUMP TO (X,YTOP+TICKTOP*HALF)
+ CALL LINE TO (X,YTOP)
+ WAVE=W1+FLOAT(I-1)/10.
+ IF(XSCALE.LT.1..AND.MOD(I,5).NE.1)GO TO 11
+ IF(XSCALE.LT..2.AND.MOD(I,10).NE.1)GO TO 11
+ IF(XSCALE.LT..05.AND.MOD(I,100).NE.1)GO TO 11
+ IF(XSCALE.LT..01.AND.MOD(I,500).NE.1)GO TO 11
+ IF(IFNOAX.NE.1.AND.XSCALE.GE..2)THEN
+ WRITE(WW6,'(F6.1)')WAVE
+ CALL STRINGX2(WW6,X-.4,-.3)
+ ENDIF
+ IF(IFNOAX.NE.1.AND.XSCALE.LT..2)THEN
+ IWAVE=WAVE
+ WRITE(WW6,'(I6)')IWAVE
+ CALL STRINGX2(WW6,X-.6,-.3)
+ ENDIF
+ IF(IFGRID.EQ.0)GO TO 11
+ CALL JUMP TO (X,0.)
+ CALL WEIGHT(12)
+ CALL LINE TO (X,YTOP)
+ CALL WEIGHT(1)
+ 11 CONTINUE
+C
+ IF(XSCALE.GT.10..AND.IFNOAX.NE.1)THEN
+ N=END*.1+.05
+ DO 1611 I=1,N
+ WAVE=W1+FLOAT(I)/XSCALE
+ X=I*10
+ WRITE(STRING9,'(F9.4)')WAVE
+ 1611 CALL STRINGX2(STRING9,X-.4,-.3)
+ ENDIF
+C
+C Y AXIS
+ if(rmin.eq.0.)then
+ DO 12 I=1,11
+ Y=FLOAT(I-1)*YTOP/10.
+ CALL JUMP TO (0.,Y)
+ CALL LINE TO (.15,Y)
+ CALL JUMP TO (END-.15,Y)
+ CALL LINE TO (END,Y)
+ 12 CONTINUE
+ endif
+ IF(IFLOG.EQ.1)GO TO 14
+ ITWO=1
+ IF(YTOP.LT.1.99)ITWO=2
+ IF(IFNOAX.EQ.-1)THEN
+C DO 613 I=1,10,ITWO
+C Y=FLOAT(I-1)*YTOP/10.
+C R=(RMAX-RMIN)/10.*FLOAT(I-1)+RMIN
+C CALL WEIGHT(12)
+C ENCODE(6,2994,STRING6)R
+C 2994 FORMAT(F2.1)
+C CALL STRINGX2(STRING6,-.23,Y)
+CC CALL BCDX(1,R,2,6H(F2.1),.15,-.23,Y)
+C CALL WEIGHT(1)
+C ENCODE(6,2995,STRING6)R
+C 2995 FORMAT(F3.2)
+C 613 CALL STRINGX2(STRING6,-.6,Y)
+CC 613 CALL BCDX(1,R/10.+.9,3,6H(F3.2),.15,-.6,Y)
+C CALL WEIGHT(12)
+C ENCODE(6,1313,STRING6)RMAX
+C CALL STRINGX2(STRING6,-.9,Y-.05)
+C CALL WEIGHT(1)
+ CALL WEIGHT(12)
+ CALL STRINGX2(' 1@ @ .@ @ @ @ 00',-.88,YTOP*1.)
+ CALL STRINGX2(' .@ @ @ @ 9',-.88,YTOP*.9)
+ CALL STRINGX2(' .@ @ @ @ 8',-.88,YTOP*.8)
+ CALL STRINGX2(' .@ @ @ @ 7',-.88,YTOP*.7)
+ CALL STRINGX2(' .@ @ @ @ 6',-.88,YTOP*.6)
+ CALL STRINGX2(' .@ @ @ @ 5',-.88,YTOP*.5)
+ CALL STRINGX2(' .@ @ @ @ 4',-.88,YTOP*.4)
+ CALL STRINGX2(' .@ @ @ @ 3',-.88,YTOP*.3)
+ CALL STRINGX2(' .@ @ @ @ 2',-.88,YTOP*.2)
+ CALL STRINGX2(' .@ @ @ @ 1',-.88,YTOP*.1)
+ CALL STRINGX2(' .@ @ @ @ 0',-.88,YTOP*.0)
+ CALL WEIGHT(1)
+ CALL STRINGX2(' .@ @ @ @ 99 ',-.88,YTOP*.9)
+ CALL STRINGX2(' .@ @ @ @ 98 ',-.88,YTOP*.8)
+ CALL STRINGX2(' .@ @ @ @ 97 ',-.88,YTOP*.7)
+ CALL STRINGX2(' .@ @ @ @ 96 ',-.88,YTOP*.6)
+ CALL STRINGX2(' .@ @ @ @ 95 ',-.88,YTOP*.5)
+ CALL STRINGX2(' .@ @ @ @ 94 ',-.88,YTOP*.4)
+ CALL STRINGX2(' .@ @ @ @ 93 ',-.88,YTOP*.3)
+ CALL STRINGX2(' .@ @ @ @ 92 ',-.88,YTOP*.2)
+ CALL STRINGX2(' .@ @ @ @ 91 ',-.88,YTOP*.1)
+ CALL STRINGX2(' .@ @ @ @ 90 ',-.88,YTOP*.0)
+ GO TO 17
+ ENDIF
+ DO 13 I=1,10,ITWO
+ Y=FLOAT(I-1)*YTOP/10.
+ R=(RMAX-RMIN)/10.*FLOAT(I-1)+RMIN
+ CALL WEIGHT(1)
+ IF(IFNOAX.EQ.1)GO TO 13
+C IF(RMAX-RMIN.GE..5)ENCODE(6,1313,STRING6)R
+C IF(RMAX-RMIN.LT..5)ENCODE(6,1314,STRING6)R
+ ENCODE(6,1313,STRING6)R
+ IF(RMAX-RMIN.LT.1.)ENCODE(6,1314,STRING6)R
+ IF(I.GT.1)Y=Y-.03
+ IF(YSCALE.LE..5)CALL STRINGX(STRING6,-.5,Y)
+ IF(YSCALE.GT..5)CALL STRINGX2(STRING6,-.9,Y)
+c IF(YSCALE.GT..5)CALL STRINGX(STRING6,-.9,Y)
+ 13 CONTINUE
+ IF(IFNOAX.EQ.1)GO TO 17
+ ENCODE(6,1313,STRING6)RMAX
+C IF(RMAX-RMIN.GE..5)ENCODE(6,1313,STRING6)RMAX
+ 1313 FORMAT(F6.1)
+C IF(RMAX-RMIN.LT..5)ENCODE(6,1314,STRING6)RMAX
+ IF(RMAX-RMIN.LT.1.)ENCODE(6,1314,STRING6)RMAX
+ 1314 FORMAT(F6.2)
+ IF(YSCALE.LE..5)CALL STRINGX(STRING6,-.5,YTOP-.08)
+ IF(YSCALE.GT..5)CALL STRINGX2(STRING6,-.9,YTOP-.16)
+c IF(YSCALE.GT..5)CALL STRINGX(STRING6,-.9,YTOP-.16)
+ GO TO 17
+ 14 IF(IFABSO.EQ.1)GO TO 17
+ DO 15 I=1,11
+ Y=FLOAT(I-1)*YTOP/10.
+ R=ALOG10(RMAX)-CYCLES+FLOAT(I-1)*CYCLES/10.
+ IF(IFNOAX.EQ.1)GO TO 15
+ ENCODE(6,1314,STRING6)R
+ CALL STRINGX2(STRING6,-0.9,Y)
+ 15 CONTINUE
+ 17 IF(IFGRID.EQ.0)GO TO 20
+C
+ IF(IFGRID.EQ.1)THEN
+ IF(XSCALE.LT.1.)GO TO 20
+C PLOT GRID
+ XGRID=.1
+ IF(XSCALE.EQ.4.)XGRID=.08
+ IF(XSCALE.EQ.8.)XGRID=.08
+ NGRID=END/XGRID
+ DO 18 I=1,NGRID
+ X=FLOAT(I)*XGRID
+ CALL JUMP TO (X,0.)
+ CALL WEIGHT(1)
+C IF(MOD(I,10).EQ.0)CALL WEIGHT(12)
+C CALL LINE TO (X,YTOP)
+ IF(MOD(I,10).EQ.0)CALL LINE TO (X,YTOP)
+ IF(MOD(I,10).NE.0)CALL DOTLINE(X,0.,X,YTOP,'E0E0'X)
+ 18 CONTINUE
+C DO 1118 I=1,NGRID*2.5
+C X=NGRID/10.
+C X=FLOAT(I)/10./2.5
+C CALL JUMP TO (X,0.)
+C CALL WEIGHT(1)
+C CALL LINE TO (X,-.07)
+C 1118 CONTINUE
+ DO 19 I=1,49
+ Y=FLOAT(I)*YTOP/50.
+ CALL JUMP TO (0.,Y)
+ CALL WEIGHT(1)
+C IF(MOD(I,5).EQ.0)CALL WEIGHT(12)
+C CALL LINE TO (END,Y)
+ IF(MOD(I,5).EQ.0)CALL LINE TO (END,Y)
+ IF(MOD(I,5).NE.0)CALL DOTLINE(0.,Y,END,Y,'E0E0'X)
+ 19 CONTINUE
+ CALL WEIGHT(1)
+ ENDIF
+C
+ IF(IFGRID.EQ.2)THEN
+ N=(W2-W1)*10.*10.+.5
+ DO 4019 I=1,N
+ X=FLOAT(I)*XSCALE*.1
+ CALL JUMP TO (X,0.15)
+ CALL LINE TO (X,YTOP-.15)
+ 4019 CONTINUE
+ DO 4020 I=1,10
+ Y=FLOAT(I)*YTOP*.1
+ CALL JUMP TO (0.,Y)
+ CALL LINE TO (END,Y)
+ 4020 CONTINUE
+ ENDIF
+C
+ IF(IFGRID.EQ.3)THEN
+ DO 4030 I=1,50
+ Y=FLOAT(I)*YTOP*.02
+ CALL JUMP TO (0.,Y)
+ CALL LINE TO (END,Y)
+ 4030 CONTINUE
+ ENDIF
+C
+ 20 IF(NOCALC.EQ.0)THEN
+C IF(IFLOG.EQ.0)CALL STRINGY2('LIN',END+.4,.2)
+C IF(IFLOG.EQ.1)CALL STRINGY2('LOG',END+.4,.2)
+ IF(IFABSO.EQ.0)CALL STRINGY2('RESIDUAL',END+.4,0.2)
+ IF(IFABSO.EQ.1)CALL STRINGY2('ABSOLUTE',END+.4,0.2)
+ ENDIF
+ IF(IFABSO.EQ.0)GO TO 27
+C FIND MAX AND MIN
+ HMAX=0.
+ HMIN=1.E30
+ IF(NOCALC.EQ.1)GO TO 270
+ REWIND 7
+ READ(7)
+ NSKIP= LOG(W1/WBEGIN)/ LOG(RATIO)-2.
+C NSKIP=ALOG(W1/WBEGIN)/ALOG(RATIO)-2.
+ NSKIP=MAX0(NSKIP,0)
+ IF(NSKIP.EQ.0)GO TO 221
+ DO 220 I=1,NSKIP
+ 220 READ(7)
+ 221 N1=NSKIP+1
+ WBEGDOP=WBEGIN*(1.D0+DOPCALC/299792.458D0)
+ IF(IFOPAC.GT.0)THEN
+ READ(7)
+ DO 223 IWL=N1,NWL
+ READ(7)(ASYNTH(J),J=1,IFOPAC)
+ WAVE=WBEGDOP*RATIO**(IWL-1)
+ IF(WAVE.LT.W1)GO TO 223
+ IF(WAVE.GT.W2+.0001)GO TO 24
+ HMAX=AMAX1(HMAX,ASYNTH(IFOPAC))
+ HMIN=AMIN1(HMIN,ASYNTH(IFOPAC))
+ 223 CONTINUE
+ GO TO 24
+ ENDIF
+C
+ DO 23 IWL=N1,NWL
+ READ(7)(Q2(I),I=1,NMU2)
+ WAVE=WBEGDOP*RATIO**(IWL-1)
+ IF(WAVE.LT.W1)GO TO 23
+ IF(WAVE.GT.W2+.0001)GO TO 24
+ FREQ=2.997925E17/WAVE
+ HLAM=Q2(MU)*FREQ/WAVE
+ IF(Q2(MU).GT.Q2(MUNMU))HLAM=Q2(MUNMU)*FREQ/WAVE
+ HMAX=AMAX1(HMAX,HLAM)
+ HMIN=AMIN1(HMIN,HLAM)
+ IF(IFCONT.EQ.0)GO TO 23
+ CONT=Q2(MUNMU)*FREQ/WAVE
+ HMAX=AMAX1(HMAX,CONT)
+ HMIN=AMIN1(HMIN,CONT)
+ 23 CONTINUE
+C
+ 24 WRITE(6,25)HMIN,HMAX
+ 25 FORMAT(1P2E12.3)
+ ENCODE(9,3535,STRING9)HMAX
+ CALL STRINGY2(STRING9,END+.6,YTOP-1.2)
+ ENCODE(9,3535,STRING9)HMIN
+ CALL STRINGY2(STRING9,END+.6,YTOP-2.8)
+ 270 CONTINUE
+ IF(TOP.GT.0.)HMAX=TOP
+ IF(IFLOG.EQ.0)GO TO 30
+ IF(HMAX.EQ.0.)GO TO 30
+ HMAXL=ALOG10(HMAX)
+ N=(HMAXL+CYCLES/10.-.001)/(CYCLES/10.)
+ HMAXL=FLOAT(N)*CYCLES/10.
+ IF(TOP.GT.0.)HMAXL=ALOG10(TOP)
+ HMINL=HMAXL-CYCLES
+ HMAX=10.**HMAXL
+ DO 26 I=1,11
+ Y=FLOAT(I-1)*YTOP/10.
+ H=HMINL+FLOAT(I-1)*CYCLES/10.
+ ENCODE(6,1314,STRING6)H
+ CALL STRINGX2(STRING6,-0.9,Y)
+ 26 CONTINUE
+ GO TO 30
+ 27 IF(IFLOG.EQ.0)GO TO 30
+ RMAXL=ALOG10(RMAX)
+ RMINL=RMAXL-CYCLES
+C PLOT OBSERVED SPECTRUM
+C READS FROM 55
+ 30 CALL OBSERV
+C READS FROM 56
+ CALL OBSERV1
+C READS FROM 57
+ CALL OBSERV2
+C READS FROM 60
+ IF(IFKPNO.GT.0)CALL OBSKPNO(IFKPNO)
+C READS FROM 61
+ IF(IFKPK.GT.0)CALL OBSKPK(IFKPK)
+C READS FROM 62
+ IF(IFSACP.GT.0)CALL OBSSACP(IFSACP)
+C READS FROM 63
+ IF(IFHAWA.GT.0)CALL OBSHAWA(IFHAWA)
+C READS FROM 64
+ IF(IFNRL.GT.0)CALL OBSNRL(IFNRL)
+C READS FROM 65
+ IF(IFPROC.GT.0)CALL OBSPROC(IFPROC)
+C READS FROM 66
+ IF(IFSIR.GT.0)CALL OBSSIR(IFSIR)
+C READS FROM 67
+ IF(IFARC.GT.0)CALL OBSARC(IFARC)
+C READS FROM 68
+ IF(IFSUNF.GT.0)CALL OBSSUNF(IFSUNF)
+C READS FROM 69
+ IF(IFSOIR.GT.0)CALL OBSSOIR(IFSOIR)
+C READS FROM 59
+ IF(IFHALL.GT.0)CALL OBSHALL(IFHALL)
+C READS FROM 58
+ IF(IFENGV.GT.0)CALL OBSENGV(IFENGV)
+C READS FROM 73
+ IF(IFFTS.GT.0)CALL OBSFTS(IFFTS)
+C READS FROM 71 AND 72
+C IF(IFFTS2.GT.0)CALL OBSENGV(IFFTS2)
+ IF(IFFTS2.GT.0)CALL OBSFTS2(IFFTS2)
+C READS FROM 74
+ IF(IFJUNG.GT.0)CALL OBSJUNG(IFJUNG)
+ IF(NOCALC.EQ.1)GO TO 50
+ IF(IFCONT.EQ.3)GO TO 735
+C PLOT SPECTRUM
+ REWIND 7
+ READ(7)
+ NSKIP= LOG(W1/WBEGIN)/ LOG(RATIO)-2.
+C NSKIP=ALOG(W1/WBEGIN)/ALOG(RATIO)-2.
+ NSKIP=MAX0(NSKIP,0)
+ IF(NSKIP.EQ.0)GO TO 231
+ DO 230 I=1,NSKIP
+ 230 READ(7)
+ 231 N1=NSKIP+1
+ ISTART=0
+ CALL WEIGHT(1)
+ IF(IFDLIN.EQ.1)CALL WEIGHT(2)
+ WBEGDOP=WBEGIN*(1.D0+DOPCALC/299792.458D0)
+C
+ IF(IFOPAC.GT.0)THEN
+ READ(7)
+ DO 233 IWL=N1,NWL
+ READ(7)(ASYNTH(J),J=1,IFOPAC)
+ WAVE=WBEGDOP*RATIO**(IWL-1)
+ IF(WAVE.LT.W1)GO TO 233
+ IF(WAVE.GT.W2+.0001)GO TO 734
+ FREQ=2.99792458E17/WAVE
+ HLAM=MAX(ASYNTH(IFOPAC),1.E-30)
+ CONT=HMAX
+ IF(IFABSO.EQ.0.AND.IFLOG.EQ.0)Y=(HLAM/CONT-RMIN)/(RMAX-RMIN)*YTOP
+ IF(IFABSO.EQ.1.AND.IFLOG.EQ.0)Y=HLAM/HMAX*YTOP
+ IF(IFABSO.EQ.0.AND.IFLOG.EQ.1)Y=(ALOG10(HLAM/CONT)-RMINL)/CYCLES*
+ 1YTOP
+ IF(IFABSO.EQ.1.AND.IFLOG.EQ.1)Y=(ALOG10(HLAM)-HMINL)/CYCLES*YTOP
+ IF(Y.LT.0.)Y=0.
+ IF(Y.GT.YTOP)Y=YTOP
+ X=(WAVE-W1)*10.*XSCALE
+ IF(ISTART.EQ.0)CALL JUMP TO (X,Y)
+ ISTART=1
+ CALL LINE TO (X,Y)
+ 233 CONTINUE
+ CALL WEIGHT(1)
+ NSKIP=0
+ GO TO 735
+ ENDIF
+C
+ XOLD=0.
+ YOLD=0.
+ DO 33 IWL=N1,NWL
+ READ(7)(Q2(I),I=1,NMU2)
+ WAVE=WBEGDOP*RATIO**(IWL-1)
+ IF(WAVE.LT.W1)GO TO 33
+ IF(WAVE.GT.W2+.0001)GO TO 34
+ FREQ=2.997925E17/WAVE
+ HLAM=Q2(MU)*FREQ/WAVE
+ CONT=Q2(MUNMU)*FREQ/WAVE
+C KEEPS EMISSION BELOW CONTINUUM
+C IF(IFABSO.EQ.0.AND.HLAM.GT.CONT)HLAM=CONT
+ IF(IFABSO.EQ.0.AND.IFLOG.EQ.0)Y=(HLAM/CONT-RMIN)/(RMAX-RMIN)*YTOP
+ IF(IFABSO.EQ.1.AND.IFLOG.EQ.0)Y=HLAM/HMAX*YTOP
+ IF(IFABSO.EQ.0.AND.IFLOG.EQ.1)Y=(ALOG10(HLAM/CONT)-RMINL)/CYCLES*
+ 1YTOP
+ IF(IFABSO.EQ.1.AND.IFLOG.EQ.1)Y=(ALOG10(HLAM)-HMINL)/CYCLES*YTOP
+ X=(WAVE-W1)*10.*XSCALE
+ XNEW=X
+ YNEW=Y
+ IF(Y.LT.0.)YNEW=0.
+ IF(Y.GT.YTOP)YNEW=YTOP
+ IF(Y*YOLD.LT.0.)XNEW=XOLD+(X-XOLD)/(Y-YOLD)*(0.-YOLD)
+ IF((Y-YTOP)*(YOLD-YTOP).LT.0.)XNEW=XOLD+(X-XOLD)/(Y-YOLD)*
+ 1(YTOP-YOLD)
+ IF(ISTART.EQ.0)CALL JUMP TO (XNEW,YNEW)
+ ISTART=1
+ CALL LINE TO (XNEW,YNEW)
+ XOLD=X
+ YOLD=Y
+ 33 CONTINUE
+ CALL WEIGHT(1)
+ IF(IFRMAX2.EQ.0)GO TO 732
+ 34 IF(IFRMAX2.EQ.0)GO TO 735
+C
+ XOLD=0.
+ YOLD=0.
+ REWIND 7
+ READ(7)
+ IF(NSKIP.EQ.0)GO TO 731
+ DO 730 I=1,NSKIP
+ 730 READ(7)
+ 731 N1=NSKIP+1
+ ISTART=0
+ DO 733 IWL=N1,NWL
+ READ(7)(Q2(I),I=1,NMU2)
+ WAVE=WBEGDOP*RATIO**(IWL-1)
+ IF(WAVE.LT.W1)GO TO 733
+ IF(WAVE.GT.W2+.0001)GO TO 734
+ FREQ=2.997925E17/WAVE
+ HLAM=Q2(MU)*FREQ/WAVE
+ CONT=Q2(MUNMU)*FREQ/WAVE
+ IF(IFABSO.EQ.0.AND.HLAM.GT.CONT)HLAM=CONT
+ IF(IFABSO.EQ.0.AND.IFLOG.EQ.0)Y=(HLAM/CONT-RMIN2)/(RMAX2-RMIN2)*
+ 1YTOP
+ IF(IFABSO.EQ.1.AND.IFLOG.EQ.0)Y=HLAM/HMAX*YTOP
+ IF(IFABSO.EQ.0.AND.IFLOG.EQ.1)Y=(ALOG10(HLAM/CONT)-RMINL)/CYCLES*
+ 1YTOP
+ IF(IFABSO.EQ.1.AND.IFLOG.EQ.1)Y=(ALOG10(HLAM)-HMINL)/CYCLES*YTOP
+ X=(WAVE-W1)*10.*XSCALE
+ XNEW=X
+ YNEW=Y
+ IF(Y.LT.0.)YNEW=0.
+ IF(Y.GT.YTOP)YNEW=YTOP
+ IF(Y*YOLD.LT.0.)XNEW=XOLD+(X-XOLD)/(Y-YOLD)*(0.-YOLD)
+ IF((Y-YTOP)*(YOLD-YTOP).LT.0.)XNEW=XOLD+(X-XOLD)/(Y-YOLD)*
+ 1(YTOP-YOLD)
+ IF(ISTART.EQ.0)CALL JUMP TO (XNEW,YNEW)
+ ISTART=1
+ CALL LINE TO (XNEW,YNEW)
+ XOLD=X
+ YOLD=Y
+ 733 CONTINUE
+ 732 CALL WEIGHT(1)
+ NSKIP=0
+ GO TO 735
+ 734 NSKIP=NWL-IWL
+ CALL WEIGHT(1)
+ 735 CONTINUE
+C 35 IF(IFABSO.EQ.0)CALL BCDX(1,CONT,9,8H(1PE9.3),.15,END+.5,YTOP-.05)
+C IF(IFABSO.EQ.0)CALL BCDY(1,CONT,9,8H(1PE9.3),.15,-.05,YTOP+.25)
+C IF(IFABSO.EQ.1)CALL BCDX(1,HMAX,9,8H(1PE9.3),.15,END+.5,YTOP-.05)
+C IF(IFABSO.EQ.1)CALL BCDY(1,HMAX,9,8H(1PE9.3),.15,-.05,YTOP+.25)
+ IF(IFABSO.EQ.0)ENCODE(9,3535,STRING9)CONT
+ IF(IFABSO.EQ.1)ENCODE(9,3535,STRING9)HMAX
+ 3535 FORMAT(1PE9.3)
+ CALL STRINGY2(STRING9,END+.4,YTOP-1.2)
+ CALL STRINGY2(STRING9,-.15,YTOP+.25)
+ IF(IFABSO.EQ.0)GO TO 50
+ IF(IFCONT.EQ.0)GO TO 50
+ IF(IFOPAC.GT.0)GO TO 50
+C PLOT CONTINUUM
+ REWIND 7
+ READ(7)
+ NSKIP= LOG(W1/WBEGIN)/ LOG(RATIO)-2.
+C NSKIP=ALOG(W1/WBEGIN)/ALOG(RATIO)-2.
+ NSKIP=MAX0(NSKIP,0)
+ IF(NSKIP.EQ.0)GO TO 37
+ DO 36 I=1,NSKIP
+ 36 READ(7)
+ 37 N1=NSKIP+1
+ ISTART=0
+ CALL WEIGHT(1)
+ IF(IFDLIN.EQ.1)CALL WEIGHT(2)
+ WBEGDOP=WBEGIN*(1.D0+DOPCALC/299792.458D0)
+ XOLD=X
+ YOLD=Y
+ DO 43 IWL=N1,NWL
+ READ(7)(Q2(I),I=1,NMU2)
+ WAVE=WBEGDOP*RATIO**(IWL-1)
+ IF(WAVE.LT.W1)GO TO 43
+ IF(WAVE.GT.W2+.0001)GO TO 44
+ FREQ=2.997925E17/WAVE
+ CONT=Q2(MUNMU)*FREQ/WAVE
+ IF(IFLOG.EQ.0)Y=CONT/HMAX*YTOP
+ IF(IFLOG.EQ.1)Y=(ALOG10(CONT)-HMINL)/CYCLES*YTOP
+ X=(WAVE-W1)*10.*XSCALE
+ XNEW=X
+ YNEW=Y
+ IF(Y.LT.0.)YNEW=0.
+ IF(Y.GT.YTOP)YNEW=YTOP
+ IF(Y*YOLD.LT.0.)XNEW=XOLD+(X-XOLD)/(Y-YOLD)*(0.-YOLD)
+ IF((Y-YTOP)*(YOLD-YTOP).LT.0.)XNEW=XOLD+(X-XOLD)/(Y-YOLD)*
+ 1(YTOP-YOLD)
+ IF(ISTART.EQ.0)CALL JUMP TO (XNEW,YNEW)
+ ISTART=1
+ CALL LINE TO (XNEW,YNEW)
+ XOLD=X
+ YOLD=Y
+ 43 CONTINUE
+ CALL WEIGHT(1)
+ NSKIP=0
+ GO TO 50
+ 44 NSKIP=NWL-IWL
+ CALL WEIGHT(1)
+ 50 IF(IFLABL.EQ.0)GO TO 100
+ IF(NOCALC.EQ.1)GO TO 336
+ PRINT 1111,NWL,NSKIP
+ 1111 FORMAT(2I10)
+C IF(NSKIP.EQ.0)GO TO 336
+C DO 335 I=1,NSKIP
+C 335 READ(7)
+ 336 CONTINUE
+ REWIND 93
+ ILABL=MOD(IFLABL,10)
+ IF(ILABL.EQ.1)CALL LABEL1
+ IF(ILABL.EQ.2)CALL LABEL2
+ IF(ILABL.EQ.3)CALL LABEL3
+ IF(ILABL.EQ.4)CALL LABEL4
+ IF(ILABL.EQ.5)CALL LABEL5
+ IF(ILABL.EQ.6)CALL LABEL6
+ IF(ILABL.EQ.7)CALL LABEL7(IFOPAC)
+ IF(ILABL.EQ.8)CALL LABEL8
+ IF(ILABL.EQ.9)CALL LABEL9
+ 100 CONTINUE
+ CALL FIN(70)
+C CALL ENDTIME
+ CALL EXIT
+ END
+ SUBROUTINE OBSERV
+C PLOTS OBSERVED DATA IN X,Y FORM
+C IFSUNF=1 WEIGHT=2
+C IFSUNF=2 WEIGHT=1
+C IFSUNF=3 PLOT TWICE NORMAL WITH WEIGHT=2 AND 10 TIMES YSCALE WITH WEIGHT=1
+C IFSUNF=4 PLOT TWICE NORMAL WITH WEIGHT=1 AND 10 TIMES YSCALE WITH WEIGHT=1
+ COMMON /PARAMS/XSCALE,
+ 1 RMIN,WEAK,TOP,PANEL,CYCLES,WBEGIN,WEND,W1,W2,YTOP,
+ 2 HMAX,HMIN,YSCALE,OFFSET,RMAX,
+ 3 WNEW1,WNEW2,SMOOTH,DOPOBS,DOPCALC,DOPTERR,
+ 4 SCALOBS,ZEROOBS,RMIN2,RMAX2,XOFFSET,SCALOB2,IUERM,
+ 5 IFLABL,IFABSO,IFCONT,IFGRID,IFDLIN,IFLOG,IFMU,NOCALC
+ 6 IFVAC,NOPRNT
+ COMMON/COLOR/COLOROBS
+ CHARACTER*10 COLOROBS
+ REAL*8 WBEGIN,WEND,W1,W2,RESOLU,RATIO,WNEW1,WNEW2,WAVEL
+ REAL*8 WI,W,WCUT,WRM,DOPOBS8
+ REAL*4 WRM4(100)
+ DIMENSION WCUT(7)
+ dimension ss(460000)
+ equivalence (si(1),ss(10001))
+ dimension wtsmoo(10000)
+ DIMENSION WRM(100)
+CCRAY COMMON /WISI/WI(100000),SI(100000)
+ COMMON /WISI/WI(450000),SI(450000)
+C COMMON MUST BE REMOVED TO PLOT TWO SPECTRA AT THE SAME TIME
+ DATA WCUT/329.897,378.2914,401.965,473.8,576.5,753.9,999.7/
+ DATA IREAD/0/
+ DOPOBS8=DOPOBS
+ IFSUNF=0
+ IF(IREAD.EQ.1)GO TO 9
+ IREAD=1
+ OPEN(UNIT=55,SHARED,READONLY,TYPE='OLD',FORM='UNFORMATTED')
+ NIN=0
+ DO 4 I=1,1137795
+C W IS THE SOLAR AIR WAVELENGTH INCLUDING THE GRAVITATIONAL REDSHIFT
+C S IS THE PSEUDO-RESIDUAL FLUX
+ READ(55,END=5)W,S
+C REMOVE GRAVITATIONAL RED SHIFT
+c W=W*(1.D0-0.636D0/299792.458D0)
+ W=W*(1.D0+DOPOBS8/299792.458D0)
+c w=w+dopobs
+ IF(W.LT.WNEW1)GO TO 4
+ IF(W.GT.WNEW2)GO TO 5
+ NIN=NIN+1
+CCRAY IF(NIN.GT.100000)CALL ABORT
+ IF(NIN.GT.450000)CALL ABORT
+ WI(NIN)=W
+ SI(NIN)=S
+ 4 CONTINUE
+ 5 CONTINUE
+ IF(IUERM.EQ.0)GO TO 9
+ OPEN(UNIT=56,SHARED,TYPE='OLD')
+ READ(56,6)NORD
+6 FORMAT(I5)
+C TYPE*,NORD
+ DO 44 I=1,100
+ READ(56,66,END=97)XRM,YRM,ZRM
+66 FORMAT(1X,F10.4,1X,F15.4,1X,F10.4)
+C TYPE*,XRM,YRM,ZRM
+ WRM(I)=(XRM*0.1)*(1.D0+DOPOBS8/299792.458D0)
+ WRM(I)=(WRM(I)-W1)*XSCALE*10.
+C TYPE*, I,WRM(I)
+44 CONTINUE
+97 NPTI=I-1
+ 9 IF(NIN.EQ.0)RETURN
+ if (smooth.gt.0) then
+ nwt=3.*smooth
+ nwt2=nwt*2+1
+ sumwt=1.
+ do 333 i=1,nwt
+ wtsmoo(i)=exp(-(2.*float(i)/smooth*sqrt(alog(2.)))**2)
+333 sumwt=sumwt+wtsmoo(i)*2.
+ wtsmoo(nwt+1)=1./sumwt
+ do 334 i=1,nwt
+334 wtsmoo(nwt+1+i)=wtsmoo(i)/sumwt
+ do 335 i=1,nwt
+335 wtsmoo(i)=wtsmoo(nwt2+1-i)
+ do 3330 i=1,nwt2
+3330 print 3333, i,wtsmoo(i)
+3333 format(i10,f10.7)
+ do 337 i=1,nin
+ i1=max0(i-nwt,1)
+ i2=min0(i+nwt,nin)
+ ss(i)=0.
+ inwt1=i-nwt-1
+ do 336 ii=i1,i2
+336 ss(i)=ss(i)+wtsmoo(ii-inwt1)*si(ii)
+337 continue
+ do 338 i=1,nin
+ nini=nin+1-i
+338 si(nini)=ss(nini)
+ endif
+ CALL WEIGHT(2)
+ if (ifsunf.eq.0.and.ifdlin.eq.0) call weight(1)
+ IF(IFSUNF.EQ.2.OR.IFSUNF.EQ.12)CALL WEIGHT(1)
+ ISTART=0
+ CALL COLOR BLACK
+ IF(COLOROBS.EQ.'RED ')CALL COLOR RED
+ IF(COLOROBS.EQ.'BLUE ')CALL COLOR BLUE
+ IF(IFABSO.EQ.0)GO TO 144
+C FIND MAX AND MIN
+ HMAX=0.
+ HMIN=1.E30
+ DO 145 I=1,NIN
+ HMAX=AMAX1(HMAX,SI(I))
+ HMIN=AMIN1(HMIN,SI(I))
+145 CONTINUE
+ IF(TOP.GT.0.)HMAX=TOP
+144 DO 14 I=1,NIN
+ W=WI(I)
+ IF(W.LT.W1)GO TO 14
+ IF(W.GT.W2)GO TO 15
+ X=(W-W1)*XSCALE*10.
+ IF(IFABSO.EQ.1)SI(I)=SI(I)/HMAX
+ Y=(SI(I)-RMIN)/(RMAX-RMIN)*3.125*YSCALE
+ Y=AMAX1(Y,0.)
+ IF(ISTART.EQ.0)CALL JUMP TO (X,Y)
+ ISTART=1
+ CALL LINE TO (X,Y)
+C TYPE*, IUERM
+ IF(IUERM.EQ.0)GO TO 14
+ DO 339 IRM=1,NPTI
+ WRM4(IRM)=WRM(IRM)
+C TYPE*,WRM4(IRM),X
+ IF(ABS(WRM4(IRM)-X).LE.0.001)CALL X AT(WRM4(IRM),Y)
+339 CONTINUE
+ 14 CONTINUE
+ 15 CONTINUE
+ if(ifdlin.eq.0)CALL WEIGHT(1)
+ if(ifdlin.eq.1)call weight(2)
+ IF(IFSUNF.LT.3)RETURN
+ ISTART=0
+ DO 24 I=1,NIN
+ W=WI(I)
+ IF(W.LT.W1)GO TO 24
+ IF(W.GT.W2)GO TO 25
+ X=(W-W1)*XSCALE*10.
+ XNEW=X
+ S=SI(I)
+ Y=(S-.9)/(1.0-.9)*3.125*YSCALE
+ YNEW=Y
+ IF(ISTART.EQ.0)THEN
+ IF(Y.LT.0.)Y=0.
+ GO TO 240
+ ENDIF
+ IF(YNEW.GE.0..AND.YOLD.GE.0.)GO TO 240
+ Y=0.
+ IF(YNEW.LT.0..AND.YOLD.LT.0.)GO TO 240
+ IF(YOLD.LE.0.)GO TO 239
+ X=XOLD+(XNEW-XOLD)/(YNEW-YOLD)*(0.-YOLD)
+ GO TO 240
+ 239 X=XOLD+(XNEW-XOLD)/(YNEW-YOLD)*YNEW
+ 240 IF(ISTART.EQ.0)CALL JUMP TO (X,Y)
+ ISTART=1
+ XOLD=XNEW
+ YOLD=YNEW
+ CALL LINE TO (X,Y)
+ 24 CONTINUE
+ 25 CONTINUE
+ RETURN
+ END
+ SUBROUTINE OBSERV1
+ RETURN
+ END
+ SUBROUTINE OBSERV2
+ RETURN
+ END
+ SUBROUTINE OBSKPNO(IFKPNO)
+ RETURN
+ END
+ SUBROUTINE OBSJUNG(IFJUNG)
+ RETURN
+ END
+ SUBROUTINE OBSKPK(IFKPK)
+C HARVARD ROCKET SPECTRA KOHL,PARKINSON,KURUCZ
+ RETURN
+ END
+ SUBROUTINE OBSSACP(IFSACP)
+C SAC PEAK SOLAR ATLAS BY BECKERS, BRIDGES, AND GILLIAM
+ RETURN
+ END
+ SUBROUTINE OBSHAWA(IFHAWA)
+C HAWAII ROCKET SPECTRA ALLEN, MCALLISTER, AND JEFFRIES
+ RETURN
+ END
+ SUBROUTINE OBSNRL(IFNRL)
+ RETURN
+ END
+ SUBROUTINE OBSPROC(IFPROC)
+ RETURN
+ END
+ SUBROUTINE OBSARC(IFARC)
+ RETURN
+ END
+ SUBROUTINE OBSSUNF(IFSUNF)
+C PLOTS KURUCZ, FURENLID, BRAULT, AND TESTERMAN SOLAR FLUX ATLAS
+ RETURN
+ END
+ SUBROUTINE OBSSOIR(IFSOIR)
+C PLOTS DELBOUILLE, ROLAND, BRAULT, AND TESTERMAN INFRARED SOLAR ATLAS
+ RETURN
+ END
+ SUBROUTINE OBSHALL(IFHALL)
+C PLOTS HALL INFRARED SUNSPOT ATLAS
+ RETURN
+ END
+ SUBROUTINE OBSENGV(IFENGV)
+C PLOTS ENGVOLD SUNSPOT ATLAS
+ RETURN
+ END
+ SUBROUTINE OBSFTS(IFFTS)
+C PLOTS A SPECTRUM FROM THE FTS AT KITT PEAK
+ RETURN
+ END
+ SUBROUTINE OBSFTS2(IFFTS2)
+C PLOTS THE RATIO OF TWO SPECTRA FROM THE FTS AT KITT PEAK
+ RETURN
+ END
+ SUBROUTINE OBSSIR(IFSIR)
+ RETURN
+ END
+ SUBROUTINE LABEL1
+C LABELS COMPUTED SPECTRUM
+ RETURN
+ END
+ SUBROUTINE LABEL2
+ RETURN
+ END
+ SUBROUTINE LABEL3
+ RETURN
+ END
+ SUBROUTINE LABEL4
+ RETURN
+ END
+ SUBROUTINE LABEL5
+C LABELS ATMOSPHERIC LINES FROM AFCRL LINE LIST
+ RETURN
+ END
+ SUBROUTINE NAMEMOL(MOLNAME,MOLCODE)
+C IDENTIFIES ISOTOPE CODES FOR AFCRL LINE LIST
+ RETURN
+ END
+ SUBROUTINE LABEL6
+ RETURN
+ END
+ SUBROUTINE LABEL7(IFOPAC)
+ RETURN
+ END
+ SUBROUTINE LABEL8
+ RETURN
+ END
+ SUBROUTINE LABEL9
+C PIERCE AND BRECKENRIDGE LINE LIST FOR SOLAR CENTRAL INTENSITY
+ RETURN
+ END