00001 #ifndef PSANA_CAMERA_DDL_H
00002 #define PSANA_CAMERA_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 Camera {
00013
00014
00015
00016
00017
00018
00019
00020 class FrameCoord {
00021 public:
00022 FrameCoord(uint16_t arg__column, uint16_t arg__row)
00023 : _column(arg__column), _row(arg__row)
00024 {
00025 }
00026 FrameCoord() {}
00027
00028 uint16_t column() const { return _column; }
00029
00030 uint16_t row() const { return _row; }
00031 static uint32_t _sizeof() { return 4; }
00032 private:
00033 uint16_t _column;
00034 uint16_t _row;
00035 };
00036
00037
00038
00039
00040
00041
00042
00043 class FrameFccdConfigV1 {
00044 public:
00045 enum { TypeId = Pds::TypeId::Id_FrameFccdConfig };
00046 enum { Version = 1 };
00047 virtual ~FrameFccdConfigV1();
00048 };
00049
00050
00051
00052
00053
00054
00055
00056 class FrameFexConfigV1 {
00057 public:
00058 enum { TypeId = Pds::TypeId::Id_FrameFexConfig };
00059 enum { Version = 1 };
00060 enum Forwarding {
00061 NoFrame,
00062 FullFrame,
00063 RegionOfInterest,
00064 };
00065 enum Processing {
00066 NoProcessing,
00067 GssFullFrame,
00068 GssRegionOfInterest,
00069 GssThreshold,
00070 };
00071 virtual ~FrameFexConfigV1();
00072
00073 virtual Camera::FrameFexConfigV1::Forwarding forwarding() const = 0;
00074
00075 virtual uint32_t forward_prescale() const = 0;
00076
00077 virtual Camera::FrameFexConfigV1::Processing processing() const = 0;
00078
00079 virtual const Camera::FrameCoord& roiBegin() const = 0;
00080
00081 virtual const Camera::FrameCoord& roiEnd() const = 0;
00082
00083 virtual uint32_t threshold() const = 0;
00084
00085 virtual uint32_t number_of_masked_pixels() const = 0;
00086
00087 virtual ndarray<const Camera::FrameCoord, 1> masked_pixel_coordinates() const = 0;
00088 };
00089 std::ostream& operator<<(std::ostream& str, Camera::FrameFexConfigV1::Forwarding enval);
00090 std::ostream& operator<<(std::ostream& str, Camera::FrameFexConfigV1::Processing enval);
00091
00092
00093
00094
00095
00096
00097
00098 class FrameV1 {
00099 public:
00100 enum { TypeId = Pds::TypeId::Id_Frame };
00101 enum { Version = 1 };
00102 virtual ~FrameV1();
00103
00104 virtual uint32_t width() const = 0;
00105
00106 virtual uint32_t height() const = 0;
00107
00108 virtual uint32_t depth() const = 0;
00109
00110 virtual uint32_t offset() const = 0;
00111
00112
00113 virtual ndarray<const uint8_t, 1> _int_pixel_data() const = 0;
00114
00115
00116 virtual ndarray<const uint8_t, 2> data8() const = 0;
00117
00118
00119 virtual ndarray<const uint16_t, 2> data16() const = 0;
00120
00121 virtual uint32_t depth_bytes() const = 0;
00122 };
00123
00124
00125
00126
00127
00128
00129
00130 class TwoDGaussianV1 {
00131 public:
00132 enum { TypeId = Pds::TypeId::Id_TwoDGaussian };
00133 enum { Version = 1 };
00134 virtual ~TwoDGaussianV1();
00135 virtual uint64_t integral() const = 0;
00136 virtual double xmean() const = 0;
00137 virtual double ymean() const = 0;
00138 virtual double major_axis_width() const = 0;
00139 virtual double minor_axis_width() const = 0;
00140 virtual double major_axis_tilt() const = 0;
00141 };
00142
00143
00144
00145
00146
00147
00148
00149 class ControlsCameraConfigV1 {
00150 public:
00151 enum { TypeId = Pds::TypeId::Id_ControlsCameraConfig };
00152 enum { Version = 1 };
00153 enum { DESC_CHAR_MAX = 48 };
00154 enum ColorMode {
00155 Mono,
00156 Bayer,
00157 RGB1,
00158 };
00159 virtual ~ControlsCameraConfigV1();
00160
00161 virtual uint32_t width() const = 0;
00162
00163 virtual uint32_t height() const = 0;
00164
00165 virtual uint32_t depth() const = 0;
00166
00167 virtual Camera::ControlsCameraConfigV1::ColorMode color_mode() const = 0;
00168
00169 virtual double exposure_time() const = 0;
00170
00171 virtual double gain() const = 0;
00172
00173 virtual const char* manufacturer() const = 0;
00174
00175 virtual const char* model() const = 0;
00176 };
00177 std::ostream& operator<<(std::ostream& str, Camera::ControlsCameraConfigV1::ColorMode enval);
00178 }
00179 }
00180 #endif // PSANA_CAMERA_DDL_H