Elaboradar  0.1
 Tutto Classi Namespace File Funzioni Variabili Tipi enumerati (enum) Gruppi
void classifier::compute_lkdp ( )

Initialize vol_lkdp 10log10 of the moving average slope of phidp along beam path.

METODO DI VULPIANI 2012 ///

Definizione alla linea 221 del file classifier.cpp.

Referenzia radarelab::Volume< T >::beam_count, radarelab::volume::Scans< T >::quantity, radarelab::volume::Scans< T >::units, vol_lkdp_2km, vol_lkdp_6km, vol_phidp, e vol_phidp_6km.

Referenziato da compute_derived_volumes().

222 {
224  unsigned half_win6km=12;
225  double kdp;
226  unsigned tries;
227  double phidp1, phidp2;
228  double undet,nodat;
229 
230  for(unsigned el=0;el<vol_phidp.size();el++)
231  {
232  vol_phidp_6km.push_back(vol_phidp[el]);
233  undet=vol_phidp[el].undetect;
234  nodat=vol_phidp[el].nodata;
235 
236  for(unsigned az=0;az<vol_phidp[el].beam_count;az++)
237  {
238  vol_phidp_6km[el].set(az,0,0.);
239  for(unsigned rg=0;rg<vol_phidp[el].beam_size;rg++)
240  {
241  if(rg<half_win6km||rg>(vol_phidp[el].beam_size-half_win6km-1)){kdp=0.;}
242  else
243  {
244  phidp1=vol_phidp[el].get(az,rg-half_win6km);
245  phidp2=vol_phidp[el].get(az,rg+half_win6km);
246  if(phidp1==undet||phidp1==nodat||phidp2==undet||phidp2==nodat){kdp=0.;}
247  else
248  {
249  kdp=0.5*(phidp2-phidp1)/6.;
250  tries=0;
251  while(tries<3)
252  {
253  if((kdp<-2.)||(kdp>20.))
254  {
255  if(kdp<-10.) // vulpiani diceva -20, ma considerava ricetrasmettitori simultanei (360°) e L=7km
256  {
257  kdp=0.5*(phidp2-phidp1+180.)/6.;
258  }
259  else
260  {
261  kdp=0.;
262  }
263  tries++;
264  }
265  else {tries=4;}
266  }
267  }
268  }
269  if(rg){vol_phidp_6km[el].set(az,rg,vol_phidp_6km[el].get(az,rg-1)+2.*kdp*vol_phidp[el].cell_size*0.001);}
270  //vol_lkdp_6km[el](az,rg)=kdp>0.001?10.*log10(kdp):-30;
271  //cout<<"fil 6km rg "<<el<<" "<<rg<<" "<<kdp<<" "<<vol_phidp_6km[el].get(az,rg)<<endl;
272  }
273  }
274  } // finita la ricostruzione di phidp secondo Vulpiani 2012
275  moving_average_slope(vol_phidp_6km,vol_lkdp_6km,6000.,false);
276  moving_average_slope(vol_phidp_6km,vol_lkdp_2km,2000.,false);
277 
278  vol_phidp_6km.quantity="PHIDP";
279  vol_phidp_6km.units="°";
280  vol_lkdp_2km.quantity="LKDP";
281  vol_lkdp_2km.units="°/km";
282  vol_lkdp_6km.quantity="LKDP";
283  vol_lkdp_6km.units="°/km";
284  vol_lkdp_2km*=1000.;
285  vol_lkdp_6km*=1000.;
286  for(unsigned el=0;el<vol_lkdp_6km.size();el++)
287  {
288  vol_lkdp_2km[el].nodata=-9999;
289  vol_lkdp_2km[el].undetect=-30;
290  vol_lkdp_6km[el].nodata=-9999;
291  vol_lkdp_6km[el].undetect=-30;
292  for(unsigned az=0;az<vol_lkdp_6km[el].beam_count;az++)
293  for(unsigned rg=0;rg<vol_lkdp_6km[el].beam_size;rg++)
294  {
295  vol_lkdp_6km[el](az,rg)=vol_lkdp_6km[el](az,rg)>0.001?10*log10(vol_lkdp_6km[el](az,rg)):vol_lkdp_6km[el].undetect;
296  vol_lkdp_2km[el](az,rg)=vol_lkdp_2km[el](az,rg)>0.001?10*log10(vol_lkdp_2km[el](az,rg)):vol_lkdp_2km[el].undetect;
297  }
298  }
299 
300 }
Volume< double > vol_lkdp_6km
Definition: classifier.h:416
Volume< double > vol_phidp
Definition: classifier.h:380
const unsigned beam_count
Number of beam_count used ast each elevations.
Definition: volume.h:432
std::string units
Data units according to ODIM documentation.
Definition: volume.h:268
Volume< double > vol_phidp_6km
Definition: classifier.h:408
std::string quantity
Odim quantity name.
Definition: volume.h:266
Volume< double > vol_lkdp_2km
Definition: classifier.h:412