Commit | Line | Data |
---|---|---|
81e70d48 PH |
1 | C -+-+-+-+-+ \ e H A E S A C . F T \ e -+-+-+-+-+\r |
2 | C\r | |
3 | C * UP 20-MAY-83 INSERT DOCUMENTATION\r | |
4 | C * UP 13-JUL-83 IMPROVED SEARCH ALGORITHM\r | |
5 | C\r | |
6 | C SCAN THE EOG SPECTRUM TO FETCH THE SACCADES\r | |
7 | C THE EOG SPECTRUM IS STORED ON CHANNEL 0!\r | |
8 | C\r | |
9 | SUBROUTINE SACCAD (STARTW,ENDW,THRL,THRU,SACBEG,SACEND,\r | |
10 | * SACAMP,NXTSAC,ERR)\r | |
11 | C\r | |
12 | C STARTW ANFANG DES ZU DURCHSUCHENDEN FENSTERS\r | |
13 | C ENDW ENDE DES FENSTERS\r | |
14 | C THRL UNTERE SCHWELLE FUER FIR/DFIR FUNKTION\r | |
15 | C THRU OBERE SCHWELLE\r | |
16 | C SACBEG ZEITPUNKT DES BEGINS EINER RASCHEN PHASE\r | |
17 | C SACCEND ZEITPUNKT DES ENDES EINER SACCADE\r | |
18 | C SACAMP AMPLITUDE DER RASCHEN PHASE\r | |
19 | C NXTSAC VON HIER AB WIRD NACH DER NAECHSTEN R.P. GESUCHT\r | |
20 | C ERR FEHLER RUECKSPRUNG CODE\r | |
21 | C 1 KEINE SACCADE MEHR GEFUNDEN\r | |
22 | C 2 KEIN ENDE GEFUNDEN\r | |
23 | C 3 KEIN ENDE GEFUNDEN\r | |
24 | C\r | |
25 | C INPUT PARAMETERS ARE\r | |
26 | C\r | |
27 | INTEGER STARTW,ENDW\r | |
28 | REAL THRL,THRU\r | |
29 | C\r | |
30 | C OUTPUT PARAMETERS ARE\r | |
31 | C\r | |
32 | REAL SACAMP\r | |
33 | INTEGER NXTSAC,ERR,SACBEG,SACEND\r | |
34 | C\r | |
35 | C\r | |
36 | INCLUDE HAEBUF.FI\r | |
37 | INCLUDE HAECEO.FI\r | |
38 | INCLUDE HABRK.FI\r | |
39 | C\r | |
40 | \fC\r | |
41 | C FOLGENDE SUCHSCHRITTE\r | |
42 | C1. DO 20 I=STARTW,ENDW\r | |
43 | C BESTIMME SACCADEN ANFANGSZEITPUNKT UND DIE ART DER RASCHEN PHASE\r | |
44 | C IF DFIR(I) THEN TIME1:=I ; \ BEGINN DER RASCHEN PHASE \\r | |
45 | C \ RICHTUNG DER RASCHEN PHASE := IF FIR(I) < 0 THEN AUF PHASE ELSE AB PHASE \\r | |
46 | C ELSE DFIR(I) NICHT GEFUNDEN FEHLER #1 FI \r | |
47 | C\r | |
48 | C2. DO 33 I=TIME1,ENDW\r | |
49 | C SOLANGE DFIR(I) BESTIMME MAXIMUM VON FIR(I) : AMP1:=MAX(ABS(FIR)) ;\r | |
50 | C TIME2 := I AN DER STELLE AMP1 \ KORREKTUR DER ANFANGSZEIT SACBEG: \\r | |
51 | C \ AN DER STELLE DES EXTREMWERTES VOM EOG NEHME DEN ANFANG DER R.P. AN \\r | |
52 | C IF I=ENDW FEHLER # 2 \ DA KEIN SACCADENENDE GEFUNDEN\\r | |
53 | C ELSE TIME3:= I FI\r | |
54 | C\r | |
55 | C3. DO 50 I=TIME3,TIME3+10\r | |
56 | C \ SUCHE IN DEN NAECHSTEN 10 MESSWERTEN DANN DFIR(I) \\r | |
57 | C IF I=TIME3+10 THEN TIME4:=1 ; FEHLER # 3 ELSE\r | |
58 | C TIME4:=I FI\r | |
59 | C\r | |
60 | C4. DO 60 I=TIME4,ENDW\r | |
61 | C \ SUCHE STELLE DES EXTREMWERTES VOM EOG UND NEHME DORT ENDE DER R.P. AN \\r | |
62 | C TIME5:=SACEND:=I \ AND DER STELLE DES MAXIMUMS \\r | |
63 | C\r | |
64 | C5. AUSGABE AUF DRUCKER:\r | |
65 | C SACBEG, SACEND-SACBEG, -Y(SACBEG)+Y(SACEND),CH2(SACBEG)\r | |
66 | C\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 | |
71 | C\r | |
72 | C STATEMENT FUNCTIONS ARE:\r | |
73 | C\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 | |
79 | C\r | |
80 | DFIR(IP2)=.NOT.BETW(ATHRL,FIR(IP2),ATHRU)\r | |
81 | LOGICAL DFIR\r | |
82 | C\r | |
83 | DATA EOGCHN /0/ @ CHANNEL # FOR THE EOG\r | |
84 | C\r | |
85 | ATHRL=THRL @ COMPILER ERROR IN STATEMENT FUNCTION\r | |
86 | ATHRU=THRU\r | |
87 | ERR=0\r | |
88 | SACAMP=0\r | |
89 | C\r | |
90 | DO 20 I=STARTW,ENDW\r | |
91 | IF(DFIR(I)) GOTO 30\r | |
92 | 20 CONTINUE\r | |
93 | ERR=1 @ NO SACCADE FOUND\r | |
94 | NXTSAC=ENDW\r | |
95 | SACBEG=ENDW\r | |
96 | SACEND=ENDW\r | |
97 | RETURN\r | |
98 | C\r | |
99 | 30 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 | |
106 | 33 AMP1=AMAX1(AMP1,TE1)\r | |
107 | 35 CONTINUE @ TIME 2 COMPUTED\r | |
108 | TIME(3)=I @ TIME 3 COMPUTED\r | |
109 | C\r | |
110 | DO 50 I=TIME(3),TIME(3)+10\r | |
111 | IF (DFIR(I)) GOTO 53\r | |
112 | 50 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 | |
118 | 53 TIME(4)=I @ TIME 4 COMPUTED\r | |
119 | C\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 | |
126 | 60 AMP2=AMAX1(AMP2,TE1)\r | |
127 | 65 CONTINUE @ TIME 5 COMPUTED\r | |
128 | C\r | |
129 | C\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 | |
137 | 70 SAC1=SAC\r | |
138 | SAC=XYSAM(SACBEG,EOGCHN)\r | |
139 | SAC4=SAC\r | |
140 | ASSIGN 71 TO HOME\r | |
141 | GOTO 100\r | |
142 | 71 SAC2=SAC\r | |
143 | SACAMP=SAC1-SAC2\r | |
144 | CX WRITE (3,4711) SAC1,SAC2,SAC3,SAC4\r | |
145 | 4711 FORMAT (6H --- ,1P,4E11.3)\r | |
146 | RETURN\r | |
147 | C\r | |
148 | C INTERNAL SUBROUTINE\r | |
149 | C\r | |
150 | 100 DO 110 I=1,8 @ CALIBRATE FOR NEGATIVE ANGLE\r | |
151 | IF (SAC.GE.I*5.*EICH(1,I)+CALIBR) GOTO 120\r | |
152 | 110 CONTINUE\r | |
153 | I=8\r | |
154 | 120 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 | |
157 | 130 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 | |
161 | 140 CONTINUE\r | |
162 | I=8\r | |
163 | 150 SAC=(SAC-CALIBR)/EICH(2,I)\r | |
164 | GOTO HOME\r | |
165 | C\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 |