Elaboradar  0.1
 Tutto Classi Namespace File Funzioni Variabili Tipi enumerati (enum) Gruppi
viz.cpp
1 #include <radarelab/algo/viz.h>
2 #include <radarelab/par_class.h>
3 #include <radarelab/vpr_par.h>
5 
6 #define MISSING 0 /*valore mancante*/
7 
8 using namespace std;
9 
10 namespace radarelab {
11 namespace algo {
12 
13 CalcoloVIZ::CalcoloVIZ(const CylindricalVolume& cil, double htbb, double hbbb, double t_ground)
14  : cil(cil), x_size(cil.x_size), z_size(cil.z_size), htbb(htbb), hbbb(hbbb), t_ground(t_ground), res_vert_cil (cil.resol[1]),
15  conv_VIZ(Matrix2D<unsigned char>::Constant(cil.slices.size(), x_size, MISSING)),
16  stratiform(Matrix2D<unsigned char>::Constant(cil.slices.size(), x_size, MISSING))
17 {
18  logging_category = log4c_category_get("radar.vpr");
19 }
20 
21 void CalcoloVIZ::classifico_VIZ()
22 {
23  float cil_Z,base;
24  Matrix2D<double> Zabb(Matrix2D<double>::Zero(cil.slices.size(), x_size));
25  Matrix2D<double> Zbbb(Matrix2D<double>::Zero(cil.slices.size(), x_size));
26  double ext_abb,ext_bbb;
27  float LIM_VERT= 8.;//questo l'ho messo io
28  long int ncv = 0;
29 
30  unsigned kbbb=floor(hbbb/res_vert_cil); //08/01/2013...MODIFICA, inserito questo dato
31  unsigned ktbb=ceil(htbb/res_vert_cil);
32  unsigned kmax=ceil(LIM_VERT/res_vert_cil);
33  // kmax=ceil(z_size/res_vert_cil);
34 
35  if (t_ground < T_MAX_ML) kmax=0;
36  if (ktbb>z_size) ktbb=z_size;
37  LOG_DEBUG("kmax= %i \n kbbb= %i \n ktbb= %i \n z_size= %i",kmax,kbbb,ktbb,z_size);
38 
39  //inizio l'integrazione
40  for(unsigned i=0; i<cil.slices.size(); i++){
41  for(unsigned j=0; j<x_size; j++)
42  {
43  ext_abb=0.;
44  ext_bbb=0.;
45 
46  //modifica 08/01/2013 .. afggiungo questo ..per fare l'integrazione anche con i dati sotto la bright band
47  for(unsigned k=0; k<kbbb; k++)
48  {
49  if (cil(i, j, k) > -19.){ // 08/01/2013..modifica, prendo fin dove ho un segnale
50  base=(cil(i, j, k))/10.;
51  cil_Z=pow(10.,base);
52  Zbbb(i, j) = Zbbb(i, j) + res_vert_cil*cil_Z;
53  ext_bbb=res_vert_cil+ext_bbb;
54  }
55  }
56 //std::cout<<"Z_size :"<<z_size<<" kbbb :"<<kbbb<<" ktbb "<<ktbb<<std::endl;
57  for(unsigned k=kbbb; k<ktbb; k++)
58  {
59  if (k < 4 ){
60  if (cil(i, j, k)>10. && cil(i, j, k+4)> 5.){
61  if (cil(i, j, k) - cil(i, j, k+4) > 5.)
62  stratiform(i, j)=1;
63  }
64  }
65  else if (cil(i, j, k)>10. && cil(i, j, k+4)> 5. && cil(i, j, k-4) > 5.){
66  if (cil(i, j, k) - cil(i, j, k+4) > 5.&& cil(i, j, k)- cil(i, j, k-4) > 5. )
67  stratiform(i, j)=1;
68 
69  }
70 
71  if (cil(i, j, k) - cil(i, j, k+4) > 5.)
72  stratiform(i, j)=1;
73 
74  for(k=ktbb; k<z_size; k++)
75  {
76  if (cil(i, j, k) > -19.){ // 08/01/2013..modifica, prendo fin dove ho un segnale
77  base=(cil(i, j, k))/10.;
78  cil_Z=pow(10.,base);
79  Zabb(i, j) = Zabb(i, j) + res_vert_cil*cil_Z;
80  ext_abb=res_vert_cil+ext_abb;
81  }
82  }
83 
84 
85  //solo se l'estensione verticale del segnale sopra il top della bright band è maggiore di 0.8 Km classifico
86 
87  if (ext_bbb + ext_abb>0.8) {
88  //if ( ext_abb>0.8) {
89  if ((Zabb(i, j) +Zbbb(i, j))/(ext_bbb+ext_abb) > THR_VIZ){
90  //if ((Zabb(i, j) /ext_abb) > THR_VIZ){
91  conv_VIZ(i, j)=CONV_VAL;
92  //lista_conv[ncv][0]= i;
93  //lista_conv[ncv][1]= j;
94  ncv=ncv+1;
95  }
96  }
97 
98  }
99  }
100  }
101  LOG_DEBUG("numero nuclei VIZ = %li",ncv);
102 
103  return;
104 }
105 
106 }
107 }