00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #include "psana_examples/DumpAcqTdc.h"
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include "MsgLogger/MsgLogger.h"
00026 #include "psddl_psana/acqiris.ddl.h"
00027
00028
00029
00030
00031
00032 using namespace psana_examples;
00033 PSANA_MODULE_FACTORY(DumpAcqTdc)
00034
00035
00036
00037
00038
00039 namespace psana_examples {
00040
00041
00042
00043
00044 DumpAcqTdc::DumpAcqTdc (const std::string& name)
00045 : Module(name)
00046 {
00047
00048 m_src = configSrc("source", "DetInfo(:AcqTDC.0)");
00049 }
00050
00051
00052
00053
00054 DumpAcqTdc::~DumpAcqTdc ()
00055 {
00056 }
00057
00058
00059 void
00060 DumpAcqTdc::beginCalibCycle(Event& evt, Env& env)
00061 {
00062 MsgLog(name(), trace, "in beginCalibCycle()");
00063
00064 shared_ptr<Psana::Acqiris::TdcConfigV1> tdcConfig = env.configStore().get(m_src);
00065 if (tdcConfig) {
00066
00067 WithMsgLog(name(), info, str) {
00068
00069 str << "Acqiris::TdcConfigV1:";
00070
00071 const ndarray<const Psana::Acqiris::TdcChannel, 1>& channels = tdcConfig->channels();
00072 for (int ch = 0; ch < Psana::Acqiris::TdcConfigV1::NChannels; ++ ch) {
00073 const Psana::Acqiris::TdcChannel& chan = channels[ch];
00074 str << "\n channel " << ch << ": slope=" << chan.slope()
00075 << " mode=" << chan.mode() << " level=" << chan.level();
00076 }
00077
00078 const ndarray<const Psana::Acqiris::TdcAuxIO, 1>& auxio = tdcConfig->auxio();
00079 for (int ch = 0; ch < Psana::Acqiris::TdcConfigV1::NAuxIO; ++ ch) {
00080 const Psana::Acqiris::TdcAuxIO& chan = auxio[ch];
00081 str << "\n auxio " << ch << ": channel=" << chan.channel()
00082 << " mode=" << chan.mode() << " term=" << chan.term();
00083 }
00084
00085 const Psana::Acqiris::TdcVetoIO& veto = tdcConfig->veto();
00086 str << "\n veto: channel=" << veto.channel()
00087 << " mode=" << veto.mode() << " term=" << veto.term();
00088
00089 }
00090 }
00091 }
00092
00093
00094 void
00095 DumpAcqTdc::event(Event& evt, Env& env)
00096 {
00097 shared_ptr<Psana::Acqiris::TdcDataV1> tdcData = evt.get(m_src);
00098 if (tdcData) {
00099
00100 WithMsgLog(name(), info, str) {
00101
00102 str << "Acqiris::TdcDataV1:";
00103
00104 const ndarray<const Psana::Acqiris::TdcDataV1_Item, 1>& data = tdcData->data();
00105 for (unsigned i = 0; i < data.shape()[0]; ++ i) {
00106
00107 const Psana::Acqiris::TdcDataV1_Item& item = data[i];
00108
00109 if (item.source() == Psana::Acqiris::TdcDataV1_Item::Comm) {
00110
00111 const Psana::Acqiris::TdcDataV1Common& comm =
00112 static_cast<const Psana::Acqiris::TdcDataV1Common&>(item);
00113 str << "\n item=" << i
00114 << " type=TdcDataV1Common"
00115 << " source=" << comm.source()
00116 << " nhits=" << comm.nhits()
00117 << " overflow=" << int(comm.overflow());
00118
00119 } else if (item.source() == Psana::Acqiris::TdcDataV1_Item::AuxIO) {
00120
00121 const Psana::Acqiris::TdcDataV1Marker& mark =
00122 static_cast<const Psana::Acqiris::TdcDataV1Marker&>(item);
00123 str << "\n item=" << i
00124 << " type=TdcDataV1Marker"
00125 << " source=" << mark.source()
00126 << " type=" << mark.type();
00127
00128 } else {
00129
00130 const Psana::Acqiris::TdcDataV1Channel& chan =
00131 static_cast<const Psana::Acqiris::TdcDataV1Channel&>(item);
00132 str << "\n item=" << i
00133 << " type=TdcDataV1Channel"
00134 << " source=" << chan.source()
00135 << " ticks=" << chan.ticks()
00136 << " overflow=" << int(chan.overflow())
00137 << " time=" << chan.time();
00138
00139 }
00140
00141 }
00142
00143 }
00144
00145 }
00146 }
00147
00148 }