00001 #ifndef CSPAD_MOD_ELEMENTT_H
00002 #define CSPAD_MOD_ELEMENTT_H
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include "psddl_psana/cspad.ddl.h"
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034 namespace cspad_mod {
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052 template <typename ElemType>
00053 class ElementT : public ElemType {
00054 public:
00055
00056 typedef ElemType IfaceType;
00057
00058 enum {
00059 Nsbtemp = ElemType::Nsbtemp
00060 };
00061
00062
00063
00064
00065
00066
00067 ElementT (const ElemType& elem,
00068 int16_t* data,
00069 const float* common_mode) ;
00070
00071
00072 virtual ~ElementT () ;
00073
00074
00075 virtual uint32_t virtual_channel() const { return m_virtual_channel; }
00076
00077 virtual uint32_t lane() const { return m_lane; }
00078 virtual uint32_t tid() const { return m_tid; }
00079 virtual uint32_t acq_count() const { return m_acq_count; }
00080 virtual uint32_t op_code() const { return m_op_code; }
00081
00082 virtual uint32_t quad() const { return m_quad; }
00083
00084 virtual uint32_t seq_count() const { return m_seq_count; }
00085 virtual uint32_t ticks() const { return m_ticks; }
00086 virtual uint32_t fiducials() const { return m_fiducials; }
00087 virtual ndarray<const uint16_t, 1> sb_temp() const { return make_ndarray(m_sb_temp, Nsbtemp); }
00088 virtual uint32_t frame_type() const { return m_frame_type; }
00089 virtual ndarray<const int16_t, 3> data() const { return ndarray<const int16_t, 3>(m_data, m_data_shape); }
00090
00091
00092 virtual uint32_t sectionMask() const { return m_sectionMask; }
00093
00094
00095 virtual float common_mode(uint32_t section) const { return m_common_mode[section]; }
00096
00097 protected:
00098
00099 private:
00100
00101 uint32_t m_virtual_channel;
00102 uint32_t m_lane;
00103 uint32_t m_tid;
00104 uint32_t m_acq_count;
00105 uint32_t m_op_code;
00106 uint32_t m_quad;
00107 uint32_t m_seq_count;
00108 uint32_t m_ticks;
00109 uint32_t m_fiducials;
00110 uint16_t m_sb_temp[Nsbtemp];
00111 uint32_t m_frame_type;
00112 int16_t* m_data;
00113 uint32_t m_sectionMask;
00114 float m_common_mode[8];
00115 unsigned m_data_shape[3];
00116
00117
00118 ElementT ( const ElementT& ) ;
00119 ElementT& operator = ( const ElementT& ) ;
00120 };
00121
00122 typedef ElementT<Psana::CsPad::ElementV1> ElementV1;
00123 typedef ElementT<Psana::CsPad::ElementV2> ElementV2;
00124
00125 }
00126
00127 #endif // CSPAD_MOD_ELEMENTT_H