5 #include <radarlib/radar.hpp>
11 #include <tclap/CmdLine.h>
17 using namespace volume;
18 namespace odim = OdimH5v21;
20 int main(
int argc,
char* argv[])
22 TCLAP::CmdLine cmd(
"stat_CleanID ",
' ',
"0.1" );
24 TCLAP::UnlabeledValueArg<std::string> cmd_vol_input(
"h5_volume_input",
"hdf5 volume input",
true,
"NULL",
"h5-volume-output");
25 cmd.add(cmd_vol_input);
27 TCLAP::UnlabeledValueArg<std::string> cmd_vol_output(
"h5_volume_output",
"hdf5 volume output",
true,
"NULL",
"h5-volume-output");
28 cmd.add(cmd_vol_output);
30 TCLAP::UnlabeledValueArg<std::string> cmd_radar(
"radar_name",
"radar name",
true,
"NULL",
"radar-name");
33 TCLAP::ValueArg<std::string> cmd_fuzzy_path(
"F",
"fuzzy-path",
"Set path of fuzzy logic files",
false, FUZZY_PATH,
"path");
34 cmd.add(cmd_fuzzy_path);
36 TCLAP::SwitchArg cmd_use_undetect(
"U",
"use-undetect",
"Use undetect TODO",
false);
37 cmd.add(cmd_use_undetect);
41 const char* fuzzy_path = cmd_fuzzy_path.getValue().c_str();
53 full_volume_cleanID.
quantity=
"ClassID";
54 full_volume_diffprob.
quantity=
"Diffprob";
56 string radar_name = cmd_radar.getValue();
57 bool init_sqi =
false;
68 loader_all.
load(cmd_vol_input.getValue());
70 if ( !full_volume_wrad.empty() && !full_volume_vrad.empty())
72 unsigned last = full_volume_z.size() -1;
73 if (full_volume_zdr.empty())
77 if (full_volume_sqi.empty()){
81 for (
unsigned i = 0; i < full_volume_z.size(); ++i){
82 full_volume_cleanID.
append_scan(full_volume_z.at(i).beam_count,full_volume_z.at(i).beam_size,full_volume_z.at(i).elevation, full_volume_z.at(i).cell_size, 0);
83 full_volume_diffprob.
append_scan(full_volume_z.at(i).beam_count,full_volume_z.at(i).beam_size,full_volume_z.at(i).elevation, full_volume_z.at(i).cell_size);
85 full_volume_sqi.
append_scan(full_volume_z.at(i).beam_count,full_volume_z.at(i).beam_size,full_volume_z.at(i).elevation, full_volume_z.at(i).cell_size);
86 full_volume_sqi.at(i).setZero();
93 Input.push_back(full_volume_z.at(i));
94 Input2.push_back(full_volume_z.at(i+1));
95 radarelab::volume::textureVD(Input, Input2, Texture,
true);
96 Texture.at(0).nodata=65535.;
97 Texture.at(0).undetect=0.;
98 Texture.at(0).gain=200./65535.;
99 Texture.at(0).
offset=-100.;
101 cout<<
"it="<<i<<
", Texture size = "<<Texture.size()<<
" "<<Texture.at(0).size()<<endl;
108 Texture.
append_scan(full_volume_z.at(i).beam_count,full_volume_z.at(i).beam_size,full_volume_z.at(i).elevation, full_volume_z.at(i).cell_size);
109 Texture.at(0).setZero();
110 Texture.at(0).nodata=65535.;
111 Texture.at(0).undetect=0.;
112 Texture.at(0).gain=200./65535.;
113 Texture.at(0).
offset=-100.;
114 cout<<
"it="<<i<<
", Texture size = "<<Texture.size()<<
" "<<Texture.at(0).size()<<endl;
119 radarelab::algo::Cleaner::evaluateClassID(full_volume_z.at(i), full_volume_wrad.at(i), full_volume_vrad.at(i), full_volume_zdr.at(i), full_volume_rohv.at(i), full_volume_sqi.at(i), full_volume_snr.at(i), Texture.at(0), full_volume_cleanID.at(i), full_volume_diffprob.at(i), full_volume_vrad.at(i).undetect , radar_name, fuzzy_path, i,
true);
122 radarelab::algo::Cleaner::evaluateClassID(full_volume_z.at(i), full_volume_wrad.at(i), full_volume_vrad.at(i), full_volume_cleanID.at(i), full_volume_vrad.at(i).undetect, radar_name, fuzzy_path, i);
125 double new_value=full_volume_z.at(last).nodata;
126 if (cmd_use_undetect.getValue()) new_value=full_volume_z.at(last).undetect;
127 cout<<
"novalue"<<new_value<<endl;
128 for (
unsigned ii = 0; ii < full_volume_z.at(i).beam_count; ++ii)
129 for (
unsigned ib = 0; ib < full_volume_z.at(i).beam_size; ++ib) {
131 if(full_volume_cleanID.at(i)(ii,ib) )
132 full_volume_z.at(i)(ii,ib)= new_value;
138 vector <std::string> Sweep(full_volume_cleanID.at(0).beam_count,
"" );
140 my_time = Radar::timeutils::absoluteToString(full_volume_z.
load_info->acq_date);
141 for (
unsigned iel = 0; iel< full_volume_cleanID.size(); iel++){
143 auto Weather = (full_volume_cleanID.at(iel).array() == 0 && full_volume_z.at(iel).array() >= -30.).rowwise().count() ;
144 auto Clutter = (full_volume_cleanID.at(iel).array() == 1 ).rowwise().count() ;
145 auto Interf = (full_volume_cleanID.at(iel).array() >= 2 && full_volume_cleanID.at(iel).array() <= 4 ).rowwise().count() ;
147 for (
unsigned iray=0; iray < full_volume_cleanID.at(iel).beam_count; iray ++){
150 sprintf(Ray,
", %5.1f, %5d, %5d, %5d",full_volume_z.at(iel).elevation, Weather(iray), Clutter(iray), Interf(iray));
156 printf(
"DateTime, Azimuth, Elev_01, Weather_E01,Clutter_E01, Iterf_E01, Elev_02, Weather_E02,Clutter_E02, Iterf_E02, Elev_03, Weather_E03,Clutter_E03, Iterf_E03, Elev_04, Weather_E04,Clutter_E04, Iterf_E04, Elev_05, Weather_E05,Clutter_E05, Iterf_E05, Elev_06, Weather_E06,Clutter_E06, Iterf_E06\n");
157 for (
unsigned iray=0; iray < Sweep.size(); iray ++){
158 printf(
"%s,%6.1f %s\n",my_time.c_str(), full_volume_z.at(0).azimuths_real(iray),Sweep[iray].c_str());
PolarScan< T > & append_scan(unsigned beam_count, unsigned beam_size, double elevation, double cell_size, const T &default_value=algo::DBZ::BYTEtoDB(1))
Append a scan to this volume.
std::string quantity
Odim quantity name.
std::shared_ptr< LoadInfo > load_info
Polar volume information.
Codice per il caricamento di volumi ODIM in radarelab.
void request_quantity(const std::string &name, Scans< double > *volume)
Define a request - Fill to_load attribute
void load(const std::string &pathname)
Load method.
Struttura che eredita da Loader e definisce i metodi per accedere ai dati ODIM.
Definisce le principali strutture che contengono i dati.