radarlib  1.4.6
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 /* 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 
357  virtual int getQualityCount();
365  virtual OdimQuality* createQuality();
375  virtual OdimQuality* getQuality(int index);
383  virtual void removeQuality(int index);
384 protected:
385  H5::Group* group;
386  MetadataGroup* meta_what;
387  MetadataGroup* meta_where;
388  MetadataGroup* meta_how;
389 
390  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
391  friend class OdimObject;
392  OdimDataset(H5::Group* group);
393 
394  virtual H5::Group* createDataGroup();
395  virtual H5::Group* getDataGroup(int num);
396  virtual H5::Group* createQualityGroup();
397  virtual H5::Group* getQualityGroup(int num);
398 };
399 
400 /*===========================================================================*/
401 /* ODIM DATA */
402 /*===========================================================================*/
403 
414 class RADAR_API OdimData
415 {
416 public:
417  virtual ~OdimData();
418 
426  virtual H5::Group* getH5Object();
433  virtual bool existWhat();
434 
441  virtual bool existWhere();
448  virtual bool existHow();
456  virtual MetadataGroup* getWhat();
464  virtual MetadataGroup* getWhere();
472  virtual MetadataGroup* getHow();
482  virtual H5::AtomType getDataType();
488  virtual int getDataWidth();
494  virtual int getDataHeight();
500  virtual void getDataDimension(int* height, int* width);
513  virtual void writeData(const void* buff, int width, int height, const H5::DataType& elemtype);
523  virtual void writeData(const char* buff, int width, int height);
533  virtual void writeData(const unsigned char* buff, int width, int height);
543  virtual void writeData(const unsigned short* buff, int width, int height);
553  virtual void writeData(const float* buff, int width, int height);
554 
563  virtual void writeData(const DataMatrix<char>& matrix);
572  virtual void writeData(const DataMatrix<unsigned char>& matrix);
581  virtual void writeData(const DataMatrix<unsigned short>& matrix);
590  virtual void writeData(const DataMatrix<float>& matrix);
600  virtual void readData(void* buffer);
607  virtual int getQualityCount();
615  virtual OdimQuality* createQuality();
625  virtual OdimQuality* getQuality(int index);
633  virtual void removeQuality(int index);
634 
635 protected:
636  H5::Group* group;
637  MetadataGroup* meta_what;
638  MetadataGroup* meta_where;
639  MetadataGroup* meta_how;
640 
641  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
642  friend class OdimDataset;
643  OdimData(H5::Group* group);
644 
645  virtual H5::DataSet* getData();
646  virtual H5::Group* createQualityGroup();
647  virtual H5::Group* getQualityGroup(int num);
648 };
649 
650 /*===========================================================================*/
651 /* ODIM QUALITY*/
652 /*===========================================================================*/
653 
664 class RADAR_API OdimQuality
665 {
666 public:
667  virtual ~OdimQuality();
668 
676  virtual H5::Group* getH5Object();
683  virtual bool existWhat();
684 
691  virtual bool existWhere();
698  virtual bool existHow();
699 
707  virtual MetadataGroup* getWhat();
715  virtual MetadataGroup* getWhere();
723  virtual MetadataGroup* getHow();
733  virtual H5::AtomType getQualityType();
739  virtual int getQualityWidth();
745  virtual int getQualityHeight();
751  virtual void getQualityDimension(int* height, int* width);
764  virtual void writeQuality(const void* buff, int width, int height, const H5::DataType& elemtype);
774  virtual void writeQuality(const char* buff, int width, int height);
784  virtual void writeQuality(const unsigned char* buff, int width, int height);
794  virtual void writeQuality(const unsigned short* buff, int width, int height);
804  virtual void writeQuality(const float* buff, int width, int height);
805 
814  virtual void writeQuality(const DataMatrix<char>& matrix);
823  virtual void writeQuality(const DataMatrix<unsigned char>& matrix);
832  virtual void writeQuality(const DataMatrix<unsigned short>& matrix);
841  virtual void writeQuality(const DataMatrix<float>& matrix);
851  virtual void readQuality(void* buffer);
852 
853 protected:
854  H5::Group* group;
855  MetadataGroup* meta_what;
856  MetadataGroup* meta_where;
857  MetadataGroup* meta_how;
858 
859  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
860  friend class OdimDataset;
861  friend class OdimData;
862  friend class Product_2D_Data;
863  OdimQuality(H5::Group* group);
864 
865  virtual H5::DataSet* getData();
866 };
867 
868 /*===========================================================================*/
869 /* POLAR VOLUME */
870 /*===========================================================================*/
871 
881 class RADAR_API PolarVolume : public OdimObject, public WHERERootMetadata, public HOWRootMetadata
882 {
883 public:
884  virtual ~PolarVolume();
885 
886  virtual double getLongitude ();
887  virtual void setLongitude (double val);
888  virtual double getLatitude ();
889  virtual void setLatitude (double val);
890  virtual double getAltitude ();
891  virtual void setAltitude (double val);
892 
893  virtual std::string getTaskOrProdGen ();
894  virtual void setTaskOrProdGen (const std::string& val);
895  virtual time_t getStartEpochs ();
896  virtual void setStartEpochs (time_t val);
897  virtual time_t getEndEpochs ();
898  virtual void setEndEpochs (time_t val);
899  virtual std::string getSystem ();
900  virtual void setSystem (const std::string& val);
901  virtual std::string getSoftware ();
902  virtual void setSoftware (const std::string& val);
903  virtual std::string getSoftwareVer ();
904  virtual void setSoftwareVer (const std::string& val);
905  virtual double getZR_A ();
906  virtual void setZR_A (double val);
907  virtual double getZR_B ();
908  virtual void setZR_B (double val);
909  virtual double getKR_A ();
910  virtual void setKR_A (double val);
911  virtual double getKR_B ();
912  virtual void setKR_B (double val);
913  virtual bool getSimulated ();
914  virtual void setSimulated (bool val);
915 
921  virtual int getScanCount ();
928  virtual PolarScan* createScan ();
936  virtual PolarScan* getScan (int index);
944  virtual void removeScan (int index);
951  virtual std::vector<PolarScan*> getScans ();
960  virtual std::vector<PolarScan*> getScans (double elevation, double gap = 0);
969  virtual std::vector<PolarScan*> getScansBetween (double minElevation, double maxElevation);
977  virtual std::vector<PolarScan*> getScans (const char* quantity);
978  virtual std::vector<PolarScan*> getScans (const std::string& quantity);
986  virtual std::vector<double> getScanAngles ();
993  virtual std::vector<double> getElevationAngles ();
1000  virtual std::set<std::string> getStoredQuantities();
1001 
1002 protected:
1003  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
1004  friend class OdimFactory;
1005  PolarVolume(H5::H5File* file);
1006 
1007  virtual void setMandatoryInformations ();
1008  virtual void checkMandatoryInformations ();
1009 
1010 };
1011 
1012 /*===========================================================================*/
1013 /* POLAR VOLUME SCAN */
1014 /*===========================================================================*/
1015 
1024 class RADAR_API PolarScan : public OdimDataset, public WHATDatasetMetadata, public WHEREScanMetadata, public HOWPolarMetadata
1025 {
1026 public:
1027  virtual ~PolarScan();
1028 
1029  virtual void setMandatoryInformations();
1030 
1031  virtual std::string getObject ();
1032  virtual void setObject (const std::string& val);
1033  virtual std::string getVersion ();
1034  virtual void setVersion (const std::string& val);
1035  virtual time_t getDateTime ();
1036  virtual void setDateTime (const time_t val);
1037  virtual SourceInfo getSource ();
1038  virtual void setSource (const SourceInfo& val);
1039 
1040  virtual std::string getProduct ();
1041  virtual void setProduct (const std::string& val);
1042  virtual double getProdPar ();
1043  virtual VILHeights getProdParVIL ();
1044  virtual void setProdPar (double val);
1045  virtual void setProdPar (const VILHeights& val);
1046  virtual std::string getQuantity ();
1047  virtual void setQuantity (const std::string& val);
1048  virtual time_t getStartDateTime ();
1049  virtual void setStartDateTime (time_t val);
1050  virtual time_t getEndDateTime ();
1051  virtual void setEndDateTime (time_t val);
1052  virtual double getGain ();
1053  virtual void setGain (double val);
1054  virtual double getOffset ();
1055  virtual void setOffset (double val);
1056  virtual double getNodata ();
1057  virtual void setNodata (double val);
1058  virtual double getUndetect ();
1059  virtual void setUndetect (double val);
1060 
1061  virtual double getLongitude ();
1062  virtual void setLongitude (double val);
1063  virtual double getLatitude ();
1064  virtual void setLatitude (double val);
1065  virtual double getAltitude ();
1066  virtual void setAltitude (double val);
1067 
1068  virtual double getEAngle ();
1069  virtual void setEAngle (double val);
1070  virtual int getNumBins ();
1071  virtual void setNumBins (int val);
1072  virtual double getRangeStart ();
1073  virtual void setRangeStart (double val);
1074  virtual double getRangeScale ();
1075  virtual void setRangeScale (double val);
1076  virtual int getNumRays ();
1077  virtual void setNumRays (int val);
1078  virtual int getA1Gate ();
1079  virtual void setA1Gate (int val);
1080 
1081  virtual std::string getTaskOrProdGen ();
1082  virtual void setTaskOrProdGen (const std::string& val);
1083  virtual time_t getStartEpochs ();
1084  virtual void setStartEpochs (time_t val);
1085  virtual time_t getEndEpochs ();
1086  virtual void setEndEpochs (time_t val);
1087  virtual std::string getSystem ();
1088  virtual void setSystem (const std::string& val);
1089  virtual std::string getSoftware ();
1090  virtual void setSoftware (const std::string& val);
1091  virtual std::string getSoftwareVer ();
1092  virtual void setSoftwareVer (const std::string& val);
1093  virtual double getZR_A ();
1094  virtual void setZR_A (double val);
1095  virtual double getZR_B ();
1096  virtual void setZR_B (double val);
1097  virtual double getKR_A ();
1098  virtual void setKR_A (double val);
1099  virtual double getKR_B ();
1100  virtual void setKR_B (double val);
1101  virtual bool getSimulated ();
1102  virtual void setSimulated (bool val);
1103 
1104  virtual double getBeamWidth ();
1105  virtual double getBeamWidth (double defaultValue);
1106  virtual void setBeamWidth (double val);
1107  virtual double getWaveLength ();
1108  virtual double getWaveLength (double defaultValue);
1109  virtual void setWaveLength (double val);
1110  virtual double getRPM ();
1111  virtual double getRPM (double defaultValue);
1112  virtual void setRPM (double val);
1113  virtual double getPulseWidth ();
1114  virtual double getPulseWidth (double defaultValue);
1115  virtual void setPulseWidth (double val);
1116  virtual double getRXBandWidth ();
1117  virtual double getRXBandWidth (double defaultValue);
1118  virtual void setRXBandWidth (double val);
1119  virtual int getLowPRF ();
1120  virtual int getLowPRF (int defaultValue);
1121  virtual void setLowPRF (int val);
1122  virtual int getHighPRF ();
1123  virtual int getHighPRF (int defaultValue);
1124  virtual void setHighPRF (int val);
1125  virtual double getTXLoss () ;
1126  virtual double getTXLoss (double defaultValue);
1127  virtual void setTXLoss (double val) ;
1128  virtual double getRXLoss () ;
1129  virtual double getRXLoss (double defaultValue);
1130  virtual void setRXLoss (double val) ;
1131  virtual double getRadomeLoss () ;
1132  virtual double getRadomeLoss (double defaultValue);
1133  virtual void setRadomeLoss (double val) ;
1134  virtual double getAntGain () ;
1135  virtual double getAntGain (double defaultValue);
1136  virtual void setAntGain (double val) ;
1137  virtual double getBeamWH () ;
1138  virtual double getBeamWH (double defaultValue);
1139  virtual void setBeamWH (double val) ;
1140  virtual double getBeamWV () ;
1141  virtual double getBeamWV (double defaultValue);
1142  virtual void setBeamWV (double val) ;
1143  virtual double getGasAttn () ;
1144  virtual double getGasAttn (double defaultValue);
1145  virtual void setGasAttn (double val) ;
1146  virtual double getRadConstH () ;
1147  virtual double getRadConstH (double defaultValue);
1148  virtual void setRadConstH (double val) ;
1149  virtual double getRadConstV () ;
1150  virtual double getRadConstV (double defaultValue);
1151  virtual void setRadConstV (double val) ;
1152  virtual double getNomTXPower () ;
1153  virtual double getNomTXPower (double defaultValue);
1154  virtual void setNomTXPower (double val) ;
1155  virtual std::vector<double> getTXPower () ;
1156  virtual std::vector<double> getTXPower (double defaultValue);
1157  virtual void setTXPower (double val) ;
1158  virtual void setTXPower (const std::vector<double>& val) ;
1159  virtual double getNI () ;
1160  virtual double getNI (double defaultValue);
1161  virtual void setNI (double val) ;
1162  virtual double getVSamples () ;
1163  virtual double getVSamples (double defaultValue);
1164  virtual void setVSamples (double val) ;
1165 
1166  virtual std::string getAzimuthMethod ();
1167  virtual void setAzimuthMethod (const std::string& val);
1168  virtual std::string getBinMethod ();
1169  virtual void setBinMethod (const std::string& val);
1170  virtual std::vector<AZAngles> getAzimuthAngles ();
1171  virtual void setAzimuthAngles (const std::vector<AZAngles>& val,int precision=0);
1172  virtual std::vector<double> getElevationAngles ();
1173  virtual void setElevationAngles (const std::vector<double>& val);
1174 // virtual void setElevationAngles ( std::vector<double>& val);
1175  virtual std::vector<double> getStartAzimuthAngles ();
1176  virtual void setStartAzimuthAngles (const std::vector<double>& val);
1177  virtual std::vector<double> getStopAzimuthAngles ();
1178  virtual void setStopAzimuthAngles (const std::vector<double>& val);
1179  virtual std::vector<double> getStartAzimuthTimes ();
1180  virtual void setStartAzimuthTimes (const std::vector<double>& val);
1181  virtual std::vector<double> getStopAzimuthTimes ();
1182  virtual void setStopAzimuthTimes (const std::vector<double>& val);
1183  virtual std::vector<AZTimes> getAzimuthTimes ();
1184  virtual void setAzimuthTimes (const std::vector<AZTimes>& val);
1185 
1186  virtual double getPointAccEl ();
1187  virtual void setPointAccEl (double val);
1188  virtual double getPointAccAZ ();
1189  virtual void setPointAccAZ (double val);
1190  virtual bool getMalfunc ();
1191  virtual void setMalfunc (bool val);
1192  virtual std::string getRadarMsg ();
1193  virtual void setRadarMsg (const std::string& val);
1194  virtual double getRadarHorizon ();
1195  virtual void setRadarHorizon (double val);
1196 // virtual double getMDS ();
1197 // virtual void setMDS (double val);
1198  virtual double getNEZ ();
1199  virtual void setNEZ (double val);
1200  virtual double getOUR ();
1201  virtual void setOUR (double val);
1202  virtual std::vector<std::string> getDClutter ();
1203  virtual void setDClutter (const std::vector<std::string>& value);
1204  virtual std::string getComment ();
1205  virtual void setComment (const std::string& val);
1206  virtual double getSQI ();
1207  virtual void setSQI (double val);
1208  virtual double getCSR ();
1209  virtual void setCSR (double val);
1210  virtual double getLOG ();
1211  virtual void setLOG (double val);
1212  virtual bool getVPRCorr ();
1213  virtual void setVPRCorr (bool val);
1214  virtual double getFreeze ();
1215  virtual void setFreeze (double val);
1216  virtual double getMin ();
1217  virtual void setMin (double val);
1218  virtual double getMax ();
1219  virtual void setMax (double val);
1220  virtual double getStep ();
1221  virtual void setStep (double val);
1222  virtual int getLevels ();
1223  virtual void setLevels (int val);
1224  virtual double getPeakPwr ();
1225  virtual void setPeakPwr (double val);
1226  virtual double getAvgPwr ();
1227  virtual void setAvgPwr (double val);
1228  virtual double getDynRange ();
1229  virtual void setDynRange (double val);
1230  virtual double getRAC ();
1231  virtual void setRAC (double val);
1232  virtual bool getBBC ();
1233  virtual void setBBC (bool val);
1234  virtual double getPAC ();
1235  virtual void setPAC (double val);
1236  virtual double getS2N ();
1237  virtual void setS2N (double val);
1238  virtual std::string getPolarization ();
1239  virtual void setPolarization (const std::string& val);
1240 
1247  virtual int getQuantityDataCount();
1248 
1256  virtual PolarScanData* createQuantityData (const char* name);
1257  virtual PolarScanData* createQuantityData (const std::string& name);
1266  virtual PolarScanData* getQuantityData (int index);
1275  virtual PolarScanData* getQuantityData (const char* name);
1276  virtual PolarScanData* getQuantityData (const std::string& name);
1283  virtual void removeQuantityData (const char* name);
1284  virtual void removeQuantityData (const std::string& name);
1292  virtual bool hasQuantityData (const char* name);
1293  virtual bool hasQuantityData (const std::string& name);
1301  virtual int getQuantityDataIndex (const char* name);
1302  virtual int getQuantityDataIndex (const std::string& name);
1311  virtual int getDirection();
1318  std::set<std::string> getStoredQuantities ();
1330  static inline int originaRayIndex(int index, int originalDirection, int numrays, int a1gate)
1331  {
1332  if (originalDirection>0)
1333  {
1334  return (index + a1gate) % numrays;
1335  }
1336  else
1337  {
1338  return ((numrays + a1gate) - index) % numrays;
1339  }
1340  }
1341 
1342 private:
1343  PolarVolume* volume;
1344 
1345  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
1346  friend class PolarVolume;
1347  PolarScan(PolarVolume* volume, H5::Group* group);
1348 };
1349 
1350 /*===========================================================================*/
1351 /* POLAR SCAN DATA */
1352 /*===========================================================================*/
1353 
1361 class RADAR_API PolarScanData: public OdimData, public WHATDatasetMetadata
1362 {
1363 public:
1364  virtual ~PolarScanData();
1365 
1366  virtual std::string getObject ();
1367  virtual void setObject (const std::string& val);
1368  virtual std::string getVersion ();
1369  virtual void setVersion (const std::string& val);
1370  virtual time_t getDateTime ();
1371  virtual void setDateTime (const time_t val);
1372  virtual SourceInfo getSource ();
1373  virtual void setSource (const SourceInfo& val);
1374 
1375  virtual std::string getProduct ();
1376  virtual void setProduct (const std::string& val);
1377  virtual double getProdPar ();
1378  virtual VILHeights getProdParVIL ();
1379  virtual void setProdPar (double val);
1380  virtual void setProdPar (const VILHeights& val);
1381  virtual std::string getQuantity ();
1382  virtual void setQuantity (const std::string& val);
1383  virtual time_t getStartDateTime();
1384  virtual void setStartDateTime(time_t val);
1385  virtual time_t getEndDateTime ();
1386  virtual void setEndDateTime (time_t val);
1387  virtual double getGain ();
1388  virtual void setGain (double val);
1389  virtual double getOffset ();
1390  virtual void setOffset (double val);
1391  virtual double getNodata ();
1392  virtual void setNodata (double val);
1393  virtual double getUndetect ();
1394  virtual void setUndetect (double val);
1395 
1401  virtual int getNumRays();
1407  virtual int getNumBins();
1413  H5::AtomType getBinType();
1421  virtual void readTranslatedData(RayMatrix<float>& matrix);
1429  virtual void readTranslatedData(RayMatrix<double>& matrix);
1441  virtual void writeAndTranslate(RayMatrix<float>& matrix, float offset, float gain, H5::DataType type);
1453  virtual void writeAndTranslate(RayMatrix<double>& matrix, double offset, double gain, H5::DataType type);
1454 
1455 private:
1456  PolarScan* scan;
1457 
1458  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
1459  friend class PolarScan;
1460  PolarScanData(PolarScan* scan, H5::Group* group);
1461 };
1462 
1463 
1464 
1465 /*===========================================================================*/
1466 /* 2D OBJECT */
1467 /*===========================================================================*/
1468 
1479 class RADAR_API Object_2D : public OdimObject, public HOWRootMetadata
1480 {
1481 public:
1482  virtual ~Object_2D() = 0;
1483 
1484  //virtual void setMandatoryInformations();
1485  //void checkMandatoryInformations();
1486 
1487  virtual std::string getTaskOrProdGen ();
1488  virtual void setTaskOrProdGen (const std::string& val);
1489  virtual time_t getStartEpochs ();
1490  virtual void setStartEpochs (time_t val);
1491  virtual time_t getEndEpochs ();
1492  virtual void setEndEpochs (time_t val);
1493  virtual std::string getSystem ();
1494  virtual void setSystem (const std::string& val);
1495  virtual std::string getSoftware ();
1496  virtual void setSoftware (const std::string& val);
1497  virtual std::string getSoftwareVer ();
1498  virtual void setSoftwareVer (const std::string& val);
1499  virtual double getZR_A ();
1500  virtual void setZR_A (double val);
1501  virtual double getZR_B ();
1502  virtual void setZR_B (double val);
1503  virtual double getKR_A ();
1504  virtual void setKR_A (double val);
1505  virtual double getKR_B ();
1506  virtual void setKR_B (double val);
1507  virtual bool getSimulated ();
1508  virtual void setSimulated (bool val);
1509 
1515  virtual int getProductCount ();
1523  virtual Product_2D* createProduct2D (const char* type);
1524  virtual Product_2D* createProduct2D (const std::string & type);
1531  virtual Product_PPI* createProductPPI ();
1538  virtual Product_CAPPI* createProductCAPPI ();
1545  virtual Product_PCAPPI* createProductPCAPPI ();
1552  virtual Product_ETOP* createProductETOP ();
1559  virtual Product_MAX* createProductMAX ();
1566  virtual Product_RR* createProductRR ();
1573  virtual Product_VIL* createProductVIL ();
1580  virtual Product_LBM* createProductLBM ();
1587  virtual Product_POH* createProductPOH ();
1594  virtual Product_COMP* createProductCOMP ();
1601  virtual Product_XSEC* createProductXSEC ();
1608  virtual Product_RHI* createProductRHI ();
1615  virtual Product_VSP* createProductVSP ();
1622  virtual Product_HSP* createProductHSP ();
1623 // virtual Horizontal_Product_2D* createHorizontal_Product_2D (const char* type);
1624 // virtual Horizontal_Product_2D* createHorizontal_Product_2D (const std::string& type);
1625 // virtual Vertical_Product_2D* createVertical_Product_2D (const char* type);
1626 // virtual Vertical_Product_2D* createVertical_Product_2D (const std::string& type);
1634  virtual Product_2D* getProduct (int index);
1642 //
1643 //virtual Horizontal_Product_2D* getHorizontal_Product_2D (int index);
1651 //
1652 //virtual Vertical_Product_2D* getVertical_Product_2D (int index);
1660  virtual void removeProduct (int index);
1661 
1668  virtual std::vector<std::string > getProductsType ();
1669 
1676  virtual std::vector<Product_2D*> getProducts();
1688 
1689 protected:
1690  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
1691 // friend class OdimFactory;
1692  Object_2D(H5::H5File* file);
1693 
1694  virtual void setMandatoryInformations ();
1695  virtual void checkMandatoryInformations ();
1696 };
1697 
1698 
1699 /*===========================================================================*/
1700 /* HORIZONTAL OBJECT */
1701 /*===========================================================================*/
1712 class RADAR_API HorizontalObject_2D : public Object_2D, public WHEREImageMetadata
1713 {
1714 public:
1715  virtual ~HorizontalObject_2D() ;
1716 
1717  virtual void setMandatoryInformations();
1718  virtual void checkMandatoryInformations();
1719 
1720  virtual std::string getProjectionArguments () ;
1721  virtual void setProjectionArguments (const std::string& val) ;
1722 
1723  virtual int getXSize () ;
1724  virtual void setXSize (int val) ;
1725  virtual int getYSize () ;
1726  virtual void setYSize (int val) ;
1727  virtual double getXScale () ;
1728  virtual void setXScale (double val) ;
1729  virtual double getYScale () ;
1730  virtual void setYScale (double val) ;
1731 
1732  virtual double getLL_Longitude () ;
1733  virtual void setLL_Longitude (double val) ;
1734  virtual double getLL_Latitude () ;
1735  virtual void setLL_Latitude (double val) ;
1736 
1737  virtual double getUL_Longitude () ;
1738  virtual void setUL_Longitude (double val) ;
1739  virtual double getUL_Latitude () ;
1740  virtual void setUL_Latitude (double val) ;
1741 
1742  virtual double getUR_Longitude () ;
1743  virtual void setUR_Longitude (double val) ;
1744  virtual double getUR_Latitude () ;
1745  virtual void setUR_Latitude (double val) ;
1746 
1747  virtual double getLR_Longitude () ;
1748  virtual void setLR_Longitude (double val) ;
1749  virtual double getLR_Latitude () ;
1750  virtual void setLR_Latitude (double val) ;
1751 protected:
1752  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
1753 // friend class OdimFactory;
1754  HorizontalObject_2D(H5::H5File* file);
1755 
1756 };
1757 /*===========================================================================*/
1758 /* IMAGE OBJECT */
1759 /*===========================================================================*/
1771 class RADAR_API ImageObject : public HorizontalObject_2D
1772 {
1773 public:
1774  virtual ~ImageObject() ;
1775 
1776  virtual void setMandatoryInformations();
1777  virtual void checkMandatoryInformations();
1778 
1779 protected:
1780  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
1781  friend class OdimFactory;
1782  ImageObject(H5::H5File* file);
1783 };
1784 /*===========================================================================*/
1785 /* COMP OBJECT */
1786 /*===========================================================================*/
1798 class RADAR_API CompObject : public HorizontalObject_2D
1799 {
1800 public:
1801  virtual ~CompObject() ;
1802 
1803  virtual void setMandatoryInformations();
1804  virtual void checkMandatoryInformations();
1805 
1806 protected:
1807  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
1808  friend class OdimFactory;
1809  CompObject(H5::H5File* file);
1810 };
1811 
1812 /*===========================================================================*/
1813 /* XSEC OBJECT */
1814 /*===========================================================================*/
1825 class RADAR_API XsecObject : public Object_2D, public WHEREXSECMetadata, public WHERERhiMetadata, public WHEREPanelMetadata
1826 {
1827 public:
1828  virtual ~XsecObject();
1829 
1830  virtual void setMandatoryInformations();
1831  virtual void checkMandatoryInformations();
1832 
1833  virtual int getXSize () ;
1834  virtual void setXSize (int val) ;
1835  virtual int getYSize () ;
1836  virtual void setYSize (int val) ;
1837  virtual double getXScale () ;
1838  virtual void setXScale (double val) ;
1839  virtual double getYScale () ;
1840  virtual void setYScale (double val) ;
1841  virtual double getMinHeight () ;
1842  virtual void setMinHeight (double val) ;
1843  virtual double getMaxHeight () ;
1844  virtual void setMaxHeight (double val) ;
1845 
1846  virtual double getRHILon ();
1847  virtual void setRHILon (double val);
1848  virtual double getRHILat ();
1849  virtual void setRHILat (double val);
1850  virtual double getAzimuthAngle ();
1851  virtual void setAzimuthAngle (double val);
1852  virtual std::vector<Angles> getAngles ();
1853  virtual void setAngles (const std::vector<Angles>& val);
1854  virtual double getRange ();
1855  virtual void setRange (double val);
1856 
1857  virtual double getStartLongitude () ;
1858  virtual void setStartLongitude (double val);
1859  virtual double getStartLatitude () ;
1860  virtual void setStartLatitude (double val);
1861  virtual double getStopLongitude ();
1862  virtual void setStopLongitude (double val);
1863  virtual double getStopLatitude ();
1864  virtual void setStopLatitude (double val);
1865 
1866 protected:
1867  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
1868  friend class OdimFactory;
1869  XsecObject(H5::H5File* file);
1870 
1871 };
1872 
1873 /*===========================================================================*/
1874 /* 2D_PRODUCT Dataset */
1875 /*===========================================================================*/
1886 class RADAR_API Product_2D : public OdimDataset, public WHATDatasetMetadata, public HOWPolarMetadata //, public WHEREImageMetadata, public HOWCartesianImageMetadata
1887 {
1888 public:
1889  virtual ~Product_2D();
1890 
1891  virtual void setMandatoryInformations();
1892 
1893  virtual std::string getObject ();
1894  virtual void setObject (const std::string& val);
1895  virtual std::string getVersion ();
1896  virtual void setVersion (const std::string& val);
1897  virtual time_t getDateTime ();
1898  virtual void setDateTime (const time_t val);
1899  virtual SourceInfo getSource ();
1900  virtual void setSource (const SourceInfo& val);
1901 
1902  virtual std::string getProduct ();
1903  virtual void setProduct (const std::string& val);
1904  virtual double getProdPar ();
1905  virtual VILHeights getProdParVIL ();
1906  virtual void setProdPar (double val);
1907  virtual void setProdPar (const VILHeights& val);
1908  virtual std::string getQuantity ();
1909  virtual void setQuantity (const std::string& val);
1910  virtual time_t getStartDateTime ();
1911  virtual void setStartDateTime (time_t val);
1912  virtual time_t getEndDateTime ();
1913  virtual void setEndDateTime (time_t val);
1914  virtual double getGain ();
1915  virtual void setGain (double val);
1916  virtual double getOffset ();
1917  virtual void setOffset (double val);
1918  virtual double getNodata ();
1919  virtual void setNodata (double val);
1920  virtual double getUndetect ();
1921  virtual void setUndetect (double val);
1922 
1923  virtual std::string getAzimuthMethod ();
1924  virtual void setAzimuthMethod (const std::string& val);
1925  virtual std::string getBinMethod ();
1926  virtual void setBinMethod (const std::string& val);
1927  virtual std::vector<double> getElevationAngles ();
1928 // virtual void setElevationAngles ( std::vector<double>& val);
1929  virtual void setElevationAngles (const std::vector<double>& val);
1930  virtual std::vector<double> getStartAzimuthAngles ();
1931  virtual void setStartAzimuthAngles (const std::vector<double>& val);
1932  virtual std::vector<double> getStopAzimuthAngles ();
1933  virtual void setStopAzimuthAngles (const std::vector<double>& val);
1934  virtual std::vector<double> getStartAzimuthTimes ();
1935  virtual void setStartAzimuthTimes (const std::vector<double>& val);
1936  virtual std::vector<double> getStopAzimuthTimes ();
1937  virtual void setStopAzimuthTimes (const std::vector<double>& val);
1938 // virtual std::vector<AZTimes> getAzimuthTimes ();
1939 // virtual void setAzimuthTimes (const std::vector<AZTimes>& val);
1940 
1941  virtual double getPointAccEl ();
1942  virtual void setPointAccEl (double val);
1943  virtual double getPointAccAZ ();
1944  virtual void setPointAccAZ (double val);
1945  virtual bool getMalfunc ();
1946  virtual void setMalfunc (bool val);
1947  virtual std::string getRadarMsg ();
1948  virtual void setRadarMsg (const std::string& val);
1949  virtual double getRadarHorizon ();
1950  virtual void setRadarHorizon (double val);
1951 // virtual double getMDS ();
1952 // virtual void setMDS (double val);
1953  virtual double getNEZ ();
1954  virtual void setNEZ (double val);
1955  virtual double getOUR ();
1956  virtual void setOUR (double val);
1957  virtual std::vector<std::string> getDClutter ();
1958  virtual void setDClutter (const std::vector<std::string>& value);
1959  virtual std::string getComment ();
1960  virtual void setComment (const std::string& val);
1961  virtual double getSQI ();
1962  virtual void setSQI (double val);
1963  virtual double getCSR ();
1964  virtual void setCSR (double val);
1965  virtual double getLOG ();
1966  virtual void setLOG (double val);
1967  virtual bool getVPRCorr ();
1968  virtual void setVPRCorr (bool val);
1969  virtual double getFreeze ();
1970  virtual void setFreeze (double val);
1971  virtual double getMin ();
1972  virtual void setMin (double val);
1973  virtual double getMax ();
1974  virtual void setMax (double val);
1975  virtual double getStep ();
1976  virtual void setStep (double val);
1977  virtual int getLevels ();
1978  virtual void setLevels (int val);
1979  virtual double getPeakPwr ();
1980  virtual void setPeakPwr (double val);
1981  virtual double getAvgPwr ();
1982  virtual void setAvgPwr (double val);
1983  virtual double getDynRange ();
1984  virtual void setDynRange (double val);
1985  virtual double getRAC ();
1986  virtual void setRAC (double val);
1987  virtual bool getBBC ();
1988  virtual void setBBC (bool val);
1989  virtual double getPAC ();
1990  virtual void setPAC (double val);
1991  virtual double getS2N ();
1992  virtual void setS2N (double val);
1993  virtual std::string getPolarization ();
1994  virtual void setPolarization (const std::string& val);
1995 
1996  virtual std::string getTaskOrProdGen ();
1997  virtual void setTaskOrProdGen (const std::string& val);
1998  virtual time_t getStartEpochs ();
1999  virtual void setStartEpochs (time_t val);
2000  virtual time_t getEndEpochs ();
2001  virtual void setEndEpochs (time_t val);
2002  virtual std::string getSystem ();
2003  virtual void setSystem (const std::string& val);
2004  virtual std::string getSoftware ();
2005  virtual void setSoftware (const std::string& val);
2006  virtual std::string getSoftwareVer ();
2007  virtual void setSoftwareVer (const std::string& val);
2008  virtual double getZR_A ();
2009  virtual void setZR_A (double val);
2010  virtual double getZR_B ();
2011  virtual void setZR_B (double val);
2012  virtual double getKR_A ();
2013  virtual void setKR_A (double val);
2014  virtual double getKR_B ();
2015  virtual void setKR_B (double val);
2016  virtual bool getSimulated ();
2017  virtual void setSimulated (bool val);
2018 
2019  virtual double getBeamWidth ();
2020  virtual double getBeamWidth (double defaultValue);
2021  virtual void setBeamWidth (double val);
2022  virtual double getWaveLength ();
2023  virtual double getWaveLength (double defaultValue);
2024  virtual void setWaveLength (double val);
2025  virtual double getRPM ();
2026  virtual double getRPM (double defaultValue);
2027  virtual void setRPM (double val);
2028  virtual double getPulseWidth ();
2029  virtual double getPulseWidth (double defaultValue);
2030  virtual void setPulseWidth (double val);
2031  virtual double getRXBandWidth ();
2032  virtual double getRXBandWidth (double defaultValue);
2033  virtual void setRXBandWidth (double val);
2034  virtual int getLowPRF ();
2035  virtual int getLowPRF (int defaultValue);
2036  virtual void setLowPRF (int val);
2037  virtual int getHighPRF ();
2038  virtual int getHighPRF (int defaultValue);
2039  virtual void setHighPRF (int val);
2040  virtual double getTXLoss () ;
2041  virtual double getTXLoss (double defaultValue);
2042  virtual void setTXLoss (double val) ;
2043  virtual double getRXLoss () ;
2044  virtual double getRXLoss (double defaultValue);
2045  virtual void setRXLoss (double val) ;
2046  virtual double getRadomeLoss () ;
2047  virtual double getRadomeLoss (double defaultValue);
2048  virtual void setRadomeLoss (double val) ;
2049  virtual double getAntGain () ;
2050  virtual double getAntGain (double defaultValue);
2051  virtual void setAntGain (double val) ;
2052  virtual double getBeamWH () ;
2053  virtual double getBeamWH (double defaultValue);
2054  virtual void setBeamWH (double val) ;
2055  virtual double getBeamWV () ;
2056  virtual double getBeamWV (double defaultValue);
2057  virtual void setBeamWV (double val) ;
2058  virtual double getGasAttn () ;
2059  virtual double getGasAttn (double defaultValue);
2060  virtual void setGasAttn (double val) ;
2061  virtual double getRadConstH () ;
2062  virtual double getRadConstH (double defaultValue);
2063  virtual void setRadConstH (double val) ;
2064  virtual double getRadConstV () ;
2065  virtual double getRadConstV (double defaultValue);
2066  virtual void setRadConstV (double val) ;
2067  virtual double getNomTXPower () ;
2068  virtual double getNomTXPower (double defaultValue);
2069  virtual void setNomTXPower (double val) ;
2070  virtual std::vector<double> getTXPower () ;
2071  virtual std::vector<double> getTXPower (double defaultValue);
2072  virtual void setTXPower (double val) ;
2073  virtual void setTXPower (const std::vector<double>& val) ;
2074  virtual double getNI () ;
2075  virtual double getNI (double defaultValue);
2076  virtual void setNI (double val) ;
2077  virtual double getVSamples () ;
2078  virtual double getVSamples (double defaultValue);
2079  virtual void setVSamples (double val) ;
2080 /*---- Queste le devo inserire anche se non sono reali per un prodotto, perche' l'oggetto eredita da HowPolarMetadata */
2081 /*---- PRIMA O POI BISOGNERA' SANARE LA SITUAZIONE PPA 2013-12-18*/
2082  virtual std::vector<AZAngles> getAzimuthAngles () {}
2083  virtual void setAzimuthAngles (const std::vector<AZAngles>& val, int precision = 10) {}
2084 /*--- FINE METODI VUOTI */
2085 
2086 /*-----
2087 
2088  virtual double getLongitude ();
2089  virtual void setLongitude (double val);
2090  virtual double getLatitude ();
2091  virtual void setLatitude (double val);
2092  virtual double getAltitude ();
2093  virtual void setAltitude (double val);
2094 
2095 
2096  virtual double getEAngle ();
2097  virtual void setEAngle (double val);
2098  virtual int getNumBins ();
2099  virtual void setNumBins (int val);
2100  virtual double getRangeStart ();
2101  virtual void setRangeStart (double val);
2102  virtual double getRangeScale ();
2103  virtual void setRangeScale (double val);
2104  virtual int getNumRays ();
2105  virtual void setNumRays (int val);
2106  virtual int getA1Gate ();
2107  virtual void setA1Gate (int val);
2108 
2109 ----*/
2110 
2118  virtual Product_2D_Data* createQuantityData (const char* name);
2119  virtual Product_2D_Data* createQuantityData (const std::string& name);
2126  virtual int getQuantityDataCount();
2134  virtual bool hasQuantityData (const char* name);
2135  virtual bool hasQuantityData (const std::string& name);
2143  virtual int getQuantityDataIndex (const char* name);
2144  virtual int getQuantityDataIndex (const std::string& name);
2153  virtual Product_2D_Data* getQuantityData (int index);
2162  virtual Product_2D_Data* getQuantityData (const char* name);
2163  virtual Product_2D_Data* getQuantityData (const std::string& name);
2170  std::set<std::string> getStoredQuantities ();
2177  virtual void removeQuantityData (const char* name);
2178  virtual void removeQuantityData (const std::string& name);
2179 
2180 protected :
2181  Object_2D* object_2d;
2182 
2183  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
2184  friend class Object_2D;
2185  Product_2D(Object_2D* object_2d, H5::Group* group);
2186 
2187 };
2188 
2189 /*===========================================================================*/
2190 /* HORIZONTAL 2D_PRODUCT Dataset */
2191 /*===========================================================================*/
2192 
2204 {
2205 public:
2206  virtual ~Horizontal_Product_2D();
2207 public:
2208 // virtual void setMandatoryInformations();
2209 
2210  virtual std::string getProjectionArguments () ;
2211  virtual void setProjectionArguments (const std::string& val) ;
2212 
2213  virtual int getXSize () ;
2214  virtual void setXSize (int val) ;
2215  virtual int getYSize () ;
2216  virtual void setYSize (int val) ;
2217  virtual double getXScale () ;
2218  virtual void setXScale (double val) ;
2219  virtual double getYScale () ;
2220  virtual void setYScale (double val) ;
2221 
2222  virtual double getLL_Longitude () ;
2223  virtual void setLL_Longitude (double val) ;
2224  virtual double getLL_Latitude () ;
2225  virtual void setLL_Latitude (double val) ;
2226 
2227  virtual double getUL_Longitude () ;
2228  virtual void setUL_Longitude (double val) ;
2229  virtual double getUL_Latitude () ;
2230  virtual void setUL_Latitude (double val) ;
2231 
2232  virtual double getUR_Longitude () ;
2233  virtual void setUR_Longitude (double val) ;
2234  virtual double getUR_Latitude () ;
2235  virtual void setUR_Latitude (double val) ;
2236 
2237  virtual double getLR_Longitude () ;
2238  virtual void setLR_Longitude (double val) ;
2239  virtual double getLR_Latitude () ;
2240  virtual void setLR_Latitude (double val) ;
2241 /*--- queste devono essere implementate .-----*/
2242  virtual std::vector<Angles> getAngles () ;
2243  virtual void setAngles (const std::vector<Angles>& val) ;
2244  virtual std::vector<Arotation> getArotation () ;
2245  virtual void setArotation (const std::vector<Arotation>& val);
2246  virtual std::string getCAMethod ();
2247  virtual void setCAMethod (const std::string& val) ;
2248  virtual std::vector<Nodes> getNodes () ;
2249  virtual void setNodes (const std::vector<Nodes>& val) ;
2250  virtual int getACCnum () ;
2251  virtual void setCCnum (int val) ;
2252 
2253 protected:
2254 // Product_2D * prod;
2255 
2256  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
2257  friend class Product_2D;
2258  Horizontal_Product_2D (Object_2D* object_2d, H5::Group* group);
2259 };
2260 
2261 /*===========================================================================*/
2262 /* PPI PRODUCT Dataset */
2263 /*===========================================================================*/
2273 class RADAR_API Product_PPI : public Horizontal_Product_2D
2274 {
2275 public:
2276  virtual ~Product_PPI() ;
2277 
2278  virtual void setMandatoryInformations();
2279 
2280 private:
2281 
2282  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
2283  friend class Horizontal_Product_2D ;
2284  friend class Object_2D;
2285  Product_PPI(Object_2D * object_2d, H5::Group* group);
2286 };
2287 /*===========================================================================*/
2288 /* CAPPI PRODUCT Dataset */
2289 /*===========================================================================*/
2299 class RADAR_API Product_CAPPI : public Horizontal_Product_2D
2300 {
2301 public:
2302  virtual ~Product_CAPPI() ;
2303 
2304  virtual void setMandatoryInformations();
2305 
2306 private:
2307 
2308  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
2309  friend class Horizontal_Product_2D ;
2310  friend class Object_2D;
2311  Product_CAPPI(Object_2D * object_2d, H5::Group* group);
2312 };
2313 /*===========================================================================*/
2314 /* PCAPPI PRODUCT Dataset */
2315 /*===========================================================================*/
2325 class RADAR_API Product_PCAPPI : public Horizontal_Product_2D
2326 {
2327 public:
2328  virtual ~Product_PCAPPI() ;
2329 
2330  virtual void setMandatoryInformations();
2331 
2332 private:
2333 
2334  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
2335  friend class Horizontal_Product_2D ;
2336  friend class Object_2D;
2337  Product_PCAPPI(Object_2D * object_2d, H5::Group* group);
2338 };
2339 /*===========================================================================*/
2340 /* ETOP PRODUCT Dataset */
2341 /*===========================================================================*/
2351 class RADAR_API Product_ETOP : public Horizontal_Product_2D
2352 {
2353 public:
2354  virtual ~Product_ETOP() ;
2355 
2356  virtual void setMandatoryInformations();
2357 
2358 private:
2359 
2360  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
2361  friend class Horizontal_Product_2D ;
2362  friend class Object_2D;
2363  Product_ETOP(Object_2D * object_2d, H5::Group* group);
2364 };
2365 /*===========================================================================*/
2366 /* MAX PRODUCT Dataset */
2367 /*===========================================================================*/
2377 class RADAR_API Product_MAX : public Horizontal_Product_2D
2378 {
2379 public:
2380  virtual ~Product_MAX() ;
2381 
2382  virtual void setMandatoryInformations();
2383 
2384 private:
2385 
2386  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
2387  friend class Horizontal_Product_2D ;
2388  friend class Object_2D;
2389  Product_MAX(Object_2D * object_2d, H5::Group* group);
2390 };
2391 
2392 /*===========================================================================*/
2393 /* RR PRODUCT Dataset */
2394 /*===========================================================================*/
2404 class RADAR_API Product_RR : public Horizontal_Product_2D
2405 {
2406 public:
2407  virtual ~Product_RR() ;
2408 
2409  virtual void setMandatoryInformations();
2410 
2411 private:
2412 
2413  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
2414  friend class Horizontal_Product_2D ;
2415  friend class Object_2D;
2416  Product_RR(Object_2D * object_2d, H5::Group* group);
2417 };
2418 /*===========================================================================*/
2419 /* VIL PRODUCT Dataset */
2420 /*===========================================================================*/
2430 class RADAR_API Product_VIL : public Horizontal_Product_2D
2431 {
2432 public:
2433  virtual ~Product_VIL() ;
2434 
2435  virtual void setMandatoryInformations();
2436 
2437 private:
2438 
2439  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
2440  friend class Horizontal_Product_2D ;
2441  friend class Object_2D;
2442  Product_VIL(Object_2D * object_2d, H5::Group* group);
2443 };
2444 /*===========================================================================*/
2445 /* LBM PRODUCT Dataset */
2446 /*===========================================================================*/
2456 class RADAR_API Product_LBM : public Horizontal_Product_2D
2457 {
2458 public:
2459  virtual ~Product_LBM() ;
2460 
2461  virtual void setMandatoryInformations();
2462 
2463 private:
2464 
2465  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
2466  friend class Horizontal_Product_2D ;
2467  friend class Object_2D;
2468  Product_LBM(Object_2D * object_2d, H5::Group* group);
2469 };
2470 
2471 /*===========================================================================*/
2472 /* POH PRODUCT Dataset */
2473 /*===========================================================================*/
2483 class RADAR_API Product_POH : public Horizontal_Product_2D
2484 {
2485 public:
2486  virtual ~Product_POH() ;
2487 
2488  virtual void setMandatoryInformations();
2489 
2490 private:
2491 
2492  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
2493  friend class Horizontal_Product_2D ;
2494  friend class Object_2D;
2495  Product_POH(Object_2D * object_2d, H5::Group* group);
2496 };
2497 
2498 /*===========================================================================*/
2499 /* COMP PRODUCT Dataset */
2500 /*===========================================================================*/
2510 class RADAR_API Product_COMP : public Horizontal_Product_2D
2511 {
2512 public:
2513  virtual ~Product_COMP() ;
2514 
2515  virtual void setMandatoryInformations();
2516 
2517 private:
2518 
2519  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
2520  friend class Horizontal_Product_2D ;
2521  friend class Object_2D;
2522  Product_COMP(Object_2D * object_2d, H5::Group* group);
2523 };
2524 
2525 /*===========================================================================*/
2526 /* VERTICAL 2D_PRODUCT Dataset */
2527 /*===========================================================================*/
2537 class RADAR_API Vertical_Product_2D : public Product_2D, public WHEREXSECMetadata
2538 {
2539 public:
2540  virtual ~Vertical_Product_2D();
2541 public:
2542  //virtual void setMandatoryInformations();
2543 
2544  virtual int getXSize () ;
2545  virtual void setXSize (int val) ;
2546  virtual int getYSize () ;
2547  virtual void setYSize (int val) ;
2548  virtual double getXScale () ;
2549  virtual void setXScale (double val) ;
2550  virtual double getYScale () ;
2551  virtual void setYScale (double val) ;
2552  virtual double getMinHeight () ;
2553  virtual void setMinHeight (double val) ;
2554  virtual double getMaxHeight () ;
2555  virtual void setMaxHeight (double val) ;
2556 
2557 protected:
2558  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
2559  friend class Product_2D;
2560  Vertical_Product_2D(Object_2D* object_2d, H5::Group* group);
2561 };
2562 
2563 /*===========================================================================*/
2564 /* XSEC PRODUCT Dataset */
2565 /*===========================================================================*/
2575 class RADAR_API Product_XSEC : public Vertical_Product_2D
2576 {
2577 public:
2578  virtual ~Product_XSEC() ;
2579 
2580  virtual void setMandatoryInformations();
2581 
2582 private:
2583 
2584  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
2585  friend class Vertical_Product_2D ;
2586  friend class Object_2D;
2587  Product_XSEC(Object_2D* object_2d, H5::Group* group);
2588 };
2589 
2590 /*===========================================================================*/
2591 /* RHI PRODUCT Dataset */
2592 /*===========================================================================*/
2602 class RADAR_API Product_RHI : public Vertical_Product_2D, public WHERERhiMetadata
2603 {
2604 public:
2605  virtual ~Product_RHI() ;
2606 
2607  virtual void setMandatoryInformations();
2608 
2609  virtual double getRHILon ();
2610  virtual void setRHILon (double val);
2611  virtual double getRHILat ();
2612  virtual void setRHILat (double val);
2613  virtual double getAzimuthAngle ();
2614  virtual void setAzimuthAngle (double val);
2615  virtual std::vector<Angles> getAngles ();
2616  virtual void setAngles (const std::vector<Angles>& val);
2617  virtual double getRange ();
2618  virtual void setRange (double val);
2619 
2620 private:
2621 
2622  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
2623  friend class Vertical_Product_2D ;
2624  friend class Object_2D;
2625  Product_RHI(Object_2D* object_2d, H5::Group* group);
2626 };
2627 
2628 /*===========================================================================*/
2629 /* VSP PRODUCT Dataset */
2630 /*===========================================================================*/
2640 class RADAR_API Product_Panel : public Vertical_Product_2D , public WHEREPanelMetadata
2641 {
2642 public:
2643  virtual ~Product_Panel() ;
2644 
2645  virtual void setMandatoryInformations();
2646  virtual double getStartLongitude () ;
2647  virtual void setStartLongitude (double val);
2648  virtual double getStartLatitude () ;
2649  virtual void setStartLatitude (double val);
2650  virtual double getStopLongitude ();
2651  virtual void setStopLongitude (double val);
2652  virtual double getStopLatitude ();
2653  virtual void setStopLatitude (double val);
2654 
2655 protected:
2656 
2657  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
2658  friend class Vertical_Product_2D ;
2659  friend class Product_2D;
2660  Product_Panel(Object_2D* object_2d, H5::Group* group);
2661 };
2662 
2663 /*===========================================================================*/
2664 /* HSP PRODUCT Dataset */
2665 /*===========================================================================*/
2675 class RADAR_API Product_HSP : public Product_Panel
2676 {
2677 public:
2678  virtual ~Product_HSP() ;
2679 
2680  virtual void setMandatoryInformations();
2681 
2682 private:
2683 
2684  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
2685  friend class Product_Panel;
2686  friend class Object_2D;
2687  Product_HSP(Object_2D* object_2d, H5::Group* group);
2688 };
2689 
2690 /*===========================================================================*/
2691 /* VSP PRODUCT Dataset */
2692 /*===========================================================================*/
2702 class RADAR_API Product_VSP : public Product_Panel
2703 {
2704 public:
2705  virtual ~Product_VSP() ;
2706 
2707  virtual void setMandatoryInformations();
2708 
2709 private:
2710 
2711  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
2712  friend class Product_Panel;
2713  friend class Object_2D;
2714  Product_VSP(Object_2D* object_2d, H5::Group* group);
2715 };
2716 /*===========================================================================*/
2717 /* 2D PRODUCT DATA */
2718 /*===========================================================================*/
2719 
2727 class RADAR_API Product_2D_Data: public OdimData, public WHATDatasetMetadata
2728 {
2729 public:
2730  virtual ~Product_2D_Data();
2731 
2732  virtual std::string getObject ();
2733  virtual void setObject (const std::string& val);
2734  virtual std::string getVersion ();
2735  virtual void setVersion (const std::string& val);
2736  virtual time_t getDateTime ();
2737  virtual void setDateTime (const time_t val);
2738  virtual SourceInfo getSource ();
2739  virtual void setSource (const SourceInfo& val);
2740 
2741  virtual std::string getProduct ();
2742  virtual void setProduct (const std::string& val);
2743  virtual double getProdPar ();
2744  virtual VILHeights getProdParVIL ();
2745  virtual void setProdPar (double val);
2746  virtual void setProdPar (const VILHeights& val);
2747  virtual std::string getQuantity ();
2748  virtual void setQuantity (const std::string& val);
2749  virtual time_t getStartDateTime();
2750  virtual void setStartDateTime(time_t val);
2751  virtual time_t getEndDateTime ();
2752  virtual void setEndDateTime (time_t val);
2753  virtual double getGain ();
2754  virtual void setGain (double val);
2755  virtual double getOffset ();
2756  virtual void setOffset (double val);
2757  virtual double getNodata ();
2758  virtual void setNodata (double val);
2759  virtual double getUndetect ();
2760  virtual void setUndetect (double val);
2761 
2767  virtual int getNumXElem();
2773  virtual int getNumYElem();
2779  H5::AtomType getElemType();
2787  virtual void readTranslatedData(DataMatrix<float>& matrix);
2795  virtual void readTranslatedData(DataMatrix<double>& matrix);
2807  virtual void writeAndTranslate(DataMatrix<float>& matrix, float offset, float gain, H5::DataType type);
2819  virtual void writeAndTranslate(DataMatrix<double>& matrix, double offset, double gain, H5::DataType type);
2820 
2827  virtual int getQualityDataCount();
2834  virtual OdimQuality* createQualityData ();
2844  virtual OdimQuality* getQualityData (int index);
2852  virtual void removeQualityData (int index);
2853 
2854 private:
2855  Product_2D* prod;
2856 
2857  /* uses cannot directly create OdimH5 objects, only factories provide functions to do it */
2858  friend class Horizontal_Product_2D;
2859  friend class Product_2D;
2860  Product_2D_Data(Product_2D* prod, H5::Group* group);
2861 };
2862 
2863 
2864 /*===========================================================================*/
2865 
2866 }
2867 
2868 #endif
2869 
2870 
OdimH5 v2.1 CAPPI Product Dataset.
Definition: odimh5v21_classes.hpp:2299
OdimH5 v2.1 Object_2D.
Definition: odimh5v21_classes.hpp:1479
Generic OdimH5 v2.1 dataset group.
Definition: odimh5v21_classes.hpp:256
OdimH5 v2.1 Polar Volume SCAN.
Definition: odimh5v21_classes.hpp:1024
Generic OdimH5 v2.1 data group.
Definition: odimh5v21_classes.hpp:414
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
Namespace related to ODIMH5 version 2.1.
Definition: odimh5v21.hpp:46
OdimH5 v2.1 RR Product Dataset.
Definition: odimh5v21_classes.hpp:2404
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:2083
Internal library macros.
OdimH5 v2.1 RHI Product Dataset.
Definition: odimh5v21_classes.hpp:2602
OdimH5 v2.1 MAX Product Dataset.
Definition: odimh5v21_classes.hpp:2377
Generic OdimH5 v2.1 quality group.
Definition: odimh5v21_classes.hpp:664
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:2640
OdimH5 v2.1 PCAPPI Product Dataset.
Definition: odimh5v21_classes.hpp:2325
OdimH5 v2.1 2d product quantity data.
Definition: odimh5v21_classes.hpp:2727
OdimH5 v2.1 COMP Product Dataset.
Definition: odimh5v21_classes.hpp:2510
Interface fot WHAT root attributes methods.
Definition: odimh5v21_metadata.hpp:1043
OdimH5 objects factory.
Definition: odimh5v21_factory.hpp:51
OdimH5 v2.1 PPI Product Dataset.
Definition: odimh5v21_classes.hpp:2483
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:2273
OdimH5 v2.1 ETOP Product Dataset.
Definition: odimh5v21_classes.hpp:2351
OdimH5 v2.1 Polar Volume.
Definition: odimh5v21_classes.hpp:881
OdimH5 v2.1 horizontalObject.
Definition: odimh5v21_classes.hpp:1712
OdimH5 v2.1 CompObject.
Definition: odimh5v21_classes.hpp:1798
Interface fot WHERE dataset attributes methods for polar scan.
Definition: odimh5v21_metadata.hpp:1278
OdimH5 v2.1 PPI Product Dataset.
Definition: odimh5v21_classes.hpp:2456
OdimH5 v2.1 Vericat Product_2D Dataset.
Definition: odimh5v21_classes.hpp:2537
OdimH5 v2.1 VSP Product Dataset.
Definition: odimh5v21_classes.hpp:2702
Interface fot HOW root attributes methods.
Definition: odimh5v21_metadata.hpp:1782
OdimH5 v2.1 SCAN quantity data.
Definition: odimh5v21_classes.hpp:1361
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:2082
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:1330
OdimH5 v2.1 HSP Product Dataset.
Definition: odimh5v21_classes.hpp:2675
OdimH5 v2.1 VIL Product Dataset.
Definition: odimh5v21_classes.hpp:2430
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:1825
OdimH5 v2.1 Product_2D Dataset.
Definition: odimh5v21_classes.hpp:1886
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:2203
OdimH5 v2.1 XSEC Product Dataset.
Definition: odimh5v21_classes.hpp:2575
OdimH5 v2.1 ImageObject.
Definition: odimh5v21_classes.hpp:1771