16 #include "cartproducts.h"
17 #include "cum_bac_clparser.h"
61 static void startup_banner(CUM_BAC_CLOPT *opt)
63 LOG_CATEGORY(
"radar.banner");
67 #ifdef WRITE_DBP_REORDER
80 LOG_INFO(
"Lancio Programma");
81 LOG_INFO(
"-----------------------------------------------------------------");
82 std::string FlagRunTime =
"Flag di RunTime: ";
84 FlagRunTime=FlagRunTime+
" "+opt->sito;
85 if(opt->do_declut)FlagRunTime=FlagRunTime+
" DECLUTTER";
86 if(!opt->do_medium)FlagRunTime=FlagRunTime+
" SHORT";
87 if(opt->do_medium)FlagRunTime=FlagRunTime+
" MEDIUM";
88 if(opt->do_beamblocking)FlagRunTime=FlagRunTime+
" BEAMBLOCKING";
89 if(opt->do_quality)FlagRunTime=FlagRunTime+
" QUALITY";
90 if(opt->do_readStaticMap) FlagRunTime=FlagRunTime +
" STATIC";
92 LOG_INFO(
"%s", FlagRunTime.c_str());
94 LOG_INFO(
"-----------------------------------------------------------------");
95 LOG_INFO(
"Variabili d'Ambiente:");
96 LOG_INFO(
"LISTA_FILE = %s", getenv(
"LISTA_FILE"));
97 LOG_INFO(
"LAST_FILE = %s", getenv(
"LAST_FILE"));
98 LOG_INFO(
"ANAP_STAT_FILE = %s", getenv(
"ANAP_STAT_FILE"));
99 LOG_INFO(
"BLOC_STAT_FILE = %s", getenv(
"BLOC_STAT_FILE"));
100 LOG_INFO(
"ELEV_STAT_FILE = %s", getenv(
"ELEV_STAT_FILE"));
101 LOG_INFO(
"DIR_OUT_PP_BLOC = %s", getenv(
"DIR_OUT_PP_BLOC"));
102 LOG_INFO(
"FILE_DEM_SPC = %s", getenv(
"FILE_DEM_SPC"));
103 LOG_INFO(
"FILE_DEM_GAT = %s", getenv(
"FILE_DEM_GAT"));
104 LOG_INFO(
"DIR_QUALITY = %s", getenv(
"DIR_QUALITY"));
105 LOG_INFO(
"FIRST_LEVEL_FILE = %s", getenv(
"FIRST_LEVEL_FILE"));
106 LOG_INFO(
"OUTPUT_Z_DIR = %s", getenv(
"OUTPUT_Z_DIR"));
107 LOG_INFO(
"OUTPUT_RAIN_DIR = %s", getenv(
"OUTPUT_RAIN_DIR"));
108 LOG_INFO(
"OUTPUT_Z_LOWRIS_DIR = %s", getenv(
"OUTPUT_Z_LOWRIS_DIR"));
109 LOG_INFO(
"-----------------------------------------------------------------");
115 fprintf(stderr,
"%s\n\n", msg);
116 fprintf(stderr,
"Usage: %s volume_file file_type site_name\n", progname);
123 #define NUM_MIN_BEAM 200
125 #define SHORT_FULL_VOLUME 1
127 #define MEDIUM_PULSE 3
129 LOG_CATEGORY(
"radar.io");
132 int expected_size_cell = 0;
138 LOG_INFO(
"CASO SHORT_DEC");
141 expected_size_cell = 250;
145 case SHORT_FULL_VOLUME:
146 LOG_INFO(
"CASO SHORT_FULL_VOLUME");
148 throw runtime_error(
"File con Declutter Dinamico");
149 expected_size_cell = 250;
153 LOG_INFO(
"CASO SHORT_HAIL");
154 expected_size_cell = 250;
158 LOG_INFO(
"CASO MEDIO OLD");
159 expected_size_cell = 1000;
163 LOG_INFO(
"CASO SHORT_212");
166 expected_size_cell = 250;
174 LOG_ERROR(
"File Risoluzione/size_cell non costante nel volume");
175 throw runtime_error(
"File Risoluzione/size_cell non costante");
178 if (volume[0].cell_size != expected_size_cell)
180 LOG_ERROR(
"File Risoluzione/size_cell Sbagliata %f", volume[0].cell_size);
181 throw runtime_error(
"File Risoluzione/size_cell Sbagliata");
185 if (volume.size() < n_elev)
187 LOG_ERROR(
"Volume has %zd elevations, but we are expecting at least %d", volume.size(), n_elev);
188 throw runtime_error(
"Insufficient elevation count");
191 unsigned count_good = 0, bin_in_vol=0;
192 for (
unsigned k = 0; k < volume.size(); k++)
194 LOG_INFO(
"Numero beam presenti: %4u -- elevazione %d", volume[k].beam_count, k);
196 if (volume[k].beam_count < NUM_MIN_BEAM)
199 LOG_ERROR(
"Trovati Pochi Beam Elevazione %2d - num.: %3d", k, volume[k].beam_count);
200 throw runtime_error(
"Insufficient beam count");
203 count_good += (volume[k].array() > -19.0).count();
204 bin_in_vol += volume.
beam_count*volume[k].beam_size;
209 if ((
float) (count_good)/bin_in_vol > 0.9 ){
210 LOG_ERROR(
"Trovati troppi dati > -19 dBZ %5.2f\%, volume con possibile problema di AFC", (
float) (count_good)/bin_in_vol*100.);
211 throw runtime_error (
"Possible bad volume (AFC)");
232 int main (
int argc,
char **argv)
241 CUM_BAC_CLOPT CL_opt;
242 parseOptions(argc,argv,&CL_opt);
243 PrintOptions(&CL_opt);
249 LOG_CATEGORY(
"radar.main");
252 if(CL_opt.do_medium) MyMAX_BIN=1024;
258 nome_file = (
char *)CL_opt.filename.c_str();
259 file_type = CL_opt.filetype;
260 sito = (
char *)CL_opt.sito.c_str();
261 fuzzypath = (
char *)CL_opt.fuzzy_path.c_str();
263 if(CL_opt.do_medium && CL_opt.filetype == 3) MyMAX_BIN = 512;
265 elaboradar::Config cfg;
269 startup_banner(&CL_opt);
271 const Site& site(Site::get(sito));
272 site.datipath = fuzzypath;
275 cout<<
"volume size = "<<volume.size()<<endl;
277 if (CL_opt.data_in_odim)
279 CUM_BAC::read_odim_volume(volume, site, nome_file, fuzzypath, CL_opt.do_clean, CL_opt.do_medium, CL_opt.set_undetect);
282 CUM_BAC::read_sp20_volume(volume, site, nome_file, CL_opt.do_clean, CL_opt.do_medium);
283 }
catch (std::exception& e) {
284 LOG_ERROR(
"Errore nel caricamento del volume: %s", e.what());
287 check_volume(volume, file_type);
289 unique_ptr<elaboradar::CUM_BAC> cb(
new elaboradar::CUM_BAC(volume, cfg, site, CL_opt.do_medium,MyMAX_BIN));
291 cb->do_quality = CL_opt.do_quality;
292 cb->do_beamblocking = CL_opt.do_beamblocking;
293 cb->do_declutter = CL_opt.do_declut;
294 cb->do_bloccorr = CL_opt.do_bloccor;
295 cb->do_class = CL_opt.do_class;
296 cb->do_devel = CL_opt.do_devel;
297 cb->do_readStaticMap= CL_opt.do_readStaticMap;
298 cb->do_zlr_media =
true;
299 cb->do_anaprop = CL_opt.do_anaprop;
303 if (CL_opt.do_clean) algos = algos+
"CL";
304 if (CL_opt.do_anaprop) algos = algos+
"_AP";
305 if (CL_opt.do_beamblocking) algos = algos+
"_BB";
308 LOG_INFO(
"inizio rimozione anaprop e beam blocking");
309 for(
unsigned k=0; k<volume.size(); k++) LOG_INFO(
" SCAN # %2d - BeamSIZE %4d",k,volume[k].beam_size);
310 cb->declutter_anaprop();
311 cb->caratterizzo_volume();
313 unsigned CART_DIM_ZLR = CL_opt.do_medium ? 512 : 256;
314 unsigned ZLR_N_ELEMENTARY_PIXEL = volume.at(0).cell_size == 1000. ? 1 : 4;
315 if (CL_opt.do_SaveBothRanges) {
316 if (volume.
max_beam_size() * volume.at(0).cell_size * 0.001 > 128 ){
320 CL_opt.do_SaveBothRanges =
false;
324 if (CL_opt.do_intermediateProd){
325 CartProducts products(volume, CART_DIM_ZLR, ZLR_N_ELEMENTARY_PIXEL);
326 cb->generate_maps(products);
327 products.write_out(cb->assets,CART_DIM_ZLR, algos);
328 OdimProdDefs odimProd(products.z_out, products.qual_Z_1x1, products.ScaledRes);
329 products.write_odim(cb->assets, CART_DIM_ZLR, algos, odimProd);
330 if (CL_opt.do_SaveFullRes){
331 OdimProdDefs odimProdFullRes(products.z_fr, products.FullsizeRes);
332 products.write_odim(cb->assets, 256. * ZLR_N_ELEMENTARY_PIXEL, algos, odimProdFullRes);
334 if (CL_opt.do_SaveBothRanges){
335 LOG_INFO(
"Salvo sub-image intermedie");
336 products.write_out(cb->assets, 256, algos);
337 products.write_odim(cb->assets, 256, algos,odimProd);
344 if (cb->do_quality) cb->vpr_class();
345 if (CL_opt.do_vpr) algos = algos+
"_VPR";
346 if (CL_opt.do_class) algos = algos+
"_CLASS";
348 CartProducts products(volume, CART_DIM_ZLR, ZLR_N_ELEMENTARY_PIXEL);
349 cb->generate_maps(products);
350 OdimProdDefs odimProd(products.z_out, products.qual_Z_1x1, products.ScaledRes);
351 if (CL_opt.do_SaveBothRanges){
352 products.write_out(cb->assets,CART_DIM_ZLR,algos);
353 products.write_odim(cb->assets, CART_DIM_ZLR, algos, odimProd);
354 LOG_INFO(
"Salvo sub-image");
355 products.write_out(cb->assets, 256, algos);
356 products.write_odim(cb->assets, 256, algos, odimProd);
358 products.write_out(cb->assets,CART_DIM_ZLR,algos);
359 products.write_odim(cb->assets, CART_DIM_ZLR, algos, odimProd);
362 if (CL_opt.do_SaveFullRes){
363 OdimProdDefs odimProdFullRes(products.z_fr, products.FullsizeRes);
364 products.write_odim(cb->assets, 256. * ZLR_N_ELEMENTARY_PIXEL, algos, odimProdFullRes);
366 }
catch (std::exception& e) {
367 LOG_ERROR(
"Errore nella processazione: %s", e.what());
371 LOG_INFO(
"End of processing, result: %d", ier_main);
Classe principale del programma.
const unsigned max_beam_size() const
Return the maximum beam size in all PolarScans.
const unsigned beam_count
Number of beam_count used ast each elevations.
bool is_unique_cell_size() const
Test if same cell_size in all PolarScans.
std::shared_ptr< LoadInfo > load_info
Polar volume information.
codice principale di elaborazione dei volumi di riflettivita' radar usato per impulso corto
void commandline_error(const char *progname, const char *msg)
Report a command line error and quit.
name space generale del programma
void printwork()
funzione che stampa l'ambiente lavoro con chiamata a LOG_INFO
int setwork(char *sito)
funzione che setta ambiente lavoro nel caso non sia settato dall'esterno
settaggio ambiente lavoro nel caso non sia settato dall'esterno
definisce struttura Site Contiene le informazioni di base che caratterizzano il sito radar