Exemple #1
0
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;
    }
}