Elaboradar  0.1
 Tutto Classi Namespace File Funzioni Variabili Tipi enumerati (enum) Gruppi
std::vector< bool > radarelab::algo::Cleaner::clean_beam ( const Eigen::VectorXd &  beam_z,
const Eigen::VectorXd &  beam_w,
const Eigen::VectorXd &  beam_v,
int  i 
) const

Funzione per ripulire raggio.Utilizza (sigmaV, V)

Parametri
[in]beam_z- raggio DBZH
[in]beam_w- raggio WRAD
[in]beam_v- raggio VRAD
Restituisce
raggio di valori boleani per correzione (true-> Da Correggere)

Definizione alla linea 32 del file cleaner.cpp.

Referenziato da clean().

33 {
34  const unsigned beam_size = beam_z.rows();
35  vector<bool> res(beam_size, false);
36  bool in_a_segment = false;
37  unsigned start, end;
38  unsigned segment_length;
39  bool before, after;
40  unsigned counter = 0;
41 
42  for (unsigned ibin = 0; ibin < beam_size; ++ibin)
43  {
44 //printf(" %4d %4d %6.2f %6.2f %10.6f ",iray,ibin , beam_z(ibin),beam_v(ibin),beam_w(ibin));
45  if (!in_a_segment)
46  {
47  /* cerco la prima cella segmento da pulire*/
48  if (beam_w(ibin) == W_threshold && beam_v(ibin) == bin_wind_magic_number)
49  {
50 //printf(" 1 ----- START SEGMENT ------");
51  in_a_segment = true;
52  start = ibin;
53  after = false;
54  before = false;
55  }
56 // else printf(" 0 ");
57  } else {
58  /* cerco la fine segmento da pulire*/
59  if (beam_w(ibin) != W_threshold || beam_v(ibin) != bin_wind_magic_number || ibin == (beam_size - 1))
60  {
61  in_a_segment = false;
62  end = ibin - 1;
63  if (ibin == (beam_size - 1)) end = ibin; // caso particolare per fine raggio
64  /* Fine trovata ora procedo alla pulizia eventuale */
65  segment_length = end - start;
66  counter = counter + (unsigned)(segment_length);
67 
68  unsigned c_b=0;
69  unsigned c_a=0;
70  /* Cerco dati validi in Z prima del segmento */
71  for (int ib = ibin - 12; ib < (signed)ibin; ++ib)
72  if (ib >= 0 && beam_z(ib) > Z_missing)
73  c_b++;
74  if (c_b > 0.25*12) before = true;
75 
76  /* Cerco dati validi in Z dopo il segmento */
77  for (unsigned ia = ibin + 1; ia <= ibin + 12; ++ia)
78  if (ia < beam_size && beam_z(ia) >= Z_missing)
79  c_a++;
80  if (c_a > 0.25*12) after = true;
81 
82 //printf(" 0 ----- STOP SEGMENT ------ %4d -- %4d before %d %d after %d %d ",segment_length,counter, c_b,before, c_a, after);
83  if ((segment_length >= min_segment_length && !before && !after) ||
84  segment_length >= max_segment_length || counter > 100)
85  {
86  /* qui pulisco */
87  // printf (" pulisco %d %d %d \n",segment_length, min_segment_length, max_segment_length);
88  for (unsigned ib = start; ib <= end; ++ib)
89  if( beam_z(ib) > Z_missing)res[ib] = true;
90  }
91  }
92 // else printf(" 1 ");
93  }
94 //printf("\n");
95  }
96  return res;
97 }
const double bin_wind_magic_number
valore magico per dati in formato SP20
Definition: cleaner.h:25
const double W_threshold
Soglia per WRAD.
Definition: cleaner.h:23
const double Z_missing
Valore dato mancante DBZH.
Definition: cleaner.h:22
const unsigned max_segment_length
lunghezza massima segmento in celle se più lungo pulisce in ogni caso
Definition: cleaner.h:20
const unsigned min_segment_length
lunghezza minima segmento in celle
Definition: cleaner.h:19