00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #include "CSPadPixCoords/CSPad2x2ConfigPars.h"
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 using namespace CSPadPixCoords;
00029
00030 using namespace std;
00031
00032 namespace CSPadPixCoords {
00033
00034
00035
00036
00037
00038 CSPad2x2ConfigPars::CSPad2x2ConfigPars ()
00039 {
00040 m_source = PSEvt::Source("DetInfo(:Cspad2x2)");
00041 setCSPad2x2ConfigParsDefault();
00042 }
00043
00044 CSPad2x2ConfigPars::CSPad2x2ConfigPars (PSEvt::Source source)
00045 : m_source(source)
00046 {
00047 setCSPad2x2ConfigParsDefault();
00048 }
00049
00050 CSPad2x2ConfigPars::CSPad2x2ConfigPars ( uint32_t roiMask )
00051 {
00052 setCSPad2x2ConfigParsDefault();
00053 m_roiMask = roiMask;
00054 m_num2x1Stored = getNum2x1InMask(m_roiMask);
00055 m_numAsicsStored = N2x1 * m_num2x1Stored;
00056 }
00057
00058
00059
00060
00061
00062 CSPad2x2ConfigPars::~CSPad2x2ConfigPars ()
00063 {
00064 }
00065
00066
00067
00068 uint32_t
00069 CSPad2x2ConfigPars::getNum2x1InMask(uint32_t mask)
00070 {
00071 uint32_t num2x1InMask=0;
00072 for(uint32_t sect=0; sect < 8; sect++) {
00073 if( mask & (1<<sect) ) num2x1InMask++;
00074 }
00075 return num2x1InMask;
00076 }
00077
00078
00079
00080 void
00081 CSPad2x2ConfigPars::setCSPad2x2ConfigParsDefault()
00082 {
00083 m_roiMask = 03;
00084 m_num2x1Stored = getNum2x1InMask(m_roiMask);
00085 m_numAsicsStored = 2 * N2x1;
00086 m_config_vers = "N/A yet";
00087 m_data_vers = "N/A yet";
00088 std::fill_n(&m_common_mode[0], int(N2x1), float(0));
00089 m_is_set_for_evt = false;
00090 m_is_set_for_env = false;
00091 m_is_set = false;
00092 }
00093
00094
00095
00096
00097 void
00098 CSPad2x2ConfigPars::printCSPad2x2ConfigPars()
00099 {
00100 WithMsgLog(name(), info, log) {
00101 log << "Config pars from " << m_config_vers
00102 << " and " << m_data_vers
00103 << "\nN configs found:" << m_count_cfg
00104 << " roiMask=" << m_roiMask
00105 << " num2x1Stored=" << m_num2x1Stored
00106 << " numAsicsStored=" << m_numAsicsStored
00107 << " common_mode=" << m_common_mode[0] << ", " << m_common_mode[1]
00108 << " is_set_for_evt:" << m_is_set_for_evt
00109 << " is_set_for_env:" << m_is_set_for_env
00110 << " is_set:" << m_is_set
00111 << "\n";
00112 }
00113 }
00114
00115
00116
00117 bool
00118 CSPad2x2ConfigPars::setCSPad2x2ConfigPars(PSEvt::Event& evt, PSEnv::Env& env)
00119 {
00120 if ( ! m_is_set_for_env ) { m_is_set_for_env = setCSPad2x2ConfigParsFromEnv(env); }
00121 if ( ! m_is_set_for_evt ) { m_is_set_for_evt = setCSPad2x2ConfigParsFromEvent(evt); }
00122 m_is_set = m_is_set_for_env && m_is_set_for_evt;
00123 return m_is_set;
00124 }
00125
00126
00127
00128 bool
00129 CSPad2x2ConfigPars::setCSPad2x2ConfigParsFromEnv(PSEnv::Env& env)
00130 {
00131 m_count_cfg = 0;
00132 if ( getConfigParsForType <Psana::CsPad2x2::ConfigV1> (env) ) { m_config_vers = "CsPad2x2::ConfigV1"; return true; }
00133 if ( getConfigParsForType <Psana::CsPad2x2::ConfigV2> (env) ) { m_config_vers = "CsPad2x2::ConfigV2"; return true; }
00134
00135 MsgLog(name(), warning, "CsPad2x2::ConfigV1 - V2 is not available in this event...");
00136
00137 return false;
00138 }
00139
00140
00141
00142 bool
00143 CSPad2x2ConfigPars::setCSPad2x2ConfigParsFromEvent(PSEvt::Event& evt)
00144 {
00145 if ( getCSPadConfigFromDataForType <Psana::CsPad2x2::ElementV1> (evt) ) { m_data_vers = "CsPad2x2::ElementV1"; return true; }
00146
00147 MsgLog(name(), warning, "setCSPad2x2ConfigParsFromEvent(...): Psana::CsPad2x2::ElementV1 is not available in this event...");
00148 return false;
00149 }
00150
00151
00152
00153 }