A large commit.
[pdp8.git] / sw / rescue / lab8e_goettingen / disk2_11 / rkb / paroff / haesac.ft
CommitLineData
81e70d48
PH
1C -+-+-+-+-+ \ e H A E S A C . F T \ e -+-+-+-+-+\r
2C\r
3C * UP 20-MAY-83 INSERT DOCUMENTATION\r
4C * UP 13-JUL-83 IMPROVED SEARCH ALGORITHM\r
5C\r
6C SCAN THE EOG SPECTRUM TO FETCH THE SACCADES\r
7C THE EOG SPECTRUM IS STORED ON CHANNEL 0!\r
8C\r
9 SUBROUTINE SACCAD (STARTW,ENDW,THRL,THRU,SACBEG,SACEND,\r
10 * SACAMP,NXTSAC,ERR)\r
11C\r
12C STARTW ANFANG DES ZU DURCHSUCHENDEN FENSTERS\r
13C ENDW ENDE DES FENSTERS\r
14C THRL UNTERE SCHWELLE FUER FIR/DFIR FUNKTION\r
15C THRU OBERE SCHWELLE\r
16C SACBEG ZEITPUNKT DES BEGINS EINER RASCHEN PHASE\r
17C SACCEND ZEITPUNKT DES ENDES EINER SACCADE\r
18C SACAMP AMPLITUDE DER RASCHEN PHASE\r
19C NXTSAC VON HIER AB WIRD NACH DER NAECHSTEN R.P. GESUCHT\r
20C ERR FEHLER RUECKSPRUNG CODE\r
21C 1 KEINE SACCADE MEHR GEFUNDEN\r
22C 2 KEIN ENDE GEFUNDEN\r
23C 3 KEIN ENDE GEFUNDEN\r
24C\r
25C INPUT PARAMETERS ARE\r
26C\r
27 INTEGER STARTW,ENDW\r
28 REAL THRL,THRU\r
29C\r
30C OUTPUT PARAMETERS ARE\r
31C\r
32 REAL SACAMP\r
33 INTEGER NXTSAC,ERR,SACBEG,SACEND\r
34C\r
35C\r
36 INCLUDE HAEBUF.FI\r
37 INCLUDE HAECEO.FI\r
38 INCLUDE HABRK.FI\r
39C\r
40\fC\r
41C FOLGENDE SUCHSCHRITTE\r
42C1. DO 20 I=STARTW,ENDW\r
43C BESTIMME SACCADEN ANFANGSZEITPUNKT UND DIE ART DER RASCHEN PHASE\r
44C IF DFIR(I) THEN TIME1:=I ; \ BEGINN DER RASCHEN PHASE \\r
45C \ RICHTUNG DER RASCHEN PHASE := IF FIR(I) < 0 THEN AUF PHASE ELSE AB PHASE \\r
46C ELSE DFIR(I) NICHT GEFUNDEN FEHLER #1 FI \r
47C\r
48C2. DO 33 I=TIME1,ENDW\r
49C SOLANGE DFIR(I) BESTIMME MAXIMUM VON FIR(I) : AMP1:=MAX(ABS(FIR)) ;\r
50C TIME2 := I AN DER STELLE AMP1 \ KORREKTUR DER ANFANGSZEIT SACBEG: \\r
51C \ AN DER STELLE DES EXTREMWERTES VOM EOG NEHME DEN ANFANG DER R.P. AN \\r
52C IF I=ENDW FEHLER # 2 \ DA KEIN SACCADENENDE GEFUNDEN\\r
53C ELSE TIME3:= I FI\r
54C\r
55C3. DO 50 I=TIME3,TIME3+10\r
56C \ SUCHE IN DEN NAECHSTEN 10 MESSWERTEN DANN DFIR(I) \\r
57C IF I=TIME3+10 THEN TIME4:=1 ; FEHLER # 3 ELSE\r
58C TIME4:=I FI\r
59C\r
60C4. DO 60 I=TIME4,ENDW\r
61C \ SUCHE STELLE DES EXTREMWERTES VOM EOG UND NEHME DORT ENDE DER R.P. AN \\r
62C TIME5:=SACEND:=I \ AND DER STELLE DES MAXIMUMS \\r
63C\r
64C5. AUSGABE AUF DRUCKER:\r
65C SACBEG, SACEND-SACBEG, -Y(SACBEG)+Y(SACEND),CH2(SACBEG)\r
66C\r
67\fC\r
68 REAL ATHRL,ATHRU,SAC,SAC1,SAC2,SAC3,SAC4\r
69 INTEGER I,TIME(5)\r
70 * ,HOME,EOGCHN @ ASSIGNED GOTO, CHANNEL NUMBER FOR THE EOG SPECTRUM \r
71C\r
72C STATEMENT FUNCTIONS ARE:\r
73C\r
74 BETW(AP0,BP0,CP0)=AP0.LE.BP0.AND.BP0.LT.CP0\r
75 LOGICAL BETW\r
76 FIR(IP0)=-XYSAM(IP0-4,EOGCHN)-XYSAM(IP0-3,EOGCHN)+\r
77 * XYSAM(IP0-1,EOGCHN)+2*XYSAM(IP0,EOGCHN)+XYSAM(IP0+1,EOGCHN)-\r
78 * XYSAM(IP0+3,EOGCHN)-XYSAM(IP0+4,EOGCHN) @ SAMCNT FINITE IMPULSE RESPONSE FILTER\r
79C\r
80 DFIR(IP2)=.NOT.BETW(ATHRL,FIR(IP2),ATHRU)\r
81 LOGICAL DFIR\r
82C\r
83 DATA EOGCHN /0/ @ CHANNEL # FOR THE EOG\r
84C\r
85 ATHRL=THRL @ COMPILER ERROR IN STATEMENT FUNCTION\r
86 ATHRU=THRU\r
87 ERR=0\r
88 SACAMP=0\r
89C\r
90 DO 20 I=STARTW,ENDW\r
91 IF(DFIR(I)) GOTO 30\r
9220 CONTINUE\r
93 ERR=1 @ NO SACCADE FOUND\r
94 NXTSAC=ENDW\r
95 SACBEG=ENDW\r
96 SACEND=ENDW\r
97 RETURN\r
98C\r
9930 TIME(1)=I @ TIME1 COMPUTED\r
100 AMP1=-1\r
101 TIME(2)=0\r
102 DO 33 I=TIME(1),ENDW\r
103 IF (.NOT.DFIR(I)) GOTO 35\r
104 TE1=ABS(XYSAM(I,EOGCHN)) @ SEARCH FOR MIN/MAX OF EOG\r
105 TIME(2)=NCOND(TE1.GE.AMP1,I,TIME(2)) @ AND THIS POINTS TO THE BEGINNING OF THE SACCADE\r
10633 AMP1=AMAX1(AMP1,TE1)\r
10735 CONTINUE @ TIME 2 COMPUTED\r
108 TIME(3)=I @ TIME 3 COMPUTED\r
109C\r
110 DO 50 I=TIME(3),TIME(3)+10\r
111 IF (DFIR(I)) GOTO 53\r
11250 CONTINUE\r
113 ERR=3\r
114 SACBEG=STARTW\r
115 SACEND=TIME(3)+10\r
116 NXTSAC=TIME(1)+15\r
117 RETURN\r
11853 TIME(4)=I @ TIME 4 COMPUTED\r
119C\r
120 AMP2=-1\r
121 TIME(5)=0\r
122 DO 60 I=TIME(4),ENDW\r
123 IF (.NOT.DFIR(I)) GOTO 65\r
124 TE1=ABS(XYSAM(I,EOGCHN)) @ SEARCH FOR MIN/MAX OF EOG\r
125 TIME(5)=NCOND(TE1.GE.AMP2,I,TIME(5)) @ AND THIS POINTS TO THE END OF THE SACCADE\r
12660 AMP2=AMAX1(AMP2,TE1)\r
12765 CONTINUE @ TIME 5 COMPUTED\r
128C\r
129C\r
130 NXTSAC=I\r
131 SACBEG=TIME(2)\r
132 SACEND=TIME(5)\r
133 SAC=XYSAM(SACEND,EOGCHN)\r
134 SAC3=SAC\r
135 ASSIGN 70 TO HOME\r
136 GOTO 100\r
13770 SAC1=SAC\r
138 SAC=XYSAM(SACBEG,EOGCHN)\r
139 SAC4=SAC\r
140 ASSIGN 71 TO HOME\r
141 GOTO 100\r
14271 SAC2=SAC\r
143 SACAMP=SAC1-SAC2\r
144CX WRITE (3,4711) SAC1,SAC2,SAC3,SAC4\r
1454711 FORMAT (6H --- ,1P,4E11.3)\r
146 RETURN\r
147C\r
148C INTERNAL SUBROUTINE\r
149C\r
150100 DO 110 I=1,8 @ CALIBRATE FOR NEGATIVE ANGLE\r
151 IF (SAC.GE.I*5.*EICH(1,I)+CALIBR) GOTO 120\r
152110 CONTINUE\r
153 I=8\r
154120 IF (I.EQ.1) GOTO 130 @ BETWEEN 0 AND +40 DEG, CONTINUE SEARCH\r
155 SAC=(SAC-CALIBR)/ABS(EICH(1,I))\r
156 GOTO HOME\r
157130 I=I+1\r
158 IF (SAC.LE.CALIBR) GOTO 120 @ 0 DEGREES\r
159 DO 140 I=2,8\r
160 IF (SAC.LE.I*5.*EICH(2,I)+CALIBR) GOTO 150\r
161140 CONTINUE\r
162 I=8\r
163150 SAC=(SAC-CALIBR)/EICH(2,I)\r
164 GOTO HOME\r
165C\r
166 END\r
167\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