Elaboradar  0.1
 Tutto Classi Namespace File Funzioni Variabili Tipi enumerati (enum) Gruppi
void elaboradar::CUM_BAC::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 557 del file cum_bac.cpp.

Referenzia anaprop, radarelab::algo::DBZ::attenuation(), beam_blocking, calcolo_vpr, dbz, func_q_Z(), qual, radarelab::volume::Scans< T >::scan(), e volume.

Referenziato da vpr_class().

558 {
559  LOG_DEBUG("start caratterizzo_volume");
560 
561  HRay hray_inf(volume); /*quota limite inferiore fascio in funzione della distanza e elevazione*/
562  hray_inf.load_hray_inf(assets);
563 
564  // path integrated attenuation
565  double PIA;
566  // dimensione verticale bin calcolata tramite approcio geo-ottico
567  float dh=1.;
568  // distanza radiosondaggio,
569  float dhst=1.;
570  // tempo dal radiosondaggio
571  float drrs=1.;
572  // distanza dal radar
573  float dist=1.;
574  // beam blocking
575  unsigned char bb=0;
576  // indice clutter da anaprop
577  unsigned char cl=0;
578 
579  //----------ciclo su NSCAN(=6), cioè sul numero di elevazioni (nominali) per le quali ho calcolato il beam blocking
580  /* a questo punto servono: bb, cl, PIA, dtrs e drrs radiosond, quota, hsup e hinf beam-----------------*/
581 
582  for (unsigned l=0; l<volume.size(); l++)/*ciclo elevazioni*/// VERIFICARE CHE VADA TUTTO OK
583  {
584  const auto& scan = volume[l];
585  for (int i=0; i<NUM_AZ_X_PPI; i++)/*ciclo azimuth*/
586  {
587  const double elevaz = scan.elevations_real(i); //--- elev reale in gradi
588 
589  //--assegno PIA=0 lungo il raggio NB: il ciclo nn va cambiato in ordine di indici!
590  PIA=0.;
591 
592  for (unsigned k=0; k<scan.beam_size; k++)/*ciclo range*/
593  {
594  double sample = scan.get(i, k);
595 
596  //---------distanza in m dal radar (250*k+125 x il corto..)
597  dist = k * scan.cell_size + scan.cell_size / 2.;/*distanza radar */
598 
599  //-----distanza dal radiosondaggio (per GAT si finge che sia colocato ..), perchè? (verificare che serva )
600  drrs=dist;
601  /* if (!(strcmp(sito,"GAT")) ) { */
602  /* drrs=dist; */
603  /* } */
604  /* if (!(strcmp(sito,"SPC")) ) { */
605  /* drrs=dist; */
606  /* } */
607 
608 
609  //assegno la PIA (path integrated attenuation) nel punto e POI la incremento (è funzione dell'attenuazione precedente e del valore nel punto)
610  PIA=dbz.attenuation(DBZ::DBtoBYTE(sample),PIA);
611 
612  //------calcolo il dhst ciè l'altezza dal bin in condizioni standard utilizzando la funzione quota_f e le elevazioni reali
613  dhst = PolarScanBase::sample_height(elevaz + 0.45, dist)
614  - PolarScanBase::sample_height(elevaz - 0.45, dist);
615 
616  //----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
617 
618  if (l<volume.size() -1 ) {
619  // differenza tra limite sup e inf lobo centrale secondo appoccio geo-ott
620  dh = hray_inf(l + 1, k) - hray_inf(l, k);
621  }
622  else {
623  // non ho le altezze oltre nscan-1 pero' suppongo che a tali elevazioni la prop. si possa considerare standard
624  dh = dhst;
625  }
626 
627  if (l < anaprop.elev_fin(i, k)) {
628  cl=algo::ANAP_YES;
629  bb=BBMAX;
630  } else if (l == anaprop.elev_fin(i, k)) {
631  cl=anaprop.dato_corrotto(i, k); /*cl al livello della mappa dinamica*/
632  bb=beam_blocking(i, k); /*bb al livello della mappa dinamica *///sarebbe da ricontrollare perchè con la copia sopra non è più così
633  } else if (l > anaprop.elev_fin(i, k)) {
634  cl=0; /*per come viene scelta la mappa dinamica si suppone che al livello superiore cl=0 e bb=0*/
635  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
636  }
637 
638  //------dato che non ho il valore di beam blocking sotto i livelli che ricevo in ingresso ada progrmma beam blocking e
639  //--------dato che sotto elev_fin rimuovo i dati come fosse anaprop ( in realtà c'è da considerare che qui ho pure bb>50%)
640  //--------------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
641  if (l < anaprop.elev_fin(i, k)) {
642  qual.scan(l).set(i, k, 0);
643  cl=2;
644  } else {
645  //--bisogna ragionare di nuovo su definizione di qualità con clutter se si copia il dato sopra.--
646 
647  //--calcolo la qualità--
648  // FIXME: qui tronca: meglio un round?
649  qual.scan(l).set(i, k, (unsigned char)(func_q_Z(cl,bb,dist,drrs,hray_inf.dtrs,dh,dhst,PIA)*100));
650  }
651 
652  if (qual.scan(l).get(i, k) ==0) qual.scan(l).set(i, k, 1);//????a che serve???
653  if (calcolo_vpr)
654  {
655  /* sezione PREPARAZIONE DATI VPR*/
656  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.....?????
657  flag_vpr.scan(l).set(i, k, 1);
658  }
659  }
660  }
661  }
662 
663  LOG_DEBUG("End caratterizzo_volume");
664  return;
665 }
Assets assets
others
Definition: cum_bac.h:88
radarelab::algo::DBZ dbz
????
Definition: cum_bac.h:107
PolarScan< T > & scan(unsigned idx)
Access a polar scan.
Definition: volume.h:298
CalcoloVPR * calcolo_vpr
Oggetto per calcolare e correggere con VPR.
Definition: cum_bac.h:110
radarelab::Volume< double > & volume
Polar volume of Reflectivity.
Definition: cum_bac.h:103
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&#39; per Z
Definition: func_Q3d.cpp:8
radarelab::PolarScan< unsigned char > beam_blocking
mappa di beam blocking (input)
Definition: cum_bac.h:124
radarelab::Volume< unsigned char > qual
qualita volume polare
Definition: cum_bac.h:132
double attenuation(unsigned char DBZbyte, double PIA)
funzione che calcola l&#39;attenuazione totale
Definition: dbz.cpp:51
radarelab::algo::Anaprop< double > anaprop
Oggetto per correzione ANAPRO.
Definition: cum_bac.h:126