Detector/src/NDArrProducerCSPAD2X2.cpp

Go to the documentation of this file.
00001 //--------------------------------------------------------------------------
00002 // File and Version Information:
00003 //      $Id: NDArrProducerCSPAD2X2.cpp 10108 2015-05-18 21:23:05Z dubrovin@SLAC.STANFORD.EDU $
00004 //
00005 // Author:
00006 //      Mikhail S. Dubrovin
00007 //
00008 //------------------------------------------------------------------------
00009 
00010 //---------------
00011 // -- Headers --
00012 //---------------
00013 
00014 #include "Detector/NDArrProducerCSPAD2X2.h"
00015 
00016 //-----------------------------
00017 
00018 namespace Detector {
00019 
00020 typedef NDArrProducerCSPAD2X2::data_t data_t;
00021 
00022 //-----------------------------
00023 
00024 NDArrProducerCSPAD2X2::NDArrProducerCSPAD2X2(const PSEvt::Source& source, const unsigned& mode, const unsigned& pbits, const float& vdef)
00025   : NDArrProducerBase(source, mode, pbits, vdef)
00026   , m_count_ent(0)
00027   , m_count_msg(0)
00028 {
00029   //m_as_data = (mode) ? false : true;
00030   m_as_data = true;
00031 }
00032 
00033 //-----------------------------
00034 
00035 NDArrProducerCSPAD2X2::~NDArrProducerCSPAD2X2 ()
00036 {
00037 }
00038 
00039 //-----------------------------
00040 
00041 void
00042 NDArrProducerCSPAD2X2::print_warning(const char* msg)
00043 {
00044   m_count_msg++;
00045   if (m_count_msg < 11 && m_pbits) {
00046     MsgLog(name(), warning, "CsPad2x2::ElementV1 object"
00047            << " is not available in this run/event for source:" << m_source);
00048     if (m_count_msg == 10) MsgLog(name(), warning, "STOP PRINT WARNINGS for source:" << m_source);
00049   }
00050 }
00051 
00052 //-----------------------------
00053 
00054 ndarray<const data_t,3> 
00055 NDArrProducerCSPAD2X2::data_nda_int16_3(PSEvt::Event& evt, PSEnv::Env& env)
00056 {
00057   ndarray<const data_t,3> nda1 = getNDArrForType<Psana::CsPad2x2::ElementV1, data_t>(evt, env);
00058   if ( ! nda1.empty()) return nda1; 
00059 
00060   print_warning();
00061   ndarray<data_t,3> nda;
00062   return nda; // empty
00063 }
00064 
00065 //-----------------------------
00066 
00067 void
00068 NDArrProducerCSPAD2X2::print_config(PSEvt::Event& evt, PSEnv::Env& env)
00069 {
00070   printConfigFromData(evt);
00071 
00072   boost::shared_ptr<Psana::CsPad2x2::ConfigV1> config1 = env.configStore().get(m_source);
00073   if (config1) {    
00074     WithMsgLog(name(), info, str) {
00075       str << "CsPad2x2::ConfigV1:";
00076       str << "\n  concentratorVersion = " << config1->concentratorVersion();
00077       str << "\n  protectionEnable = " << config1->protectionEnable();
00078       str << "\n  protectionThreshold:";
00079       str << "\n    adcThreshold= " << config1->protectionThreshold().adcThreshold()
00080           << "\n    pixelCountThreshold= " << config1->protectionThreshold().pixelCountThreshold();
00081       str << "\n  inactiveRunMode = " << config1->inactiveRunMode();
00082       str << "\n  activeRunMode = " << config1->activeRunMode();
00083       str << "\n  tdi = " << config1->tdi();
00084       str << "\n  payloadSize = " << config1->payloadSize();
00085       str << "\n  badAsicMask1 = " << config1->badAsicMask();
00086       str << "\n  asicMask = " << config1->asicMask();
00087       str << "\n  numAsicsRead = " << config1->numAsicsRead();
00088       str << "\n  roiMask = " << config1->roiMask();
00089       str << "\n  numAsicsStored = " << config1->numAsicsStored();
00090       const Psana::CsPad2x2::ConfigV1QuadReg& quad = config1->quad();
00091       str << "\n  quad:";
00092       str << "\n    shiftSelect = " << quad.shiftSelect();
00093       str << "\n    edgeSelect = " << quad.edgeSelect();
00094       str << "\n    readClkSet = " << quad.readClkSet();
00095       str << "\n    readClkHold = " << quad.readClkHold();
00096       str << "\n    dataMode = " << quad.dataMode();
00097       str << "\n    prstSel = " << quad.prstSel();
00098       str << "\n    acqDelay = " << quad.acqDelay();
00099       str << "\n    intTime = " << quad.intTime();
00100       str << "\n    digDelay = " << quad.digDelay();
00101       str << "\n    ampIdle = " << quad.ampIdle();
00102       str << "\n    injTotal = " << quad.injTotal();
00103       str << "\n    rowColShiftPer = " << quad.rowColShiftPer();
00104       str << "\n    ampReset = " << quad.ampReset();
00105       str << "\n    digCount = " << quad.digCount();
00106       str << "\n    digPeriod = " << quad.digPeriod();
00107       str << "\n    PeltierEnable = " << quad.PeltierEnable();
00108       str << "\n    kpConstant = " << quad.kpConstant();
00109       str << "\n    kiConstant = " << quad.kiConstant();
00110       str << "\n    kdConstant = " << quad.kdConstant();
00111       str << "\n    humidThold = " << quad.humidThold();
00112       str << "\n    setPoint = " << quad.setPoint();
00113       str << "\n    digitalPots = " << quad.dp().pots();
00114       str << "\n    readOnly = shiftTest: " << quad.ro().shiftTest() << " verstion: " << quad.ro().version();
00115       str << "\n    gainMap = " << quad.gm().gainMap();
00116     }
00117     return;
00118   }
00119 
00120   boost::shared_ptr<Psana::CsPad2x2::ConfigV2> config2 = env.configStore().get(m_source);
00121   if (config2) {
00122     WithMsgLog(name(), info, str) {
00123       str << "CsPad2x2::ConfigV2:";
00124       str << "\n  concentratorVersion = " << config2->concentratorVersion();
00125       str << "\n  protectionEnable = " << config2->protectionEnable();
00126       str << "\n  protectionThreshold:";
00127       str << "\n    adcThreshold= " << config2->protectionThreshold().adcThreshold()
00128           << "\n    pixelCountThreshold= " << config2->protectionThreshold().pixelCountThreshold();
00129       str << "\n  inactiveRunMode = " << config2->inactiveRunMode();
00130       str << "\n  activeRunMode = " << config2->activeRunMode();
00131       str << "\n  runTriggerDelay = " << config2->runTriggerDelay();
00132       str << "\n  tdi = " << config2->tdi();
00133       str << "\n  payloadSize = " << config2->payloadSize();
00134       str << "\n  badAsicMask1 = " << config2->badAsicMask();
00135       str << "\n  asicMask = " << config2->asicMask();
00136       str << "\n  numAsicsRead = " << config2->numAsicsRead();
00137       str << "\n  roiMask = " << config2->roiMask();
00138       str << "\n  numAsicsStored = " << config2->numAsicsStored();
00139       const Psana::CsPad2x2::ConfigV2QuadReg& quad = config2->quad();
00140       str << "\n  quad:";
00141       str << "\n    shiftSelect = " << quad.shiftSelect();
00142       str << "\n    edgeSelect = " << quad.edgeSelect();
00143       str << "\n    readClkSet = " << quad.readClkSet();
00144       str << "\n    readClkHold = " << quad.readClkHold();
00145       str << "\n    dataMode = " << quad.dataMode();
00146       str << "\n    prstSel = " << quad.prstSel();
00147       str << "\n    acqDelay = " << quad.acqDelay();
00148       str << "\n    intTime = " << quad.intTime();
00149       str << "\n    digDelay = " << quad.digDelay();
00150       str << "\n    ampIdle = " << quad.ampIdle();
00151       str << "\n    injTotal = " << quad.injTotal();
00152       str << "\n    rowColShiftPer = " << quad.rowColShiftPer();
00153       str << "\n    ampReset = " << quad.ampReset();
00154       str << "\n    digCount = " << quad.digCount();
00155       str << "\n    digPeriod = " << quad.digPeriod();
00156       str << "\n    biasTuning = " << quad.biasTuning();
00157       str << "\n    pdpmndnmBalance = " << quad.pdpmndnmBalance();
00158       str << "\n    PeltierEnable = " << quad.PeltierEnable();
00159       str << "\n    kpConstant = " << quad.kpConstant();
00160       str << "\n    kiConstant = " << quad.kiConstant();
00161       str << "\n    kdConstant = " << quad.kdConstant();
00162       str << "\n    humidThold = " << quad.humidThold();
00163       str << "\n    setPoint = " << quad.setPoint();
00164       str << "\n    digitalPots = " << quad.dp().pots();
00165       str << "\n    readOnly = shiftTest: " << quad.ro().shiftTest() << " verstion: " << quad.ro().version();
00166       str << "\n    gainMap = " << quad.gm().gainMap();
00167     }
00168     return;
00169   }
00170 
00171   MsgLog(name(), info, "CsPad2x2::ConfigV1,2 is not found for source " << m_source);  
00172 }
00173 
00174 //-----------------------------
00175 
00176 void
00177 NDArrProducerCSPAD2X2::printConfigFromData(PSEvt::Event& evt) {
00178 
00179   boost::shared_ptr<Psana::CsPad2x2::ElementV1> elem1 = evt.get(m_source, m_key);
00180   if (elem1) {
00181     WithMsgLog(name(), info, str) {
00182       str << "CsPad2x2::ElementV1:";
00183       str << "\n  virtual_channel = " << elem1->virtual_channel() ;
00184       str << "\n  lane = " << elem1->lane() ;
00185       str << "\n  tid = " << elem1->tid() ;
00186       str << "\n  acq_count = " << elem1->acq_count() ;
00187       str << "\n  op_code = " << elem1->op_code() ;
00188       str << "\n  quad = " << elem1->quad() ;
00189       str << "\n  seq_count = " << elem1->seq_count() ;
00190       str << "\n  ticks = " << elem1->ticks() ;
00191       str << "\n  fiducials = " << elem1->fiducials() ;
00192       str << "\n  frame_type = " << elem1->frame_type() ;
00193 
00194       str << "\n    sb_temp = " << elem1->sb_temp();
00195 
00196       const ndarray<const int16_t, 3>& data = elem1->data();
00197       str << "\n    common_mode = [ ";
00198       for (unsigned i = 0; i != data.shape()[2]; ++ i) {
00199           str << elem1->common_mode(i) << ' ';
00200       }
00201       str << "]";
00202       str << "\n    data = " << data;
00203     }
00204   }
00205 }
00206  
00207 //-----------------------------
00208 } // namespace Detector
00209 //-----------------------------

Generated on 19 Dec 2016 for PSDMSoftware by  doxygen 1.4.7