PROCEDURE MapSampleIndex( READONLY tca : PZLRChain.T; ma : CARDINAL; READONLY tcb : PZLRChain.T; mb: CARDINAL; xc: INTEGER; ): INTEGER = (* Returns the index "y" of a point in a filtered curve "fb", with "mb" equally-spaced samples, given its index "x" in some other filtered curve "fa", with "ma" equally-spaced samples, and the corresponding label vectors "tca" and "tcb". *) BEGIN WITH x = FLOAT(xc, LONGREAL), La = tca[LAST(tca)] - tca[0], ta = tca[0] + x * La / FLOAT(ma, LONGREAL), tb = PZLRChain.MapLabel(tca, tcb, ta), Lb = tcb[LAST(tcb)] - tcb[0], y = (tb - tcb[0])/Lb * FLOAT(mb, LONGREAL), yc = ROUND(y) DO RETURN yc END END MapSampleIndex; PROCEDURE ReadAllCVCFiles( chainPrefix : TEXT; nChains, band: CARDINAL; ): REF ARRAY OF PZSymbolChain.ReadData = <* FATAL Rd.Failure *> BEGIN WITH chain = NEW(REF ARRAY OF PZSymbolChain.ReadData, nChains ) DO FOR i := 0 TO nChains-1 DO WITH chainTag = Fmt.Pad(Fmt.Int(i), 4, '0'), bandTag = Fmt.Pad(Fmt.Int(band), 3, '0'), fileName = chainTag & "/" & chainPrefix & "-" & chainTag & "-f" & bandTag & "-c-u.cvc", rd = FileRd.Open(fileName), data = PZSymbolChain.Read(rd, headerOnly := TRUE) DO chain[i] := data; Rd.Close(rd); END; END; RETURN chain; END; END ReadAllCVCFiles; PROCEDURE ReadAllTMCFiles( chainPrefix : TEXT; nCurves, band: CARDINAL; ): REF ARRAY OF REF PZLRChain.T = <* FATAL Rd.Failure *> BEGIN WITH chain = NEW(REF ARRAY OF REF PZLRChain.T, nCurves ) DO FOR i := 0 TO nCurves-1 DO WITH chainTag = Fmt.Pad(Fmt.Int(i), 4, '0'), bandTag = Fmt.Pad(Fmt.Int(band), 3, '0'), fileName = chainTag & "/" & chainPrefix & "-" & chainTag & "-f" & bandTag & ".tmc", rd =FileRd.Open(fileName), data = PZLRChain.Read(rd) DO chain[i] := data.c; Rd.Close(rd); END; END; RETURN chain; END; END ReadAllTMCFiles;