00001
00002
00003
00004 #include "psddl_pds2psana/lusi.ddl.h"
00005
00006 #include <cstddef>
00007
00008 #include <stdexcept>
00009
00010 namespace psddl_pds2psana {
00011 namespace Lusi {
00012 Psana::Lusi::DiodeFexConfigV1 pds_to_psana(Pds::Lusi::DiodeFexConfigV1 pds)
00013 {
00014 return Psana::Lusi::DiodeFexConfigV1(pds.base().data(), pds.scale().data());
00015 }
00016
00017 Psana::Lusi::DiodeFexConfigV2 pds_to_psana(Pds::Lusi::DiodeFexConfigV2 pds)
00018 {
00019 return Psana::Lusi::DiodeFexConfigV2(pds.base().data(), pds.scale().data());
00020 }
00021
00022 Psana::Lusi::DiodeFexV1 pds_to_psana(Pds::Lusi::DiodeFexV1 pds)
00023 {
00024 return Psana::Lusi::DiodeFexV1(pds.value());
00025 }
00026
00027 IpmFexConfigV1::IpmFexConfigV1(const boost::shared_ptr<const XtcType>& xtcPtr)
00028 : Psana::Lusi::IpmFexConfigV1()
00029 , m_xtcObj(xtcPtr)
00030 {
00031 {
00032 typedef ndarray<Psana::Lusi::DiodeFexConfigV1, 1> NDArray;
00033 typedef ndarray<const Pds::Lusi::DiodeFexConfigV1, 1> XtcNDArray;
00034 const XtcNDArray& xtc_ndarr = xtcPtr->diode();
00035 _diode_ndarray_storage_ = NDArray(xtc_ndarr.shape());
00036 NDArray::iterator out = _diode_ndarray_storage_.begin();
00037 for (XtcNDArray::iterator it = xtc_ndarr.begin(); it != xtc_ndarr.end(); ++ it, ++ out) {
00038 *out = psddl_pds2psana::Lusi::pds_to_psana(*it);
00039 }
00040 }
00041 }
00042 IpmFexConfigV1::~IpmFexConfigV1()
00043 {
00044 }
00045
00046 ndarray<const Psana::Lusi::DiodeFexConfigV1, 1> IpmFexConfigV1::diode() const { return _diode_ndarray_storage_; }
00047
00048 float IpmFexConfigV1::xscale() const {
00049 return m_xtcObj->xscale();
00050 }
00051
00052
00053 float IpmFexConfigV1::yscale() const {
00054 return m_xtcObj->yscale();
00055 }
00056
00057 IpmFexConfigV2::IpmFexConfigV2(const boost::shared_ptr<const XtcType>& xtcPtr)
00058 : Psana::Lusi::IpmFexConfigV2()
00059 , m_xtcObj(xtcPtr)
00060 {
00061 {
00062 typedef ndarray<Psana::Lusi::DiodeFexConfigV2, 1> NDArray;
00063 typedef ndarray<const Pds::Lusi::DiodeFexConfigV2, 1> XtcNDArray;
00064 const XtcNDArray& xtc_ndarr = xtcPtr->diode();
00065 _diode_ndarray_storage_ = NDArray(xtc_ndarr.shape());
00066 NDArray::iterator out = _diode_ndarray_storage_.begin();
00067 for (XtcNDArray::iterator it = xtc_ndarr.begin(); it != xtc_ndarr.end(); ++ it, ++ out) {
00068 *out = psddl_pds2psana::Lusi::pds_to_psana(*it);
00069 }
00070 }
00071 }
00072 IpmFexConfigV2::~IpmFexConfigV2()
00073 {
00074 }
00075
00076 ndarray<const Psana::Lusi::DiodeFexConfigV2, 1> IpmFexConfigV2::diode() const { return _diode_ndarray_storage_; }
00077
00078 float IpmFexConfigV2::xscale() const {
00079 return m_xtcObj->xscale();
00080 }
00081
00082
00083 float IpmFexConfigV2::yscale() const {
00084 return m_xtcObj->yscale();
00085 }
00086
00087 Psana::Lusi::IpmFexV1 pds_to_psana(Pds::Lusi::IpmFexV1 pds)
00088 {
00089 return Psana::Lusi::IpmFexV1(pds.channel().data(), pds.sum(), pds.xpos(), pds.ypos());
00090 }
00091
00092 Psana::Lusi::PimImageConfigV1 pds_to_psana(Pds::Lusi::PimImageConfigV1 pds)
00093 {
00094 return Psana::Lusi::PimImageConfigV1(pds.xscale(), pds.yscale());
00095 }
00096
00097 }
00098 }