Elaboradar 0.1
|
◆ caratterizzo_volume()
funzione che caratterizza i volumi polari tramite la qualita' utilizza i parametri di ouput dell'elaborazione e la PIA calcolata qui per calcolare un valore finale di qualita' del dato. Inoltre calcola il top dell'eco in base a soglia su ogni pixel. Definizione alla linea 636 del file cum_bac.cpp. 637{
638 LOG_DEBUG("start caratterizzo_volume");
639
640 HRay hray_inf(volume); /*quota limite inferiore fascio in funzione della distanza e elevazione*/
641 hray_inf.load_hray_inf(assets);
642
643 cout<<"sono in caratterizzo volume"<<endl;
644
645 // path integrated attenuation
646 double PIA;
647 // dimensione verticale bin calcolata tramite approcio geo-ottico
648 float dh=1.;
649 // distanza radiosondaggio,
650 float dhst=1.;
651 // tempo dal radiosondaggio
652 float drrs=1.;
653 // distanza dal radar
654 float dist=1.;
655 // beam blocking
656 unsigned char bb=0;
657 // indice clutter da anaprop
658 unsigned char cl=0;
659
660 //----------ciclo su NSCAN(=6), cioè sul numero di elevazioni (nominali) per le quali ho calcolato il beam blocking
661 /* a questo punto servono: bb, cl, PIA, dtrs e drrs radiosond, quota, hsup e hinf beam-----------------*/
662
664 {
666 for (int i=0; i<NUM_AZ_X_PPI; i++)/*ciclo azimuth*/
667 {
668 const double elevaz = scan.elevations_real(i); //--- elev reale in gradi
669
670 //--assegno PIA=0 lungo il raggio NB: il ciclo nn va cambiato in ordine di indici!
671 PIA=0.;
672
673 for (unsigned k=0; k<scan.beam_size; k++)/*ciclo range*/
674 {
675 double sample = scan.get(i, k);
676
677 //---------distanza in m dal radar (250*k+125 x il corto..)
678 dist = k * scan.cell_size + scan.cell_size / 2.;/*distanza radar */
679
680 //-----distanza dal radiosondaggio (per GAT si finge che sia colocato ..), perchè? (verificare che serva )
681 drrs=dist;
682 /* if (!(strcmp(sito,"GAT")) ) { */
683 /* drrs=dist; */
684 /* } */
685 /* if (!(strcmp(sito,"SPC")) ) { */
686 /* drrs=dist; */
687 /* } */
688
689
690 //assegno la PIA (path integrated attenuation) nel punto e POI la incremento (è funzione dell'attenuazione precedente e del valore nel punto)
692
693 //------calcolo il dhst ciè l'altezza dal bin in condizioni standard utilizzando la funzione quota_f e le elevazioni reali
694 dhst = PolarScanBase::sample_height(elevaz + 0.45, dist)
695 - PolarScanBase::sample_height(elevaz - 0.45, dist);
696
697 //----qui si fa un po' di mischione: finchè ho il dato dal programma di beam blocking uso il dh con propagazione da radiosondaggio, alle elevazioni superiori assegno dh=dhst e calcolo quota come se fosse prop. standard, però uso le elevazioni nominali
698
700 // differenza tra limite sup e inf lobo centrale secondo appoccio geo-ott
701 dh = hray_inf(l + 1, k) - hray_inf(l, k);
702 }
703 else {
704 // non ho le altezze oltre nscan-1 pero' suppongo che a tali elevazioni la prop. si possa considerare standard
705 dh = dhst;
706 }
707
709 cl=algo::ANAP_YES;
710 bb=BBMAX;
713 bb=beam_blocking(i, k); /*bb al livello della mappa dinamica *///sarebbe da ricontrollare perchè con la copia sopra non è più così
715 cl=0; /*per come viene scelta la mappa dinamica si suppone che al livello superiore cl=0 e bb=0*/
716 bb=0; // sarebbe if (l-bb_first_level(i, k) >0 bb=0; sopra all'elevazione per cui bb<soglia il bb sia =0 dato che sono contigue o più però condiz. inclusa
717 }
718
719 //------dato che non ho il valore di beam blocking sotto i livelli che ricevo in ingresso ada progrmma beam blocking e
720 //--------dato che sotto elev_fin rimuovo i dati come fosse anaprop ( in realtà c'è da considerare che qui ho pure bb>50%)
721 //--------------assegno qualità zero sotto il livello di elev_fin (si può discutere...), potrei usare first_level_static confrontare e in caso sia sotto porre cl=1
724 cl=2;
725 } else {
726 //--bisogna ragionare di nuovo su definizione di qualità con clutter se si copia il dato sopra.--
727
728 //--calcolo la qualità --
729 // FIXME: qui tronca: meglio un round?
730 qual.scan(l).set(i, k, (unsigned char)(func_q_Z(cl,bb,dist,drrs,hray_inf.dtrs,dh,dhst,PIA)*100));
731 }
732
735 {
736 /* sezione PREPARAZIONE DATI VPR*/
737 if(cl==0 && bb<BBMAX_VPR ) /*pongo le condizioni per individuare l'area visibile per calcolo VPR, riduco il bb ammesso (BBMAX_VPR=20)*/ //riveder.....?????
738 flag_vpr.scan(l).set(i, k, 1);
739 }
740 }
741 }
742 }
743
744 LOG_DEBUG("End caratterizzo_volume");
745 return;
746}
radarelab::Volume< double > & volume Set to Z undetect value the Zpixels classified as non-meteo echoes. Definition: cum_bac.h:106 radarelab::PolarScan< unsigned char > beam_blocking mappa di beam blocking (input) Definition: cum_bac.h:127 static unsigned char DBtoBYTE(double DB, double gain=80./255., double offset=-20.) funzione che converte dB in valore intero tra 0 e 255 Definition: dbz.h:94 double attenuation(unsigned char DBZbyte, double PIA) funzione che calcola l'attenuazione totale Definition: dbz.cpp:51 float func_q_Z(unsigned char cl, unsigned char bb, float dst, float dr, float dt, float dh, float dhst, float PIA) funzione che calcola la qualita' per Z Definition: func_Q3d.cpp:8 double sample_height(unsigned cell_idx) const Return the height (in meters) of the sample at the given cell indexa. Definition: volume.cpp:37 Referenzia anaprop, assets, radarelab::algo::DBZ::attenuation(), beam_blocking, calcolo_vpr, radarelab::algo::DBZ::DBtoBYTE(), dbz, func_q_Z(), qual, radarelab::PolarScanBase::sample_height(), radarelab::volume::Scans< T >::scan(), e volume. Referenziato da vpr_class(). |