void DataAccess::scan(const FileAccess& fa, MSG_data& pro, MSG_data& epi, MSG_header& header) { // Read prologue MSG_header PRO_head; //p.activity("Reading prologue " + opts.prologueFile()); read_file(fa.prologueFile(), PRO_head, pro); // Read epilogue MSG_header EPI_head; //p.activity("Reading epilogue " + opts.epilogueFile()); read_file(fa.epilogueFile(), EPI_head, epi); // Sort the segment names by their index vector<string> segfiles = fa.segmentFiles(); for (const auto& i: segfiles) { //p.activity("Scanning segment " + *i); read_file(i, header); if (header.segment_id->data_field_format == MSG_NO_FORMAT) throw std::runtime_error(i + ": product dumped in binary format"); int idx = header.segment_id->sequence_number-1; if (idx < 0) continue; if ((size_t)idx >= segnames.size()) segnames.resize(idx + 1); segnames[idx] = i; } if (segnames.empty()) throw std::runtime_error("no segments found"); // Read common info just once from a random segment scanSegment(header); if (hrv) { MSG_ActualL15CoverageHRV& cov = epi.epilogue->product_stats.ActualL15CoverageHRV; LowerEastColumnActual = cov.LowerEastColumnActual; LowerNorthLineActual = cov.LowerNorthLineActual; LowerWestColumnActual = cov.LowerWestColumnActual; LowerSouthLineActual = cov.LowerSouthLineActual; UpperEastColumnActual = cov.UpperEastColumnActual; UpperSouthLineActual = cov.UpperSouthLineActual; UpperWestColumnActual = cov.UpperWestColumnActual; UpperNorthLineActual = cov.UpperNorthLineActual; MaxLineActual = max(LowerNorthLineActual, UpperNorthLineActual); #if 0 fprintf(stderr, "LECA %zd\n", LowerEastColumnActual); fprintf(stderr, "LNLA %zd\n", LowerNorthLineActual); fprintf(stderr, "LWCA %zd\n", LowerWestColumnActual); fprintf(stderr, "LSLA %zd\n", LowerSouthLineActual); fprintf(stderr, "UECA %zd\n", UpperEastColumnActual); fprintf(stderr, "UNLA %zd\n", UpperNorthLineActual); fprintf(stderr, "UWCA %zd\n", UpperWestColumnActual); fprintf(stderr, "USLA %zd\n", UpperSouthLineActual); fprintf(stderr, "MLA %zd\n", MaxLineActual); #endif } else { /* * TODO: what is this for? WestColumnActual = 1856 - header.image_navigation->column_offset + 1; SouthLineActual = 1856 - header.image_navigation->line_offset + 1; */ WestColumnActual = 1; SouthLineActual = 1; } }