#pragma once #include "ParseArgs.h" #include "basedata.h" #include "mdatetime.h" #include "mregex.h" #include "DataAdapters/ncfilealt.h" #include #include #include using michlib::GPL; using michlib::MDateTime; using michlib::RegExp; using michlib::uint2; using michlib::uint4; using michlib::Floor; using michlib::Ceil; using michlib::pointer_cast; class MODISBINLOCALData { MString datapath; std::vector dataset; std::vector times; bool SufFromDataset(const MString& datasetstr); struct Parameters: public BaseParameters { real lonb, latb, lone, late; virtual ~Parameters() override = default; }; public: using Data = UngriddedData; MString Info() const; MString Open(const CLArgs& args); Data Read(const MString& var, const BaseParameters* ip, size_t tind) const; Data ReadFile(const MString& suf, const struct Parameters* p, size_t tind) const; std::pair Parameters(michlib_internal::ParameterListEx& pars, const CLArgs& args) const; bool CheckVar(const MString& vname) const { if(dataset.empty()) return false; bool ischl = dataset.front() == "A_CHL" || dataset.front() == "T_CHL"; return (vname == "chl" && ischl) || (vname == "temp" && !ischl); } bool isOk() const { return times.size() > 0; } size_t NTimes() const { return times.size(); } MDateTime Time(size_t i) const { if(!isOk() || i >= times.size()) return MDateTime(); return times[i]; } };