diff --git a/src/metkit/mars2grib/backend/concepts/level/levelMatcher.h b/src/metkit/mars2grib/backend/concepts/level/levelMatcher.h index 3d23158c..1b3b031b 100644 --- a/src/metkit/mars2grib/backend/concepts/level/levelMatcher.h +++ b/src/metkit/mars2grib/backend/concepts/level/levelMatcher.h @@ -119,7 +119,8 @@ inline std::size_t matchSFC(const long param) { 239042, 239078, 239080, 239083, 239084, 239093, 239134, 239159, 239263, 260004, 260005, 260015, 260038, 260048, 260109, 260121, 260123, 260255, 260259, 260289, 260292, 260293, range(260318, 260321), 260338, 260339, 260509, 260682, 260683, 260688, 261001, 261002, range(261014, 261016), 261018, 261023, 262000, - 262100, 262124, 262139, 262140, 262144)) { + 263000, 265000, 266000, 267000, 262100, 263100, 265100, 266100, 267100, 262124, 263124, 265124, 266124, + 267124, 262139, 262140, 262144, 263144, 265144, 266144, 267144)) { return static_cast(LevelType::Surface); } if (matchAny(param, 228045, 235322, 237322, 238322, 239322)) { @@ -218,7 +219,7 @@ inline std::size_t matchSOL(const long param) { using metkit::mars2grib::util::param_matcher::matchAny; using metkit::mars2grib::util::param_matcher::range; - if (matchAny(param, 262000, 262024)) { + if (matchAny(param, 262000, 263000, 265000, 266000, 267000, 262024, 263024, 265024, 266024, 267024)) { return static_cast(LevelType::SeaIceLayer); } if (matchAny(param, 33, 74, 238, 228038, 228141, 235078, 235080, 237080, 238080, 239080)) { @@ -248,38 +249,51 @@ inline std::size_t matchO2D(const long param) { using metkit::mars2grib::util::param_matcher::matchAny; using metkit::mars2grib::util::param_matcher::range; - if (matchAny(param, 262000, 262003, 262004, 262008, 262014, 262023)) { + if (matchAny(param, 262000, 263000, 265000, 266000, 267000, 262003, 263003, 265003, 266003, 267003, 262004, 263004, + 265004, 266004, 267004, 262008, 263008, 265008, 266008, 267008, 262014, 262023, 263023, 265023, 266023, + 267023)) { return static_cast(LevelType::IceLayerOnWater); } - if (matchAny(param, 262001, 262005, 262006, 262906, 262907)) { + if (matchAny(param, 262001, 263001, 265001, 266001, 267001, 262005, 263005, 265005, 266005, 267005, 262006, 263006, + 265006, 266006, 267006, 262906, 263906, 265906, 266906, 267906, 262907, 263907, 265907, 266907, + 267907)) { return static_cast(LevelType::IceTopOnWater); } - if (matchAny(param, 262002, 262009, 262011, 262015)) { + if (matchAny(param, 262002, 263002, 265002, 266002, 267002, 262009, 263009, 265009, 266009, 267009, 262011, 263011, + 265011, 266011, 267011, 262015)) { return static_cast(LevelType::SnowLayerOverIceOnWater); } - if (matchAny(param, 262017, 262018)) { + if (matchAny(param, 262017, 263017, 265017, 266017, 267017, 262018, 263018, 265018, 266018, 267018)) { return static_cast(LevelType::EntireMeltPond); } - if (matchAny(param, 262100, 262101, range(262108, 262112), 262124, 262125, 262130, 262139, 262140, 262143, - 262900)) { + if (matchAny(param, 262100, 263100, 265100, 266100, 267100, 262101, 263101, 265101, 266101, 267101, 262108, 263108, + 265108, 266108, 267108, 262109, 263109, 265109, 266109, 267109, 262110, 263110, 265110, 266110, 267110, + 262111, 263111, 265111, 266111, 267111, 262112, 263112, 265112, 266112, 267112, 262124, 263124, 265124, + 266124, 267124, 262125, 263125, 265125, 266125, 267125, 262130, 263130, 265130, 266130, 267130, 262139, + 263139, 265139, 266139, 267139, 262140, 263140, 265140, 266140, 267140, 262143, 263143, 265143, 266143, + 267143, 262900, 263900, 264900, 265900, 266900, 267900)) { return static_cast(LevelType::OceanSurface); } - if (matchAny(param, range(262102, 262106))) { + if (matchAny(param, 262102, 263102, 265102, 266102, 267102, 262103, 263103, 265103, 266103, 267103, 262104, 263104, + 265104, 266104, 267104, 262105, 263105, 265105, 266105, 267105, 262106, 263106, 265106, 266106, + 267106)) { return static_cast(LevelType::Isothermal); } - if (matchAny(param, range(262113, 262115))) { + if (matchAny(param, 262113, 263113, 265113, 266113, 267113, 262114, 263114, 265114, 266114, 267114, 262115, 263115, + 265115, 266115, 267115)) { return static_cast(LevelType::MixedLayerDepthByDensity); } - if (matchAny(param, 262116)) { + if (matchAny(param, 262116, 263116, 265116, 266116, 267116)) { return static_cast(LevelType::MixedLayerDepthByTemperature); } - if (matchAny(param, 262118, 262119, 262121, 262122)) { + if (matchAny(param, 262118, 263118, 265118, 266118, 267118, 262119, 263119, 265119, 266119, 267119, 262121, 263121, + 265121, 266121, 267121, 262122, 263122, 265122, 266122, 267122)) { return static_cast(LevelType::DepthBelowSeaLayer); } - if (matchAny(param, 262120, 262123)) { + if (matchAny(param, 262120, 263120, 265120, 266120, 267120, 262123, 263123, 265123, 266123, 267123)) { return static_cast(LevelType::OceanSurfaceToBottom); } - if (matchAny(param, 262141)) { + if (matchAny(param, 262141, 263141, 265141, 266141, 267141)) { return static_cast(LevelType::WaterSurfaceToIsothermalOceanLayer); } @@ -291,10 +305,12 @@ inline std::size_t matchO3D(const long param) { using metkit::mars2grib::util::param_matcher::matchAny; using metkit::mars2grib::util::param_matcher::range; - if (matchAny(param, range(262500, 262502), 262505, 262506)) { + if (matchAny(param, 262500, 263500, 265500, 266500, 267500, 262501, 263501, 265501, 266501, 267501, 262502, 263502, + 265502, 266502, 267502, 262505, 263505, 265505, 266505, 267505, 262506, 263506, 265506, 266506, + 267506)) { return static_cast(LevelType::OceanModelLayer); } - if (matchAny(param, 262507)) { + if (matchAny(param, 262507, 263507, 265507, 266507, 267507)) { return static_cast(LevelType::OceanModel); } diff --git a/src/metkit/mars2grib/backend/concepts/statistics/statisticsMatcher.h b/src/metkit/mars2grib/backend/concepts/statistics/statisticsMatcher.h index dee0a18d..6872d3d4 100644 --- a/src/metkit/mars2grib/backend/concepts/statistics/statisticsMatcher.h +++ b/src/metkit/mars2grib/backend/concepts/statistics/statisticsMatcher.h @@ -22,32 +22,45 @@ std::size_t statisticsMatcher(const MarsDict_t& mars, const OptDict_t& opt) { const auto param = get_or_throw(mars, "param"); - if (matchAny(param, 8, 9, 20, 44, 45, 47, 50, 57, 58, range(142, 147), 169, range(175, 182), 189, range(195, 197), - 205, range(208, 213), 228, 239, 240, 3062, 3099, range(162100, 162113), range(222001, 222256), 228021, - 228022, 228129, 228130, 228143, 228144, 228216, 228228, 228251, range(231001, 231003), 231005, 231010, - 231012, 231057, 231058, range(233000, 233031), 260259)) { + if (matchAny(param, 8, 9, 20, 44, 45, 47, 48, 50, 57, 58, range(142, 147), 149, 150, 169, range(175, 182), 189, + range(195, 197), 205, range(208, 213), 228, 239, 240, 3062, 3099, range(162100, 162113), + range(222001, 222256), 228021, 228022, range(228080, 228082), 228109, 228129, 228130, 228143, 228144, + 228216, 228228, 228251, range(231001, 231003), 231005, 231010, 231012, 231033, 231036, 231039, 231041, + 231057, 231058, range(233000, 233035), range(235062, 235064), 235075, 236386, 236387, 260138, 260259, + 260427, range(260652, 260655), 260693, 264900, 264904, 264905)) { return static_cast(StatisticsType::Accumulation); } - if (matchAny(param, range(141101, 141105), 141208, 141209, 141215, 141216, 141220, 141229, 141232, 141233, 141245, - 228004, 228005, 228051, 228053, range(228057, 228060), 235020, 235021, range(235029, 235031), - range(235033, 235043), range(235048, 235053), 235055, 235058, range(235077, 235080), 235083, 235084, - 235087, 235088, 235090, 235091, 235093, 235094, 235097, 235098, 235100, 235108, range(235129, 235138), - 235151, 235152, 235155, 235157, 235159, 235165, 235166, 235168, 235189, 235203, 235246, 235263, 235269, - 235283, 235287, 235288, 235290, 235305, 235309, 235322, 235326, 235339, 235383, 263024, 263107)) { + if (matchAny(param, range(141098, 141129), range(141131, 141150), range(141207, 141209), 141211, 141212, + range(141214, 141218), range(141220, 141239), 141244, 141245, 141249, range(141252, 141254), + range(228004, 228006), 228051, 228053, range(228057, 228060), range(235001, 235014), + range(235020, 235043), range(235045, 235053), range(235055, 235060), range(235062, 235064), + range(235068, 235070), 235074, range(235076, 235094), range(235097, 235103), range(235105, 235111), + range(235113, 235120), range(235129, 235138), 235141, range(235149, 235152), 235155, 235157, 235159, + 235165, 235166, 235168, range(235186, 235189), 235203, 235238, range(235243, 235248), 235257, 235258, + range(235261, 235263), range(235269, 235383), range(235386, 235411), range(263000, 263025), + range(263100, 263149), range(263500, 263522), range(263900, 263909))) { return static_cast(StatisticsType::Average); } - if (matchAny(param, 49, 121, 123, 201, range(143101, 143105), 143208, 143209, 143215, 143216, 143220, 143229, - 143232, 143233, 143245, 228026, 228028, 228035, 228036, 228222, 228224, 228226, 237013, 237041, 237042, - 237055, 237077, 237078, 237080, 237083, 237084, 237087, 237088, 237090, 237091, 237093, 237094, 237097, - 237108, 237117, 237131, 237132, 237134, 237137, 237151, 237159, range(237165, 237168), 237203, 237207, - 237263, 237287, 237288, 237290, 237305, 237309, 237318, 237321, 237322, 237326, 265024)) { + if (matchAny(param, 49, 121, 123, 201, range(143098, 143129), range(143131, 143150), range(143207, 143209), 143211, + 143212, range(143214, 143218), range(143220, 143239), 143244, 143245, 143249, range(143252, 143254), + 228026, 228028, 228035, 228036, 228222, 228224, 228226, range(237001, 237014), range(237022, 237043), + range(237045, 237059), range(237062, 237064), range(237068, 237070), range(237077, 237080), + range(237083, 237094), range(237097, 237103), range(237105, 237111), 237117, 237120, + range(237129, 237138), 237151, 237152, 237155, 237157, 237159, range(237165, 237168), 237189, 237203, + 237207, 237238, range(237244, 237248), 237257, 237258, range(237261, 237263), 237269, + range(237281, 237383), range(237386, 237397), range(237404, 237411), range(265000, 265025), + range(265100, 265149), range(265500, 265522), range(265900, 265909))) { return static_cast(StatisticsType::Maximum); } - if (matchAny(param, 122, 202, range(144101, 144105), 144208, 144209, 144215, 144216, 144220, 144229, 144232, 144233, - 144245, 228027, 228223, 228225, 228227, 238013, 238041, 238042, 238055, 238077, 238078, 238080, 238083, - 238084, 238087, 238088, 238090, 238091, 238093, 238094, 238097, 238108, 238131, 238132, 238134, 238137, - 238151, 238159, range(238165, 238168), 238203, 238207, 238263, 238287, 238288, 238290, 238305, 238309, - 238322, 238326, 266024)) { + if (matchAny(param, 122, 202, range(144098, 144129), range(144131, 144150), range(144207, 144209), 144211, 144212, + range(144214, 144218), range(144220, 144239), 144244, 144245, 144249, range(144252, 144254), 228027, + 228223, 228225, 228227, range(238001, 238014), range(238022, 238043), range(238045, 238059), + range(238062, 238064), range(238068, 238070), range(238077, 238080), range(238083, 238094), + range(238097, 238103), range(238105, 238111), 238117, 238120, range(238129, 238138), 238151, 238152, + 238155, 238157, 238159, range(238165, 238168), 238189, 238203, 238207, 238238, range(238244, 238248), + 238257, 238258, range(238261, 238263), 238269, range(238281, 238383), range(238386, 238397), + range(238404, 238411), range(266000, 266025), range(266100, 266149), range(266500, 266522), + range(266900, 266909))) { return static_cast(StatisticsType::Minimum); } if (matchAny(param, 260320, 260321, 260339, 260683)) { @@ -56,18 +69,18 @@ std::size_t statisticsMatcher(const MarsDict_t& mars, const OptDict_t& opt) { if (matchAny(param, 260318, 260319, 260338, 260682)) { return static_cast(StatisticsType::Severity); } - if (matchAny(param, range(145101, 145105), 145208, 145209, 145215, 145216, 145220, 145229, 145232, 145233, 145245, - 239041, 239042, 239077, 239078, 239080, 239083, 239084, 239087, 239088, 239090, 239091, 239093, 239094, - 239097, 239108, 239131, 239132, 239134, 239137, 239151, 239159, range(239165, 239168), 239203, 239207, - 239263, 239287, 239288, 239290, 239305, 239309, 239322, 239326, 267024)) { + if (matchAny(param, range(145098, 145129), range(145131, 145150), range(145207, 145209), 145211, 145212, + range(145214, 145218), range(145220, 145239), 145244, 145245, 145249, range(145252, 145254), + range(239001, 239014), range(239022, 239043), range(239045, 239059), range(239062, 239064), + range(239068, 239070), range(239077, 239080), range(239083, 239091), 239093, 239094, + range(239097, 239103), range(239105, 239111), 239117, 239120, range(239129, 239138), 239151, 239152, + 239155, 239157, 239159, range(239165, 239168), 239189, 239203, 239207, 239238, range(239244, 239248), + 239257, 239258, range(239261, 239263), 239269, range(239281, 239381), 239383, range(239386, 239397), + range(239404, 239411), range(267000, 267025), range(267100, 267149), range(267500, 267522), + range(267900, 267909))) { return static_cast(StatisticsType::StandardDeviation); } - // Chemical products - if (matchAny(param, range(228080, 228082), range(233032, 233035), range(235062, 235064))) { - return static_cast(StatisticsType::Accumulation); - } - // TODO: Don't handle products with timespan as non-statistical if they are not handled above! // if (has(mars, "timespan")) { // throw utils::exceptions::Mars2GribMatcherException("MARS contains `timespan` but typeOfStatisticalProcessing