private void ReadAdditionalTextBlock(BinaryReader reader, ref AdditionalTextBlock additionalTextBlock) { if (FileHeader.SizeOfAdditionalTextBlock % 32 != 0) { throw new InvalidTM25Exception("Additional text block size is not a multiple of 32", FileHeader.SizeOfAdditionalTextBlock.ToString()); } additionalTextBlock.AdditionalText = new string(reader.ReadChars(FileHeader.SizeOfAdditionalTextBlock)); }
public IESTM25File(string fileName, ulong numrays) { using (BinaryReader reader = new BinaryReader(File.Open(fileName, FileMode.Open))) { FileHeaderBlock fileHeader = new FileHeaderBlock(); ReadHeaderBlock(reader, ref fileHeader); if (!fileHeader.CheckHeaderBlockisValid()) { throw new InvalidTM25Exception("Header Block Not Correct Size", ""); } FileHeader = fileHeader; KnownDataFlagBlock knownDataFlag = new KnownDataFlagBlock(); ReadDataFlagBlock(reader, ref knownDataFlag); if (!knownDataFlag.CheckKnownDataFlagBlockisValid()) { throw new InvalidTM25Exception("Data Flag Block Not Correct Size", ""); } DataFlags = knownDataFlag; DescriptionHeaderBlock descriptionHeader = new DescriptionHeaderBlock(); ReadDescriptionHeaderBlock(reader, ref descriptionHeader); if (!descriptionHeader.CheckDescriptionBlockisValid()) { throw new InvalidTM25Exception("Description Header Block is Not Correct Size", ""); } DescriptionHeader = descriptionHeader; if (FileHeader.NumberOfSpectralTables > 0) { SpectralTableBlock spectralTables = new SpectralTableBlock(); spectralTables.SpectralTables = new List <SpectralTable>(); ReadSpectralTableBlock(reader, ref spectralTables); if (!spectralTables.CheckSpectralTableisValid()) { throw new InvalidTM25Exception("Spectral Table Block is Not Correct Size", ""); } SpectralTables = spectralTables; } if (FileHeader.NumberOfAdditionalRayDataItemsPerRay > 0) { AdditionalRayDataColumnLabelsBlock columnLabelsBlock = new AdditionalRayDataColumnLabelsBlock(); ReadColumnsLabelsBlock(reader, ref columnLabelsBlock); if (!columnLabelsBlock.CheckAdditionalRayDataColumnisValid()) { throw new InvalidTM25Exception("Additional Ray Data Columns Block is incorrect"); } AdditionalRayDataColumnLabels = columnLabelsBlock; } if (FileHeader.SizeOfAdditionalTextBlock > 0) { AdditionalTextBlock additionalTextBlock = new AdditionalTextBlock(); ReadAdditionalTextBlock(reader, ref additionalTextBlock); AdditionalText = additionalTextBlock; } RayDataLinesBlock rayDataLines = new RayDataLinesBlock(); rayDataLines.Rays = new float[FileHeader.NumberOfRays][]; ReadPartialRayDataBlock(reader, ref rayDataLines, numrays); rayDataLines.RayDataMembers = TM25HelperFunctions.GetListofRayDataFieldsPresent(DataFlags, FileHeader, AdditionalRayDataColumnLabels); RayData = rayDataLines; } }