00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #include "PSCalib/PnccdCalibPars.h"
00017
00018
00019
00020
00021 #include <iostream>
00022 #include <iomanip>
00023
00024
00025
00026
00027 #include "MsgLogger/MsgLogger.h"
00028 #include "PSCalib/CalibFileFinder.h"
00029
00030
00031
00032
00033 using namespace std;
00034
00035
00036
00037
00038
00039 namespace PSCalib {
00040
00041 const char logger[] = "PSCalib";
00042
00043
00044
00045
00046
00047 PnccdCalibPars::PnccdCalibPars(bool isTestMode)
00048 : PSCalib::CalibPars()
00049 , m_calibDir (std::string())
00050 , m_typeGroupName(std::string())
00051 , m_source (std::string())
00052 , m_runNumber (0)
00053 , m_print_bits (255)
00054 {
00055
00056 m_isTestMode = isTestMode;
00057 if (m_isTestMode) {
00058 m_calibdir = "/reg/d/psdm/AMO/amotut13/calib/PNCCD::CalibV1/Camp.0:pnCCD.1";
00059 m_calibfilename = "1-end.data";
00060 }
00061
00062 fillCalibNameVector ();
00063 loadCalibPars ();
00064
00065 }
00066
00067
00068
00069 PnccdCalibPars::PnccdCalibPars ( const std::string& calibDir,
00070 const std::string& typeGroupName,
00071 const std::string& source,
00072 const unsigned long& runNumber,
00073 unsigned print_bits)
00074 : PSCalib::CalibPars()
00075 , m_calibDir(calibDir)
00076 , m_typeGroupName(typeGroupName)
00077 , m_source(source)
00078 , m_runNumber(runNumber)
00079 , m_print_bits(print_bits)
00080 {
00081 m_isTestMode = false;
00082
00083 fillCalibNameVector ();
00084 loadCalibPars ();
00085
00086 if( m_print_bits & 1 ) printInputPars ();
00087
00088 }
00089
00090
00091
00092 PnccdCalibPars::PnccdCalibPars ( const std::string& calibDir,
00093 const std::string& typeGroupName,
00094 const Pds::Src& src,
00095 const unsigned long& runNumber,
00096 unsigned print_bits)
00097 : PSCalib::CalibPars()
00098 , m_calibDir(calibDir)
00099 , m_typeGroupName(typeGroupName)
00100 , m_source(std::string())
00101 , m_src(src)
00102 , m_runNumber(runNumber)
00103 , m_print_bits(print_bits)
00104 {
00105 m_isTestMode = false;
00106
00107 fillCalibNameVector ();
00108 loadCalibPars ();
00109
00110 if( m_print_bits & 1 ) printInputPars ();
00111
00112 }
00113
00114
00115
00116 void PnccdCalibPars::fillCalibNameVector ()
00117 {
00118 v_calibname.clear();
00119 v_calibname.push_back("pedestals");
00120 v_calibname.push_back("pixel_status");
00121 v_calibname.push_back("common_mode");
00122 v_calibname.push_back("pixel_gain");
00123 v_calibname.push_back("pixel_rms");
00124 }
00125
00126
00127
00128 void PnccdCalibPars::loadCalibPars ()
00129 {
00130 for( vector<std::string>::const_iterator iterCalibName = v_calibname.begin();
00131 iterCalibName != v_calibname.end(); iterCalibName++ )
00132 {
00133 m_cur_calibname = *iterCalibName;
00134
00135 getCalibFileName();
00136
00137 if (m_fname == std::string()) {
00138 fillDefaultCalibParsV1 ();
00139 if ( m_print_bits & 4 ) msgUseDefault ();
00140 m_calibtype_status[m_cur_calibname] = 0;
00141 }
00142 else
00143 {
00144 fillCalibParsV1 ();
00145 m_calibtype_status[m_cur_calibname] = 1;
00146 }
00147 }
00148 }
00149
00150
00151
00152 void PnccdCalibPars::getCalibFileName ()
00153 {
00154 if ( m_isTestMode )
00155 {
00156 m_fname = m_calibdir + "/";
00157 m_fname += m_cur_calibname + "/";
00158 m_fname += m_calibfilename;
00159 }
00160 else if (m_calibDir == std::string())
00161 {
00162 m_fname = std::string();
00163 }
00164 else
00165 {
00166 unsigned print_bits_cff = ( m_print_bits & 2 ) ? 255 : 0;
00167
00168 PSCalib::CalibFileFinder *calibfinder = new PSCalib::CalibFileFinder(m_calibDir, m_typeGroupName, print_bits_cff);
00169
00170
00171 if (m_source == std::string())
00172 m_fname = calibfinder -> findCalibFile(m_src, m_cur_calibname, m_runNumber);
00173 else
00174 m_fname = calibfinder -> findCalibFile(m_source, m_cur_calibname, m_runNumber);
00175 }
00176 MsgLog("PnccdCalibPars", debug, "getCalibFileName(): " << m_fname);
00177 }
00178
00179
00180
00181 void PnccdCalibPars::fillCalibParsV1 ()
00182 {
00183 if ( m_cur_calibname == v_calibname[0] ) m_pedestals = new pdscalibdata::PnccdPedestalsV1 (m_fname);
00184 else if( m_cur_calibname == v_calibname[1] ) m_pixel_status = new pdscalibdata::PnccdPixelStatusV1(m_fname);
00185 else if( m_cur_calibname == v_calibname[2] ) m_common_mode = new pdscalibdata::PnccdCommonModeV1 (m_fname);
00186 else if( m_cur_calibname == v_calibname[3] ) m_pixel_gain = new pdscalibdata::PnccdPixelGainV1 (m_fname);
00187 else if( m_cur_calibname == v_calibname[4] ) m_pixel_rms = new pdscalibdata::PnccdPixelRmsV1 (m_fname);
00188 }
00189
00190
00191
00192 void PnccdCalibPars::fillDefaultCalibParsV1 ()
00193 {
00194
00195
00196 if ( m_cur_calibname == v_calibname[0] ) m_pedestals = new pdscalibdata::PnccdPedestalsV1 ();
00197 else if( m_cur_calibname == v_calibname[1] ) m_pixel_status = new pdscalibdata::PnccdPixelStatusV1();
00198 else if( m_cur_calibname == v_calibname[2] ) m_common_mode = new pdscalibdata::PnccdCommonModeV1 ();
00199 else if( m_cur_calibname == v_calibname[3] ) m_pixel_gain = new pdscalibdata::PnccdPixelGainV1 ();
00200 else if( m_cur_calibname == v_calibname[4] ) m_pixel_rms = new pdscalibdata::PnccdPixelRmsV1 ();
00201
00202 else if( m_print_bits & 8 ) fatalMissingFileName ();
00203 }
00204
00205
00206
00207 void PnccdCalibPars::fatalMissingFileName ()
00208 {
00209 MsgLog("PnccdCalibPars", warning, "In fillDefaultCalibParsV1(): the calibration file for the source=" << m_source
00210 << ", type=" << m_cur_calibname
00211 << ", run=" << m_runNumber
00212 << " is not found ..."
00213 << "\nWARNING: Default pnCCD intensity correction constants can not guarantee correct intensity transformation..."
00214 << "\nWARNING: Please provide all expected pnCCD intensity correction constants under the directory .../<experiment>/calib/...");
00215 abort();
00216 }
00217
00218
00219
00220 void PnccdCalibPars::msgUseDefault ()
00221 {
00222 MsgLog("PnccdCalibPars", info, "In getCalibFileName(): the calibration file for the source=" << m_source
00223 << ", type=" << m_cur_calibname
00224 << ", run=" << m_runNumber
00225 << " is not found ..."
00226 << "\nWARNING: Default pnCCD alignment constants will be used.");
00227 }
00228
00229
00230
00231 void PnccdCalibPars::printCalibPars()
00232 {
00233 WithMsgLog("PnccdCalibPars", info, str) {
00234 str << "printCalibPars()" ;
00235
00236
00237 }
00238
00239 m_pedestals -> print();
00240 m_pixel_status -> print();
00241 m_common_mode -> print();
00242 m_pixel_gain -> print();
00243 m_pixel_rms -> print();
00244 }
00245
00246
00247
00248 void PnccdCalibPars::printInputPars()
00249 {
00250 WithMsgLog("PnccdCalibPars", info, str) {
00251 str << "printInputPars()" ;
00252 str << "\n m_calibDir = " << m_calibDir ;
00253 str << "\n m_typeGroupName = " << m_typeGroupName ;
00254 str << "\n m_source = " << m_source ;
00255 str << "\n m_runNumber = " << m_runNumber ;
00256 str << "\n m_print_bits = " << m_print_bits ;
00257 }
00258 }
00259
00260
00261
00262 void PnccdCalibPars::printCalibParsStatus ()
00263 {
00264 WithMsgLog("PnccdCalibPars", info, str) {
00265 str << "printCalibParsStatus()" ;
00266
00267 for( vector<std::string>::const_iterator iterCalibName = v_calibname.begin();
00268 iterCalibName != v_calibname.end(); iterCalibName++ )
00269 {
00270 m_cur_calibname = *iterCalibName;
00271 str << "\n type: " << std::left << std::setw(20) << m_cur_calibname
00272 << " status = " << m_calibtype_status[m_cur_calibname];
00273 }
00274 }
00275 }
00276
00277
00278
00279
00280
00281 PnccdCalibPars::~PnccdCalibPars ()
00282 {
00283
00284 }
00285
00286
00287
00288
00289
00290
00291 }