radarlib  1.4.4
odimh5v21_classes.hpp
Go to the documentation of this file.
1 /*
2  * Radar Library
3  *
4  * Copyright (C) 2.19-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_ODIMH5V21_CLASES_HPP__
29 #define __RADAR_ODIMH5V21_CLASES_HPP__
30 
31 #include <radarlib/defs.h>
36 
37 #include <set>
38 
39 namespace OdimH5v21
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_POH;
71 class Product_COMP;
72 class Vertical_Product_2D;
73 class Product_Panel;
74 class Product_XSEC;
75 class Product_RHI;
76 class Product_VSP;
77 class Product_HSP;
78 class Product_2D_Data;
79 class Vertical_Product_2D_Data;
80 /*===========================================================================*/
81 /* ODIM ROOT OBJECT */
82 /*===========================================================================*/
83 
95 class RADAR_API OdimObject : public WHATRootMetadata
96 {
97 public:
98  virtual ~OdimObject();
99 
105  virtual std::string getConventions();
111  virtual void setConventions();
112 
120  virtual H5::H5File* getFile();
128  virtual H5::Group* getH5Object();
129 
136  virtual bool existWhat();
137 
144  virtual bool existWhere();
151  virtual bool existHow();
152 
160  virtual MetadataGroup* getWhat();
168  virtual MetadataGroup* getWhere();
177  virtual MetadataGroup* getHow();
178  virtual std::string getObject ();
179  virtual void setObject (const std::string& val);
180  virtual std::string getVersion ();
181  virtual void setVersion (const std::string& val);
182  virtual time_t getDateTime ();
183  virtual void setDateTime (const time_t val);
184  virtual SourceInfo getSource ();
185  virtual void setSource (const SourceInfo& val);
186 
193  virtual int getDatasetCount();
202  virtual OdimDataset* createDataset();
212  virtual OdimDataset* getDataset(int index);
221  virtual void removeDataset(int index);
222 
223 
224 protected:
225  H5::H5File* file;
226  H5::Group* group;
227  MetadataGroup* meta_what;
228  MetadataGroup* meta_where;
229  MetadataGroup* meta_how;
230 
231  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
232  friend class OdimFactory;
233  OdimObject(H5::H5File* file);
234 
235  virtual H5::Group* createDatasetGroup();
236  virtual H5::Group* getDatasetGroup(int num);
237 
238  virtual void setMandatoryInformations ();
239  virtual void checkMandatoryInformations ();
240 
241 };
242 
243 /*===========================================================================*/
244 /* ODIM DATASET */
245 /*===========================================================================*/
246 
257 class RADAR_API OdimDataset
258 {
259 public:
260  virtual ~OdimDataset();
261 
269  virtual H5::Group* getH5Object();
270 
277  virtual bool existWhat();
278 
285  virtual bool existWhere();
292  virtual bool existHow();
300  virtual MetadataGroup* getWhat();
308  virtual MetadataGroup* getWhere();
316  virtual MetadataGroup* getHow();
317 
324  virtual int getDataCount();
332  virtual OdimData* createData();
342  virtual OdimData* getData(int index);
350  virtual void removeData(int index);
351 
358  virtual int getQualityCount();
366  virtual OdimQuality* createQuality();
376  virtual OdimQuality* getQuality(int index);
384  virtual void removeQuality(int index);
385 protected:
386  H5::Group* group;
387  MetadataGroup* meta_what;
388  MetadataGroup* meta_where;
389  MetadataGroup* meta_how;
390 
391  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
392  friend class OdimObject;
393  OdimDataset(H5::Group* group);
394 
395  virtual H5::Group* createDataGroup();
396  virtual H5::Group* getDataGroup(int num);
397  virtual H5::Group* createQualityGroup();
398  virtual H5::Group* getQualityGroup(int num);
399 };
400 
401 /*===========================================================================*/
402 /* ODIM DATA */
403 /*===========================================================================*/
404 
415 class RADAR_API OdimData
416 {
417 public:
418  virtual ~OdimData();
419 
427  virtual H5::Group* getH5Object();
434  virtual bool existWhat();
435 
442  virtual bool existWhere();
449  virtual bool existHow();
457  virtual MetadataGroup* getWhat();
465  virtual MetadataGroup* getWhere();
473  virtual MetadataGroup* getHow();
483  virtual H5::AtomType getDataType();
489  virtual int getDataWidth();
495  virtual int getDataHeight();
501  virtual void getDataDimension(int* height, int* width);
514  virtual void writeData(const void* buff, int width, int height, const H5::DataType& elemtype);
524  virtual void writeData(const char* buff, int width, int height);
534  virtual void writeData(const unsigned char* buff, int width, int height);
544  virtual void writeData(const unsigned short* buff, int width, int height);
554  virtual void writeData(const float* buff, int width, int height);
555 
564  virtual void writeData(const DataMatrix<char>& matrix);
573  virtual void writeData(const DataMatrix<unsigned char>& matrix);
582  virtual void writeData(const DataMatrix<unsigned short>& matrix);
591  virtual void writeData(const DataMatrix<float>& matrix);
601  virtual void readData(void* buffer);
608  virtual int getQualityCount();
616  virtual OdimQuality* createQuality();
626  virtual OdimQuality* getQuality(int index);
634  virtual void removeQuality(int index);
635 
636 protected:
637  H5::Group* group;
638  MetadataGroup* meta_what;
639  MetadataGroup* meta_where;
640  MetadataGroup* meta_how;
641 
642  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
643  friend class OdimDataset;
644  OdimData(H5::Group* group);
645 
646  virtual H5::DataSet* getData();
647  virtual H5::Group* createQualityGroup();
648  virtual H5::Group* getQualityGroup(int num);
649 };
650 
651 /*===========================================================================*/
652 /* ODIM QUALITY*/
653 /*===========================================================================*/
654 
665 class RADAR_API OdimQuality
666 {
667 public:
668  virtual ~OdimQuality();
669 
677  virtual H5::Group* getH5Object();
684  virtual bool existWhat();
685 
692  virtual bool existWhere();
699  virtual bool existHow();
700 
708  virtual MetadataGroup* getWhat();
716  virtual MetadataGroup* getWhere();
724  virtual MetadataGroup* getHow();
734  virtual H5::AtomType getQualityType();
740  virtual int getQualityWidth();
746  virtual int getQualityHeight();
752  virtual void getQualityDimension(int* height, int* width);
765  virtual void writeQuality(const void* buff, int width, int height, const H5::DataType& elemtype);
775  virtual void writeQuality(const char* buff, int width, int height);
785  virtual void writeQuality(const unsigned char* buff, int width, int height);
795  virtual void writeQuality(const unsigned short* buff, int width, int height);
805  virtual void writeQuality(const float* buff, int width, int height);
806 
815  virtual void writeQuality(const DataMatrix<char>& matrix);
824  virtual void writeQuality(const DataMatrix<unsigned char>& matrix);
833  virtual void writeQuality(const DataMatrix<unsigned short>& matrix);
842  virtual void writeQuality(const DataMatrix<float>& matrix);
852  virtual void readQuality(void* buffer);
853 
854 protected:
855  H5::Group* group;
856  MetadataGroup* meta_what;
857  MetadataGroup* meta_where;
858  MetadataGroup* meta_how;
859 
860  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
861  friend class OdimDataset;
862  friend class OdimData;
863  friend class Product_2D_Data;
864  OdimQuality(H5::Group* group);
865 
866  virtual H5::DataSet* getData();
867 };
868 
869 /*===========================================================================*/
870 /* POLAR VOLUME */
871 /*===========================================================================*/
872 
882 class RADAR_API PolarVolume : public OdimObject, public WHERERootMetadata, public HOWRootMetadata
883 {
884 public:
885  virtual ~PolarVolume();
886 
887  virtual double getLongitude ();
888  virtual void setLongitude (double val);
889  virtual double getLatitude ();
890  virtual void setLatitude (double val);
891  virtual double getAltitude ();
892  virtual void setAltitude (double val);
893 
894  virtual std::string getTaskOrProdGen ();
895  virtual void setTaskOrProdGen (const std::string& val);
896  virtual time_t getStartEpochs ();
897  virtual void setStartEpochs (time_t val);
898  virtual time_t getEndEpochs ();
899  virtual void setEndEpochs (time_t val);
900  virtual std::string getSystem ();
901  virtual void setSystem (const std::string& val);
902  virtual std::string getSoftware ();
903  virtual void setSoftware (const std::string& val);
904  virtual std::string getSoftwareVer ();
905  virtual void setSoftwareVer (const std::string& val);
906  virtual double getZR_A ();
907  virtual void setZR_A (double val);
908  virtual double getZR_B ();
909  virtual void setZR_B (double val);
910  virtual double getKR_A ();
911  virtual void setKR_A (double val);
912  virtual double getKR_B ();
913  virtual void setKR_B (double val);
914  virtual bool getSimulated ();
915  virtual void setSimulated (bool val);
916 
922  virtual int getScanCount ();
929  virtual PolarScan* createScan ();
937  virtual PolarScan* getScan (int index);
945  virtual void removeScan (int index);
952  virtual std::vector<PolarScan*> getScans ();
961  virtual std::vector<PolarScan*> getScans (double elevation, double gap = 0);
970  virtual std::vector<PolarScan*> getScansBetween (double minElevation, double maxElevation);
978  virtual std::vector<PolarScan*> getScans (const char* quantity);
979  virtual std::vector<PolarScan*> getScans (const std::string& quantity);
987  virtual std::vector<double> getScanAngles ();
994  virtual std::vector<double> getElevationAngles ();
1001  virtual std::set<std::string> getStoredQuantities();
1002 
1003 protected:
1004  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
1005  friend class OdimFactory;
1006  PolarVolume(H5::H5File* file);
1007 
1008  virtual void setMandatoryInformations ();
1009  virtual void checkMandatoryInformations ();
1010 
1011 };
1012 
1013 /*===========================================================================*/
1014 /* POLAR VOLUME SCAN */
1015 /*===========================================================================*/
1016 
1025 class RADAR_API PolarScan : public OdimDataset, public WHATDatasetMetadata, public WHEREScanMetadata, public HOWPolarMetadata
1026 {
1027 public:
1028  virtual ~PolarScan();
1029 
1030  virtual void setMandatoryInformations();
1031 
1032  virtual std::string getObject ();
1033  virtual void setObject (const std::string& val);
1034  virtual std::string getVersion ();
1035  virtual void setVersion (const std::string& val);
1036  virtual time_t getDateTime ();
1037  virtual void setDateTime (const time_t val);
1038  virtual SourceInfo getSource ();
1039  virtual void setSource (const SourceInfo& val);
1040 
1041  virtual std::string getProduct ();
1042  virtual void setProduct (const std::string& val);
1043  virtual double getProdPar ();
1044  virtual VILHeights getProdParVIL ();
1045  virtual void setProdPar (double val);
1046  virtual void setProdPar (const VILHeights& val);
1047  virtual std::string getQuantity ();
1048  virtual void setQuantity (const std::string& val);
1049  virtual time_t getStartDateTime ();
1050  virtual void setStartDateTime (time_t val);
1051  virtual time_t getEndDateTime ();
1052  virtual void setEndDateTime (time_t val);
1053  virtual double getGain ();
1054  virtual void setGain (double val);
1055  virtual double getOffset ();
1056  virtual void setOffset (double val);
1057  virtual double getNodata ();
1058  virtual void setNodata (double val);
1059  virtual double getUndetect ();
1060  virtual void setUndetect (double val);
1061 
1062  virtual double getLongitude ();
1063  virtual void setLongitude (double val);
1064  virtual double getLatitude ();
1065  virtual void setLatitude (double val);
1066  virtual double getAltitude ();
1067  virtual void setAltitude (double val);
1068 
1069  virtual double getEAngle ();
1070  virtual void setEAngle (double val);
1071  virtual int getNumBins ();
1072  virtual void setNumBins (int val);
1073  virtual double getRangeStart ();
1074  virtual void setRangeStart (double val);
1075  virtual double getRangeScale ();
1076  virtual void setRangeScale (double val);
1077  virtual int getNumRays ();
1078  virtual void setNumRays (int val);
1079  virtual int getA1Gate ();
1080  virtual void setA1Gate (int val);
1081 
1082  virtual std::string getTaskOrProdGen ();
1083  virtual void setTaskOrProdGen (const std::string& val);
1084  virtual time_t getStartEpochs ();
1085  virtual void setStartEpochs (time_t val);
1086  virtual time_t getEndEpochs ();
1087  virtual void setEndEpochs (time_t val);
1088  virtual std::string getSystem ();
1089  virtual void setSystem (const std::string& val);
1090  virtual std::string getSoftware ();
1091  virtual void setSoftware (const std::string& val);
1092  virtual std::string getSoftwareVer ();
1093  virtual void setSoftwareVer (const std::string& val);
1094  virtual double getZR_A ();
1095  virtual void setZR_A (double val);
1096  virtual double getZR_B ();
1097  virtual void setZR_B (double val);
1098  virtual double getKR_A ();
1099  virtual void setKR_A (double val);
1100  virtual double getKR_B ();
1101  virtual void setKR_B (double val);
1102  virtual bool getSimulated ();
1103  virtual void setSimulated (bool val);
1104 
1105  virtual double getBeamWidth ();
1106  virtual double getBeamWidth (double defaultValue);
1107  virtual void setBeamWidth (double val);
1108  virtual double getWaveLength ();
1109  virtual double getWaveLength (double defaultValue);
1110  virtual void setWaveLength (double val);
1111  virtual double getRPM ();
1112  virtual double getRPM (double defaultValue);
1113  virtual void setRPM (double val);
1114  virtual double getPulseWidth ();
1115  virtual double getPulseWidth (double defaultValue);
1116  virtual void setPulseWidth (double val);
1117  virtual double getRXBandWidth ();
1118  virtual double getRXBandWidth (double defaultValue);
1119  virtual void setRXBandWidth (double val);
1120  virtual int getLowPRF ();
1121  virtual int getLowPRF (int defaultValue);
1122  virtual void setLowPRF (int val);
1123  virtual int getHighPRF ();
1124  virtual int getHighPRF (int defaultValue);
1125  virtual void setHighPRF (int val);
1126  virtual double getTXLoss () ;
1127  virtual double getTXLoss (double defaultValue);
1128  virtual void setTXLoss (double val) ;
1129  virtual double getRXLoss () ;
1130  virtual double getRXLoss (double defaultValue);
1131  virtual void setRXLoss (double val) ;
1132  virtual double getRadomeLoss () ;
1133  virtual double getRadomeLoss (double defaultValue);
1134  virtual void setRadomeLoss (double val) ;
1135  virtual double getAntGain () ;
1136  virtual double getAntGain (double defaultValue);
1137  virtual void setAntGain (double val) ;
1138  virtual double getBeamWH () ;
1139  virtual double getBeamWH (double defaultValue);
1140  virtual void setBeamWH (double val) ;
1141  virtual double getBeamWV () ;
1142  virtual double getBeamWV (double defaultValue);
1143  virtual void setBeamWV (double val) ;
1144  virtual double getGasAttn () ;
1145  virtual double getGasAttn (double defaultValue);
1146  virtual void setGasAttn (double val) ;
1147  virtual double getRadConstH () ;
1148  virtual double getRadConstH (double defaultValue);
1149  virtual void setRadConstH (double val) ;
1150  virtual double getRadConstV () ;
1151  virtual double getRadConstV (double defaultValue);
1152  virtual void setRadConstV (double val) ;
1153  virtual double getNomTXPower () ;
1154  virtual double getNomTXPower (double defaultValue);
1155  virtual void setNomTXPower (double val) ;
1156  virtual std::vector<double> getTXPower () ;
1157  virtual std::vector<double> getTXPower (double defaultValue);
1158  virtual void setTXPower (double val) ;
1159  virtual void setTXPower (const std::vector<double>& val) ;
1160  virtual double getNI () ;
1161  virtual double getNI (double defaultValue);
1162  virtual void setNI (double val) ;
1163  virtual double getVSamples () ;
1164  virtual double getVSamples (double defaultValue);
1165  virtual void setVSamples (double val) ;
1166 
1167  virtual std::string getAzimuthMethod ();
1168  virtual void setAzimuthMethod (const std::string& val);
1169  virtual std::string getBinMethod ();
1170  virtual void setBinMethod (const std::string& val);
1171  virtual std::vector<AZAngles> getAzimuthAngles ();
1172  virtual void setAzimuthAngles (const std::vector<AZAngles>& val,int precision=0);
1173  virtual std::vector<double> getElevationAngles ();
1174  virtual void setElevationAngles (const std::vector<double>& val);
1175 // virtual void setElevationAngles ( std::vector<double>& val);
1176  virtual std::vector<double> getStartAzimuthAngles ();
1177  virtual void setStartAzimuthAngles (const std::vector<double>& val);
1178  virtual std::vector<double> getStopAzimuthAngles ();
1179  virtual void setStopAzimuthAngles (const std::vector<double>& val);
1180  virtual std::vector<double> getStartAzimuthTimes ();
1181  virtual void setStartAzimuthTimes (const std::vector<double>& val);
1182  virtual std::vector<double> getStopAzimuthTimes ();
1183  virtual void setStopAzimuthTimes (const std::vector<double>& val);
1184  virtual std::vector<AZTimes> getAzimuthTimes ();
1185  virtual void setAzimuthTimes (const std::vector<AZTimes>& val);
1186 
1187  virtual double getPointAccEl ();
1188  virtual void setPointAccEl (double val);
1189  virtual double getPointAccAZ ();
1190  virtual void setPointAccAZ (double val);
1191  virtual bool getMalfunc ();
1192  virtual void setMalfunc (bool val);
1193  virtual std::string getRadarMsg ();
1194  virtual void setRadarMsg (const std::string& val);
1195  virtual double getRadarHorizon ();
1196  virtual void setRadarHorizon (double val);
1197 // virtual double getMDS ();
1198 // virtual void setMDS (double val);
1199  virtual double getNEZ ();
1200  virtual void setNEZ (double val);
1201  virtual double getOUR ();
1202  virtual void setOUR (double val);
1203  virtual std::vector<std::string> getDClutter ();
1204  virtual void setDClutter (const std::vector<std::string>& value);
1205  virtual std::string getComment ();
1206  virtual void setComment (const std::string& val);
1207  virtual double getSQI ();
1208  virtual void setSQI (double val);
1209  virtual double getCSR ();
1210  virtual void setCSR (double val);
1211  virtual double getLOG ();
1212  virtual void setLOG (double val);
1213  virtual bool getVPRCorr ();
1214  virtual void setVPRCorr (bool val);
1215  virtual double getFreeze ();
1216  virtual void setFreeze (double val);
1217  virtual double getMin ();
1218  virtual void setMin (double val);
1219  virtual double getMax ();
1220  virtual void setMax (double val);
1221  virtual double getStep ();
1222  virtual void setStep (double val);
1223  virtual int getLevels ();
1224  virtual void setLevels (int val);
1225  virtual double getPeakPwr ();
1226  virtual void setPeakPwr (double val);
1227  virtual double getAvgPwr ();
1228  virtual void setAvgPwr (double val);
1229  virtual double getDynRange ();
1230  virtual void setDynRange (double val);
1231  virtual double getRAC ();
1232  virtual void setRAC (double val);
1233  virtual bool getBBC ();
1234  virtual void setBBC (bool val);
1235  virtual double getPAC ();
1236  virtual void setPAC (double val);
1237  virtual double getS2N ();
1238  virtual void setS2N (double val);
1239  virtual std::string getPolarization ();
1240  virtual void setPolarization (const std::string& val);
1241 
1248  virtual int getQuantityDataCount();
1249 
1257  virtual PolarScanData* createQuantityData (const char* name);
1258  virtual PolarScanData* createQuantityData (const std::string& name);
1267  virtual PolarScanData* getQuantityData (int index);
1276  virtual PolarScanData* getQuantityData (const char* name);
1277  virtual PolarScanData* getQuantityData (const std::string& name);
1284  virtual void removeQuantityData (const char* name);
1285  virtual void removeQuantityData (const std::string& name);
1293  virtual bool hasQuantityData (const char* name);
1294  virtual bool hasQuantityData (const std::string& name);
1302  virtual int getQuantityDataIndex (const char* name);
1303  virtual int getQuantityDataIndex (const std::string& name);
1312  virtual int getDirection();
1319  std::set<std::string> getStoredQuantities ();
1331  static inline int originaRayIndex(int index, int originalDirection, int numrays, int a1gate)
1332  {
1333  if (originalDirection>0)
1334  {
1335  return (index + a1gate) % numrays;
1336  }
1337  else
1338  {
1339  return ((numrays + a1gate) - index) % numrays;
1340  }
1341  }
1342 
1343 private:
1344  PolarVolume* volume;
1345 
1346  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
1347  friend class PolarVolume;
1348  PolarScan(PolarVolume* volume, H5::Group* group);
1349 };
1350 
1351 /*===========================================================================*/
1352 /* POLAR SCAN DATA */
1353 /*===========================================================================*/
1354 
1362 class RADAR_API PolarScanData: public OdimData, public WHATDatasetMetadata
1363 {
1364 public:
1365  virtual ~PolarScanData();
1366 
1367  virtual std::string getObject ();
1368  virtual void setObject (const std::string& val);
1369  virtual std::string getVersion ();
1370  virtual void setVersion (const std::string& val);
1371  virtual time_t getDateTime ();
1372  virtual void setDateTime (const time_t val);
1373  virtual SourceInfo getSource ();
1374  virtual void setSource (const SourceInfo& val);
1375 
1376  virtual std::string getProduct ();
1377  virtual void setProduct (const std::string& val);
1378  virtual double getProdPar ();
1379  virtual VILHeights getProdParVIL ();
1380  virtual void setProdPar (double val);
1381  virtual void setProdPar (const VILHeights& val);
1382  virtual std::string getQuantity ();
1383  virtual void setQuantity (const std::string& val);
1384  virtual time_t getStartDateTime();
1385  virtual void setStartDateTime(time_t val);
1386  virtual time_t getEndDateTime ();
1387  virtual void setEndDateTime (time_t val);
1388  virtual double getGain ();
1389  virtual void setGain (double val);
1390  virtual double getOffset ();
1391  virtual void setOffset (double val);
1392  virtual double getNodata ();
1393  virtual void setNodata (double val);
1394  virtual double getUndetect ();
1395  virtual void setUndetect (double val);
1396 
1402  virtual int getNumRays();
1408  virtual int getNumBins();
1414  H5::AtomType getBinType();
1422  virtual void readTranslatedData(RayMatrix<float>& matrix);
1430  virtual void readTranslatedData(RayMatrix<double>& matrix);
1442  virtual void writeAndTranslate(RayMatrix<float>& matrix, float offset, float gain, H5::DataType type);
1454  virtual void writeAndTranslate(RayMatrix<double>& matrix, double offset, double gain, H5::DataType type);
1455 
1456 private:
1457  PolarScan* scan;
1458 
1459  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
1460  friend class PolarScan;
1461  PolarScanData(PolarScan* scan, H5::Group* group);
1462 };
1463 
1464 
1465 
1466 /*===========================================================================*/
1467 /* 2D OBJECT */
1468 /*===========================================================================*/
1469 
1480 class RADAR_API Object_2D : public OdimObject, public HOWRootMetadata
1481 {
1482 public:
1483  virtual ~Object_2D() = 0;
1484 
1485  //virtual void setMandatoryInformations();
1486  //void checkMandatoryInformations();
1487 
1488  virtual std::string getTaskOrProdGen ();
1489  virtual void setTaskOrProdGen (const std::string& val);
1490  virtual time_t getStartEpochs ();
1491  virtual void setStartEpochs (time_t val);
1492  virtual time_t getEndEpochs ();
1493  virtual void setEndEpochs (time_t val);
1494  virtual std::string getSystem ();
1495  virtual void setSystem (const std::string& val);
1496  virtual std::string getSoftware ();
1497  virtual void setSoftware (const std::string& val);
1498  virtual std::string getSoftwareVer ();
1499  virtual void setSoftwareVer (const std::string& val);
1500  virtual double getZR_A ();
1501  virtual void setZR_A (double val);
1502  virtual double getZR_B ();
1503  virtual void setZR_B (double val);
1504  virtual double getKR_A ();
1505  virtual void setKR_A (double val);
1506  virtual double getKR_B ();
1507  virtual void setKR_B (double val);
1508  virtual bool getSimulated ();
1509  virtual void setSimulated (bool val);
1510 
1516  virtual int getProductCount ();
1524  virtual Product_2D* createProduct2D (const char* type);
1525  virtual Product_2D* createProduct2D (const std::string & type);
1532  virtual Product_PPI* createProductPPI ();
1539  virtual Product_CAPPI* createProductCAPPI ();
1546  virtual Product_PCAPPI* createProductPCAPPI ();
1553  virtual Product_ETOP* createProductETOP ();
1560  virtual Product_MAX* createProductMAX ();
1567  virtual Product_RR* createProductRR ();
1574  virtual Product_VIL* createProductVIL ();
1581  virtual Product_LBM* createProductLBM ();
1588  virtual Product_POH* createProductPOH ();
1595  virtual Product_COMP* createProductCOMP ();
1602  virtual Product_XSEC* createProductXSEC ();
1609  virtual Product_RHI* createProductRHI ();
1616  virtual Product_VSP* createProductVSP ();
1623  virtual Product_HSP* createProductHSP ();
1624 // virtual Horizontal_Product_2D* createHorizontal_Product_2D (const char* type);
1625 // virtual Horizontal_Product_2D* createHorizontal_Product_2D (const std::string& type);
1626 // virtual Vertical_Product_2D* createVertical_Product_2D (const char* type);
1627 // virtual Vertical_Product_2D* createVertical_Product_2D (const std::string& type);
1635  virtual Product_2D* getProduct (int index);
1643 //
1644 //virtual Horizontal_Product_2D* getHorizontal_Product_2D (int index);
1652 //
1653 //virtual Vertical_Product_2D* getVertical_Product_2D (int index);
1661  virtual void removeProduct (int index);
1662 
1669  virtual std::vector<std::string > getProductsType ();
1670 
1677  virtual std::vector<Product_2D*> getProducts();
1689 
1690 protected:
1691  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
1692 // friend class OdimFactory;
1693  Object_2D(H5::H5File* file);
1694 
1695  virtual void setMandatoryInformations ();
1696  virtual void checkMandatoryInformations ();
1697 };
1698 
1699 
1700 /*===========================================================================*/
1701 /* HORIZONTAL OBJECT */
1702 /*===========================================================================*/
1713 class RADAR_API HorizontalObject_2D : public Object_2D, public WHEREImageMetadata
1714 {
1715 public:
1716  virtual ~HorizontalObject_2D() ;
1717 
1718  virtual void setMandatoryInformations();
1719  virtual void checkMandatoryInformations();
1720 
1721  virtual std::string getProjectionArguments () ;
1722  virtual void setProjectionArguments (const std::string& val) ;
1723 
1724  virtual int getXSize () ;
1725  virtual void setXSize (int val) ;
1726  virtual int getYSize () ;
1727  virtual void setYSize (int val) ;
1728  virtual double getXScale () ;
1729  virtual void setXScale (double val) ;
1730  virtual double getYScale () ;
1731  virtual void setYScale (double val) ;
1732 
1733  virtual double getLL_Longitude () ;
1734  virtual void setLL_Longitude (double val) ;
1735  virtual double getLL_Latitude () ;
1736  virtual void setLL_Latitude (double val) ;
1737 
1738  virtual double getUL_Longitude () ;
1739  virtual void setUL_Longitude (double val) ;
1740  virtual double getUL_Latitude () ;
1741  virtual void setUL_Latitude (double val) ;
1742 
1743  virtual double getUR_Longitude () ;
1744  virtual void setUR_Longitude (double val) ;
1745  virtual double getUR_Latitude () ;
1746  virtual void setUR_Latitude (double val) ;
1747 
1748  virtual double getLR_Longitude () ;
1749  virtual void setLR_Longitude (double val) ;
1750  virtual double getLR_Latitude () ;
1751  virtual void setLR_Latitude (double val) ;
1752 protected:
1753  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
1754 // friend class OdimFactory;
1755  HorizontalObject_2D(H5::H5File* file);
1756 
1757 };
1758 /*===========================================================================*/
1759 /* IMAGE OBJECT */
1760 /*===========================================================================*/
1772 class RADAR_API ImageObject : public HorizontalObject_2D
1773 {
1774 public:
1775  virtual ~ImageObject() ;
1776 
1777  virtual void setMandatoryInformations();
1778  virtual void checkMandatoryInformations();
1779 
1780 protected:
1781  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
1782  friend class OdimFactory;
1783  ImageObject(H5::H5File* file);
1784 };
1785 /*===========================================================================*/
1786 /* COMP OBJECT */
1787 /*===========================================================================*/
1799 class RADAR_API CompObject : public HorizontalObject_2D
1800 {
1801 public:
1802  virtual ~CompObject() ;
1803 
1804  virtual void setMandatoryInformations();
1805  virtual void checkMandatoryInformations();
1806 
1807 protected:
1808  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
1809  friend class OdimFactory;
1810  CompObject(H5::H5File* file);
1811 };
1812 
1813 /*===========================================================================*/
1814 /* XSEC OBJECT */
1815 /*===========================================================================*/
1826 class RADAR_API XsecObject : public Object_2D, public WHEREXSECMetadata, public WHERERhiMetadata, public WHEREPanelMetadata
1827 {
1828 public:
1829  virtual ~XsecObject();
1830 
1831  virtual void setMandatoryInformations();
1832  virtual void checkMandatoryInformations();
1833 
1834  virtual int getXSize () ;
1835  virtual void setXSize (int val) ;
1836  virtual int getYSize () ;
1837  virtual void setYSize (int val) ;
1838  virtual double getXScale () ;
1839  virtual void setXScale (double val) ;
1840  virtual double getYScale () ;
1841  virtual void setYScale (double val) ;
1842  virtual double getMinHeight () ;
1843  virtual void setMinHeight (double val) ;
1844  virtual double getMaxHeight () ;
1845  virtual void setMaxHeight (double val) ;
1846 
1847  virtual double getRHILon ();
1848  virtual void setRHILon (double val);
1849  virtual double getRHILat ();
1850  virtual void setRHILat (double val);
1851  virtual double getAzimuthAngle ();
1852  virtual void setAzimuthAngle (double val);
1853  virtual std::vector<Angles> getAngles ();
1854  virtual void setAngles (const std::vector<Angles>& val);
1855  virtual double getRange ();
1856  virtual void setRange (double val);
1857 
1858  virtual double getStartLongitude () ;
1859  virtual void setStartLongitude (double val);
1860  virtual double getStartLatitude () ;
1861  virtual void setStartLatitude (double val);
1862  virtual double getStopLongitude ();
1863  virtual void setStopLongitude (double val);
1864  virtual double getStopLatitude ();
1865  virtual void setStopLatitude (double val);
1866 
1867 protected:
1868  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
1869  friend class OdimFactory;
1870  XsecObject(H5::H5File* file);
1871 
1872 };
1873 
1874 /*===========================================================================*/
1875 /* 2D_PRODUCT Dataset */
1876 /*===========================================================================*/
1887 class RADAR_API Product_2D : public OdimDataset, public WHATDatasetMetadata, public HOWPolarMetadata //, public WHEREImageMetadata, public HOWCartesianImageMetadata
1888 {
1889 public:
1890  virtual ~Product_2D();
1891 
1892  virtual void setMandatoryInformations();
1893 
1894  virtual std::string getObject ();
1895  virtual void setObject (const std::string& val);
1896  virtual std::string getVersion ();
1897  virtual void setVersion (const std::string& val);
1898  virtual time_t getDateTime ();
1899  virtual void setDateTime (const time_t val);
1900  virtual SourceInfo getSource ();
1901  virtual void setSource (const SourceInfo& val);
1902 
1903  virtual std::string getProduct ();
1904  virtual void setProduct (const std::string& val);
1905  virtual double getProdPar ();
1906  virtual VILHeights getProdParVIL ();
1907  virtual void setProdPar (double val);
1908  virtual void setProdPar (const VILHeights& val);
1909  virtual std::string getQuantity ();
1910  virtual void setQuantity (const std::string& val);
1911  virtual time_t getStartDateTime ();
1912  virtual void setStartDateTime (time_t val);
1913  virtual time_t getEndDateTime ();
1914  virtual void setEndDateTime (time_t val);
1915  virtual double getGain ();
1916  virtual void setGain (double val);
1917  virtual double getOffset ();
1918  virtual void setOffset (double val);
1919  virtual double getNodata ();
1920  virtual void setNodata (double val);
1921  virtual double getUndetect ();
1922  virtual void setUndetect (double val);
1923 
1924  virtual std::string getAzimuthMethod ();
1925  virtual void setAzimuthMethod (const std::string& val);
1926  virtual std::string getBinMethod ();
1927  virtual void setBinMethod (const std::string& val);
1928  virtual std::vector<double> getElevationAngles ();
1929 // virtual void setElevationAngles ( std::vector<double>& val);
1930  virtual void setElevationAngles (const std::vector<double>& val);
1931  virtual std::vector<double> getStartAzimuthAngles ();
1932  virtual void setStartAzimuthAngles (const std::vector<double>& val);
1933  virtual std::vector<double> getStopAzimuthAngles ();
1934  virtual void setStopAzimuthAngles (const std::vector<double>& val);
1935  virtual std::vector<double> getStartAzimuthTimes ();
1936  virtual void setStartAzimuthTimes (const std::vector<double>& val);
1937  virtual std::vector<double> getStopAzimuthTimes ();
1938  virtual void setStopAzimuthTimes (const std::vector<double>& val);
1939 // virtual std::vector<AZTimes> getAzimuthTimes ();
1940 // virtual void setAzimuthTimes (const std::vector<AZTimes>& val);
1941 
1942  virtual double getPointAccEl ();
1943  virtual void setPointAccEl (double val);
1944  virtual double getPointAccAZ ();
1945  virtual void setPointAccAZ (double val);
1946  virtual bool getMalfunc ();
1947  virtual void setMalfunc (bool val);
1948  virtual std::string getRadarMsg ();
1949  virtual void setRadarMsg (const std::string& val);
1950  virtual double getRadarHorizon ();
1951  virtual void setRadarHorizon (double val);
1952 // virtual double getMDS ();
1953 // virtual void setMDS (double val);
1954  virtual double getNEZ ();
1955  virtual void setNEZ (double val);
1956  virtual double getOUR ();
1957  virtual void setOUR (double val);
1958  virtual std::vector<std::string> getDClutter ();
1959  virtual void setDClutter (const std::vector<std::string>& value);
1960  virtual std::string getComment ();
1961  virtual void setComment (const std::string& val);
1962  virtual double getSQI ();
1963  virtual void setSQI (double val);
1964  virtual double getCSR ();
1965  virtual void setCSR (double val);
1966  virtual double getLOG ();
1967  virtual void setLOG (double val);
1968  virtual bool getVPRCorr ();
1969  virtual void setVPRCorr (bool val);
1970  virtual double getFreeze ();
1971  virtual void setFreeze (double val);
1972  virtual double getMin ();
1973  virtual void setMin (double val);
1974  virtual double getMax ();
1975  virtual void setMax (double val);
1976  virtual double getStep ();
1977  virtual void setStep (double val);
1978  virtual int getLevels ();
1979  virtual void setLevels (int val);
1980  virtual double getPeakPwr ();
1981  virtual void setPeakPwr (double val);
1982  virtual double getAvgPwr ();
1983  virtual void setAvgPwr (double val);
1984  virtual double getDynRange ();
1985  virtual void setDynRange (double val);
1986  virtual double getRAC ();
1987  virtual void setRAC (double val);
1988  virtual bool getBBC ();
1989  virtual void setBBC (bool val);
1990  virtual double getPAC ();
1991  virtual void setPAC (double val);
1992  virtual double getS2N ();
1993  virtual void setS2N (double val);
1994  virtual std::string getPolarization ();
1995  virtual void setPolarization (const std::string& val);
1996 
1997  virtual std::string getTaskOrProdGen ();
1998  virtual void setTaskOrProdGen (const std::string& val);
1999  virtual time_t getStartEpochs ();
2000  virtual void setStartEpochs (time_t val);
2001  virtual time_t getEndEpochs ();
2002  virtual void setEndEpochs (time_t val);
2003  virtual std::string getSystem ();
2004  virtual void setSystem (const std::string& val);
2005  virtual std::string getSoftware ();
2006  virtual void setSoftware (const std::string& val);
2007  virtual std::string getSoftwareVer ();
2008  virtual void setSoftwareVer (const std::string& val);
2009  virtual double getZR_A ();
2010  virtual void setZR_A (double val);
2011  virtual double getZR_B ();
2012  virtual void setZR_B (double val);
2013  virtual double getKR_A ();
2014  virtual void setKR_A (double val);
2015  virtual double getKR_B ();
2016  virtual void setKR_B (double val);
2017  virtual bool getSimulated ();
2018  virtual void setSimulated (bool val);
2019 
2020  virtual double getBeamWidth ();
2021  virtual double getBeamWidth (double defaultValue);
2022  virtual void setBeamWidth (double val);
2023  virtual double getWaveLength ();
2024  virtual double getWaveLength (double defaultValue);
2025  virtual void setWaveLength (double val);
2026  virtual double getRPM ();
2027  virtual double getRPM (double defaultValue);
2028  virtual void setRPM (double val);
2029  virtual double getPulseWidth ();
2030  virtual double getPulseWidth (double defaultValue);
2031  virtual void setPulseWidth (double val);
2032  virtual double getRXBandWidth ();
2033  virtual double getRXBandWidth (double defaultValue);
2034  virtual void setRXBandWidth (double val);
2035  virtual int getLowPRF ();
2036  virtual int getLowPRF (int defaultValue);
2037  virtual void setLowPRF (int val);
2038  virtual int getHighPRF ();
2039  virtual int getHighPRF (int defaultValue);
2040  virtual void setHighPRF (int val);
2041  virtual double getTXLoss () ;
2042  virtual double getTXLoss (double defaultValue);
2043  virtual void setTXLoss (double val) ;
2044  virtual double getRXLoss () ;
2045  virtual double getRXLoss (double defaultValue);
2046  virtual void setRXLoss (double val) ;
2047  virtual double getRadomeLoss () ;
2048  virtual double getRadomeLoss (double defaultValue);
2049  virtual void setRadomeLoss (double val) ;
2050  virtual double getAntGain () ;
2051  virtual double getAntGain (double defaultValue);
2052  virtual void setAntGain (double val) ;
2053  virtual double getBeamWH () ;
2054  virtual double getBeamWH (double defaultValue);
2055  virtual void setBeamWH (double val) ;
2056  virtual double getBeamWV () ;
2057  virtual double getBeamWV (double defaultValue);
2058  virtual void setBeamWV (double val) ;
2059  virtual double getGasAttn () ;
2060  virtual double getGasAttn (double defaultValue);
2061  virtual void setGasAttn (double val) ;
2062  virtual double getRadConstH () ;
2063  virtual double getRadConstH (double defaultValue);
2064  virtual void setRadConstH (double val) ;
2065  virtual double getRadConstV () ;
2066  virtual double getRadConstV (double defaultValue);
2067  virtual void setRadConstV (double val) ;
2068  virtual double getNomTXPower () ;
2069  virtual double getNomTXPower (double defaultValue);
2070  virtual void setNomTXPower (double val) ;
2071  virtual std::vector<double> getTXPower () ;
2072  virtual std::vector<double> getTXPower (double defaultValue);
2073  virtual void setTXPower (double val) ;
2074  virtual void setTXPower (const std::vector<double>& val) ;
2075  virtual double getNI () ;
2076  virtual double getNI (double defaultValue);
2077  virtual void setNI (double val) ;
2078  virtual double getVSamples () ;
2079  virtual double getVSamples (double defaultValue);
2080  virtual void setVSamples (double val) ;
2081 /*---- Queste le devo inserire anche se non sono reali per un prodotto, perche' l'oggetto eredita da HowPolarMetadata */
2082 /*---- PRIMA O POI BISOGNERA' SANARE LA SITUAZIONE PPA 2013-12-18*/
2083  virtual std::vector<AZAngles> getAzimuthAngles () {}
2084  virtual void setAzimuthAngles (const std::vector<AZAngles>& val, int precision = 10) {}
2085 /*--- FINE METODI VUOTI */
2086 
2087 /*-----
2088 
2089  virtual double getLongitude ();
2090  virtual void setLongitude (double val);
2091  virtual double getLatitude ();
2092  virtual void setLatitude (double val);
2093  virtual double getAltitude ();
2094  virtual void setAltitude (double val);
2095 
2096 
2097  virtual double getEAngle ();
2098  virtual void setEAngle (double val);
2099  virtual int getNumBins ();
2100  virtual void setNumBins (int val);
2101  virtual double getRangeStart ();
2102  virtual void setRangeStart (double val);
2103  virtual double getRangeScale ();
2104  virtual void setRangeScale (double val);
2105  virtual int getNumRays ();
2106  virtual void setNumRays (int val);
2107  virtual int getA1Gate ();
2108  virtual void setA1Gate (int val);
2109 
2110 ----*/
2111 
2119  virtual Product_2D_Data* createQuantityData (const char* name);
2120  virtual Product_2D_Data* createQuantityData (const std::string& name);
2127  virtual int getQuantityDataCount();
2135  virtual bool hasQuantityData (const char* name);
2136  virtual bool hasQuantityData (const std::string& name);
2144  virtual int getQuantityDataIndex (const char* name);
2145  virtual int getQuantityDataIndex (const std::string& name);
2154  virtual Product_2D_Data* getQuantityData (int index);
2163  virtual Product_2D_Data* getQuantityData (const char* name);
2164  virtual Product_2D_Data* getQuantityData (const std::string& name);
2171  std::set<std::string> getStoredQuantities ();
2178  virtual void removeQuantityData (const char* name);
2179  virtual void removeQuantityData (const std::string& name);
2180 
2181 protected :
2182  Object_2D* object_2d;
2183 
2184  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
2185  friend class Object_2D;
2186  Product_2D(Object_2D* object_2d, H5::Group* group);
2187 
2188 };
2189 
2190 /*===========================================================================*/
2191 /* HORIZONTAL 2D_PRODUCT Dataset */
2192 /*===========================================================================*/
2193 
2205 {
2206 public:
2207  virtual ~Horizontal_Product_2D();
2208 public:
2209 // virtual void setMandatoryInformations();
2210 
2211  virtual std::string getProjectionArguments () ;
2212  virtual void setProjectionArguments (const std::string& val) ;
2213 
2214  virtual int getXSize () ;
2215  virtual void setXSize (int val) ;
2216  virtual int getYSize () ;
2217  virtual void setYSize (int val) ;
2218  virtual double getXScale () ;
2219  virtual void setXScale (double val) ;
2220  virtual double getYScale () ;
2221  virtual void setYScale (double val) ;
2222 
2223  virtual double getLL_Longitude () ;
2224  virtual void setLL_Longitude (double val) ;
2225  virtual double getLL_Latitude () ;
2226  virtual void setLL_Latitude (double val) ;
2227 
2228  virtual double getUL_Longitude () ;
2229  virtual void setUL_Longitude (double val) ;
2230  virtual double getUL_Latitude () ;
2231  virtual void setUL_Latitude (double val) ;
2232 
2233  virtual double getUR_Longitude () ;
2234  virtual void setUR_Longitude (double val) ;
2235  virtual double getUR_Latitude () ;
2236  virtual void setUR_Latitude (double val) ;
2237 
2238  virtual double getLR_Longitude () ;
2239  virtual void setLR_Longitude (double val) ;
2240  virtual double getLR_Latitude () ;
2241  virtual void setLR_Latitude (double val) ;
2242 /*--- queste devono essere implementate .-----*/
2243  virtual std::vector<Angles> getAngles () ;
2244  virtual void setAngles (const std::vector<Angles>& val) ;
2245  virtual std::vector<Arotation> getArotation () ;
2246  virtual void setArotation (const std::vector<Arotation>& val);
2247  virtual std::string getCAMethod ();
2248  virtual void setCAMethod (const std::string& val) ;
2249  virtual std::vector<Nodes> getNodes () ;
2250  virtual void setNodes (const std::vector<Nodes>& val) ;
2251  virtual int getACCnum () ;
2252  virtual void setCCnum (int val) ;
2253 
2254 protected:
2255 // Product_2D * prod;
2256 
2257  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
2258  friend class Product_2D;
2259  Horizontal_Product_2D (Object_2D* object_2d, H5::Group* group);
2260 };
2261 
2262 /*===========================================================================*/
2263 /* PPI PRODUCT Dataset */
2264 /*===========================================================================*/
2274 class RADAR_API Product_PPI : public Horizontal_Product_2D
2275 {
2276 public:
2277  virtual ~Product_PPI() ;
2278 
2279  virtual void setMandatoryInformations();
2280 
2281 private:
2282 
2283  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
2284  friend class Horizontal_Product_2D ;
2285  friend class Object_2D;
2286  Product_PPI(Object_2D * object_2d, H5::Group* group);
2287 };
2288 /*===========================================================================*/
2289 /* CAPPI PRODUCT Dataset */
2290 /*===========================================================================*/
2300 class RADAR_API Product_CAPPI : public Horizontal_Product_2D
2301 {
2302 public:
2303  virtual ~Product_CAPPI() ;
2304 
2305  virtual void setMandatoryInformations();
2306 
2307 private:
2308 
2309  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
2310  friend class Horizontal_Product_2D ;
2311  friend class Object_2D;
2312  Product_CAPPI(Object_2D * object_2d, H5::Group* group);
2313 };
2314 /*===========================================================================*/
2315 /* PCAPPI PRODUCT Dataset */
2316 /*===========================================================================*/
2326 class RADAR_API Product_PCAPPI : public Horizontal_Product_2D
2327 {
2328 public:
2329  virtual ~Product_PCAPPI() ;
2330 
2331  virtual void setMandatoryInformations();
2332 
2333 private:
2334 
2335  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
2336  friend class Horizontal_Product_2D ;
2337  friend class Object_2D;
2338  Product_PCAPPI(Object_2D * object_2d, H5::Group* group);
2339 };
2340 /*===========================================================================*/
2341 /* ETOP PRODUCT Dataset */
2342 /*===========================================================================*/
2352 class RADAR_API Product_ETOP : public Horizontal_Product_2D
2353 {
2354 public:
2355  virtual ~Product_ETOP() ;
2356 
2357  virtual void setMandatoryInformations();
2358 
2359 private:
2360 
2361  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
2362  friend class Horizontal_Product_2D ;
2363  friend class Object_2D;
2364  Product_ETOP(Object_2D * object_2d, H5::Group* group);
2365 };
2366 /*===========================================================================*/
2367 /* MAX PRODUCT Dataset */
2368 /*===========================================================================*/
2378 class RADAR_API Product_MAX : public Horizontal_Product_2D
2379 {
2380 public:
2381  virtual ~Product_MAX() ;
2382 
2383  virtual void setMandatoryInformations();
2384 
2385 private:
2386 
2387  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
2388  friend class Horizontal_Product_2D ;
2389  friend class Object_2D;
2390  Product_MAX(Object_2D * object_2d, H5::Group* group);
2391 };
2392 
2393 /*===========================================================================*/
2394 /* RR PRODUCT Dataset */
2395 /*===========================================================================*/
2405 class RADAR_API Product_RR : public Horizontal_Product_2D
2406 {
2407 public:
2408  virtual ~Product_RR() ;
2409 
2410  virtual void setMandatoryInformations();
2411 
2412 private:
2413 
2414  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
2415  friend class Horizontal_Product_2D ;
2416  friend class Object_2D;
2417  Product_RR(Object_2D * object_2d, H5::Group* group);
2418 };
2419 /*===========================================================================*/
2420 /* VIL PRODUCT Dataset */
2421 /*===========================================================================*/
2431 class RADAR_API Product_VIL : public Horizontal_Product_2D
2432 {
2433 public:
2434  virtual ~Product_VIL() ;
2435 
2436  virtual void setMandatoryInformations();
2437 
2438 private:
2439 
2440  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
2441  friend class Horizontal_Product_2D ;
2442  friend class Object_2D;
2443  Product_VIL(Object_2D * object_2d, H5::Group* group);
2444 };
2445 /*===========================================================================*/
2446 /* LBM PRODUCT Dataset */
2447 /*===========================================================================*/
2457 class RADAR_API Product_LBM : public Horizontal_Product_2D
2458 {
2459 public:
2460  virtual ~Product_LBM() ;
2461 
2462  virtual void setMandatoryInformations();
2463 
2464 private:
2465 
2466  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
2467  friend class Horizontal_Product_2D ;
2468  friend class Object_2D;
2469  Product_LBM(Object_2D * object_2d, H5::Group* group);
2470 };
2471 
2472 /*===========================================================================*/
2473 /* POH PRODUCT Dataset */
2474 /*===========================================================================*/
2484 class RADAR_API Product_POH : public Horizontal_Product_2D
2485 {
2486 public:
2487  virtual ~Product_POH() ;
2488 
2489  virtual void setMandatoryInformations();
2490 
2491 private:
2492 
2493  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
2494  friend class Horizontal_Product_2D ;
2495  friend class Object_2D;
2496  Product_POH(Object_2D * object_2d, H5::Group* group);
2497 };
2498 
2499 /*===========================================================================*/
2500 /* COMP PRODUCT Dataset */
2501 /*===========================================================================*/
2511 class RADAR_API Product_COMP : public Horizontal_Product_2D
2512 {
2513 public:
2514  virtual ~Product_COMP() ;
2515 
2516  virtual void setMandatoryInformations();
2517 
2518 private:
2519 
2520  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
2521  friend class Horizontal_Product_2D ;
2522  friend class Object_2D;
2523  Product_COMP(Object_2D * object_2d, H5::Group* group);
2524 };
2525 
2526 /*===========================================================================*/
2527 /* VERTICAL 2D_PRODUCT Dataset */
2528 /*===========================================================================*/
2538 class RADAR_API Vertical_Product_2D : public Product_2D, public WHEREXSECMetadata
2539 {
2540 public:
2541  virtual ~Vertical_Product_2D();
2542 public:
2543  //virtual void setMandatoryInformations();
2544 
2545  virtual int getXSize () ;
2546  virtual void setXSize (int val) ;
2547  virtual int getYSize () ;
2548  virtual void setYSize (int val) ;
2549  virtual double getXScale () ;
2550  virtual void setXScale (double val) ;
2551  virtual double getYScale () ;
2552  virtual void setYScale (double val) ;
2553  virtual double getMinHeight () ;
2554  virtual void setMinHeight (double val) ;
2555  virtual double getMaxHeight () ;
2556  virtual void setMaxHeight (double val) ;
2557 
2558 protected:
2559  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
2560  friend class Product_2D;
2561  Vertical_Product_2D(Object_2D* object_2d, H5::Group* group);
2562 };
2563 
2564 /*===========================================================================*/
2565 /* XSEC PRODUCT Dataset */
2566 /*===========================================================================*/
2576 class RADAR_API Product_XSEC : public Vertical_Product_2D
2577 {
2578 public:
2579  virtual ~Product_XSEC() ;
2580 
2581  virtual void setMandatoryInformations();
2582 
2583 private:
2584 
2585  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
2586  friend class Vertical_Product_2D ;
2587  friend class Object_2D;
2588  Product_XSEC(Object_2D* object_2d, H5::Group* group);
2589 };
2590 
2591 /*===========================================================================*/
2592 /* RHI PRODUCT Dataset */
2593 /*===========================================================================*/
2603 class RADAR_API Product_RHI : public Vertical_Product_2D, public WHERERhiMetadata
2604 {
2605 public:
2606  virtual ~Product_RHI() ;
2607 
2608  virtual void setMandatoryInformations();
2609 
2610  virtual double getRHILon ();
2611  virtual void setRHILon (double val);
2612  virtual double getRHILat ();
2613  virtual void setRHILat (double val);
2614  virtual double getAzimuthAngle ();
2615  virtual void setAzimuthAngle (double val);
2616  virtual std::vector<Angles> getAngles ();
2617  virtual void setAngles (const std::vector<Angles>& val);
2618  virtual double getRange ();
2619  virtual void setRange (double val);
2620 
2621 private:
2622 
2623  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
2624  friend class Vertical_Product_2D ;
2625  friend class Object_2D;
2626  Product_RHI(Object_2D* object_2d, H5::Group* group);
2627 };
2628 
2629 /*===========================================================================*/
2630 /* VSP PRODUCT Dataset */
2631 /*===========================================================================*/
2641 class RADAR_API Product_Panel : public Vertical_Product_2D , public WHEREPanelMetadata
2642 {
2643 public:
2644  virtual ~Product_Panel() ;
2645 
2646  virtual void setMandatoryInformations();
2647  virtual double getStartLongitude () ;
2648  virtual void setStartLongitude (double val);
2649  virtual double getStartLatitude () ;
2650  virtual void setStartLatitude (double val);
2651  virtual double getStopLongitude ();
2652  virtual void setStopLongitude (double val);
2653  virtual double getStopLatitude ();
2654  virtual void setStopLatitude (double val);
2655 
2656 protected:
2657 
2658  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
2659  friend class Vertical_Product_2D ;
2660  friend class Product_2D;
2661  Product_Panel(Object_2D* object_2d, H5::Group* group);
2662 };
2663 
2664 /*===========================================================================*/
2665 /* HSP PRODUCT Dataset */
2666 /*===========================================================================*/
2676 class RADAR_API Product_HSP : public Product_Panel
2677 {
2678 public:
2679  virtual ~Product_HSP() ;
2680 
2681  virtual void setMandatoryInformations();
2682 
2683 private:
2684 
2685  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
2686  friend class Product_Panel;
2687  friend class Object_2D;
2688  Product_HSP(Object_2D* object_2d, H5::Group* group);
2689 };
2690 
2691 /*===========================================================================*/
2692 /* VSP PRODUCT Dataset */
2693 /*===========================================================================*/
2703 class RADAR_API Product_VSP : public Product_Panel
2704 {
2705 public:
2706  virtual ~Product_VSP() ;
2707 
2708  virtual void setMandatoryInformations();
2709 
2710 private:
2711 
2712  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
2713  friend class Product_Panel;
2714  friend class Object_2D;
2715  Product_VSP(Object_2D* object_2d, H5::Group* group);
2716 };
2717 /*===========================================================================*/
2718 /* 2D PRODUCT DATA */
2719 /*===========================================================================*/
2720 
2728 class RADAR_API Product_2D_Data: public OdimData, public WHATDatasetMetadata
2729 {
2730 public:
2731  virtual ~Product_2D_Data();
2732 
2733  virtual std::string getObject ();
2734  virtual void setObject (const std::string& val);
2735  virtual std::string getVersion ();
2736  virtual void setVersion (const std::string& val);
2737  virtual time_t getDateTime ();
2738  virtual void setDateTime (const time_t val);
2739  virtual SourceInfo getSource ();
2740  virtual void setSource (const SourceInfo& val);
2741 
2742  virtual std::string getProduct ();
2743  virtual void setProduct (const std::string& val);
2744  virtual double getProdPar ();
2745  virtual VILHeights getProdParVIL ();
2746  virtual void setProdPar (double val);
2747  virtual void setProdPar (const VILHeights& val);
2748  virtual std::string getQuantity ();
2749  virtual void setQuantity (const std::string& val);
2750  virtual time_t getStartDateTime();
2751  virtual void setStartDateTime(time_t val);
2752  virtual time_t getEndDateTime ();
2753  virtual void setEndDateTime (time_t val);
2754  virtual double getGain ();
2755  virtual void setGain (double val);
2756  virtual double getOffset ();
2757  virtual void setOffset (double val);
2758  virtual double getNodata ();
2759  virtual void setNodata (double val);
2760  virtual double getUndetect ();
2761  virtual void setUndetect (double val);
2762 
2768  virtual int getNumXElem();
2774  virtual int getNumYElem();
2780  H5::AtomType getElemType();
2788  virtual void readTranslatedData(DataMatrix<float>& matrix);
2796  virtual void readTranslatedData(DataMatrix<double>& matrix);
2808  virtual void writeAndTranslate(DataMatrix<float>& matrix, float offset, float gain, H5::DataType type);
2820  virtual void writeAndTranslate(DataMatrix<double>& matrix, double offset, double gain, H5::DataType type);
2821 
2828  virtual int getQualityDataCount();
2835  virtual OdimQuality* createQualityData ();
2845  virtual OdimQuality* getQualityData (int index);
2853  virtual void removeQualityData (int index);
2854 
2855 private:
2856  Product_2D* prod;
2857 
2858  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
2859  friend class Horizontal_Product_2D;
2860  friend class Product_2D;
2861  Product_2D_Data(Product_2D* prod, H5::Group* group);
2862 };
2863 
2864 
2865 /*===========================================================================*/
2866 
2867 }
2868 
2869 #endif
2870 
2871 
OdimH5 v2.1 CAPPI Product Dataset.
Definition: odimh5v21_classes.hpp:2300
OdimH5 v2.1 Object_2D.
Definition: odimh5v21_classes.hpp:1480
Generic OdimH5 v2.1 dataset group.
Definition: odimh5v21_classes.hpp:257
OdimH5 v2.1 Polar Volume SCAN.
Definition: odimh5v21_classes.hpp:1025
Generic OdimH5 v2.1 data group.
Definition: odimh5v21_classes.hpp:415
Interface for WHERE dataset attributes methods for Panel.
Definition: odimh5v21_metadata.hpp:1726
Interface for WHERE dataset attributes methods for RHI.
Definition: odimh5v21_metadata.hpp:1663
Matrix of data values.
Definition: odimh5v21_support.hpp:506
Classes about attributes groups for OdimH5 objects.
Interface fot HOW dataset attributes methods for cartesian images.
Definition: odimh5v21_metadata.hpp:2653
OdimH5 v2.1 RR Product Dataset.
Definition: odimh5v21_classes.hpp:2405
virtual void setAzimuthAngles(const std::vector< AZAngles > &val, int precision=10)
Set the &#39;startazA&#39; and &#39;stopazA&#39; attributes values (formerly azangles attribute in odimh5v2...
Definition: odimh5v21_classes.hpp:2084
Internal library macros.
OdimH5 v2.1 RHI Product Dataset.
Definition: odimh5v21_classes.hpp:2603
OdimH5 v2.1 MAX Product Dataset.
Definition: odimh5v21_classes.hpp:2378
Generic OdimH5 v2.1 quality group.
Definition: odimh5v21_classes.hpp:665
Generic OdimH5 v2.1 object.
Definition: odimh5v21_classes.hpp:95
OdimH5 object source informations.
Definition: odimh5v21_support.hpp:110
OdimH5 v2.1 Panel Product Dataset.
Definition: odimh5v21_classes.hpp:2641
OdimH5 v2.1 PCAPPI Product Dataset.
Definition: odimh5v21_classes.hpp:2326
OdimH5 v2.1 2d product quantity data.
Definition: odimh5v21_classes.hpp:2728
OdimH5 v2.1 COMP Product Dataset.
Definition: odimh5v21_classes.hpp:2511
Interface fot WHAT root attributes methods.
Definition: odimh5v21_metadata.hpp:1043
OdimH5 objects factory.
Definition: odimh5v21_factory.hpp:49
OdimH5 v2.1 PPI Product Dataset.
Definition: odimh5v21_classes.hpp:2484
Attribute (odim metadata) group.
Definition: odimh5v21_metadata.hpp:53
Interface fot WHERE root attributes methods.
Definition: odimh5v21_metadata.hpp:1241
OdimH5 v2.1 PPI Product Dataset.
Definition: odimh5v21_classes.hpp:2274
OdimH5 v2.1 ETOP Product Dataset.
Definition: odimh5v21_classes.hpp:2352
OdimH5 v2.1 Polar Volume.
Definition: odimh5v21_classes.hpp:882
OdimH5 v2.1 horizontalObject.
Definition: odimh5v21_classes.hpp:1713
OdimH5 v2.1 CompObject.
Definition: odimh5v21_classes.hpp:1799
Interface fot WHERE dataset attributes methods for polar scan.
Definition: odimh5v21_metadata.hpp:1278
OdimH5 v2.1 PPI Product Dataset.
Definition: odimh5v21_classes.hpp:2457
OdimH5 v2.1 Vericat Product_2D Dataset.
Definition: odimh5v21_classes.hpp:2538
OdimH5 v2.1 VSP Product Dataset.
Definition: odimh5v21_classes.hpp:2703
Interface fot HOW root attributes methods.
Definition: odimh5v21_metadata.hpp:1782
OdimH5 v2.1 SCAN quantity data.
Definition: odimh5v21_classes.hpp:1362
virtual std::vector< AZAngles > getAzimuthAngles()
Get the &#39;startazA&#39; and &#39;stopazA&#39; attributes values (formerly azangles attribute in odimh5v2...
Definition: odimh5v21_classes.hpp:2083
Classes and struct used by main OdimH5 classes.
Bottom and top heights (m) of the integration layer.
Definition: odimh5v21_support.hpp:452
Interface for WHERE dataset attributes methods for XSEC.
Definition: odimh5v21_metadata.hpp:1589
static int originaRayIndex(int index, int originalDirection, int numrays, int a1gate)
Calculate the original ray index of a scan.
Definition: odimh5v21_classes.hpp:1331
OdimH5 v2.1 HSP Product Dataset.
Definition: odimh5v21_classes.hpp:2676
OdimH5 v2.1 VIL Product Dataset.
Definition: odimh5v21_classes.hpp:2431
Interface fot WHAT dataset attributes methods.
Definition: odimh5v21_metadata.hpp:1102
Interface fot HOW dataset attributes methods for polar data.
Definition: odimh5v21_metadata.hpp:2260
OdimH5 exceptions.
OdimH5 rays matrix.
Definition: odimh5v21_support.hpp:650
OdimH5 v2.1 XsecObject.
Definition: odimh5v21_classes.hpp:1826
OdimH5 v2.1 Product_2D Dataset.
Definition: odimh5v21_classes.hpp:1887
Interface fot WHERE dataset attributes methods for images.
Definition: odimh5v21_metadata.hpp:1434
Constants and values used by OdimH5 library.
OdimH5 v2.1 Horizontal Product_2D Dataset.
Definition: odimh5v21_classes.hpp:2204
OdimH5 v2.1 XSEC Product Dataset.
Definition: odimh5v21_classes.hpp:2576
OdimH5 v2.1 ImageObject.
Definition: odimh5v21_classes.hpp:1772