A large commit.
[pdp8.git] / sw / rescue / lab8e_goettingen / disk2_11 / rkb / paroff / haeysc.ft
CommitLineData
81e70d48
PH
1C -+-+-+-+-+ \ e H A E Y S C . F T \ e -+-+-+-+-+\r
2C\r
3C FFT OF THE SCAN DATA STORED ON UNIT 5 (INTENSITIES OF POWER SPECTRUM)\r
4C\r
5 SUBROUTINE YSCAN\r
6C\r
7 INCLUDE HAEBUF.FI\r
8 INCLUDE HAEGSA.FI\r
9 INCLUDE HAEPTI.FI\r
10 INCLUDE HAEDEF.FI\r
11 INCLUDE HAEI85.FI\r
12 INCLUDE HAETTY.FI\r
13 INCLUDE HABRK.FI\r
14C\r
15 INTEGER TOASCI,NCOND,LOG2\r
16 REAL INTENS,IMAXNT,COND\r
17 EXTERNAL TOASCI,INTENS,IMAXNT,NCOND,LOG2,COND\r
18\fC\r
19 INTEGER I,J,K,PNT,BAND, @ DO LOOP COUNTERS & LIMITS\r
20 * POSIT,POS1, @ START OF THE ACTUAL WINDOW (SAMRAT*SPAN)*N\r
21 * I1,I2, @ INDEX TO COMPLEX SPECTRUM\r
22 * LASTIM\r
23 INTEGER HH,MM,SS,HHH,MMM,SSS @ START OF FFT, END OF FFT IN MINUTES AND SECONDS\r
24 REAL X(2050) @ BUFFER FOR THE FFT\r
25 LOGICAL L1, @ TEMPORARY STORAGE\r
26 * F1 @ SAMPLE BUFFER EMPTY FLAG\r
27C\r
28C STATEMENT FUNCTIONS ARE:\r
29C\r
30 INTEGER DATTIM @ STARTING TIME OF THIS POWER SPECTRUM DATA RECORD WITHIN THE SAMPLE\r
31 DATTIM(IP1)=INTE(3,1,MOD(IP1,4)+1)\r
32 LOGICAL MUSTRD @ MUSTRD DECIDES IF WE HAVE TO READ THE NEXT INTE RECORD\r
33 MUSTRD(IP1)=MOD(IP1,4).EQ.0\r
34C\r
35C OPEN THE INPUT DATA FILE UNIT 5\r
36C READ THE FIRST BLOCK OF THE FILE HEADER AND\r
37C THE DATA HEADER I.E. COMMON CEGSA THE SECOND BLOCK OF UNIT 5\r
38C\r
39 IF (REC5.LT.1) DEFINE FILE5(MAXBL5,85,U,REC5)\r
40 REC5=1\r
41 F1=SAMCNT.EQ.0 .OR. .NOT. COMP @ HEADER OF FILE 5 DOES NOT MATCH THE HEADER OF THE ACTUAL SAMPLE BUFFER\r
42 READ (5'REC5) (RCRD0(I),I=1,85) @ READ THE FILE HEADER\r
43 IF (F1) SAMCNT=0 @ CLEAR THE ACTUAL SAMPLE BUFFER\r
44 IF (F1) COMP=.FALSE. @ AND THE COMPUTATIONS FLAG TOO\r
45 IF (REDVAL.NE.6H2DPWLD) GOTO 20 @ RECORD IS EMPTY\r
46 REDVAL=0 @ FOR SAVETY ONLY\r
47 WRITE (TTO,3) (LABEL(I),I=1,LABCNT) @ TYPE OUT THE LABEL OF THIS DATA SET\r
48 READ (5'REC5) LCEGSA(1),(LCEGSA(I),I=2,LCEGSA(1)) @ READ THE DATA HEADER BLOCK ( COMMON CEGESA)\r
49 SETNUM=SETNU5 @ INSERT THE NUMBER OF THE ACTUAL DATA SET\r
50 CHANEL=CHANE5 @ AND THE NUMBER OF THE CHANNEL INVESTIGATED TOO\r
51C\r
52C\r
53C DO THE FFT\r
54C\r
55 IF (REC5.LT.1) DEFINE FILE 5(MAXBL5,85,U,REC5) @ OPEN SCRATCH FILE FOR INTERMEDIATE FFT RESULTS\r
56C\r
57 REC5=2\r
58 READ (5'REC5) (LCEGSA(I),I=1,LCEGSA(1))\r
59C READ BEGIN AND END OF THE FFT\r
60C\r
61 BEGIN=NCOND(PZBEG,PZBEG,BEGIN)\r
62 ENDS=MIN0(NCOND(PZEND,PZEND,9999),BEGFFT+4*SPAN)\r
63 IF (OPTION.NE.12) CALL ASKHIM(2) @ ASK FOR BEGIN AND ENDS\r
64 PZBEG=BEGIN\r
65 PZEND=ENDS\r
66 WRITE (TTO,4)\r
67 READ (TTI,5) BAND\r
68C\r
69C\r
70C\r
71 N=0\r
72 DO 40 I=0,DATCNT-1 @ LOOP TO FETCH EACH VALUE FROM INPUT FILE\r
73 REC5=STSCAN+I/4 @ COMPUTE THE NUMBER OF THE NEXT RECORD TO READ\r
74 IF (MUSTRD(I)) READ(5'REC5) INTE85 @ READ THE NEXT DATA SET\r
75 IF (DATTIM(I).LT.BEGIN) GOTO 40\r
76 IF (DATTIM(I).GT.ENDS) GOTO 45\r
77 LASTIM=NCOND(LOG2(N).GT.0,DATTIM(I),LASTIM) @ WE NEED A TWO'S POWER NUMBER OF POINTS FOR THE FFT\r
78 N=N+1 @ INCREMENT POINTER IN ORDER\r
79 X(N)=INTE(1,BAND,MOD(I,4)+1) @ TO INSERT THE NEXT POINT\r
8040 CONTINUE\r
8145 CONTINUE @ WE SCANNED ALL POINTS, SO PREP FOR THE FFT\r
82 INCR=2**IABS(LOG2(N)) @ WE NEED A TWO'S POWER NUMBER OF POINTS FOR THE FFT \r
83 XMAXI=0 @ FETCH THE MAXIMUM OF THE SPECTRUM\r
84 DO 46 I=1,INCR\r
8546 XMAXI=AMAX1(X(I),XMAXI) @ AND THEN WE FETCH THE MAXIMUM OF THE SPECTRUM\r
86 DO 48 I=1,INCR\r
8748 X(I)=X(I)/XMAXI @ NORM TO THE MAXIMUM TO PREVENT FLOATING OVERFLOW\r
88 MM=BEGIN/60\r
89 HH=TOASCI(MM/60)\r
90 MM=TOASCI(MOD(MM,60))\r
91 SS=TOASCI(MOD(BEGIN,60))\r
92 MMM=LASTIM/60\r
93 HHH=TOASCI(MMM/60)\r
94 MMM=TOASCI(MOD(MMM,60))\r
95 SSS=TOASCI(MOD(LASTIM,60))\r
96 ENDS=LASTIM @ INSERT THE NEW END OF THE COMPUTATION\r
97 WRITE (TTO,2) HH,MM,SS,HHH,MMM,SSS,LASTIM,XMAXI\r
98 EXPON=LOG2(INCR)\r
99 INCR2=INCR/2\r
100 CALL FFTC(X,INCR2,EXPON-1,1.) @ BLACK MAGIC BOXES\r
101 CALL FFTR(X,INCR2,1.,1.)\r
102 CALL HANING (X,INCR2) @ SMOOTH REAL PART\r
103 CALL HANING (X(INCR2),INCR2) @ SMOOTH IMAG PART OF FFT\r
104 CALL FTPOWR(X,INCR) @ COMPUTE THE POWER SPECTRUM AND THE MINIMUM OF THE SPECTRUM\r
105 X(1)=0 @ CLEAR THE FIRST AND SECOND CHANNEL TO\r
106 X(2)=0 @ STRIP OFF THE DC OFFSET\r
107 XMAXI=0\r
108 DO 50 I=1,INCR2 @ COMPUTE THE NEW MAXIMUM OF THE POWER SPECTRUM\r
10950 XMAXI=AMAX1(XMAXI,X(I))\r
110C\r
111 FILTER=0 @ NEW DATA, NOTHING FILTERED\r
112 CONTNS=BAND @ REC3 TO 16 CONTAINS A SCAN POWER SPECTRUM\r
113 SPAN=1\r
114 REC5=2\r
115 WRITE (5'REC5) (LCEGSA(I),I=1,LCEGSA(1)) @ WRITE THE DATA HEADER BLOCK ( COMMON CEGESA)\r
116 DO 55 J=1,INCR2+84,85 @ SAVE THE LAST POWER SPECTRUM COMPUTED INTO REC 3-27\r
11755 WRITE (5'REC5) (X(I),I=J,MIN0(1024,J+84)) @ 13 RECORDS TO WRITE\r
118 COMP=.TRUE. @ SOME COMPUTATIONS DONE\r
119 RETURN\r
120C\r
121C\r
12220 CONTINUE @ FILE 5 IS EMPTY\r
123 COMPUT=0\r
124 SAMCNT=0\r
125 WRITE (TTO,1) @ NO DATA TO PLOT\r
126 RETURN\r
127C\r
1281 FORMAT (' KEINE DATEN IN DER DATEI 5')\r
1292 FORMAT (' FFT VON ',2(A2,1H:),A2,' BIS ',2(A2,1H:),A2,I5,\r
130 * 1P,E12.2)\r
1313 FORMAT (1X,14A6)\r
1324 FORMAT (' NUMMER DES BANDES? ',$)\r
1335 FORMAT (I1)\r
134 END\r
135\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\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