A large commit.
[pdp8.git] / sw / rescue / lab8e_goettingen / disk2_11 / rkb / paroff / haepal.ft
diff --git a/sw/rescue/lab8e_goettingen/disk2_11/rkb/paroff/haepal.ft b/sw/rescue/lab8e_goettingen/disk2_11/rkb/paroff/haepal.ft
new file mode 100644 (file)
index 0000000..13a819d
--- /dev/null
@@ -0,0 +1,227 @@
+C      -+-+-+-+-+ \ e  H A E P A L . F T  \ e -+-+-+-+-+\r
+C\r
+C      HERE WE PLOT THE ABSOLUT INTENSITIES OF THE 5 FREQUENCY BANDS\r
+C       FROM THE POWER SPECTRA STORED ON SCRATCH UNIT 5.\r
+C\r
+       SUBROUTINE PALOT\r
+       INCLUDE HAEBUF.FI\r
+       INCLUDE HAEGSA.FI\r
+       INCLUDE HAEPTI.FI\r
+       INCLUDE HABRK.FI\r
+       INCLUDE HAEI85.FI\r
+       INCLUDE HAECSZ.FI\r
+       INCLUDE HAETTY.FI\r
+       INCLUDE HAPPEN.FI\r
+C\r
+\fC\r
+       LOGICAL MLTPLE\r
+       REAL COND\r
+       INTEGER NCOND\r
+       EXTERNAL MLTPLE,COND,NCOND\r
+C\r
+        REAL ORD,ABZ,TEMSET,\r
+     *  ABMAX(2,5),                    @ ABSOLUT/ RELATIVE MAXIMUM OF THE BAND INTENSITY DATA\r
+     *  TE1,TE2,TE3,                   @ TEMPORARY STORAGE\r
+     *  INTFAC,ORDMAX                  @ FACTOR TO SCALE THE INTENSITY OF EACH BAND, MAXIMUM OF THE ORDINATE\r
+       INTEGER I,BAND,N,\r
+     *  RELABS,                                @ ABS INTENSITY =1, REL INTENSITY =2\r
+     *  PNT,                           @ MOD(I,4)+1 TEMP STORAGE\r
+     *  SKIPIT                         @ STARTING LOCATION OF THE DATA SET WANTED\r
+       LOGICAL F1,                     @ SAMPLE BUFFER IS EMPTY FLAG\r
+     *  L1,                            @ TEMPORARY STORAGE\r
+     *  ABISMI                         @ TIME AXIS SCALING IS IF ABISMI THEN MINUTES ELSE SECONDS FI\r
+       INTEGER PENPOS                  @ TEMPORARY PEN STATUS\r
+C\r
+C      STATEMENT FUNCTIONS ARE:\r
+C\r
+       INTEGER DATTIM                  @ STARTING TIME OF THIS POWER SPECTRUM DATA RECORD WITHIN THE SAMPLE\r
+       DATTIM(IP1)=INTE(3,1,MOD(IP1,4)+1)\r
+       LOGICAL MUSTRD                  @ MUSTRD DECIDES IF WE HAVE TO READ THE NEXT INTE RECORD\r
+       MUSTRD(IP1)=MOD(IP1,4).EQ.0\r
+C\r
+C      OPEN THE INPUT DATA FILE UNIT 5\r
+C      READ THE FIRST BLOCK OF THE FILE HEADER AND\r
+C       THE DATA HEADER I.E. COMMON CEGSA THE SECOND BLOCK OF UNIT 5\r
+C\r
+       IF (REC5.LT.1) DEFINE FILE5(MAXBL5,85,U,REC5)\r
+       REC5=1\r
+       F1=SAMCNT.EQ.0 .OR. .NOT. COMP @ HEADER OF FILE 5 DOES NOT MATCH THE HEADER OF THE ACTUAL SAMPLE BUFFER\r
+       READ (5'REC5) (RCRD0(I),I=1,85) @ READ THE FILE HEADER\r
+       IF (F1) SAMCNT=0                @ CLEAR THE ACTUAL SAMPLE BUFFER\r
+       IF (F1) COMP=.FALSE.            @ AND THE COMPUTATIONS FLAG TOO\r
+       IF (REDVAL.NE.6H2DPWLD) GOTO 20 @ RECORD IS EMPTY\r
+       REDVAL=0                        @ FOR SAVETY ONLY\r
+       WRITE (TTO,3) (LABEL(I),I=1,LABCNT) @ TYPE OUT THE LABEL OF THIS DATA SET\r
+       READ (5'REC5) LCEGSA(1),(LCEGSA(I),I=2,LCEGSA(1)) @ READ THE DATA HEADER BLOCK ( COMMON CEGESA)\r
+       SETNUM=SETNU5                   @ INSERT THE NUMBER OF THE ACTUAL DATA SET\r
+       CHANEL=CHANE5                   @ AND THE NUMBER OF THE CHANNEL INVESTIGATED TOO\r
+C\r
+\fC     HERE WE PLOT THE INTENSITY / TIME\r
+C\r
+       BEGIN=NCOND(PZBEG,PZBEG,BEGIN)\r
+       ENDS=NCOND(PZEND,PZEND,BEGFFT+SPAN)\r
+       IF (OPTION.NE.12) CALL ASKHIM(2) @ ASK FOR BEGIN AND ENDS\r
+       PZBEG=BEGIN\r
+       PZEND=ENDS\r
+C\r
+C      COMPUTE THE MAXIMA OF THE ORDINATE (INTENSITIES)\r
+C\r
+       DO 33 BAND=1,5\r
+33     ABMAX(1,BAND)=0\r
+       N=0\r
+C      READ THE STARTING TIME OF THE INTENSITY DATA COMPUTED AND \r
+C      THEN WE COMPUTE THE RECORD NUMBER OF THE INTENSITY DATA WE WANT TO PLOT\r
+       REC5=STSCAN                     @ READ THE FIRST INTENSITY DATA RECORD\r
+       READ (5'REC5) INTE85\r
+       SKIPIT=(BEGIN-INTE(3,1,1))/OVRLAP @  THE NUMBER OF DATA POINT TO SKIP --> SKIPIT\r
+       IF (SKIPIT.LT.DATCNT) GOTO 25   @ IF THE PLOT EXCEEDS THE DATA COMPUTED\r
+       REC5=STSCAN+(DATCNT-1)/4        @  THEN WE PRINT AN ERROR MSG ELSE WE CONTINUE AT 25\r
+       READ (5'REC5) INTE85            @ READ THE LAST RECORD OF THE UNIT 5\r
+       WRITE (TTO,2) PZBEG,PZEND,INTE(3,1,MOD(DATCNT-1,4)) @ AND TYPE THE ERROR MSG\r
+C\r
+25     CONTINUE\r
+       REC5=STSCAN+SKIPIT/4            @ READ THE FIRST RECORD WANTED\r
+       READ (5'REC5) INTE85            @ \r
+C\r
+C      COMPUTE THE MAXIMUM OF EACH BAND\r
+C\r
+       DO 35 I=0,DATCNT-1              @ LOOP FOR EACH POWER SPECTRUM\r
+       IF (BREAK(11)) RETURN\r
+       REC5=STSCAN+I/4\r
+       IF (MUSTRD(I)) READ (5'REC5) INTE85\r
+       IF (DATTIM(I).LT.BEGIN) GOTO 35 @ GO AND FETCH THE NEXT DATA WORDS\r
+       IF (DATTIM(I).GT.ENDS) GOTO 34 @ WE MAY LEAVE THIS LOOP - WORK IS DONE\r
+       N=N+1\r
+       PNT=MOD(I,4)+1                  @ TEMP STORAGE\r
+       DO 30 BAND=1,5                  @ LOOP FOR EACH BAND\r
+30      ABMAX(1,BAND)=ABMAX(1,BAND)+INTE(1,BAND,PNT)\r
+35     CONTINUE\r
+34     CONTINUE\r
+       DO 36 BAND=1,5\r
+36     ABMAX(1,BAND)=ABMAX(1,BAND)/N*2.\r
+C\r
+C      CHECK THE MAXIMUM\r
+C\r
+       DO 40 BAND=1,5\r
+43     TE1=0                           @ COUNTS ALL POINTS PLOTTED\r
+       TE2=0                           @ COUNTS ALL POINTS .GT. MAXIMUM OF PLOT\r
+       DO 45 I=0,DATCNT-1              @ WE SCAN ALL DATA ENTRIES\r
+       IF (BREAK(11)) RETURN\r
+       REC5=STSCAN+I/4\r
+       IF (MUSTRD(I)) READ (5'REC5) INTE85\r
+       IF (DATTIM(I).LT.BEGIN) GOTO 45 @ FETCH THE NEXT DATA WORDS\r
+       IF (DATTIM(I).GT.ENDS) GOTO 44 @ THE WORK IS DONE, SO WE LEAVE THE LOOP\r
+       TE1=TE1+1.                      @ COUNTS ALL POINTS HERE\r
+       IF (INTE(1,BAND,MOD(I,4)+1).GT.ABMAX(1,BAND)) TE2=TE2+1. @ COUNT ALL POINTS .GT. MAXIMUM\r
+45     CONTINUE\r
+44     CONTINUE\r
+CX     WRITE (4,49) TE1,TE2,ABMAX(1,BAND) @ PRINT SOME DIAGNOSTIC MSG\r
+CX49   FORMAT (' TE1:',1P,E8.1,' TE2:',E8.1,' ABMAX:',E8.1)\r
+       IF (TE2/TE1.LT.0.02) GOTO 40    @ IF 98% OF ALL POINTS ARE PLOTTED THEN WE PROCEED TO THE NEXT BAND\r
+       ABMAX(1,BAND)=ABMAX(1,BAND)*SQRT(2.)\r
+       GOTO 43                         @ CHECK AGAIN\r
+40     CONTINUE\r
+\fC\r
+C      OPEN THE PLOTTER\r
+C\r
+       CALL STPLT                      @ START THE PLOTTER ( CALL PLOTS)\r
+       CALL XYPLOT (XOFSET,YOFSET,-PENUP)\r
+C\r
+C      THE LOOP FOR EACH BAND AND THE TOTAL INTENSITY\r
+C\r
+       DO 120 BAND=1,5\r
+       IF BREAK(11) GOTO 140\r
+       TEMSET=(YLEN+YSTEP)/5.*FLOAT(5-BAND)\r
+       CALL XYPLOT (0,TEMSET,-PENUP) @ SET THE NEW ORIGIN FOR THIS STAMP HERE\r
+       RELABS=1                        @ WE PLOT THE ABSOLUT INTENSITIES\r
+       TE1=ABMAX(RELABS,1)\r
+       INTFAC=COND(ABMAX(RELABS,BAND).GT.TE1/2.,1.,\r
+     *   ABMAX(RELABS,BAND).GT.TE1/5., 0.5,\r
+     *   ABMAX(RELABS,BAND).GT.TE1/10.,0.2 ,0.1) @ NORM TO NEW MAXIMUM \r
+       ORDMAX=ABMAX(RELABS,1)*INTFAC   @ COMPUTE MAXIMUM OF ORDINATE\r
+       CALL FACTOR (XLEN/(ENDS-BEGIN),(YLEN-4.*YSTEP)/5./ORDMAX)\r
+C\r
+C      THE LOOP FOR EACH POWER SPECTRUM\r
+C\r
+       PENPOS=PENUP\r
+       L1=.FALSE.\r
+       DO 130 I=0,DATCNT-1\r
+       IF BREAK(11) GOTO 131           @ IF THE USER GETS RID OF THIS TASK THEN EXIT VIA 131\r
+       REC5=STSCAN+I/4                 @ COMPUTE THE NUMBER OF THE NEXT RECORD WHERE TO READ INTE85 (4 DATA SETS PER RECORD)\r
+       IF (MUSTRD(I)) READ (5'REC5) INTE85\r
+       ORD=INTE(1,BAND,MOD(I,4)+1)     @ THE INTENSITY OF THIS BAND --> ORD\r
+       PENPOS=NCOND(ORD.GT.ORDMAX.AND.L1,PENUP,PENPOS) @ WE DON'T PLOT POINTS .GT. ORDMAX\r
+       L1=ORD.GT.ORDMAX\r
+       ORD=AMIN1(ORD,ORDMAX)\r
+C                                      @ THE TIME AXIS STARTS AT BEGIN+SPAN/2. SO WE\r
+       ABZ=DATTIM(I)                   @  INSERT THE TIME SCALE [SECONDS] --> ABZ\r
+       IF (ABZ.LT.BEGIN) GOTO 130      @  SKIP ALL THE POINTS BEFORE THE BEGIN  TIME\r
+       IF (ABZ.GT.ENDS) GOTO 131       @ IF WE PASSED THE END OF THE PLOT THEN WE TERMINATE THE LOOP\r
+\r
+       ABZ=ABZ-BEGIN                   @  ELSE WE PLOT THIS DATA POINT ( THE FIRST ONE WITH PEN UP) RELATIVE TO THE BEGIN OF THE PLOT\r
+       CALL XYPLOT (ABZ,ORD,PENPOS)\r
+       PENPOS=PENDWN                   @ 'PEN DOWN' FROM NOW ON\r
+\r
+130    CONTINUE                        @ LOOP TO FETCH THE NEXT DATA POINT\r
+131    CONTINUE                        @  ALL THE WORK DONE FOR THE ACTUAL BAND\r
+C\r
+C      PLOT THE INTENSITY SCALE\r
+C\r
+       IF (BREAK(11)) GOTO 140         @ IF THE USER GET'S RID OF PLOT THEN WE EXIT\r
+       CALL WHERE (TE1,TE1,TE1,TE1)    @ GET THE ACTUAL Y FACTOR\r
+       CALL FACTOR (1.,TE1)            @ AND SWITCH X FACTOR TO 1.\r
+       CALL XYPLOT (-.5,0,-PENUP)      @ LOWER LEFT CORNER\r
+       PENPOS=PENUP\r
+       DO 132 I=0,10\r
+       TE1=ORDMAX/INTFAC*I/10.\r
+       IF (TE1.GT.ORDMAX+ORDMAX/500.) GOTO 133 @ AXIS IS COMPLETE\r
+       CALL XYPLOT (0,TE1,PENPOS)\r
+       IF (.NOT.(I.EQ.INT(10.*INTFAC+.5) .OR.\r
+     *   I.EQ.0)) GOTO 110\r
+C      MARK THE START AND THE END OF THE SCALE\r
+       CALL WHERE (TE2,TE2,TE2,TE3)    @ GET THE X AND Y FACTOR\r
+       CALL FACTOR (1.,1.)\r
+       CALL NUMBER (-.7-YN*INT(I/10),TE3*TE1-YN*.3,YN,I,0,-1)\r
+       CALL FACTOR (TE2,TE3)\r
+       CALL XYPLOT (0,TE1,PENUP)\r
+110    PENPOS=PENDWN\r
+       TE2=COND(INTFAC.EQ.1. .AND. I.EQ.5,-0.5,-0.3)   @ A SMALL BAR TO THE LEFT\r
+       CALL XYPLOT (TE2,TE1,PENDWN)\r
+132    CALL XYPLOT (0,TE1,PENDWN)\r
+133    CALL XYPLOT (.5,0,-PENUP)       @ RESET CORRECT LOWER LEFT CORNER\r
+C\r
+       CALL FACTOR (1.,1.)             @ RESET ORIGIN TO XOFSET,YOFSET\r
+       CALL SYMBOL (-XOFSET,YLEN*.1,YN,'P',0,1)\r
+       IF (GENAM(BAND).NE.2H  )\r
+     *   CALL GREEK(-XOFSET+YN*.3,YLEN*0.1-.3,YN*0.75,GENAM(BAND),0)\r
+C\r
+C      PLOT THE FREQUENCY RANGE OF THIS BAND\r
+C\r
+       CALL NUMBER (XLEN+YN*.6,0,YN*.5,FREQU(BAND,1),90.,1)\r
+       CALL SYMBOL (999.,999.,YN*.5,'-',90.,1)\r
+       CALL NUMBER (999.,999.,YN*.5,FREQU(BAND,2),90.,1)\r
+C\r
+       CALL XYPLOT (0.,-TEMSET,-PENUP)\r
+120    CONTINUE\r
+\fC\r
+       CALL PLALRL                     @ AND NOW WE PLOT THE TIME AXIS\r
+       RETURN\r
+C\r
+140    CONTINUE                        @ USER ABORTS THE PLOT\r
+       CALL FACTOR (1.)\r
+       CALL XYPLOT (38.,25.,PENUP)     @ DRIVE PEN INTO THE UPPER RIGHT CORNER\r
+       CALL EXPLT\r
+       RETURN\r
+C\r
+20     CONTINUE                        @ FILE 5 IS EMPTY\r
+       COMPUT=0\r
+       SAMCNT=0\r
+       WRITE (TTO,1)                   @ NO DATA TO PLOT\r
+       RETURN\r
+C\r
+1      FORMAT (' KEINE DATEN IN DER DATEI 5')\r
+2      FORMAT (' DER PLOT SOLL VON',I5,' BIS',I5,' SEK. DAMIT UEBER ',\r
+     *  'DAS DATENENDE',I5,' SEK. HINAUSGEHEN.')\r
+3      FORMAT (1X,14A6)\r
+       END\r
+\1a\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0
\ No newline at end of file