00001 #ifndef PSANA_GENERIC1D_DDL_H
00002 #define PSANA_GENERIC1D_DDL_H 1
00003
00004
00005
00006 #include <vector>
00007 #include <iosfwd>
00008 #include <cstring>
00009 #include "ndarray/ndarray.h"
00010 #include "pdsdata/xtc/TypeId.hh"
00011 namespace Psana {
00012 namespace Generic1D {
00013
00014
00015
00016
00017
00018
00019
00020 class ConfigV0 {
00021 public:
00022 enum { TypeId = Pds::TypeId::Id_Generic1DConfig };
00023 enum { Version = 0 };
00024 enum Sample_Type {
00025 UINT8,
00026 UINT16,
00027 UINT32,
00028 FLOAT32,
00029 FLOAT64,
00030 };
00031 virtual ~ConfigV0();
00032
00033 virtual uint32_t NChannels() const = 0;
00034
00035 virtual ndarray<const uint32_t, 1> Length() const = 0;
00036
00037 virtual ndarray<const uint32_t, 1> SampleType() const = 0;
00038
00039 virtual ndarray<const int32_t, 1> Offset() const = 0;
00040
00041 virtual ndarray<const double, 1> Period() const = 0;
00042 virtual int32_t data_offset(uint32_t channel) const = 0;
00043 virtual uint32_t Depth(uint32_t channel) const = 0;
00044 };
00045 std::ostream& operator<<(std::ostream& str, Generic1D::ConfigV0::Sample_Type enval);
00046
00047
00048
00049
00050
00051
00052 class ConfigV0;
00053
00054 class DataV0 {
00055 public:
00056 enum { TypeId = Pds::TypeId::Id_Generic1DData };
00057 enum { Version = 0 };
00058 virtual ~DataV0();
00059 virtual uint32_t data_size() const = 0;
00060 virtual ndarray<const uint8_t, 1> _int_data() const = 0;
00061 virtual ndarray<const uint8_t, 1> data_u8(uint32_t channel) const = 0;
00062 virtual ndarray<const uint16_t, 1> data_u16(uint32_t channel) const = 0;
00063 virtual ndarray<const uint32_t, 1> data_u32(uint32_t channel) const = 0;
00064 virtual ndarray<const float, 1> data_f32(uint32_t channel) const = 0;
00065 virtual ndarray<const double, 1> data_f64(uint32_t channel) const = 0;
00066 };
00067 }
00068 }
00069 #endif // PSANA_GENERIC1D_DDL_H