CTITLESAGARY -- GENERATES AUTO-CORRELATION AND OPERATOR ARRAYS 00000100 C*********************************************************************** C COPYRIGHT ATLANTIC RICHFIELD COMPANY 1991 * C*********************************************************************** CA AUTHOR D. NYMAN 00000200 CA DESIGNER D. NYMAN 00000300 CA LANGUAGE S/370 FORTRAN H 00000400 CA SYSTEM IBM AND CRAY CA WRITTEN 03/05/78 00000500 C REVISED 10/15/86 REM. FIX ARY(INDX) TO ASSURE R*8 BOUNDARY. 00000600 C REVISED 10/15/90 MAA. MODIFIED FOR CRAY-YMP USE. 00000700 CA 00000800 CA 00000900 CA CALL SAGARY (INTR, OTR, SMPINT, PCC, PAR, NOPRS, ARY) 00001000 CA 00001100 CA INPUT INTR = INPUT (UNPROCESSED) TRACE R4 00001200 CA OTR = OUTPUT (DECONVOLVED) TRACE R4 00001300 CA SMPINT = SAMPLING INTERVAL IN MS. I4 00001400 CA PCC = PARTIAL CORRELATION COEFFICITNTS TO R8 00001500 CA RECONSTRUCT DECONVOLUTION OPERATOR. 00001600 CA PAR(1,I) = START TIME OF WINDOW I. I4 00001700 CA PAR(2,I) = WINDOW I OPERATOR LENGTH IN POINTS. 00001800 CA PAR(3,I) = PREDICTION DISTANCE (>0), OR LENGTH 00001900 CA OF ANTICIPATORY PART OF OPERATOR (<0). 00002000 CA NOPRS = NUMBER OF OPERATORS AND WINDOWS. I4 00002100 CA 00002200 CA OUTPUT ARY = AUTO-CORRELATION AND OPERATOR ARRAY. R4 00002300 CA 00002400 CA 00002500 CA SAGARY GENERATES AN ARRAY OF THE UNNORMALIZED INPUT TRACE 00002600 CA AUTO-CORRELATION, OUTPUT TRACE AUTO-CORRELATION, AND DECON 00002700 CA OPERATOR FOR EACH TIME WINDOW. EACH SUB-ARRAY IS 00002800 CA PAR(2,I) + MAX(PAR(3,I),1) POINTS LONG, AND THE TIME OF THE 00002900 CA FIRST POINT OF EACH SUB-ARRAY IS MIN(0,PAR(3,I)*SMPINT) . 00003000 CA 00003100 C=======================================================================00003200 C EJECT 00003300 C=======================================================================00003400 C 00003500 C LOCAL VARIABLES AND CONSTANTS 00003600 C 00003700 C IC = PCC ARRAY INDEX 00003800 C INDX = ARY ARRAY INDEX 00003900 C I0 = (INDEX-1) OF FIRST INTR AND OTR POINT EACH WINDOW 00004000 C I1 = TIME ZERO INDEX OF INTR AUTO-CORRELATION SUB-ARRAY 00004100 C I2 = TIME ZERO INDEX OF OTR AUTO-CORRELATION SUB-ARRAY 00004200 C I3 = FIRST POINT OF OPERATOR SUB-ARRAY 00004300 C LAG0 = RELATIVE INDEX OF TIME ZERO TERM OF EACH SUB-ARRAY 00004400 C LENG = LENGTH OF EACH SUB-ARRAY 00004500 C NANT = NUMBER OF ANTICIPATORY TERMS IN DECON OPERATOR 00004600 C NLAG = NUMBER OF AUTO-CORRELATION LAGS TO CALCULATE 00004700 C NP = NUMBER OF DATA TRACE POINTS IN WINDOW IOP 00004800 C NMEM = NUMBER OF MEMORY TERMS IN DECON OPERATOR 00004900 C OPL = OPERATOR LENGTH 00005000 C PRED = PREDICTION DISTANCE / ANTICIPATORY LENGTH 00005100 C SN = +/-1, NEGATIVE IF LAG0 > (LENG+1)/2 00005200 C ZERO = 0 00005300 C 00005400 C 00005500 C=======================================================================00005600 C EJECT 00005700 C 00005800 SUBROUTINE SAGARY (INTR, OTR, SMPINT, PCC, PAR, NOPRS, ARY) 00005900 C 00006000 IMPLICIT INTEGER (A-Z) 00006100 DIMENSION INTR(1), OTR(1), PCC(1), PAR(5,1), ARY(1) 00006200 DOUBLE PRECISION PCC 00006300 REAL INTR, OTR, ARY, X, Y 00006400 DATA ZERO /0/ 00006500 C 00006600 SIM2=SMPINT*2 00006700 INDX=1 00006800 IC=1 00006900 C 00007000 C CALCULATE INTR AUTO-CORRELATION, OTR AUTO-CORRELATION,00007100 C AND OPERATOR ARRAYS FOR EACH WINDOW 00007200 C 00007300 DO 70 IOP=1,NOPRS 00007400 OPL=PAR(2,IOP) 00007500 PRED=PAR(3,IOP) 00007600 LENG=OPL+MAX0(PRED,1) 00007700 LAG0=1-MIN0(PRED,0) 00007800 NLAG=LENG-LAG0 00007900 SN=1 00008000 C 00008100 IF (LAG0.LE.(LENG+1)/2) GO TO 10 00008200 C 00008300 C THERE ARE MORE ANTICIPATORY THAN MEMORY TERMS 00008400 C 00008500 NLAG=LAG0-1 00008600 SN=-1 00008700 C 00008800 10 I1=INDX+LAG0-1 00008900 I2=I1+LENG 00009000 I3=I2+LENG-LAG0+1 00009100 INDX=I3+LENG 00009200 WINDX = INDX 00009201 C 00009210 C ASSURE DOUBLE WORD BOUNDARY BEFORE CONTINUING 00009220 C 00009230 IF (MOD(LOC(ARY(WINDX)),8) .NE. 0) WINDX = WINDX + 1 00009240 I0=(PAR(1,IOP)*2+SMPINT)/SIM2 00009300 NP=(PAR(1,IOP+1)*2+SMPINT)/SIM2-I0 00009400 IF (OPL.LT.2) GO TO 50 00009500 C 00009600 C CALCULATE INTR AND OTR AUTO-CORRELATIONS 00009700 C 00009800 DO 30 ILAG=ZERO,NLAG 00009900 J0=I0+ILAG 00010000 MP=NP-ILAG 00010100 X=0. 00010200 Y=0. 00010300 C 00010400 DO 20 I=1,MP 00010500 X=INTR(I0+I)*INTR(J0+I)+X 00010600 20 Y=OTR(I0+I)*OTR(J0+I)+Y 00010700 C 00010800 LAG=ILAG*SN 00010900 ARY(I1+LAG)=X 00011000 30 ARY(I2+LAG)=Y 00011100 C 00011200 IF (NLAG.EQ.LENG-1) GO TO 50 00011300 C 00011400 C 'REFLECT' AUTO-CORRELATION VALUES ABOUT TIME ZERO 00011500 C 00011600 NLAG=LENG-1-NLAG 00011700 DO 40 ILAG=1,NLAG 00011800 LAG=ILAG*SN 00011900 ARY(I1-LAG)=ARY(I1+LAG) 00012000 40 ARY(I2-LAG)=ARY(I2+LAG) 00012100 C 00012200 50 IF (PRED.GT.1) GO TO 60 00012600 C 00012700 C CALCULATE SPIKING / INTERPOLATION DECON COEFFICIENTS 00012800 C 00012900 NANT=-MIN0(PRED,0) 00013000 NMEM=OPL-NANT 00013100 CALL SAKCOF (PCC(IC), NANT, NMEM, ARY(I3), ARY(WINDX)) 00013200 IC=IC+OPL 00013300 GO TO 70 00013400 C 00013500 C CALCULATE PREDICTION DECON COEFFICIENTS 00013600 C 00013700 60 CALL SAPDCF (PCC(IC), PRED, OPL, ARY(I3), ARY(WINDX)) 00013800 IC=IC+OPL*2 00013900 C 00014000 70 CONTINUE 00014100 C 00014200 RETURN 00014300 C 00014400 END 00014500