00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #include "CSPadPixCoords/CSPadConfigPars.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 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
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;
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
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 }