14 #include "pdsdata/xtc/Xtc.hh"
15 #include "pdsdata/xtc/TypeId.hh"
16 #include "pdsdata/xtc/DetInfo.hh"
17 #include "pdsdata/xtc/Src.hh"
18 #include "pdsdata/acqiris/TdcConfigV1.hh"
19 #include "pdsdata/acqiris/TdcDataV1.hh"
47 _pdsTypeList.push_back(Pds::TypeId::Id_AcqTdcData);
48 _pdsTypeList.push_back(Pds::TypeId::Id_AcqTdcConfig);
54 switch (xtc->contains.id())
56 case (Pds::TypeId::Id_AcqTdcConfig) :
58 const Pds::DetInfo&
info = *(Pds::DetInfo*)(&xtc->src);
60 cass::CASSEvent::devices_t::iterator devIt
62 assert(evt->
devices().end() != devIt);
63 Device &dev (dynamic_cast<Device&>(*(devIt->second)));
64 Instrument &instr(dev.instruments()[info.devId()]);
67 cout <<
"ACQIRISTDC::Converter: found '"<<Pds::DetInfo::name(info)
68 <<
"' configuration in datastream."
74 case (Pds::TypeId::Id_AcqTdcData):
76 const Pds::DetInfo&
info = *(Pds::DetInfo*)(&xtc->src);
77 cass::CASSEvent::devices_t::iterator devIt
79 assert(evt->
devices().end() != devIt);
80 Device &dev (dynamic_cast<Device&>(*(devIt->second)));
81 Instrument &instr(dev.instruments()[info.devId()]);
102 assert(6 == channels.size());
103 for (Instrument::channels_t::iterator it(channels.begin()); it != channels.end(); ++it)
106 const Pds::Acqiris::TdcDataV1 *
data
107 (reinterpret_cast<const Pds::Acqiris::TdcDataV1*>(xtc->payload()));
109 while(!(data->source() == Pds::Acqiris::TdcDataV1::AuxIO &&
110 static_cast<const Pds::Acqiris::TdcDataV1::Marker*
>(
data)->type() <
111 Pds::Acqiris::TdcDataV1::Marker::AuxIOMarker))
113 switch(data->source())
115 case Pds::Acqiris::TdcDataV1::Comm:
117 case Pds::Acqiris::TdcDataV1::AuxIO:
121 const Pds::Acqiris::TdcDataV1::Channel& c
122 (*static_cast<const Pds::Acqiris::TdcDataV1::Channel*>(data));
126 channels[data->source()-1].hits().push_back(c.time()*1e9);
140 ss<<
"ACQIRISTDC::Converter(): Xtc type'"<<Pds::TypeId::name(xtc->contains.id())
141 <<
"' is not handled by TDCConverter";
142 throw logic_error(ss.str());
static ConversionBackend::shared_pointer instance()
create singleton if doesnt exist already
Event to store all LCLS Data.
file contains declaration of the CASSEvent
static QMutex _mutex
singleton locker for mutithreaded requests
file contains the declaration of the acqiristdc part of the CASSEvent
std::vector< Channel > channels_t
a vector of Channels
devices_t & devices()
setters
static ConversionBackend::shared_pointer _instance
the singleton container
void operator()(const Pds::Xtc *, CASSEvent *)
takes the xtc and copies the data to cassevent
auxiliary data[Processor]
std::tr1::shared_ptr< ConversionBackend > shared_pointer
typedef
file contains the declaration of the converter for the xtc containing acqiris tdc data...
An Acqiris TDC Instrument.