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,
const Eigen::VectorXd &  beam_sd,
PolarScan< double > &  scan_z,
PolarScan< double > &  scan_w,
PolarScan< double > &  scan_v,
PolarScan< double > &  SD,
int  iray 
) const

Funzione per ripulire raggio.

Utilizza (sigmaV, V, dev.std Z)

Parametri
[in]beam_z- raggio DBZH
[in]beam_w- raggio WRAD
[in]beam_v- raggio VRAD
[in]beam_sd- raggio deviazione standard DBZH
[in]scan_z- per debug
[in]scan_w- per debug
[in]scan_v- per debug
[in]SD- per debug
[in]iray- index of the ray per debug
Restituisce
raggio di flag per correzione

Definizione alla linea 288 del file cleaner.cpp.

289 {
290  const unsigned beam_size = beam_z.rows();
291  vector<bool> res(beam_size, false);
292  bool in_a_segment = false;
293  unsigned start, end;
294  unsigned segment_length;
295  bool before, after;
296  unsigned counter = 0;
297 
298  for (unsigned ibin = 0; ibin < beam_size; ++ibin)
299  {
300 // printf(" %4d %4d %6.2f %6.2f %10.6f %6.2f ",iray,ibin , beam_z(ibin),beam_v(ibin),beam_w(ibin), beam_sd(ibin));
301 //printf(" ----- %2x %2x %2x %2x ",(unsigned char)((beam_z(ibin)-scan_z.offset)/scan_z.gain/256),
302 //(unsigned char)((beam_v(ibin)-scan_v.offset)/scan_v.gain/256),
303 //(unsigned char)((beam_w(ibin)-scan_w.offset)/scan_w.gain/256),
304 //(unsigned char)((beam_sd(ibin)-SD.offset)/SD.gain/256));
305  if (!in_a_segment)
306  {
307  /* cerco la prima cella segmento da pulire*/
308  if ( ((beam_w(ibin) == W_threshold && beam_v(ibin) == bin_wind_magic_number) ||(beam_w(ibin) * fabs(beam_v(ibin)) <= 0.25) ) && beam_z (ibin) != Z_missing && beam_sd(ibin) > sd_threshold )
309  {
310 // printf(" 1 ----- START SEGMENT ------");
311  in_a_segment = true;
312  start = ibin;
313  after = false;
314  before = false;
315  }
316 // else printf(" 0 ");
317  } else {
318  /* cerco la fine segmento da pulire*/
319  if ( ( ( beam_w(ibin) != W_threshold || beam_v(ibin) != bin_wind_magic_number) && (beam_w(ibin) * fabs(beam_v(ibin)) > 0.25) ) || ibin == (beam_size - 1) || beam_z(ibin) == Z_missing || beam_sd(ibin) <= sd_threshold )
320  {
321  in_a_segment = false;
322  end = ibin - 1;
323  if (ibin == (beam_size - 1)) end = ibin; // caso particolare per fine raggio
324  /* Fine trovata ora procedo alla pulizia eventuale */
325  segment_length = end - start+1;
326  counter = counter + (unsigned)(segment_length);
327 
328 /* il segmento è corto allora cerco nei dintorni dei dati validi, se li trovo non pulisco */
329  if (segment_length <= 2*min_segment_length ){
330  /* Cerco dati validi in Z prima del segmento */
331  int count=0;
332  for (int ib = ibin - 2*min_segment_length; ib < (signed)ibin; ++ib)
333  if (ib >= 0 && (beam_z(ib) > Z_missing && beam_w(ib) != W_threshold && ( beam_w(ib) > 0.5 || fabs(beam_v(ib)) > 0.5) ) )
334  count++;
335  if (double(count)/double(min(int(ibin),int(2*min_segment_length))) >=0.25) before = true;
336 
337  /* Cerco dati validi in Z dopo il segmento */
338  count = 0;
339  for (unsigned ia = ibin + 1; ia <= ibin + 2*min_segment_length; ++ia)
340  if (ia < beam_size && (beam_z(ia) > Z_missing && (beam_w(ia) != W_threshold && ( beam_w(ia) > 0.5 || fabs(beam_v(ia)) > 0.5)) ))
341  count ++;
342  if (double(count)/double(min(int(beam_size - ibin),int(2*min_segment_length))) >=0.25) after = true;
343  }
344 // printf(" 0 ----- STOP SEGMENT ------ %4d -- %4d before %d after %d ",segment_length,counter, before,after);
345  if ((segment_length >= min_segment_length && (!before || !after) ) || segment_length >= max_segment_length)
346  // if ((segment_length >= min_segment_length ) || segment_length >= max_segment_length)
347  {
348  /* qui pulisco */
349  // printf (" pulisco %d %d %d \n",segment_length, min_segment_length, max_segment_length);
350  for (unsigned ib = start; ib <= end; ++ib)
351  res[ib] = true;
352  }
353  }
354 // else printf(" 1 ");
355 
356  }
357 // printf("\n");
358  }
359  return res;
360 }
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 double sd_threshold
Soglia per devizione standard DBZH.
Definition: cleaner.h:26
const unsigned min_segment_length
lunghezza minima segmento in celle
Definition: cleaner.h:19