C -+-+-+-+-+  H A E E O G . F T  -+-+-+-+-+ C C EOG ANALYSIS C SUBROUTINE EOGSCN INCLUDE HAEBUF.FI INCLUDE HAEPTI.FI INCLUDE HAEGSA.FI INCLUDE HAECEO.FI INCLUDE HAETTY.FI INCLUDE HABRK.FI C EXTERNAL TOASCI,REASAC INTEGER TOASCI REAL REASAC C C INTEGER POS1,I,N, * SACBEG,SACEND, @ BEGINNING & ENDING OF SACCADE * NXTSAC, @ HERE WE START FOR THE NEXT SEARCH * S0,S1, @ WINDOW TO SCAN FOR SACCADE * ERR, @ SACCAD ERROR NUMBER * SPEAKR(73),LSTPOS,VLSTPO, @ SPEAKER POSITIONS HISTOGRAM * BHH,BMM,BSS,EHH,EMM,ESS, @ TO EDIT OUTPUT LINE * SACSTK(2,7,73),I1,I2,I3,Q1,Q2,Q3(8),Q4(8) @ STATISTIK STACK REAL THRL,THRU, @ LOWER AND UPPER THRESHOLD FOR SACCAD SUBROUTINE * SACAMP, @ AMPLITUDE OF THE SACCADE (INSERTED BY SACCAD) * TE1,TE2,TE3,TE4, @ TEMP STORAGE FOR OUTPUT EDITING * AMPL,AMPU @ TO CALIBRATE THE SACCADE AMPLITUDE C C STATEMENT FUNCTIONS ARE C SPKPOS(IP0)=INT(XYSAM(IP0,SPKCN)*SPKFAC+SPKOFS+.5) INTEGER SPKPOS SPKPNT(IP1)=MIN0(MAX0((SPKPOS(IP1))/5+1,1),73) INTEGER SPKPNT EOFLOP(IP0)=IP0-S0.LT.SAMRAT @ END OF LOOP INDICATOR ( 1 SEC STILL REMAINS) LOGICAL EOFLOP MODE(IP0)=XYSAM(IP0,MODCN) INTEGER MODE C IF (SAMCNT.EQ.0) RETURN @ NO SAMPLE IN BUFFER IF (BREAK(11)) RETURN @ USER GETS RID OF PROGRAM IF (OPTION.NE.12) CALL ASKHIM(2) @ EO* DOES NOT ASK FOR BEGIN, SPAN IF (BREAK(11)) RETURN @ BLAH BLAH BLAH C C ASK FOR THRESHOLD C THRL=40. @ DEFAULT THRU=40. IF (OPTION.NE.11) GOTO 30 WRITE (TTO,1) READ (TTI,2) THRL,THRU @ NO SIGN PLEASE! IF (BREAK(11)) RETURN @ USER GETS .... IF (THRL.GE.0) GOTO 30 @ NO SIGN IS THE CORRECT ONE WRITE (TTO,5) @ TYPE A MSG, NO SIGN PLEASE THRL=-THRL @ AND BEHAVE LIKE A GENTLEMAN 30 THRL=-THRL @ LOWER LIMIT MUST BE NEGATIVE BSS=TOASCI(MOD(BEGIN,60)) BMM=TOASCI(MOD(BEGIN/60,60)) BHH=TOASCI(BEGIN/3600) ESS=TOASCI(MOD(ENDS,60)) EMM=TOASCI(MOD(ENDS/60,60)) EHH=TOASCI(ENDS/3600) C WRITE (3,3) BHH,BMM,BSS,EHH,EMM,ESS,LABEL WRITE (9,3) BHH,BMM,BSS,EHH,EMM,ESS,LABEL C S0=BEGIN*SAMRAT @ START OF MAJOR LOOP C 100 CONTINUE CALL MOVE (-73*2*7,0,SACSTK) @ CLEAR STATISTIK BUFFER CALL CMODE (S0,S1) @ COMPUTE S1, THE BOUNDER FOR SACCADE SEARCH C C COMPUTE MIN/MAX OF EOG SIGNAL C AMPL=999 AMPU=-AMPL DO 120 I=S0,S1 TE1=XYSAM(I,0) AMPL=AMIN1(AMPL,TE1) AMPU=AMAX1(AMPU,TE1) 120 CONTINUE AMPU=REASAC(AMPU) AMPL=REASAC(AMPL) @ CALIBRATE INTO DEG SCALE I=S0/SAMRAT BSS=TOASCI(MOD(I,60)) BMM=TOASCI(MOD(I/60,60)) BHH=TOASCI(I/3600) I=S1/SAMRAT ESS=TOASCI(MOD(I,60)) EMM=TOASCI(MOD(I/60,60)) EHH=TOASCI(I/3600) TE1=MODE(S0) WRITE (9,6) LABEL,BHH,BMM,BSS,EHH,EMM,ESS, * TE1,AMPL,AMPU WRITE (3,6) LABEL,BHH,BMM,BSS,EHH,EMM,ESS, * TE1,AMPL,AMPU C C COUNT THE NUMBER OF SPEAKER TURNS FROM S0 TO S1 ( I.E. FOR THE SAME MODE SIGNAL ) C CALL MOVE (-73,0,SPEAKR) DO 110 I=S0,S1,2 J=SPKPNT(I) IF (J.EQ.LSTPOS .OR. J.EQ.VLSTPO) GOTO 110 @ PREVENT MULTIPLE COUNTING SPEAKR(J)=SPEAKR(J)+1 VLSTPO=LSTPOS @ SAVE VERY LAST POSITION LSTPOS=J @ SAVE LAST POSITION 110 CONTINUE C POS1=S0 @ HERE WE START THE SEARCH LOOP C C MINOR LOOP TO FETCH THE SACCADE ONE BY ONE C 10 CONTINUE @ LOOP TO FETCH THE NEXT SACCADE CALL SACCAD(POS1,S1,THRL,THRU,SACBEG,SACEND, * SACAMP,NXTSAC,ERR) TE1=SACBEG/FLOAT(SAMRAT) @ BEGINING OF THE SACCADE BSS=TOASCI(MOD(TE1,60)) BMM=TOASCI(MOD(TE1/60,60)) BHH=TOASCI(TE1/3600) TE2=(SACEND-SACBEG)/FLOAT(SAMRAT) @ DURATION TE3=SPKPOS(SACBEG)-180. @ COMPUTE SPEAKER POSITION I=MOD(INT(TE1*10.),10) WRITE (3,4) BHH,BMM,BSS,I,TE2,SACAMP,TE3,ERR C C INSERT DATA INTO STATISTIK BUFFER C IF (ERR.NE.0) GOTO 20 @ ERROR FLAG SET, NO SACCADE FOUND I1=NCOND(SACAMP.LT.0,1,2) @ SACAMP<0 --> 1 ELSE 2 I2=MIN1(ABS(SACAMP/5.)+1.,7.) @ 0-5, -10, -15, -20, -25, -30, >30 I3=SPKPNT(SACBEG) SACSTK(I1,I2,I3)=SACSTK(I1,I2,I3)+1 @ HISTOGRAM C C 20 POS1=NXTSAC @ PREP FOR THE NEXT LOOP IF (S1-NXTSAC.GT.SAMRAT) GOTO 10 @ NO MODE CHANGE, SO CONTINUE MINOR LOOP S0=S1+5 @ MODE CHANGES, REPEAT MAJOR LOOP C C PRINT THE HISTOGRAM C CALL MOVE (-8,0,Q3) CALL MOVE (-8,0,Q4) DO 40 I=1,73,6 J=-180+(I-1)*5 WRITE (9,7) J DO 40 I3=I,MIN0(I+5,73) Q1=0 Q2=0 DO 42 N=1,7 Q1=SACSTK(1,N,I3)+Q1 Q2=SACSTK(2,N,I3)+Q2 Q3(N)=SACSTK(1,N,I3)+Q3(N) 42 Q4(N)=SACSTK(2,N,I3)+Q4(N) Q3(8)=Q1+Q3(8) Q4(8)=Q2+Q4(8) 40 WRITE (9,8) SPEAKR(I3),((SACSTK(I1,I2,I3),I1=1,2),I2=1,7), * Q1,Q2 WRITE (9,9) (Q3(I),Q4(I),I=1,8) WRITE (9,101) @ NEW PAGE IF (EOFLOP(ENDS*SAMRAT)) RETURN @ WORK DONE GOTO 100 1 FORMAT (' U/O SCHWELLENWERT (2F3.0) ',$) 2 FORMAT (2F3.0) 3 FORMAT (1H1,80X/1X,2(2(A2,1H:),A2,3H - ),5X,10A6) 4 FORMAT (1X,2(A2,1H:),A2,1H.,I1,F7.3,2F8.0,I5) 5 FORMAT (' KEINE VORZEICHEN BITTE, WEISS ICH SELBER RICHTIG!') 6 FORMAT (80X/1X,10A6/1X,2(2(A2,1H:)A2,3H - ),'MODE:',F6.0, * ' SCHLAGFELD:',F6.0,2H /,F6.0/) 7 FORMAT (1X,I4) 8 FORMAT (1H+,2X,I6,1H*,7(2I4,2X),1H*,2I4/1X) 9 FORMAT (10X,7(2I4,2X),1H#,2I4) 101 FORMAT (1H1) END