Elaboradar 0.1
|
◆ clean_beam() [2/3]
Funzione per ripulire raggio. Utilizza (sigmaV, V, dev.std Z)
Definizione alla linea 294 del file cleaner.cpp. 295{
296 const unsigned beam_size = beam_z.rows();
297 vector<bool> res(beam_size, false);
298 bool in_a_segment = false;
299 unsigned start, end;
300 unsigned segment_length;
301 bool before, after;
302 unsigned counter = 0;
303
304 for (unsigned ibin = 0; ibin < beam_size; ++ibin)
305 {
306// 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));
307//printf(" ----- %2x %2x %2x %2x ",(unsigned char)((beam_z(ibin)-scan_z.offset)/scan_z.gain/256),
308//(unsigned char)((beam_v(ibin)-scan_v.offset)/scan_v.gain/256),
309//(unsigned char)((beam_w(ibin)-scan_w.offset)/scan_w.gain/256),
310//(unsigned char)((beam_sd(ibin)-SD.offset)/SD.gain/256));
311 if (!in_a_segment)
312 {
313 /* cerco la prima cella segmento da pulire*/
314 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 )
315 {
316// printf(" 1 ----- START SEGMENT ------");
317 in_a_segment = true;
318 start = ibin;
319 after = false;
320 before = false;
321 }
322// else printf(" 0 ");
323 } else {
324 /* cerco la fine segmento da pulire*/
325 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 )
326 {
327 in_a_segment = false;
328 end = ibin - 1;
329 if (ibin == (beam_size - 1)) end = ibin; // caso particolare per fine raggio
330 /* Fine trovata ora procedo alla pulizia eventuale */
331 segment_length = end - start+1;
332 counter = counter + (unsigned)(segment_length);
333
334/* il segmento è corto allora cerco nei dintorni dei dati validi, se li trovo non pulisco */
336 /* Cerco dati validi in Z prima del segmento */
337 int count=0;
339 if (ib >= 0 && (beam_z(ib) > Z_missing && beam_w(ib) != W_threshold && ( beam_w(ib) > 0.5 || fabs(beam_v(ib)) > 0.5) ) )
340 count++;
342
343 /* Cerco dati validi in Z dopo il segmento */
344 count = 0;
346 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)) ))
347 count ++;
348 if (double(count)/double(min(int(beam_size - ibin),int(2*min_segment_length))) >=0.25) after = true;
349 }
350// printf(" 0 ----- STOP SEGMENT ------ %4d -- %4d before %d after %d ",segment_length,counter, before,after);
351 if ((segment_length >= min_segment_length && (!before || !after) ) || segment_length >= max_segment_length)
352 // if ((segment_length >= min_segment_length ) || segment_length >= max_segment_length)
353 {
354 /* qui pulisco */
355 // printf (" pulisco %d %d %d \n",segment_length, min_segment_length, max_segment_length);
356 for (unsigned ib = start; ib <= end; ++ib)
357 res[ib] = true;
358 }
359 }
360// else printf(" 1 ");
361
362 }
363// printf("\n");
364 }
365 return res;
366}
const unsigned max_segment_length lunghezza massima segmento in celle se più lungo pulisce in ogni caso Definition: cleaner.h:24 Referenzia bin_wind_magic_number, max_segment_length, min_segment_length, sd_threshold, W_threshold, e Z_missing. |