CAINDMSAOPAP -- SPLITS UP TRACE INTO TIME GATES 00000103 C*********************************************************************** C COPYRIGHT ATLANTIC RICHFIELD COMPANY 1991 * C*********************************************************************** CTITLE SAOPAP -- SPLITS UP TRACE INTO TIME GATES 00000202 CA AUTHOR RICK D. KNIGHT 00000300 CA DESIGNER RICK D. KNIGHT 00000400 CA LANGUAGE FORTRAN 00000500 CA SYSTEM IBM AND CRAY 00000600 CA WRITTEN 01-84 00000700 C REVISED 12-27-85 BY ESN - FOR CRAY COMPATABILITY. 00000800 C REVISED 11-13-89 BY RDK - FOR CRAY CFT77 COMPATIBILITY. 00000905 C REVISED XX-XX-XX BY WHOM - REASON 00001000 C REVISED 00001100 CA 00001200 CA CALL SAOPAP (TRACE, RLENG, SAMPR, OARRAY, N, PAR, TYOPOV, 00001300 CA HIND, IND, &STMT) 00001400 CA 00001500 CA INPUT TRACE = INPUT TRACE R4 00001600 CA INPUT RLENG = RECORD LENGTH IN MS I4 00001700 CA INPUT SAMPR = CURRENT SAMPLE RATE I4 00001800 CA OUTPUT OARRAY = OUTPUT OF TRACE BY WINDOWS R4 00001900 CA INPUT N = NUMBER OF WINDOWS I4 00002000 CA INPUT PAR = WINDOW PARAMETERS. N SETS OF I4 00002100 CA 1. START TIME (MS) 00002200 CA 2. OPERATOR ANTICIPATORY LENGTH(MS) 00002300 CA 3. OPERATOR MEMORY LENGTH(MS) 00002400 CA 4. OVERLAP (MS) 00002500 CA INPUT HIND = MAXIMUM INDEX ALLOWED FOR OARRAY I4 00002600 CA IN/OUT IND = ARRAY CONTAINING START AND END I4 00002700 CA INDEXES IN OARRAY FOR EACH WINDOW. 00002800 CA ON INPUT IND(1) SHOULD BE THE INDEX 00002900 CA IN OARRAY FOR THE FIRST WINDOW 00003000 CA &STMT = ERROR RETURN WHEN THERE IS NOT 00003100 CA ENOUGH SPACE IN OARRAY FOR ALL THE 00003200 CA WINDOWS 00003300 CA 00003400 CA 00003500 CA SAOPAP SPLITS THE INPUT TRACE IN TRACE INTO THE VARIOUS 00003600 CA OVERLAPPING TRACE WINDOWS AS SPECIFIED IN PAR. FASHIONED 00003700 CA AFTER FLTR/DECON SUBROUTINE USTSPL. 00003800 CAEND 00003900 CTITLE SAOPA2 -- RECOMBINES TIME GATES TO FORM A TRACE 00004000 CA AUTHOR RICK D. KNIGHT 00004100 CA DESIGNER RICK D. KNIGHT 00004200 CA LANGUAGE S/370 FORTRAN H EXTENDED 00004300 CA WRITTEN 01-84 00004400 C REVISED XX-XX-XX BY WHOM - REASON 00004500 C 00004600 CA 00004700 CA 00004800 CA CALL SAOPA2 (TRACE, RLENG, SAMPR, OARRAY, N, PAR, 00004900 CA HIND, IND) 00005000 CA 00005100 CA OUTPUT TRACE = RECOMBINED TRACE R4 00005200 CA INPUT RLENG = RECORD LENGTH IN MS I4 00005300 CA INPUT SAMPR = CURRENT SAMPLE RATE I4 00005400 CA INPUT OARRAY = ARRAY CONTAINING TRACE WINDOWS R4 00005500 CA INPUT N = NUMBER OF WINDOWS I4 00005600 CA INPUT PAR = WINDOW PARAMETERS. N SETS OF I4 00005700 CA 1. START TIME (MS) 00005800 CA 2. OPERATOR ANTICIPATORY LENGTH(MS) 00005900 CA 3. OPERATOR MEMORY LENGTH(MS) 00006000 CA 4. OVERLAP (MS) 00006100 CA INPUT HIND = MAXIMUM INDEX ALLOWED FOR OARRAY I4 00006200 CA INPUT IND = ARRAY CONTAINING START AND END I4 00006300 CA INDEXES IN OARRAY FOR EACH WINDOW. 00006400 CA 00006500 CA 00006600 CA SAOPA2 RECONSTRUCTS THE TRACE FROM THE INDIVIDUAL WINDOWS. 00006700 CA 00006800 CAEND 00006900 SUBROUTINE SAOPAP (TRACE, RLENG, SAMPR, OARRAY, N, PAR, 00007000 * HIND, IND, *) 00007100 C 00007200 IMPLICIT INTEGER (A-Z) 00007300 C EXTERNAL S1ATP 00007404 C 00007500 C REAL ARRAYS IN PARAMETER LIST 00007600 C 00007700 REAL OARRAY (1) 00007800 REAL TRACE (1) 00007900 C 00008000 C INTEGER ARRAYS IN PARAMETER 00008100 C 00008200 INTEGER IND (1) 00008300 INTEGER PAR (1) 00008400 C 00008500 C REAL VARIABLES -- LOCAL 00008600 C 00008700 REAL A 00008800 REAL B 00008900 REAL C 00009000 C 00009100 C REAL ARRAYS -- LOCAL 00009200 C 00009300 C REAL TAPER(10) 00009400 C 00009500 C WINDOWING METHOD: 00009600 C 00009700 C START(J) START(J+1) 00009800 C . . 00009900 C NPTS2 OVLP(J-1)/2 . IND1-IND2 .OVLP(J)/2 NPTS1 00010000 C __/\___ ____/\____ ._________________ .____/\_____ __/\__ 00010100 C | | | | | | 00010200 C XXXXXXX XXXXXXXXXX XXXXXXXXXXXXXXXXXX XXXXXXXXXXXX XXXXXX 00010300 C | | V V V V | | 00010400 C IND2(J-1) IND1(J) IND2(J) IND1(J+1) 00010500 C 00010600 C 00010700 IF (1.EQ.2) CALL S1ATP 00010804 C 00010904 J = 1 00011000 K = 1 00011100 OVLP = 0 00011200 IND2 = 0 00011300 LTAPER = 0 00011400 NOSAMP = RLENG / SAMPR 00011500 C 00011600 DO 10 00011700 * I = 1, N 00011800 IC = IND(J) 00011900 C 00012000 IND1 = PAR(K) / SAMPR + 1 - OVLP / 2 00012100 IF (IND1 .LE. 0) IND1 = 1 00012200 C 00012300 NPTS1= PAR(K+1) / SAMPR 00012400 NPTS2= PAR(K+2) / SAMPR 00012500 OVLP = PAR(K+3) / SAMPR 00012600 C 00012700 IF (I .NE. N) IND2 = PAR(K+4) / SAMPR + OVLP / 2 00012800 IF (I .EQ. N .OR. IND2 .GT. NOSAMP) IND2 = NOSAMP 00012900 C 00013000 NUM0BG = 0 00013100 NUM0EN = 0 00013200 IND1 = IND1 - NPTS2 - LTAPER 00013300 IND2 = IND2 + NPTS1 + LTAPER 00013400 C 00013500 IF (IND1 .LE. 0) NUM0BG = 1 - IND1 00013600 IF (IND1 .LE. 0) IND1 = 1 00013700 IF (IND2 .GT. NOSAMP) NUM0EN = IND2 - NOSAMP 00013800 IF (IND2 .GT. NOSAMP) IND2 = NOSAMP 00013900 C 00014000 NS = IND2 - IND1 + 1 00014100 IF ((IC+NS-1+NUM0BG+NUM0EN) .GT. HIND) RETURN1 00014200 C 00014300 C ZERO AREA BEFORE THE WINDOW 00014400 C 00014500 IF (NUM0BG.GT.0) 00014600 * CALL ARSET (OARRAY(IC), NUM0BG, 0) 00014700 IC = IC + NUM0BG 00014800 C 00014900 C MOVE TRACE WINDOW TO OUTPUT ARRAY 00015000 C 00015100 CALL ARMVE (TRACE(IND1), OARRAY(IC), NS) 00015200 IC = IC + NS 00015300 C 00015400 C ZERO AREA AFTER TRACE WINDOW 00015500 C 00015600 IF (NUM0EN.GT.0) 00015700 * CALL ARSET (OARRAY(IC), NUM0EN, 0) 00015800 IC = IC + NUM0EN 00015900 C 00016000 C SET UP ENDING INDEX AND BEGINNING INDEX OF NEXT 00016100 C WINDOW IF NECESSARY 00016200 C 00016300 IND(J+1) = IC - 1 00016400 IF (I .EQ. N) GO TO 10 00016500 IND(J+2) = IND(J+1) + 1 00016600 J = J + 2 00016700 K = K + 4 00016800 C 00016900 10 CONTINUE 00017000 C 00017100 GO TO 200 00017200 C 00017300 C 00017400 ENTRY SAOPA2 (TRACE, RLENG, SAMPR, OARRAY, N, PAR, 00017500 * HIND, IND) 00017600 C 00017700 NOSAMP = RLENG / SAMPR 00017800 J = 1 00017900 K = 1 00018000 IND1 = PAR(1) / SAMPR + 1 00018100 C 00018200 IF (N .LE. 1) IND2 = NOSAMP 00018300 IF (N .GT. 1) IND2 = PAR(5) / SAMPR 00018400 C 00018500 IC = IND(J) 00018600 IC = IC + (PAR(2)+PAR(3)) / SAMPR 00018700 C 00018800 DO 110 00018900 * I = 1, N 00019000 OVLP = PAR(K+3) / SAMPR 00019100 C 00019200 NS = IND2 - IND1 + 1 + OVLP / 2 00019300 IF (IND1+NS .GT. NOSAMP) NS = NOSAMP - IND1 + 1 00019400 C 00019500 CALL ARMVE (OARRAY(IC), TRACE(IND1), NS) 00019600 IF (I .EQ. N) GO TO 110 00019700 C 00019800 C TIE ENDS 00019900 C 00020000 OVLP = (OVLP / 2) * 2 00020100 IM1 = IND1 + NS - OVLP 00020200 IM2 = IND(J+2) + (PAR(K+5)+PAR(K+6))/SAMPR 00020300 C 00020400 C = 1. / (OVLP + 1) 00020500 A = C 00020600 B = OVLP * C 00020700 C 00020800 DO 100 00020900 * K1 = 1, OVLP 00021000 TRACE(IM1) = TRACE(IM1) * B + OARRAY(IM2) * A 00021100 IM1 = IM1 + 1 00021200 IM2 = IM2 + 1 00021300 A = A + C 00021400 B = B - C 00021500 C 00021600 100 CONTINUE 00021700 C 00021800 IND1 = IND1 + NS 00021900 K = K + 4 00022000 J = J + 2 00022100 IC = IND(J) + OVLP + (PAR(K+1)+PAR(K+2))/SAMPR 00022200 IF (I .EQ. N-1) IND2 = NOSAMP 00022300 IF (I .NE. N-1) IND2 = PAR(K+4) / SAMPR 00022400 C 00022500 110 CONTINUE 00022600 C 00022700 200 RETURN 00022800 C 00022900 END 00023000