Michael Uleysky
2 years ago
5 changed files with 261 additions and 155 deletions
@ -0,0 +1,36 @@ |
|||||||
|
#define MICHLIB_NOSOURCE |
||||||
|
#include "GPL.h" |
||||||
|
#include "odm.h" |
||||||
|
|
||||||
|
int actioninfo(const CLArgs& args) |
||||||
|
{ |
||||||
|
if(!args.contains("source")) |
||||||
|
{ |
||||||
|
errmessage("No source specified!"); |
||||||
|
return 1; |
||||||
|
} |
||||||
|
|
||||||
|
Data data; |
||||||
|
|
||||||
|
if(args.at("source") == "NEMO") |
||||||
|
{ |
||||||
|
NEMOData ndata = NEMOOpen(args); |
||||||
|
|
||||||
|
if(!ndata) |
||||||
|
{ |
||||||
|
errmessage("Can't open NEMO dataset"); |
||||||
|
return 1; |
||||||
|
} |
||||||
|
|
||||||
|
data = DataVariants(std::move(ndata)); |
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
errmessage("Unknown source " + args.at("source")); |
||||||
|
return 1; |
||||||
|
} |
||||||
|
|
||||||
|
message(data.Info()); |
||||||
|
|
||||||
|
return 0; |
||||||
|
} |
@ -0,0 +1,133 @@ |
|||||||
|
#define MICHLIB_NOSOURCE |
||||||
|
#include "GPL.h" |
||||||
|
#include "odm.h" |
||||||
|
|
||||||
|
int actiontsc(const CLArgs& args) |
||||||
|
{ |
||||||
|
if(!args.contains("source")) |
||||||
|
{ |
||||||
|
errmessage("No source specified!"); |
||||||
|
return 1; |
||||||
|
} |
||||||
|
|
||||||
|
VarType vtype(args.at("var")); |
||||||
|
if(!vtype) |
||||||
|
{ |
||||||
|
errmessage("Incorrect or no variable specified"); |
||||||
|
return 1; |
||||||
|
} |
||||||
|
|
||||||
|
michlib_internal::ParameterListEx pars; |
||||||
|
pars.UsePrefix(""); |
||||||
|
|
||||||
|
pars.SetParameter("source", args.at("source")); |
||||||
|
pars.SetParameter("variable", vtype.Name()); |
||||||
|
|
||||||
|
Data data; |
||||||
|
|
||||||
|
if(args.at("source") == "NEMO") |
||||||
|
{ |
||||||
|
if(!vtype.isSupported<NEMOData>()) |
||||||
|
{ |
||||||
|
errmessage("Variable " + args.at("var") + " is unsupported by NEMO"); |
||||||
|
return 1; |
||||||
|
} |
||||||
|
|
||||||
|
NEMOData ndata = NEMOOpen(args); |
||||||
|
if(!ndata) |
||||||
|
{ |
||||||
|
errmessage("Can't open NEMO dataset"); |
||||||
|
return 1; |
||||||
|
} |
||||||
|
|
||||||
|
size_t layer = 0; |
||||||
|
if(args.contains("layer")) layer = args.at("layer").ToInteger<size_t>(); |
||||||
|
if(!args.contains("depth") && layer >= ndata.NDepths()) |
||||||
|
{ |
||||||
|
errmessage(MString("Layer ") + layer + " is too deep!"); |
||||||
|
return 1; |
||||||
|
} |
||||||
|
real depth = args.contains("depth") ? args.at("depth").ToReal() : ndata.Depth(layer); |
||||||
|
|
||||||
|
if(!(args.contains("lonb") && args.contains("lone") && args.contains("latb") && args.contains("late"))) |
||||||
|
{ |
||||||
|
errmessage("Region not specified (lonb, lone, latb, late)"); |
||||||
|
return 1; |
||||||
|
} |
||||||
|
if(!ndata.SetRegion(args.at("lonb").ToReal(), args.at("lone").ToReal(), args.at("latb").ToReal(), args.at("late").ToReal(), depth)) |
||||||
|
{ |
||||||
|
errmessage("Can't set region"); |
||||||
|
return 1; |
||||||
|
} |
||||||
|
|
||||||
|
pars.SetParameter("depth", depth); |
||||||
|
pars.SetParameter("layer", ndata.Layer()); |
||||||
|
pars.SetParameter("dataset", ndata.Title()); |
||||||
|
pars.SetParameter("lonb", args.at("lonb").ToReal()); |
||||||
|
pars.SetParameter("latb", args.at("latb").ToReal()); |
||||||
|
pars.SetParameter("lone", args.at("lone").ToReal()); |
||||||
|
pars.SetParameter("late", args.at("late").ToReal()); |
||||||
|
|
||||||
|
data = DataVariants(std::move(ndata)); |
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
errmessage("Unknown source " + args.at("source")); |
||||||
|
return 1; |
||||||
|
} |
||||||
|
|
||||||
|
if(args.contains("time") && (args.contains("timeb") || args.contains("timee"))) |
||||||
|
{ |
||||||
|
errmessage("Time must be set via time parameter or timeb and timee parameter but not via both"); |
||||||
|
return 1; |
||||||
|
} |
||||||
|
|
||||||
|
if(!(args.contains("time") || (args.contains("timeb") && args.contains("timee")))) |
||||||
|
{ |
||||||
|
errmessage("Time must be set via time parameter or timeb and timee parameter"); |
||||||
|
return 1; |
||||||
|
} |
||||||
|
|
||||||
|
BFileW fw; |
||||||
|
MString name = args.at("out"); |
||||||
|
if(!name.Exist()) name = "out.bin"; |
||||||
|
|
||||||
|
fw.Create(name, 3); |
||||||
|
/*
|
||||||
|
if(!fw.Create(name,3)) |
||||||
|
{ |
||||||
|
errmessage("Can't create file "+name); |
||||||
|
return 1; |
||||||
|
} |
||||||
|
*/ |
||||||
|
fw.SetParameters(pars); |
||||||
|
fw.UsePrefix(""); |
||||||
|
|
||||||
|
if(args.contains("time")) |
||||||
|
{ |
||||||
|
MDateTime time; |
||||||
|
if(time.FromString(args.at("time"))) // One date
|
||||||
|
{ |
||||||
|
auto it = GetTIndex(data, time); |
||||||
|
fw.SetParameter("time", data.Time(it).ToString()); |
||||||
|
data.Write(fw, vtype, std::vector<size_t>(1, it)); |
||||||
|
} |
||||||
|
else // Regular expression
|
||||||
|
{ |
||||||
|
fw.SetParameter("timeregex", args.at("time")); |
||||||
|
data.Write(fw, vtype, GetTIndexes(data, args.at("time"))); |
||||||
|
} |
||||||
|
} |
||||||
|
else // Bdate, edate
|
||||||
|
{ |
||||||
|
MDateTime tb(args.at("timeb")), te(args.at("timee")); |
||||||
|
fw.SetParameter("timeb", tb.ToString()); |
||||||
|
fw.SetParameter("timee", te.ToString()); |
||||||
|
data.Write(fw, vtype, GetTIndexes(data, tb, te)); |
||||||
|
} |
||||||
|
|
||||||
|
fw.Finalize(); |
||||||
|
fw.Close(); |
||||||
|
|
||||||
|
return 0; |
||||||
|
} |
Loading…
Reference in new issue