psana_examples/src/DumpAcqTdc.cpp

Go to the documentation of this file.
00001 //--------------------------------------------------------------------------
00002 // File and Version Information:
00003 //      $Id: DumpAcqTdc.cpp 6020 2013-03-29 17:54:22Z salnikov@SLAC.STANFORD.EDU $
00004 //
00005 // Description:
00006 //      Class DumpAcqTdc...
00007 //
00008 // Author List:
00009 //      Andrei Salnikov
00010 //
00011 //------------------------------------------------------------------------
00012 
00013 //-----------------------
00014 // This Class's Header --
00015 //-----------------------
00016 #include "psana_examples/DumpAcqTdc.h"
00017 
00018 //-----------------
00019 // C/C++ Headers --
00020 //-----------------
00021 
00022 //-------------------------------
00023 // Collaborating Class Headers --
00024 //-------------------------------
00025 #include "MsgLogger/MsgLogger.h"
00026 #include "psddl_psana/acqiris.ddl.h"
00027 
00028 //-----------------------------------------------------------------------
00029 // Local Macros, Typedefs, Structures, Unions and Forward Declarations --
00030 //-----------------------------------------------------------------------
00031 
00032 using namespace psana_examples;
00033 PSANA_MODULE_FACTORY(DumpAcqTdc)
00034 
00035 //              ----------------------------------------
00036 //              -- Public Function Member Definitions --
00037 //              ----------------------------------------
00038 
00039 namespace psana_examples {
00040 
00041 //----------------
00042 // Constructors --
00043 //----------------
00044 DumpAcqTdc::DumpAcqTdc (const std::string& name)
00045   : Module(name)
00046 {
00047   // get the values from configuration or use defaults
00048   m_src = configSrc("source", "DetInfo(:AcqTDC.0)");
00049 }
00050 
00051 //--------------
00052 // Destructor --
00053 //--------------
00054 DumpAcqTdc::~DumpAcqTdc ()
00055 {
00056 }
00057 
00058 // Method which is called at the beginning of the calibration cycle
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 // Method which is called with event data
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 } // namespace psana_examples

Generated on 19 Dec 2016 for PSANAmodules by  doxygen 1.4.7