CSPadPixCoords/src/CSPadConfigPars.cpp

Go to the documentation of this file.
00001 //--------------------------------------------------------------------------
00002 // File and Version Information:
00003 //      $Id$
00004 //
00005 // Description:
00006 //      Class CSPadConfigPars...
00007 //
00008 // Author List:
00009 //      Mikhail S. Dubrovin
00010 //
00011 //------------------------------------------------------------------------
00012 
00013 //-----------------------
00014 // This Class's Header --
00015 //-----------------------
00016 
00017 #include "CSPadPixCoords/CSPadConfigPars.h"
00018 
00019 //-----------------
00020 // C/C++ Headers --
00021 //-----------------
00022 //#include <time.h>
00023 
00024 //-----------------------------------------------------------------------
00025 // Local Macros, Typedefs, Structures, Unions and Forward Declarations --
00026 //-----------------------------------------------------------------------
00027 
00028 using namespace CSPadPixCoords;
00029 
00030 using namespace std;
00031 
00032 namespace CSPadPixCoords {
00033 
00034 //----------------
00035 // Constructors --
00036 //----------------
00037 
00038 CSPadConfigPars::CSPadConfigPars ()
00039 {
00040   m_source = PSEvt::Source("DetInfo(:Cspad)");
00041   setCSPadConfigParsDefault();
00042 }
00043 
00044 CSPadConfigPars::CSPadConfigPars (PSEvt::Source source)
00045     : m_source(source)
00046 {
00047   setCSPadConfigParsDefault();
00048 }
00049 
00050 CSPadConfigPars::CSPadConfigPars ( uint32_t numQuads,
00051                                    uint32_t quadNumber[],
00052                                    uint32_t roiMask[]
00053                                   )
00054 {
00055   setCSPadConfigParsDefault();
00056 
00057   m_numQuads = numQuads;
00058   m_num2x1StoredInData = 0;
00059   for (uint32_t q = 0; q < m_numQuads; ++ q) {
00060     m_quadNumber[q]       = quadNumber[q];
00061     m_roiMask[q]          = roiMask[q];
00062     m_num2x1Stored[q]     = getNum2x1InMask (roiMask[q]);
00063     m_num2x1StoredInData += m_num2x1Stored[q]; 
00064   }
00065 }
00066 
00067 //--------------
00068 // Destructor --
00069 //--------------
00070 
00071 CSPadConfigPars::~CSPadConfigPars ()
00072 {
00073 }
00074 
00075 //--------------------
00076 
00077 uint32_t 
00078 CSPadConfigPars::getNum2x1InMask(uint32_t mask)
00079 {
00080   uint32_t num2x1InMask=0;
00081   for(uint32_t sect=0; sect < 8; sect++) {
00082     if( mask & (1<<sect) ) num2x1InMask++; 
00083   }
00084   return num2x1InMask;
00085 }
00086 
00087 //--------------------
00088 
00089 void 
00090 CSPadConfigPars::setCSPadConfigParsDefault()
00091 {
00092   m_numQuads = NQuadsMax;
00093   m_num2x1StoredInData = 0;
00094   for (uint32_t q = 0; q < m_numQuads; ++ q) {
00095     m_quadNumber[q]       = q;
00096     m_roiMask[q]          = 0377; // or 255;
00097     m_num2x1Stored[q]     = 8;
00098     m_num2x1StoredInData += m_num2x1Stored[q]; 
00099   }
00100   m_config_vers    = "N/A yet";
00101   m_data_vers      = "N/A yet";
00102   m_is_set_for_evt = false;
00103   m_is_set_for_env = false;
00104   m_is_set         = false;
00105   m_count_wornings = 0;
00106 }
00107 
00108 //--------------------
00109 
00110 /// Print input parameters
00111 void 
00112 CSPadConfigPars::printCSPadConfigPars()
00113 {
00114   WithMsgLog(name(), info, log) {
00115     log << "CSPAD config pars from "      << m_config_vers
00116         << " and "                        << m_data_vers
00117         << "\n  N configs found:"         << m_count_cfg
00118         << "\n  number of quads stored: " << m_numQuads    
00119         << "\n  number of 2x1 stored:   " << m_num2x1StoredInData    
00120         << "\n  is_set_for_evt:         " << m_is_set_for_evt 
00121         << "\n  is_set_for_env:         " << m_is_set_for_env    
00122         << "\n  is_set:                 " << m_is_set;    
00123 
00124     for (uint32_t q = 0; q < m_numQuads; ++ q) {
00125       log << "\n  quad="  << m_quadNumber[q]
00126           << "  roiMask=" << m_roiMask[q]
00127           << "  num2x1="  << m_num2x1Stored[q];
00128     }
00129       log << "\n";
00130   }
00131 }
00132 
00133 //--------------------
00134 
00135 bool 
00136 CSPadConfigPars::setCSPadConfigPars(PSEvt::Event& evt, PSEnv::Env& env)
00137 {
00138   if ( ! m_is_set_for_env ) { m_is_set_for_env = setCSPadConfigParsFromEnv(env); }
00139   if ( ! m_is_set_for_evt ) { m_is_set_for_evt = setCSPadConfigParsFromEvent(evt); }
00140   m_is_set = m_is_set_for_env && m_is_set_for_evt;
00141   return m_is_set;
00142 }
00143 
00144 //--------------------
00145 
00146 bool
00147 CSPadConfigPars::setCSPadConfigParsFromEnv(PSEnv::Env& env)
00148 {
00149   m_count_cfg = 0;
00150   if ( getQuadConfigParsForType<Psana::CsPad::ConfigV2>(env) ) { m_config_vers = "CsPad::ConfigV2"; return true; }
00151   if ( getQuadConfigParsForType<Psana::CsPad::ConfigV3>(env) ) { m_config_vers = "CsPad::ConfigV3"; return true; }
00152   if ( getQuadConfigParsForType<Psana::CsPad::ConfigV4>(env) ) { m_config_vers = "CsPad::ConfigV4"; return true; }
00153   if ( getQuadConfigParsForType<Psana::CsPad::ConfigV5>(env) ) { m_config_vers = "CsPad::ConfigV5"; return true; }
00154 
00155   m_count_wornings++;
00156   if (m_count_wornings < 20) MsgLog(name(), warning, "CsPad::ConfigV2-V5 is not available in this event...")
00157   if (m_count_wornings ==20) MsgLog(name(), warning, "STOP PRINTING WARNINGS !!!")
00158   return false;
00159 }
00160 
00161 //--------------------
00162 
00163 bool 
00164 CSPadConfigPars::setCSPadConfigParsFromEvent(PSEvt::Event& evt)
00165 {
00166   if ( getCSPadConfigFromDataForType <Psana::CsPad::DataV1, Psana::CsPad::ElementV1> (evt) ) { m_data_vers = "CsPad::ElementV1"; return true; }
00167   if ( getCSPadConfigFromDataForType <Psana::CsPad::DataV2, Psana::CsPad::ElementV2> (evt) ) { m_data_vers = "CsPad::ElementV2"; return true; }
00168 
00169   m_count_wornings++;
00170   if (m_count_wornings < 20) MsgLog(name(), warning, "getCSPadConfigFromData(...): Psana::CsPad::DataV# / ElementV# for #=[1,2] is not available in this event...");
00171   if (m_count_wornings ==20) MsgLog(name(), warning, "STOP PRINTING WARNINGS !!!")
00172   return false;
00173 }
00174 
00175 //--------------------
00176 
00177 } // namespace CSPadPixCoords

Generated on 19 Dec 2016 for PSANAmodules by  doxygen 1.4.7