Read from ODIM data file.
192 using namespace radarelab::volume;
193 LOG_CATEGORY(
"radar.io");
194 namespace odim = OdimH5v21;
195 LOG_INFO(
"Reading %s for site %s", nome_file,
site.
name.c_str());
204 loader.request_quantity(odim::PRODUCT_QUANTITY_DBZH, &dbzh_volume);
205 loader.request_quantity(odim::PRODUCT_QUANTITY_TH, &th_volume);
209 loader.request_quantity(odim::PRODUCT_QUANTITY_VRAD, &v_volume);
210 loader.request_quantity(odim::PRODUCT_QUANTITY_WRAD, &w_volume);
211 loader.request_quantity(odim::PRODUCT_QUANTITY_ZDR, &zdr_volume);
213 loader.load(nome_file);
216 if (dbzh_volume.empty() && th_volume.empty())
218 LOG_ERROR(
"neither DBZH nor TH were found in %s", nome_file);
219 throw runtime_error(
"neither DBZH nor TH were found");
224 for (
auto i: loader.to_load){
225 if(!i.second->empty() ) i.second->normalize_elevations(elev_array);
228 if (!dbzh_volume.empty()) {
229 LOG_WARN(
" DBZH found");
230 z_volume = &dbzh_volume;
233 LOG_WARN(
"no DBZH found: using TH");
234 z_volume = &th_volume;
237 if (do_clean && !w_volume.empty() && !v_volume.empty())
239 if (zdr_volume.empty())
243 for (
unsigned i = 0; i < z_volume->size(); ++i){
245 full_volume_cleanID.
append_scan(z_volume->at(i).beam_count,z_volume->at(i).beam_size,z_volume->at(i).elevation, z_volume->at(i).cell_size);
246 radarelab::algo::Cleaner::evaluateCleanID(z_volume->at(i), w_volume.at(i), v_volume.at(i),full_volume_cleanID.at(i),i);
247 for (
unsigned ibeam=0;ibeam<z_volume->at(i).beam_count; ibeam++)
248 for (
unsigned j=0; j<z_volume->at(i).beam_size; j++){
249 if (full_volume_cleanID.at(i)(ibeam,j) != 0) z_volume->at(i)(ibeam,j)=z_volume->at(i).undetect;
253 for (
unsigned i = 0; i < z_volume->size(); ++i){
254 algo::Cleaner::clean(z_volume->at(i), w_volume.at(i), v_volume.at(i),zdr_volume.at(i),i,
true);
255 algo::Cleaner::clean(z_volume->at(i), w_volume.at(i), v_volume.at(i),zdr_volume.at(i),i+100,
true);
260 algo::azimuthresample::MaxOfClosest<double> resampler;
261 resampler.resample_volume(*z_volume, volume, 1.0);
Struttura che eredita da Loader e definisce i metodi per accedere ai dati ODIM.
bool do_medium
medium processing flag
virtual std::vector< double > get_elev_array(bool medium=false) const =0
return the elev array used
PolarScan< T > & append_scan(unsigned beam_count, unsigned beam_size, double elevation, double cell_size)
Append a scan to this volume.
std::string name
Nome sito radar.
const Site & site
site information object