C -+-+-+-+-+  H A E S A C . F T  -+-+-+-+-+ C C * UP 20-MAY-83 INSERT DOCUMENTATION C * UP 13-JUL-83 IMPROVED SEARCH ALGORITHM C C SCAN THE EOG SPECTRUM TO FETCH THE SACCADES C THE EOG SPECTRUM IS STORED ON CHANNEL 0! C SUBROUTINE SACCAD (STARTW,ENDW,THRL,THRU,SACBEG,SACEND, * SACAMP,NXTSAC,ERR) C C STARTW ANFANG DES ZU DURCHSUCHENDEN FENSTERS C ENDW ENDE DES FENSTERS C THRL UNTERE SCHWELLE FUER FIR/DFIR FUNKTION C THRU OBERE SCHWELLE C SACBEG ZEITPUNKT DES BEGINS EINER RASCHEN PHASE C SACCEND ZEITPUNKT DES ENDES EINER SACCADE C SACAMP AMPLITUDE DER RASCHEN PHASE C NXTSAC VON HIER AB WIRD NACH DER NAECHSTEN R.P. GESUCHT C ERR FEHLER RUECKSPRUNG CODE C 1 KEINE SACCADE MEHR GEFUNDEN C 2 KEIN ENDE GEFUNDEN C 3 KEIN ENDE GEFUNDEN C C INPUT PARAMETERS ARE C INTEGER STARTW,ENDW REAL THRL,THRU C C OUTPUT PARAMETERS ARE C REAL SACAMP INTEGER NXTSAC,ERR,SACBEG,SACEND C C INCLUDE HAEBUF.FI INCLUDE HAECEO.FI INCLUDE HABRK.FI C C C FOLGENDE SUCHSCHRITTE C1. DO 20 I=STARTW,ENDW C BESTIMME SACCADEN ANFANGSZEITPUNKT UND DIE ART DER RASCHEN PHASE C IF DFIR(I) THEN TIME1:=I ; \ BEGINN DER RASCHEN PHASE \ C \ RICHTUNG DER RASCHEN PHASE := IF FIR(I) < 0 THEN AUF PHASE ELSE AB PHASE \ C ELSE DFIR(I) NICHT GEFUNDEN FEHLER #1 FI C C2. DO 33 I=TIME1,ENDW C SOLANGE DFIR(I) BESTIMME MAXIMUM VON FIR(I) : AMP1:=MAX(ABS(FIR)) ; C TIME2 := I AN DER STELLE AMP1 \ KORREKTUR DER ANFANGSZEIT SACBEG: \ C \ AN DER STELLE DES EXTREMWERTES VOM EOG NEHME DEN ANFANG DER R.P. AN \ C IF I=ENDW FEHLER # 2 \ DA KEIN SACCADENENDE GEFUNDEN\ C ELSE TIME3:= I FI C C3. DO 50 I=TIME3,TIME3+10 C \ SUCHE IN DEN NAECHSTEN 10 MESSWERTEN DANN DFIR(I) \ C IF I=TIME3+10 THEN TIME4:=1 ; FEHLER # 3 ELSE C TIME4:=I FI C C4. DO 60 I=TIME4,ENDW C \ SUCHE STELLE DES EXTREMWERTES VOM EOG UND NEHME DORT ENDE DER R.P. AN \ C TIME5:=SACEND:=I \ AND DER STELLE DES MAXIMUMS \ C C5. AUSGABE AUF DRUCKER: C SACBEG, SACEND-SACBEG, -Y(SACBEG)+Y(SACEND),CH2(SACBEG) C C REAL ATHRL,ATHRU,SAC,SAC1,SAC2,SAC3,SAC4 INTEGER I,TIME(5) * ,HOME,EOGCHN @ ASSIGNED GOTO, CHANNEL NUMBER FOR THE EOG SPECTRUM C C STATEMENT FUNCTIONS ARE: C BETW(AP0,BP0,CP0)=AP0.LE.BP0.AND.BP0.LT.CP0 LOGICAL BETW FIR(IP0)=-XYSAM(IP0-4,EOGCHN)-XYSAM(IP0-3,EOGCHN)+ * XYSAM(IP0-1,EOGCHN)+2*XYSAM(IP0,EOGCHN)+XYSAM(IP0+1,EOGCHN)- * XYSAM(IP0+3,EOGCHN)-XYSAM(IP0+4,EOGCHN) @ SAMCNT FINITE IMPULSE RESPONSE FILTER C DFIR(IP2)=.NOT.BETW(ATHRL,FIR(IP2),ATHRU) LOGICAL DFIR C DATA EOGCHN /0/ @ CHANNEL # FOR THE EOG C ATHRL=THRL @ COMPILER ERROR IN STATEMENT FUNCTION ATHRU=THRU ERR=0 SACAMP=0 C DO 20 I=STARTW,ENDW IF(DFIR(I)) GOTO 30 20 CONTINUE ERR=1 @ NO SACCADE FOUND NXTSAC=ENDW SACBEG=ENDW SACEND=ENDW RETURN C 30 TIME(1)=I @ TIME1 COMPUTED AMP1=-1 TIME(2)=0 DO 33 I=TIME(1),ENDW IF (.NOT.DFIR(I)) GOTO 35 TE1=ABS(XYSAM(I,EOGCHN)) @ SEARCH FOR MIN/MAX OF EOG TIME(2)=NCOND(TE1.GE.AMP1,I,TIME(2)) @ AND THIS POINTS TO THE BEGINNING OF THE SACCADE 33 AMP1=AMAX1(AMP1,TE1) 35 CONTINUE @ TIME 2 COMPUTED TIME(3)=I @ TIME 3 COMPUTED C DO 50 I=TIME(3),TIME(3)+10 IF (DFIR(I)) GOTO 53 50 CONTINUE ERR=3 SACBEG=STARTW SACEND=TIME(3)+10 NXTSAC=TIME(1)+15 RETURN 53 TIME(4)=I @ TIME 4 COMPUTED C AMP2=-1 TIME(5)=0 DO 60 I=TIME(4),ENDW IF (.NOT.DFIR(I)) GOTO 65 TE1=ABS(XYSAM(I,EOGCHN)) @ SEARCH FOR MIN/MAX OF EOG TIME(5)=NCOND(TE1.GE.AMP2,I,TIME(5)) @ AND THIS POINTS TO THE END OF THE SACCADE 60 AMP2=AMAX1(AMP2,TE1) 65 CONTINUE @ TIME 5 COMPUTED C C NXTSAC=I SACBEG=TIME(2) SACEND=TIME(5) SAC=XYSAM(SACEND,EOGCHN) SAC3=SAC ASSIGN 70 TO HOME GOTO 100 70 SAC1=SAC SAC=XYSAM(SACBEG,EOGCHN) SAC4=SAC ASSIGN 71 TO HOME GOTO 100 71 SAC2=SAC SACAMP=SAC1-SAC2 CX WRITE (3,4711) SAC1,SAC2,SAC3,SAC4 4711 FORMAT (6H --- ,1P,4E11.3) RETURN C C INTERNAL SUBROUTINE C 100 DO 110 I=1,8 @ CALIBRATE FOR NEGATIVE ANGLE IF (SAC.GE.I*5.*EICH(1,I)+CALIBR) GOTO 120 110 CONTINUE I=8 120 IF (I.EQ.1) GOTO 130 @ BETWEEN 0 AND +40 DEG, CONTINUE SEARCH SAC=(SAC-CALIBR)/ABS(EICH(1,I)) GOTO HOME 130 I=I+1 IF (SAC.LE.CALIBR) GOTO 120 @ 0 DEGREES DO 140 I=2,8 IF (SAC.LE.I*5.*EICH(2,I)+CALIBR) GOTO 150 140 CONTINUE I=8 150 SAC=(SAC-CALIBR)/EICH(2,I) GOTO HOME C END