00001 #ifndef PSANA_QUARTZ_DDL_H
00002 #define PSANA_QUARTZ_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 #include "psddl_psana/camera.ddl.h"
00012 namespace Psana {
00013 namespace Quartz {
00014
00015
00016
00017
00018
00019
00020
00021 class ConfigV1 {
00022 public:
00023 enum { TypeId = Pds::TypeId::Id_QuartzConfig };
00024 enum { Version = 1 };
00025 enum { LUT_Size = 4096 };
00026 enum { Row_Pixels = 2048 };
00027 enum { Column_Pixels = 2048 };
00028 enum { Output_LUT_Size = 4096 };
00029
00030
00031 enum Depth {
00032 Eight_bit,
00033 Ten_bit,
00034 };
00035 enum Binning {
00036 x1,
00037 x2,
00038 x4,
00039 };
00040 enum Mirroring {
00041 None,
00042 HFlip,
00043 VFlip,
00044 HVFlip,
00045 };
00046 virtual ~ConfigV1();
00047
00048 virtual uint16_t black_level() const = 0;
00049
00050 virtual uint16_t gain_percent() const = 0;
00051
00052 virtual Quartz::ConfigV1::Depth output_resolution() const = 0;
00053
00054 virtual Quartz::ConfigV1::Binning horizontal_binning() const = 0;
00055
00056 virtual Quartz::ConfigV1::Binning vertical_binning() const = 0;
00057
00058 virtual Quartz::ConfigV1::Mirroring output_mirroring() const = 0;
00059
00060 virtual uint8_t output_lookup_table_enabled() const = 0;
00061
00062 virtual uint8_t defect_pixel_correction_enabled() const = 0;
00063 virtual uint32_t number_of_defect_pixels() const = 0;
00064 virtual ndarray<const uint16_t, 1> output_lookup_table() const = 0;
00065 virtual ndarray<const Camera::FrameCoord, 1> defect_pixel_coordinates() const = 0;
00066
00067 virtual uint16_t output_offset() const = 0;
00068
00069 virtual uint32_t output_resolution_bits() const = 0;
00070 };
00071 std::ostream& operator<<(std::ostream& str, Quartz::ConfigV1::Depth enval);
00072 std::ostream& operator<<(std::ostream& str, Quartz::ConfigV1::Binning enval);
00073 std::ostream& operator<<(std::ostream& str, Quartz::ConfigV1::Mirroring enval);
00074
00075
00076
00077
00078
00079
00080
00081 class ConfigV2 {
00082 public:
00083 enum { TypeId = Pds::TypeId::Id_QuartzConfig };
00084 enum { Version = 2 };
00085 enum { LUT_Size = 4096 };
00086 enum { Row_Pixels = 2048 };
00087 enum { Column_Pixels = 2048 };
00088 enum { Output_LUT_Size = 4096 };
00089
00090
00091 enum Depth {
00092 Eight_bit,
00093 Ten_bit,
00094 };
00095 enum Binning {
00096 x1,
00097 x2,
00098 x4,
00099 };
00100 enum Mirroring {
00101 None,
00102 HFlip,
00103 VFlip,
00104 HVFlip,
00105 };
00106 virtual ~ConfigV2();
00107
00108 virtual uint16_t black_level() const = 0;
00109
00110 virtual uint16_t gain_percent() const = 0;
00111
00112 virtual Quartz::ConfigV2::Depth output_resolution() const = 0;
00113
00114 virtual Quartz::ConfigV2::Binning horizontal_binning() const = 0;
00115
00116 virtual Quartz::ConfigV2::Binning vertical_binning() const = 0;
00117
00118 virtual Quartz::ConfigV2::Mirroring output_mirroring() const = 0;
00119
00120 virtual uint8_t output_lookup_table_enabled() const = 0;
00121
00122 virtual uint8_t defect_pixel_correction_enabled() const = 0;
00123
00124 virtual uint8_t use_hardware_roi() const = 0;
00125
00126 virtual uint8_t use_test_pattern() const = 0;
00127
00128 virtual uint8_t max_taps() const = 0;
00129
00130 virtual const Camera::FrameCoord& roi_lo() const = 0;
00131
00132 virtual const Camera::FrameCoord& roi_hi() const = 0;
00133 virtual uint32_t number_of_defect_pixels() const = 0;
00134 virtual ndarray<const uint16_t, 1> output_lookup_table() const = 0;
00135 virtual ndarray<const Camera::FrameCoord, 1> defect_pixel_coordinates() const = 0;
00136
00137 virtual uint16_t output_offset() const = 0;
00138
00139 virtual uint32_t output_resolution_bits() const = 0;
00140 };
00141 std::ostream& operator<<(std::ostream& str, Quartz::ConfigV2::Depth enval);
00142 std::ostream& operator<<(std::ostream& str, Quartz::ConfigV2::Binning enval);
00143 std::ostream& operator<<(std::ostream& str, Quartz::ConfigV2::Mirroring enval);
00144 }
00145 }
00146 #endif // PSANA_QUARTZ_DDL_H