radarlib  1.4.6
odimh5v20_classes.hpp
Go to the documentation of this file.
1 /*
2  * Radar Library
3  *
4  * Copyright (C) 2009-2010 ARPA-SIM <urpsim@smr.arpa.emr.it>
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License along
17  * with this program; if not, write to the Free Software Foundation, Inc.,
18  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19  *
20  * Author: Guido Billi <guidobilli@gmail.com>
21  */
22 
23 
28 #ifndef __RADAR_ODIMH5V20_CLASES_HPP__
29 #define __RADAR_ODIMH5V20_CLASES_HPP__
30 
31 #include <radarlib/defs.h>
36 
37 #include <set>
38 
39 namespace OdimH5v20
40 {
41 
42 /*===========================================================================*/
43 /* FORWARD DECLARATIONS */
44 /*===========================================================================*/
45 
46 class OdimFactory;
47 class OdimObject;
48 class OdimDataset;
49 class OdimData;
50 class OdimQuality;
51 class OdimObjectDumper;
52 class PolarVolume;
53 class PolarScan;
54 class PolarScanData;
55 class Object_2D;
56 class HorizontalObject_2D;
57 class ImageObject;
58 class CompObject;
59 class XsecObject;
60 class Product_2D;
61 class Horizontal_Product_2D;
62 class Product_PPI;
63 class Product_CAPPI;
64 class Product_PCAPPI;
65 class Product_ETOP;
66 class Product_MAX;
67 class Product_RR;
68 class Product_VIL;
69 class Product_LBM;
70 class Product_COMP;
71 class Vertical_Product_2D;
72 class Product_Panel;
73 class Product_XSEC;
74 class Product_RHI;
75 class Product_VSP;
76 class Product_HSP;
77 class Product_2D_Data;
78 class Vertical_Product_2D_Data;
79 /*===========================================================================*/
80 /* ODIM ROOT OBJECT */
81 /*===========================================================================*/
82 
94 class RADAR_API OdimObject : public WHATRootMetadata
95 {
96 public:
97  virtual ~OdimObject();
98 
104  virtual std::string getConventions();
110  virtual void setConventions();
111 
119  virtual H5::H5File* getFile();
127  virtual H5::Group* getH5Object();
128 
135  virtual bool existWhat();
136 
143  virtual bool existWhere();
150  virtual bool existHow();
151 
159  virtual MetadataGroup* getWhat();
167  virtual MetadataGroup* getWhere();
176  virtual MetadataGroup* getHow();
177  virtual std::string getObject ();
178  virtual void setObject (const std::string& val);
179  virtual std::string getVersion ();
180  virtual void setVersion (const std::string& val);
181  virtual time_t getDateTime ();
182  virtual void setDateTime (const time_t val);
183  virtual SourceInfo getSource ();
184  virtual void setSource (const SourceInfo& val);
185 
192  virtual int getDatasetCount();
201  virtual OdimDataset* createDataset();
211  virtual OdimDataset* getDataset(int index);
220  virtual void removeDataset(int index);
221 
222 
223 protected:
224  H5::H5File* file;
225  H5::Group* group;
226  MetadataGroup* meta_what;
227  MetadataGroup* meta_where;
228  MetadataGroup* meta_how;
229 
230  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
231  friend class OdimFactory;
232  OdimObject(H5::H5File* file);
233 
234  virtual H5::Group* createDatasetGroup();
235  virtual H5::Group* getDatasetGroup(int num);
236 
237  virtual void setMandatoryInformations ();
238  virtual void checkMandatoryInformations ();
239 
240 };
241 
242 /*===========================================================================*/
243 /* ODIM DATASET */
244 /*===========================================================================*/
245 
256 class RADAR_API OdimDataset
257 {
258 public:
259  virtual ~OdimDataset();
260 
268  virtual H5::Group* getH5Object();
269 
276  virtual bool existWhat();
277 
284  virtual bool existWhere();
291  virtual bool existHow();
299  virtual MetadataGroup* getWhat();
307  virtual MetadataGroup* getWhere();
315  virtual MetadataGroup* getHow();
316 
323  virtual int getDataCount();
331  virtual OdimData* createData();
341  virtual OdimData* getData(int index);
349  virtual void removeData(int index);
350 
351 protected:
352  H5::Group* group;
353  MetadataGroup* meta_what;
354  MetadataGroup* meta_where;
355  MetadataGroup* meta_how;
356 
357  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
358  friend class OdimObject;
359  OdimDataset(H5::Group* group);
360 
361  virtual H5::Group* createDataGroup();
362  virtual H5::Group* getDataGroup(int num);
363 };
364 
365 /*===========================================================================*/
366 /* ODIM DATA */
367 /*===========================================================================*/
368 
379 class RADAR_API OdimData
380 {
381 public:
382  virtual ~OdimData();
383 
391  virtual H5::Group* getH5Object();
398  virtual bool existWhat();
399 
406  virtual bool existWhere();
413  virtual bool existHow();
421  virtual MetadataGroup* getWhat();
429  virtual MetadataGroup* getWhere();
437  virtual MetadataGroup* getHow();
447  virtual H5::AtomType getDataType();
453  virtual int getDataWidth();
459  virtual int getDataHeight();
465  virtual void getDataDimension(int* height, int* width);
478  virtual void writeData(const void* buff, int width, int height, const H5::DataType& elemtype);
488  virtual void writeData(const char* buff, int width, int height);
498  virtual void writeData(const unsigned char* buff, int width, int height);
508  virtual void writeData(const unsigned short* buff, int width, int height);
518  virtual void writeData(const float* buff, int width, int height);
519 
528  virtual void writeData(const DataMatrix<char>& matrix);
537  virtual void writeData(const DataMatrix<unsigned char>& matrix);
546  virtual void writeData(const DataMatrix<unsigned short>& matrix);
555  virtual void writeData(const DataMatrix<float>& matrix);
565  virtual void readData(void* buffer);
572  virtual int getQualityCount();
580  virtual OdimQuality* createQuality();
590  virtual OdimQuality* getQuality(int index);
598  virtual void removeQuality(int index);
599 
600 protected:
601  H5::Group* group;
602  MetadataGroup* meta_what;
603  MetadataGroup* meta_where;
604  MetadataGroup* meta_how;
605 
606  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
607  friend class OdimDataset;
608  OdimData(H5::Group* group);
609 
610  virtual H5::DataSet* getData();
611  virtual H5::Group* createQualityGroup();
612  virtual H5::Group* getQualityGroup(int num);
613 };
614 
615 /*===========================================================================*/
616 /* ODIM QUALITY*/
617 /*===========================================================================*/
618 
629 class RADAR_API OdimQuality
630 {
631 public:
632  virtual ~OdimQuality();
633 
641  virtual H5::Group* getH5Object();
648  virtual bool existWhat();
649 
656  virtual bool existWhere();
663  virtual bool existHow();
664 
672  virtual MetadataGroup* getWhat();
680  virtual MetadataGroup* getWhere();
688  virtual MetadataGroup* getHow();
698  virtual H5::AtomType getQualityType();
704  virtual int getQualityWidth();
710  virtual int getQualityHeight();
716  virtual void getQualityDimension(int* height, int* width);
729  virtual void writeQuality(const void* buff, int width, int height, const H5::DataType& elemtype);
739  virtual void writeQuality(const char* buff, int width, int height);
749  virtual void writeQuality(const unsigned char* buff, int width, int height);
759  virtual void writeQuality(const unsigned short* buff, int width, int height);
769  virtual void writeQuality(const float* buff, int width, int height);
770 
779  virtual void writeQuality(const DataMatrix<char>& matrix);
788  virtual void writeQuality(const DataMatrix<unsigned char>& matrix);
797  virtual void writeQuality(const DataMatrix<unsigned short>& matrix);
806  virtual void writeQuality(const DataMatrix<float>& matrix);
816  virtual void readQuality(void* buffer);
817 
818 protected:
819  H5::Group* group;
820  MetadataGroup* meta_what;
821  MetadataGroup* meta_where;
822  MetadataGroup* meta_how;
823 
824  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
825  friend class OdimData;
826  friend class Product_2D_Data;
827  OdimQuality(H5::Group* group);
828 
829  virtual H5::DataSet* getData();
830 };
831 
832 /*===========================================================================*/
833 /* POLAR VOLUME */
834 /*===========================================================================*/
835 
845 class RADAR_API PolarVolume : public OdimObject, public WHERERootMetadata, public HOWRootMetadata
846 {
847 public:
848  virtual ~PolarVolume();
849 
850  virtual double getLongitude ();
851  virtual void setLongitude (double val);
852  virtual double getLatitude ();
853  virtual void setLatitude (double val);
854  virtual double getAltitude ();
855  virtual void setAltitude (double val);
856 
857  virtual std::string getTaskOrProdGen ();
858  virtual void setTaskOrProdGen (const std::string& val);
859  virtual time_t getStartEpochs ();
860  virtual void setStartEpochs (time_t val);
861  virtual time_t getEndEpochs ();
862  virtual void setEndEpochs (time_t val);
863  virtual std::string getSystem ();
864  virtual void setSystem (const std::string& val);
865  virtual std::string getSoftware ();
866  virtual void setSoftware (const std::string& val);
867  virtual std::string getSoftwareVer ();
868  virtual void setSoftwareVer (const std::string& val);
869  virtual double getZR_A ();
870  virtual void setZR_A (double val);
871  virtual double getZR_B ();
872  virtual void setZR_B (double val);
873  virtual double getKR_A ();
874  virtual void setKR_A (double val);
875  virtual double getKR_B ();
876  virtual void setKR_B (double val);
877  virtual bool getSimulated ();
878  virtual void setSimulated (bool val);
879 
885  virtual int getScanCount ();
892  virtual PolarScan* createScan ();
900  virtual PolarScan* getScan (int index);
908  virtual void removeScan (int index);
915  virtual std::vector<PolarScan*> getScans ();
924  virtual std::vector<PolarScan*> getScans (double elevation, double gap = 0);
933  virtual std::vector<PolarScan*> getScansBetween (double minElevation, double maxElevation);
941  virtual std::vector<PolarScan*> getScans (const char* quantity);
942  virtual std::vector<PolarScan*> getScans (const std::string& quantity);
950  virtual std::vector<double> getScanAngles ();
957  virtual std::vector<double> getElevationAngles ();
964  virtual std::set<std::string> getStoredQuantities();
965 
966 protected:
967  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
968  friend class OdimFactory;
969  PolarVolume(H5::H5File* file);
970 
971  virtual void setMandatoryInformations ();
972  virtual void checkMandatoryInformations ();
973 
974 };
975 
976 /*===========================================================================*/
977 /* POLAR VOLUME SCAN */
978 /*===========================================================================*/
979 
988 class RADAR_API PolarScan : public OdimDataset, public WHATDatasetMetadata, public WHEREScanMetadata, public HOWPolarMetadata
989 {
990 public:
991  virtual ~PolarScan();
992 
993  virtual void setMandatoryInformations();
994 
995  virtual std::string getObject ();
996  virtual void setObject (const std::string& val);
997  virtual std::string getVersion ();
998  virtual void setVersion (const std::string& val);
999  virtual time_t getDateTime ();
1000  virtual void setDateTime (const time_t val);
1001  virtual SourceInfo getSource ();
1002  virtual void setSource (const SourceInfo& val);
1003 
1004  virtual std::string getProduct ();
1005  virtual void setProduct (const std::string& val);
1006  virtual double getProdPar ();
1007  virtual VILHeights getProdParVIL ();
1008  virtual void setProdPar (double val);
1009  virtual void setProdPar (const VILHeights& val);
1010  virtual std::string getQuantity ();
1011  virtual void setQuantity (const std::string& val);
1012  virtual time_t getStartDateTime ();
1013  virtual void setStartDateTime (time_t val);
1014  virtual time_t getEndDateTime ();
1015  virtual void setEndDateTime (time_t val);
1016  virtual double getGain ();
1017  virtual void setGain (double val);
1018  virtual double getOffset ();
1019  virtual void setOffset (double val);
1020  virtual double getNodata ();
1021  virtual void setNodata (double val);
1022  virtual double getUndetect ();
1023  virtual void setUndetect (double val);
1024 
1025  virtual double getLongitude ();
1026  virtual void setLongitude (double val);
1027  virtual double getLatitude ();
1028  virtual void setLatitude (double val);
1029  virtual double getAltitude ();
1030  virtual void setAltitude (double val);
1031 
1032  virtual double getEAngle ();
1033  virtual void setEAngle (double val);
1034  virtual int getNumBins ();
1035  virtual void setNumBins (int val);
1036  virtual double getRangeStart ();
1037  virtual void setRangeStart (double val);
1038  virtual double getRangeScale ();
1039  virtual void setRangeScale (double val);
1040  virtual int getNumRays ();
1041  virtual void setNumRays (int val);
1042  virtual int getA1Gate ();
1043  virtual void setA1Gate (int val);
1044 
1045  virtual std::string getTaskOrProdGen ();
1046  virtual void setTaskOrProdGen (const std::string& val);
1047  virtual time_t getStartEpochs ();
1048  virtual void setStartEpochs (time_t val);
1049  virtual time_t getEndEpochs ();
1050  virtual void setEndEpochs (time_t val);
1051  virtual std::string getSystem ();
1052  virtual void setSystem (const std::string& val);
1053  virtual std::string getSoftware ();
1054  virtual void setSoftware (const std::string& val);
1055  virtual std::string getSoftwareVer ();
1056  virtual void setSoftwareVer (const std::string& val);
1057  virtual double getZR_A ();
1058  virtual void setZR_A (double val);
1059  virtual double getZR_B ();
1060  virtual void setZR_B (double val);
1061  virtual double getKR_A ();
1062  virtual void setKR_A (double val);
1063  virtual double getKR_B ();
1064  virtual void setKR_B (double val);
1065  virtual bool getSimulated ();
1066  virtual void setSimulated (bool val);
1067 
1068  virtual double getBeamWidth ();
1069  virtual double getBeamWidth (double defaultValue);
1070  virtual void setBeamWidth (double val);
1071  virtual double getWaveLength ();
1072  virtual double getWaveLength (double defaultValue);
1073  virtual void setWaveLength (double val);
1074  virtual double getRPM ();
1075  virtual double getRPM (double defaultValue);
1076  virtual void setRPM (double val);
1077  virtual double getPulseWidth ();
1078  virtual double getPulseWidth (double defaultValue);
1079  virtual void setPulseWidth (double val);
1080  virtual int getLowPRF ();
1081  virtual int getLowPRF (int defaultValue);
1082  virtual void setLowPRF (int val);
1083  virtual int getHighPRF ();
1084  virtual int getHighPRF (int defaultValue);
1085  virtual void setHighPRF (int val);
1086 
1087  virtual std::string getAzimuthMethod ();
1088  virtual void setAzimuthMethod (const std::string& val);
1089  virtual std::string getBinMethod ();
1090  virtual void setBinMethod (const std::string& val);
1091  virtual std::vector<AZAngles> getAzimuthAngles ();
1092  virtual void setAzimuthAngles (const std::vector<AZAngles>& val, int precision = 10);
1093  virtual std::vector<double> getElevationAngles ();
1094  virtual void setElevationAngles (const std::vector<double>& val, int precision = 10);
1095  virtual std::vector<AZTimes> getAzimuthTimes ();
1096  virtual void setAzimuthTimes (const std::vector<AZTimes>& val);
1097 
1098  virtual double getPointAccEl ();
1099  virtual void setPointAccEl (double val);
1100  virtual double getPointAccAZ ();
1101  virtual void setPointAccAZ (double val);
1102  virtual bool getMalfunc ();
1103  virtual void setMalfunc (bool val);
1104  virtual std::string getRadarMsg ();
1105  virtual void setRadarMsg (const std::string& val);
1106  virtual double getRadarHorizon ();
1107  virtual void setRadarHorizon (double val);
1108  virtual double getMDS ();
1109  virtual void setMDS (double val);
1110  virtual double getOUR ();
1111  virtual void setOUR (double val);
1112  virtual std::vector<std::string> getDClutter ();
1113  virtual void setDClutter (const std::vector<std::string>& value);
1114  virtual std::string getComment ();
1115  virtual void setComment (const std::string& val);
1116  virtual double getSQI ();
1117  virtual void setSQI (double val);
1118  virtual double getCSR ();
1119  virtual void setCSR (double val);
1120  virtual double getLOG ();
1121  virtual void setLOG (double val);
1122  virtual bool getVPRCorr ();
1123  virtual void setVPRCorr (bool val);
1124  virtual double getFreeze ();
1125  virtual void setFreeze (double val);
1126  virtual double getMin ();
1127  virtual void setMin (double val);
1128  virtual double getMax ();
1129  virtual void setMax (double val);
1130  virtual double getStep ();
1131  virtual void setStep (double val);
1132  virtual int getLevels ();
1133  virtual void setLevels (int val);
1134  virtual double getPeakPwr ();
1135  virtual void setPeakPwr (double val);
1136  virtual double getAvgPwr ();
1137  virtual void setAvgPwr (double val);
1138  virtual double getDynRange ();
1139  virtual void setDynRange (double val);
1140  virtual double getRAC ();
1141  virtual void setRAC (double val);
1142  virtual bool getBBC ();
1143  virtual void setBBC (bool val);
1144  virtual double getPAC ();
1145  virtual void setPAC (double val);
1146  virtual double getS2N ();
1147  virtual void setS2N (double val);
1148  virtual std::string getPolarization ();
1149  virtual void setPolarization (const std::string& val);
1150 
1157  virtual int getQuantityDataCount();
1158 
1166  virtual PolarScanData* createQuantityData (const char* name);
1167  virtual PolarScanData* createQuantityData (const std::string& name);
1176  virtual PolarScanData* getQuantityData (int index);
1185  virtual PolarScanData* getQuantityData (const char* name);
1186  virtual PolarScanData* getQuantityData (const std::string& name);
1193  virtual void removeQuantityData (const char* name);
1194  virtual void removeQuantityData (const std::string& name);
1202  virtual bool hasQuantityData (const char* name);
1203  virtual bool hasQuantityData (const std::string& name);
1211  virtual int getQuantityDataIndex (const char* name);
1212  virtual int getQuantityDataIndex (const std::string& name);
1221  virtual int getDirection();
1228  std::set<std::string> getStoredQuantities ();
1240  static inline int originaRayIndex(int index, int originalDirection, int numrays, int a1gate)
1241  {
1242  if (originalDirection>0)
1243  {
1244  return (index + a1gate) % numrays;
1245  }
1246  else
1247  {
1248  return ((numrays + a1gate) - index) % numrays;
1249  }
1250  }
1251 
1252 private:
1253  PolarVolume* volume;
1254 
1255  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
1256  friend class PolarVolume;
1257  PolarScan(PolarVolume* volume, H5::Group* group);
1258 };
1259 
1260 /*===========================================================================*/
1261 /* POLAR SCAN DATA */
1262 /*===========================================================================*/
1263 
1271 class RADAR_API PolarScanData: public OdimData, public WHATDatasetMetadata
1272 {
1273 public:
1274  virtual ~PolarScanData();
1275 
1276  virtual std::string getObject ();
1277  virtual void setObject (const std::string& val);
1278  virtual std::string getVersion ();
1279  virtual void setVersion (const std::string& val);
1280  virtual time_t getDateTime ();
1281  virtual void setDateTime (const time_t val);
1282  virtual SourceInfo getSource ();
1283  virtual void setSource (const SourceInfo& val);
1284 
1285  virtual std::string getProduct ();
1286  virtual void setProduct (const std::string& val);
1287  virtual double getProdPar ();
1288  virtual VILHeights getProdParVIL ();
1289  virtual void setProdPar (double val);
1290  virtual void setProdPar (const VILHeights& val);
1291  virtual std::string getQuantity ();
1292  virtual void setQuantity (const std::string& val);
1293  virtual time_t getStartDateTime();
1294  virtual void setStartDateTime(time_t val);
1295  virtual time_t getEndDateTime ();
1296  virtual void setEndDateTime (time_t val);
1297  virtual double getGain ();
1298  virtual void setGain (double val);
1299  virtual double getOffset ();
1300  virtual void setOffset (double val);
1301  virtual double getNodata ();
1302  virtual void setNodata (double val);
1303  virtual double getUndetect ();
1304  virtual void setUndetect (double val);
1305 
1311  virtual int getNumRays();
1317  virtual int getNumBins();
1323  H5::AtomType getBinType();
1331  virtual void readTranslatedData(RayMatrix<float>& matrix);
1339  virtual void readTranslatedData(RayMatrix<double>& matrix);
1351  virtual void writeAndTranslate(RayMatrix<float>& matrix, float offset, float gain, H5::DataType type);
1363  virtual void writeAndTranslate(RayMatrix<double>& matrix, double offset, double gain, H5::DataType type);
1364 
1365 private:
1366  PolarScan* scan;
1367 
1368  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
1369  friend class PolarScan;
1370  PolarScanData(PolarScan* scan, H5::Group* group);
1371 };
1372 
1373 
1374 
1375 /*===========================================================================*/
1376 /* 2D OBJECT */
1377 /*===========================================================================*/
1378 
1389 class RADAR_API Object_2D : public OdimObject, public HOWRootMetadata
1390 {
1391 public:
1392  virtual ~Object_2D() = 0;
1393 
1394  //virtual void setMandatoryInformations();
1395  //void checkMandatoryInformations();
1396 
1397  virtual std::string getTaskOrProdGen ();
1398  virtual void setTaskOrProdGen (const std::string& val);
1399  virtual time_t getStartEpochs ();
1400  virtual void setStartEpochs (time_t val);
1401  virtual time_t getEndEpochs ();
1402  virtual void setEndEpochs (time_t val);
1403  virtual std::string getSystem ();
1404  virtual void setSystem (const std::string& val);
1405  virtual std::string getSoftware ();
1406  virtual void setSoftware (const std::string& val);
1407  virtual std::string getSoftwareVer ();
1408  virtual void setSoftwareVer (const std::string& val);
1409  virtual double getZR_A ();
1410  virtual void setZR_A (double val);
1411  virtual double getZR_B ();
1412  virtual void setZR_B (double val);
1413  virtual double getKR_A ();
1414  virtual void setKR_A (double val);
1415  virtual double getKR_B ();
1416  virtual void setKR_B (double val);
1417  virtual bool getSimulated ();
1418  virtual void setSimulated (bool val);
1419 
1425  virtual int getProductCount ();
1433  virtual Product_2D* createProduct2D (const char* type);
1434  virtual Product_2D* createProduct2D (const std::string & type);
1441  virtual Product_PPI* createProductPPI ();
1448  virtual Product_CAPPI* createProductCAPPI ();
1455  virtual Product_PCAPPI* createProductPCAPPI ();
1462  virtual Product_ETOP* createProductETOP ();
1469  virtual Product_MAX* createProductMAX ();
1476  virtual Product_RR* createProductRR ();
1483  virtual Product_VIL* createProductVIL ();
1490  virtual Product_LBM* createProductLBM ();
1497  virtual Product_COMP* createProductCOMP ();
1504  virtual Product_XSEC* createProductXSEC ();
1511  virtual Product_RHI* createProductRHI ();
1518  virtual Product_VSP* createProductVSP ();
1525  virtual Product_HSP* createProductHSP ();
1533  virtual Product_2D* getProduct (int index);
1541 //
1542 //virtual Horizontal_Product_2D* getHorizontal_Product_2D (int index);
1550 //
1551 //virtual Vertical_Product_2D* getVertical_Product_2D (int index);
1559  virtual void removeProduct (int index);
1560 
1567  virtual std::vector<std::string > getProductsType ();
1568 
1575  virtual std::vector<Product_2D*> getProducts();
1587 
1588 protected:
1589  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
1590 // friend class OdimFactory;
1591  Object_2D(H5::H5File* file);
1592 
1593  virtual void setMandatoryInformations ();
1594  virtual void checkMandatoryInformations ();
1595 };
1596 
1597 
1598 /*===========================================================================*/
1599 /* HORIZONTAL OBJECT */
1600 /*===========================================================================*/
1611 class RADAR_API HorizontalObject_2D : public Object_2D, public WHEREImageMetadata
1612 {
1613 public:
1614  virtual ~HorizontalObject_2D() ;
1615 
1616  virtual void setMandatoryInformations();
1617  virtual void checkMandatoryInformations();
1618 
1619  virtual std::string getProjectionArguments () ;
1620  virtual void setProjectionArguments (const std::string& val) ;
1621 
1622  virtual int getXSize () ;
1623  virtual void setXSize (int val) ;
1624  virtual int getYSize () ;
1625  virtual void setYSize (int val) ;
1626  virtual double getXScale () ;
1627  virtual void setXScale (double val) ;
1628  virtual double getYScale () ;
1629  virtual void setYScale (double val) ;
1630 
1631  virtual double getLL_Longitude () ;
1632  virtual void setLL_Longitude (double val) ;
1633  virtual double getLL_Latitude () ;
1634  virtual void setLL_Latitude (double val) ;
1635 
1636  virtual double getUL_Longitude () ;
1637  virtual void setUL_Longitude (double val) ;
1638  virtual double getUL_Latitude () ;
1639  virtual void setUL_Latitude (double val) ;
1640 
1641  virtual double getUR_Longitude () ;
1642  virtual void setUR_Longitude (double val) ;
1643  virtual double getUR_Latitude () ;
1644  virtual void setUR_Latitude (double val) ;
1645 
1646  virtual double getLR_Longitude () ;
1647  virtual void setLR_Longitude (double val) ;
1648  virtual double getLR_Latitude () ;
1649  virtual void setLR_Latitude (double val) ;
1650 protected:
1651  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
1652 // friend class OdimFactory;
1653  HorizontalObject_2D(H5::H5File* file);
1654 
1655 };
1656 /*===========================================================================*/
1657 /* IMAGE OBJECT */
1658 /*===========================================================================*/
1670 class RADAR_API ImageObject : public HorizontalObject_2D
1671 {
1672 public:
1673  virtual ~ImageObject() ;
1674 
1675  virtual void setMandatoryInformations();
1676  virtual void checkMandatoryInformations();
1677 
1678 protected:
1679  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
1680  friend class OdimFactory;
1681  ImageObject(H5::H5File* file);
1682 };
1683 /*===========================================================================*/
1684 /* COMP OBJECT */
1685 /*===========================================================================*/
1697 class RADAR_API CompObject : public HorizontalObject_2D
1698 {
1699 public:
1700  virtual ~CompObject() ;
1701 
1702  virtual void setMandatoryInformations();
1703  virtual void checkMandatoryInformations();
1704 
1705 protected:
1706  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
1707  friend class OdimFactory;
1708  CompObject(H5::H5File* file);
1709 };
1710 
1711 /*===========================================================================*/
1712 /* XSEC OBJECT */
1713 /*===========================================================================*/
1724 class RADAR_API XsecObject : public Object_2D, public WHEREXSECMetadata, public WHERERhiMetadata, public WHEREPanelMetadata
1725 {
1726 public:
1727  virtual ~XsecObject();
1728 
1729  virtual void setMandatoryInformations();
1730  virtual void checkMandatoryInformations();
1731 
1732  virtual int getXSize () ;
1733  virtual void setXSize (int val) ;
1734  virtual int getYSize () ;
1735  virtual void setYSize (int val) ;
1736  virtual double getXScale () ;
1737  virtual void setXScale (double val) ;
1738  virtual double getYScale () ;
1739  virtual void setYScale (double val) ;
1740  virtual double getMinHeight () ;
1741  virtual void setMinHeight (double val) ;
1742  virtual double getMaxHeight () ;
1743  virtual void setMaxHeight (double val) ;
1744 
1745  virtual double getRHILon ();
1746  virtual void setRHILon (double val);
1747  virtual double getRHILat ();
1748  virtual void setRHILat (double val);
1749  virtual double getAzimuthAngle ();
1750  virtual void setAzimuthAngle (double val);
1751  virtual std::vector<Angles> getAngles ();
1752  virtual void setAngles (const std::vector<Angles>& val, int precision = 0);
1753  virtual double getRange ();
1754  virtual void setRange (double val);
1755 
1756  virtual double getStartLongitude () ;
1757  virtual void setStartLongitude (double val);
1758  virtual double getStartLatitude () ;
1759  virtual void setStartLatitude (double val);
1760  virtual double getStopLongitude ();
1761  virtual void setStopLongitude (double val);
1762  virtual double getStopLatitude ();
1763  virtual void setStopLatitude (double val);
1764 
1765 protected:
1766  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
1767  friend class OdimFactory;
1768  XsecObject(H5::H5File* file);
1769 
1770 };
1771 
1772 /*===========================================================================*/
1773 /* 2D_PRODUCT Dataset */
1774 /*===========================================================================*/
1785 class RADAR_API Product_2D : public OdimDataset, public WHATDatasetMetadata, public HOWPolarMetadata //, public WHEREImageMetadata, public HOWCartesianImageMetadata
1786 {
1787 public:
1788  virtual ~Product_2D();
1789 
1790  virtual void setMandatoryInformations();
1791 
1792  virtual std::string getObject ();
1793  virtual void setObject (const std::string& val);
1794  virtual std::string getVersion ();
1795  virtual void setVersion (const std::string& val);
1796  virtual time_t getDateTime ();
1797  virtual void setDateTime (const time_t val);
1798  virtual SourceInfo getSource ();
1799  virtual void setSource (const SourceInfo& val);
1800 
1801  virtual std::string getProduct ();
1802  virtual void setProduct (const std::string& val);
1803  virtual double getProdPar ();
1804  virtual VILHeights getProdParVIL ();
1805  virtual void setProdPar (double val);
1806  virtual void setProdPar (const VILHeights& val);
1807  virtual std::string getQuantity ();
1808  virtual void setQuantity (const std::string& val);
1809  virtual time_t getStartDateTime ();
1810  virtual void setStartDateTime (time_t val);
1811  virtual time_t getEndDateTime ();
1812  virtual void setEndDateTime (time_t val);
1813  virtual double getGain ();
1814  virtual void setGain (double val);
1815  virtual double getOffset ();
1816  virtual void setOffset (double val);
1817  virtual double getNodata ();
1818  virtual void setNodata (double val);
1819  virtual double getUndetect ();
1820  virtual void setUndetect (double val);
1821 
1822  virtual std::string getAzimuthMethod ();
1823  virtual void setAzimuthMethod (const std::string& val);
1824  virtual std::string getBinMethod ();
1825  virtual void setBinMethod (const std::string& val);
1826  virtual std::vector<AZAngles> getAzimuthAngles ();
1827  virtual void setAzimuthAngles (const std::vector<AZAngles>& val, int precision = 10);
1828  virtual std::vector<double> getElevationAngles ();
1829  virtual void setElevationAngles (const std::vector<double>& val, int precision = 10);
1830  virtual std::vector<AZTimes> getAzimuthTimes ();
1831  virtual void setAzimuthTimes (const std::vector<AZTimes>& val);
1832 
1833  virtual double getPointAccEl ();
1834  virtual void setPointAccEl (double val);
1835  virtual double getPointAccAZ ();
1836  virtual void setPointAccAZ (double val);
1837  virtual bool getMalfunc ();
1838  virtual void setMalfunc (bool val);
1839  virtual std::string getRadarMsg ();
1840  virtual void setRadarMsg (const std::string& val);
1841  virtual double getRadarHorizon ();
1842  virtual void setRadarHorizon (double val);
1843  virtual double getMDS ();
1844  virtual void setMDS (double val);
1845  virtual double getOUR ();
1846  virtual void setOUR (double val);
1847  virtual std::vector<std::string> getDClutter ();
1848  virtual void setDClutter (const std::vector<std::string>& value);
1849  virtual std::string getComment ();
1850  virtual void setComment (const std::string& val);
1851  virtual double getSQI ();
1852  virtual void setSQI (double val);
1853  virtual double getCSR ();
1854  virtual void setCSR (double val);
1855  virtual double getLOG ();
1856  virtual void setLOG (double val);
1857  virtual bool getVPRCorr ();
1858  virtual void setVPRCorr (bool val);
1859  virtual double getFreeze ();
1860  virtual void setFreeze (double val);
1861  virtual double getMin ();
1862  virtual void setMin (double val);
1863  virtual double getMax ();
1864  virtual void setMax (double val);
1865  virtual double getStep ();
1866  virtual void setStep (double val);
1867  virtual int getLevels ();
1868  virtual void setLevels (int val);
1869  virtual double getPeakPwr ();
1870  virtual void setPeakPwr (double val);
1871  virtual double getAvgPwr ();
1872  virtual void setAvgPwr (double val);
1873  virtual double getDynRange ();
1874  virtual void setDynRange (double val);
1875  virtual double getRAC ();
1876  virtual void setRAC (double val);
1877  virtual bool getBBC ();
1878  virtual void setBBC (bool val);
1879  virtual double getPAC ();
1880  virtual void setPAC (double val);
1881  virtual double getS2N ();
1882  virtual void setS2N (double val);
1883  virtual std::string getPolarization ();
1884  virtual void setPolarization (const std::string& val);
1885 
1886  virtual std::string getTaskOrProdGen ();
1887  virtual void setTaskOrProdGen (const std::string& val);
1888  virtual time_t getStartEpochs ();
1889  virtual void setStartEpochs (time_t val);
1890  virtual time_t getEndEpochs ();
1891  virtual void setEndEpochs (time_t val);
1892  virtual std::string getSystem ();
1893  virtual void setSystem (const std::string& val);
1894  virtual std::string getSoftware ();
1895  virtual void setSoftware (const std::string& val);
1896  virtual std::string getSoftwareVer ();
1897  virtual void setSoftwareVer (const std::string& val);
1898  virtual double getZR_A ();
1899  virtual void setZR_A (double val);
1900  virtual double getZR_B ();
1901  virtual void setZR_B (double val);
1902  virtual double getKR_A ();
1903  virtual void setKR_A (double val);
1904  virtual double getKR_B ();
1905  virtual void setKR_B (double val);
1906  virtual bool getSimulated ();
1907  virtual void setSimulated (bool val);
1908 
1909  virtual double getBeamWidth ();
1910  virtual double getBeamWidth (double defaultValue);
1911  virtual void setBeamWidth (double val);
1912  virtual double getWaveLength ();
1913  virtual double getWaveLength (double defaultValue);
1914  virtual void setWaveLength (double val);
1915  virtual double getRPM ();
1916  virtual double getRPM (double defaultValue);
1917  virtual void setRPM (double val);
1918  virtual double getPulseWidth ();
1919  virtual double getPulseWidth (double defaultValue);
1920  virtual void setPulseWidth (double val);
1921  virtual int getLowPRF ();
1922  virtual int getLowPRF (int defaultValue);
1923  virtual void setLowPRF (int val);
1924  virtual int getHighPRF ();
1925  virtual int getHighPRF (int defaultValue);
1926  virtual void setHighPRF (int val);
1927 /*-----
1928 
1929  virtual double getLongitude ();
1930  virtual void setLongitude (double val);
1931  virtual double getLatitude ();
1932  virtual void setLatitude (double val);
1933  virtual double getAltitude ();
1934  virtual void setAltitude (double val);
1935 
1936 
1937  virtual double getEAngle ();
1938  virtual void setEAngle (double val);
1939  virtual int getNumBins ();
1940  virtual void setNumBins (int val);
1941  virtual double getRangeStart ();
1942  virtual void setRangeStart (double val);
1943  virtual double getRangeScale ();
1944  virtual void setRangeScale (double val);
1945  virtual int getNumRays ();
1946  virtual void setNumRays (int val);
1947  virtual int getA1Gate ();
1948  virtual void setA1Gate (int val);
1949 
1950 ----*/
1951 
1959  virtual Product_2D_Data* createQuantityData (const char* name);
1960  virtual Product_2D_Data* createQuantityData (const std::string& name);
1967  virtual int getQuantityDataCount();
1975  virtual bool hasQuantityData (const char* name);
1976  virtual bool hasQuantityData (const std::string& name);
1984  virtual int getQuantityDataIndex (const char* name);
1985  virtual int getQuantityDataIndex (const std::string& name);
1994  virtual Product_2D_Data* getQuantityData (int index);
2003  virtual Product_2D_Data* getQuantityData (const char* name);
2004  virtual Product_2D_Data* getQuantityData (const std::string& name);
2011  std::set<std::string> getStoredQuantities ();
2018  virtual void removeQuantityData (const char* name);
2019  virtual void removeQuantityData (const std::string& name);
2020 
2021 protected :
2022  Object_2D* object_2d;
2023 
2024  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
2025  friend class Object_2D;
2026  Product_2D(Object_2D* object_2d, H5::Group* group);
2027 
2028 };
2029 
2030 /*===========================================================================*/
2031 /* HORIZONTAL 2D_PRODUCT Dataset */
2032 /*===========================================================================*/
2033 
2045 {
2046 public:
2047  virtual ~Horizontal_Product_2D();
2048 public:
2049 // virtual void setMandatoryInformations();
2050 
2051  virtual std::string getProjectionArguments () ;
2052  virtual void setProjectionArguments (const std::string& val) ;
2053 
2054  virtual int getXSize () ;
2055  virtual void setXSize (int val) ;
2056  virtual int getYSize () ;
2057  virtual void setYSize (int val) ;
2058  virtual double getXScale () ;
2059  virtual void setXScale (double val) ;
2060  virtual double getYScale () ;
2061  virtual void setYScale (double val) ;
2062 
2063  virtual double getLL_Longitude () ;
2064  virtual void setLL_Longitude (double val) ;
2065  virtual double getLL_Latitude () ;
2066  virtual void setLL_Latitude (double val) ;
2067 
2068  virtual double getUL_Longitude () ;
2069  virtual void setUL_Longitude (double val) ;
2070  virtual double getUL_Latitude () ;
2071  virtual void setUL_Latitude (double val) ;
2072 
2073  virtual double getUR_Longitude () ;
2074  virtual void setUR_Longitude (double val) ;
2075  virtual double getUR_Latitude () ;
2076  virtual void setUR_Latitude (double val) ;
2077 
2078  virtual double getLR_Longitude () ;
2079  virtual void setLR_Longitude (double val) ;
2080  virtual double getLR_Latitude () ;
2081  virtual void setLR_Latitude (double val) ;
2082 /*--- queste devono essere implementate .-----*/
2083  virtual std::vector<Angles> getAngles () ;
2084  virtual void setAngles (const std::vector<Angles>& val, int precision = 0) ;
2085  virtual std::vector<Arotation> getArotation () ;
2086  virtual void setArotation (const std::vector<Arotation>& val, int precision = 0);
2087  virtual std::string getCAMethod ();
2088  virtual void setCAMethod (const std::string& val) ;
2089  virtual std::vector<Nodes> getNodes () ;
2090  virtual void setNodes (const std::vector<Nodes>& val) ;
2091  virtual int getACCnum () ;
2092  virtual void setCCnum (int val) ;
2093 
2094 protected:
2095 // Product_2D * prod;
2096 
2097  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
2098  friend class Product_2D;
2099  Horizontal_Product_2D (Object_2D* object_2d, H5::Group* group);
2100 };
2101 
2102 /*===========================================================================*/
2103 /* PPI PRODUCT Dataset */
2104 /*===========================================================================*/
2114 class RADAR_API Product_PPI : public Horizontal_Product_2D
2115 {
2116 public:
2117  virtual ~Product_PPI() ;
2118 
2119  virtual void setMandatoryInformations();
2120 
2121 private:
2122 
2123  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
2124  friend class Horizontal_Product_2D ;
2125  friend class Object_2D;
2126  Product_PPI(Object_2D * object_2d, H5::Group* group);
2127 };
2128 /*===========================================================================*/
2129 /* CAPPI PRODUCT Dataset */
2130 /*===========================================================================*/
2140 class RADAR_API Product_CAPPI : public Horizontal_Product_2D
2141 {
2142 public:
2143  virtual ~Product_CAPPI() ;
2144 
2145  virtual void setMandatoryInformations();
2146 
2147 private:
2148 
2149  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
2150  friend class Horizontal_Product_2D ;
2151  friend class Object_2D;
2152  Product_CAPPI(Object_2D * object_2d, H5::Group* group);
2153 };
2154 /*===========================================================================*/
2155 /* PCAPPI PRODUCT Dataset */
2156 /*===========================================================================*/
2166 class RADAR_API Product_PCAPPI : public Horizontal_Product_2D
2167 {
2168 public:
2169  virtual ~Product_PCAPPI() ;
2170 
2171  virtual void setMandatoryInformations();
2172 
2173 private:
2174 
2175  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
2176  friend class Horizontal_Product_2D ;
2177  friend class Object_2D;
2178  Product_PCAPPI(Object_2D * object_2d, H5::Group* group);
2179 };
2180 /*===========================================================================*/
2181 /* ETOP PRODUCT Dataset */
2182 /*===========================================================================*/
2192 class RADAR_API Product_ETOP : public Horizontal_Product_2D
2193 {
2194 public:
2195  virtual ~Product_ETOP() ;
2196 
2197  virtual void setMandatoryInformations();
2198 
2199 private:
2200 
2201  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
2202  friend class Horizontal_Product_2D ;
2203  friend class Object_2D;
2204  Product_ETOP(Object_2D * object_2d, H5::Group* group);
2205 };
2206 /*===========================================================================*/
2207 /* MAX PRODUCT Dataset */
2208 /*===========================================================================*/
2218 class RADAR_API Product_MAX : public Horizontal_Product_2D
2219 {
2220 public:
2221  virtual ~Product_MAX() ;
2222 
2223  virtual void setMandatoryInformations();
2224 
2225 private:
2226 
2227  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
2228  friend class Horizontal_Product_2D ;
2229  friend class Object_2D;
2230  Product_MAX(Object_2D * object_2d, H5::Group* group);
2231 };
2232 
2233 /*===========================================================================*/
2234 /* RR PRODUCT Dataset */
2235 /*===========================================================================*/
2245 class RADAR_API Product_RR : public Horizontal_Product_2D
2246 {
2247 public:
2248  virtual ~Product_RR() ;
2249 
2250  virtual void setMandatoryInformations();
2251 
2252 private:
2253 
2254  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
2255  friend class Horizontal_Product_2D ;
2256  friend class Object_2D;
2257  Product_RR(Object_2D * object_2d, H5::Group* group);
2258 };
2259 /*===========================================================================*/
2260 /* VIL PRODUCT Dataset */
2261 /*===========================================================================*/
2271 class RADAR_API Product_VIL : public Horizontal_Product_2D
2272 {
2273 public:
2274  virtual ~Product_VIL() ;
2275 
2276  virtual void setMandatoryInformations();
2277 
2278 private:
2279 
2280  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
2281  friend class Horizontal_Product_2D ;
2282  friend class Object_2D;
2283  Product_VIL(Object_2D * object_2d, H5::Group* group);
2284 };
2285 /*===========================================================================*/
2286 /* LBM PRODUCT Dataset */
2287 /*===========================================================================*/
2297 class RADAR_API Product_LBM : public Horizontal_Product_2D
2298 {
2299 public:
2300  virtual ~Product_LBM() ;
2301 
2302  virtual void setMandatoryInformations();
2303 
2304 private:
2305 
2306  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
2307  friend class Horizontal_Product_2D ;
2308  friend class Object_2D;
2309  Product_LBM(Object_2D * object_2d, H5::Group* group);
2310 };
2311 
2312 /*===========================================================================*/
2313 /* COMP PRODUCT Dataset */
2314 /*===========================================================================*/
2324 class RADAR_API Product_COMP : public Horizontal_Product_2D
2325 {
2326 public:
2327  virtual ~Product_COMP() ;
2328 
2329  virtual void setMandatoryInformations();
2330 
2331 private:
2332 
2333  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
2334  friend class Horizontal_Product_2D ;
2335  friend class Object_2D;
2336  Product_COMP(Object_2D * object_2d, H5::Group* group);
2337 };
2338 
2339 /*===========================================================================*/
2340 /* VERTICAL 2D_PRODUCT Dataset */
2341 /*===========================================================================*/
2351 class RADAR_API Vertical_Product_2D : public Product_2D, public WHEREXSECMetadata
2352 {
2353 public:
2354  virtual ~Vertical_Product_2D();
2355 public:
2356  //virtual void setMandatoryInformations();
2357 
2358  virtual int getXSize () ;
2359  virtual void setXSize (int val) ;
2360  virtual int getYSize () ;
2361  virtual void setYSize (int val) ;
2362  virtual double getXScale () ;
2363  virtual void setXScale (double val) ;
2364  virtual double getYScale () ;
2365  virtual void setYScale (double val) ;
2366  virtual double getMinHeight () ;
2367  virtual void setMinHeight (double val) ;
2368  virtual double getMaxHeight () ;
2369  virtual void setMaxHeight (double val) ;
2370 
2371 protected:
2372  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
2373  friend class Product_2D;
2374  Vertical_Product_2D(Object_2D* object_2d, H5::Group* group);
2375 };
2376 
2377 /*===========================================================================*/
2378 /* XSEC PRODUCT Dataset */
2379 /*===========================================================================*/
2389 class RADAR_API Product_XSEC : public Vertical_Product_2D
2390 {
2391 public:
2392  virtual ~Product_XSEC() ;
2393 
2394  virtual void setMandatoryInformations();
2395 
2396 private:
2397 
2398  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
2399  friend class Vertical_Product_2D ;
2400  friend class Object_2D;
2401  Product_XSEC(Object_2D* object_2d, H5::Group* group);
2402 };
2403 
2404 /*===========================================================================*/
2405 /* RHI PRODUCT Dataset */
2406 /*===========================================================================*/
2416 class RADAR_API Product_RHI : public Vertical_Product_2D, public WHERERhiMetadata
2417 {
2418 public:
2419  virtual ~Product_RHI() ;
2420 
2421  virtual void setMandatoryInformations();
2422 
2423  virtual double getRHILon ();
2424  virtual void setRHILon (double val);
2425  virtual double getRHILat ();
2426  virtual void setRHILat (double val);
2427  virtual double getAzimuthAngle ();
2428  virtual void setAzimuthAngle (double val);
2429  virtual std::vector<Angles> getAngles ();
2430  virtual void setAngles (const std::vector<Angles>& val, int precision = 0);
2431  virtual double getRange ();
2432  virtual void setRange (double val);
2433 
2434 private:
2435 
2436  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
2437  friend class Vertical_Product_2D ;
2438  friend class Object_2D;
2439  Product_RHI(Object_2D* object_2d, H5::Group* group);
2440 };
2441 
2442 /*===========================================================================*/
2443 /* VSP PRODUCT Dataset */
2444 /*===========================================================================*/
2454 class RADAR_API Product_Panel : public Vertical_Product_2D , public WHEREPanelMetadata
2455 {
2456 public:
2457  virtual ~Product_Panel() ;
2458 
2459  virtual void setMandatoryInformations();
2460  virtual double getStartLongitude () ;
2461  virtual void setStartLongitude (double val);
2462  virtual double getStartLatitude () ;
2463  virtual void setStartLatitude (double val);
2464  virtual double getStopLongitude ();
2465  virtual void setStopLongitude (double val);
2466  virtual double getStopLatitude ();
2467  virtual void setStopLatitude (double val);
2468 
2469 protected:
2470 
2471  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
2472  friend class Vertical_Product_2D ;
2473  friend class Product_2D;
2474  Product_Panel(Object_2D* object_2d, H5::Group* group);
2475 };
2476 
2477 /*===========================================================================*/
2478 /* HSP PRODUCT Dataset */
2479 /*===========================================================================*/
2489 class RADAR_API Product_HSP : public Product_Panel
2490 {
2491 public:
2492  virtual ~Product_HSP() ;
2493 
2494  virtual void setMandatoryInformations();
2495 
2496 private:
2497 
2498  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
2499  friend class Product_Panel;
2500  friend class Object_2D;
2501  Product_HSP(Object_2D* object_2d, H5::Group* group);
2502 };
2503 
2504 /*===========================================================================*/
2505 /* VSP PRODUCT Dataset */
2506 /*===========================================================================*/
2516 class RADAR_API Product_VSP : public Product_Panel
2517 {
2518 public:
2519  virtual ~Product_VSP() ;
2520 
2521  virtual void setMandatoryInformations();
2522 
2523 private:
2524 
2525  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
2526  friend class Product_Panel;
2527  friend class Object_2D;
2528  Product_VSP(Object_2D* object_2d, H5::Group* group);
2529 };
2530 /*===========================================================================*/
2531 /* 2D PRODUCT DATA */
2532 /*===========================================================================*/
2533 
2541 class RADAR_API Product_2D_Data: public OdimData, public WHATDatasetMetadata
2542 {
2543 public:
2544  virtual ~Product_2D_Data();
2545 
2546  virtual std::string getObject ();
2547  virtual void setObject (const std::string& val);
2548  virtual std::string getVersion ();
2549  virtual void setVersion (const std::string& val);
2550  virtual time_t getDateTime ();
2551  virtual void setDateTime (const time_t val);
2552  virtual SourceInfo getSource ();
2553  virtual void setSource (const SourceInfo& val);
2554 
2555  virtual std::string getProduct ();
2556  virtual void setProduct (const std::string& val);
2557  virtual double getProdPar ();
2558  virtual VILHeights getProdParVIL ();
2559  virtual void setProdPar (double val);
2560  virtual void setProdPar (const VILHeights& val);
2561  virtual std::string getQuantity ();
2562  virtual void setQuantity (const std::string& val);
2563  virtual time_t getStartDateTime();
2564  virtual void setStartDateTime(time_t val);
2565  virtual time_t getEndDateTime ();
2566  virtual void setEndDateTime (time_t val);
2567  virtual double getGain ();
2568  virtual void setGain (double val);
2569  virtual double getOffset ();
2570  virtual void setOffset (double val);
2571  virtual double getNodata ();
2572  virtual void setNodata (double val);
2573  virtual double getUndetect ();
2574  virtual void setUndetect (double val);
2575 
2581  virtual int getNumXElem();
2587  virtual int getNumYElem();
2593  H5::AtomType getElemType();
2601  virtual void readTranslatedData(DataMatrix<float>& matrix);
2609  virtual void readTranslatedData(DataMatrix<double>& matrix);
2621  virtual void writeAndTranslate(DataMatrix<float>& matrix, float offset, float gain, H5::DataType type);
2633  virtual void writeAndTranslate(DataMatrix<double>& matrix, double offset, double gain, H5::DataType type);
2634 
2641  virtual int getQualityDataCount();
2648  virtual OdimQuality* createQualityData ();
2658  virtual OdimQuality* getQualityData (int index);
2666  virtual void removeQualityData (int index);
2667 
2668 private:
2669  Product_2D* prod;
2670 
2671  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
2672  friend class Horizontal_Product_2D;
2673  friend class Product_2D;
2674  Product_2D_Data(Product_2D* prod, H5::Group* group);
2675 };
2676 
2677 
2678 /*===========================================================================*/
2679 
2680 }
2681 
2682 #endif
2683 
2684 
OdimH5 v2.0 CompObject.
Definition: odimh5v20_classes.hpp:1698
Matrix of data values.
Definition: odimh5v20_support.hpp:472
Interface fot HOW dataset attributes methods for cartesian images.
Definition: odimh5v20_metadata.hpp:2309
Interface for HOW dataset attributes methods for polar data.
Definition: odimh5v20_metadata.hpp:1955
Interface fot HOW root attributes methods.
Definition: odimh5v20_metadata.hpp:1716
OdimH5 v2.0 Horizontal Product_2D Dataset.
Definition: odimh5v20_classes.hpp:2045
OdimH5 v2.0 horizontalObject.
Definition: odimh5v20_classes.hpp:1612
OdimH5 v2.0 ImageObject.
Definition: odimh5v20_classes.hpp:1671
Attribute (odim metadata) group.
Definition: odimh5v20_metadata.hpp:54
OdimH5 v2.0 Object_2D.
Definition: odimh5v20_classes.hpp:1390
Generic OdimH5 v2.0 data group.
Definition: odimh5v20_classes.hpp:380
Generic OdimH5 v2.0 dataset group.
Definition: odimh5v20_classes.hpp:257
OdimH5 objects factory.
Definition: odimh5v20_factory.hpp:50
Generic OdimH5 v2.0 object.
Definition: odimh5v20_classes.hpp:95
Generic OdimH5 v2.0 quality group.
Definition: odimh5v20_classes.hpp:630
OdimH5 v2.0 SCAN quantity data.
Definition: odimh5v20_classes.hpp:1272
OdimH5 v2.0 Polar Volume SCAN.
Definition: odimh5v20_classes.hpp:989
static int originaRayIndex(int index, int originalDirection, int numrays, int a1gate)
Calculate the original ray index of a scan.
Definition: odimh5v20_classes.hpp:1240
OdimH5 v2.0 Polar Volume.
Definition: odimh5v20_classes.hpp:846
OdimH5 v2.0 2d product quantity data.
Definition: odimh5v20_classes.hpp:2542
OdimH5 v2.0 Product_2D Dataset.
Definition: odimh5v20_classes.hpp:1786
OdimH5 v2.0 CAPPI Product Dataset.
Definition: odimh5v20_classes.hpp:2141
OdimH5 v2.0 COMP Product Dataset.
Definition: odimh5v20_classes.hpp:2325
OdimH5 v2.0 ETOP Product Dataset.
Definition: odimh5v20_classes.hpp:2193
OdimH5 v2.0 HSP Product Dataset.
Definition: odimh5v20_classes.hpp:2490
OdimH5 v2.0 PPI Product Dataset.
Definition: odimh5v20_classes.hpp:2298
OdimH5 v2.0 MAX Product Dataset.
Definition: odimh5v20_classes.hpp:2219
OdimH5 v2.0 PCAPPI Product Dataset.
Definition: odimh5v20_classes.hpp:2167
OdimH5 v2.0 PPI Product Dataset.
Definition: odimh5v20_classes.hpp:2115
OdimH5 v2.0 Panel Product Dataset.
Definition: odimh5v20_classes.hpp:2455
OdimH5 v2.0 RHI Product Dataset.
Definition: odimh5v20_classes.hpp:2417
OdimH5 v2.0 RR Product Dataset.
Definition: odimh5v20_classes.hpp:2246
OdimH5 v2.0 VIL Product Dataset.
Definition: odimh5v20_classes.hpp:2272
OdimH5 v2.0 VSP Product Dataset.
Definition: odimh5v20_classes.hpp:2517
OdimH5 v2.0 XSEC Product Dataset.
Definition: odimh5v20_classes.hpp:2390
OdimH5 rays matrix.
Definition: odimh5v20_support.hpp:616
OdimH5 object source informations.
Definition: odimh5v20_support.hpp:111
Bottom and top heights (m) of the integration layer.
Definition: odimh5v20_support.hpp:418
OdimH5 v2.0 Vericat Product_2D Dataset.
Definition: odimh5v20_classes.hpp:2352
Interface fot WHAT dataset attributes methods.
Definition: odimh5v20_metadata.hpp:1035
Interface fot WHAT root attributes methods.
Definition: odimh5v20_metadata.hpp:976
Interface fot WHERE dataset attributes methods for images.
Definition: odimh5v20_metadata.hpp:1367
Interface for WHERE dataset attributes methods for Panel.
Definition: odimh5v20_metadata.hpp:1660
Interface for WHERE dataset attributes methods for RHI.
Definition: odimh5v20_metadata.hpp:1596
Interface fot WHERE root attributes methods.
Definition: odimh5v20_metadata.hpp:1174
Interface fot WHERE dataset attributes methods for polar scan.
Definition: odimh5v20_metadata.hpp:1211
Interface for WHERE dataset attributes methods for XSEC.
Definition: odimh5v20_metadata.hpp:1522
OdimH5 v2.0 XsecObject.
Definition: odimh5v20_classes.hpp:1725
Internal library macros.
Namespace related to ODIMH5 version 2.0.
Definition: odimh5v20.hpp:46
Constants and values used by OdimH5 library.
OdimH5 exceptions.
Classes about attributes groups for OdimH5 objects.
Classes and struct used by main OdimH5 classes.