PSCalib/src/CSPad2x2CalibIntensity.cpp

Go to the documentation of this file.
00001 //--------------------------------------------------------------------------
00002 // File and Version Information:
00003 //      $Id$
00004 //
00005 // Description:
00006 //      Class CSPad2x2CalibIntensity...
00007 //
00008 // Author List:
00009 //      Mikhail S. Dubrovin
00010 //
00011 //------------------------------------------------------------------------
00012 
00013 //-----------------------
00014 // This Class's Header --
00015 //-----------------------
00016 #include "PSCalib/CSPad2x2CalibIntensity.h"
00017 
00018 //-----------------
00019 // C/C++ Headers --
00020 //-----------------
00021 #include <iostream>
00022 #include <iomanip>  // for std::setw
00023 
00024 //-------------------------------
00025 // Collaborating Class Headers --
00026 //-------------------------------
00027 #include "MsgLogger/MsgLogger.h"
00028 #include "PSCalib/CalibFileFinder.h"
00029 
00030 //-----------------------------------------------------------------------
00031 // Local Macros, Typedefs, Structures, Unions and Forward Declarations --
00032 //-----------------------------------------------------------------------
00033 using namespace std;
00034 
00035 //              ----------------------------------------
00036 //              -- Public Function Member Definitions --
00037 //              ----------------------------------------
00038 
00039 namespace PSCalib {
00040 
00041 const char logger[] = "PSCalib";
00042 
00043 //----------------
00044 // Constructors --
00045 //----------------
00046 
00047   CSPad2x2CalibIntensity::CSPad2x2CalibIntensity(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     // Test staff:
00056     m_isTestMode = isTestMode;
00057     if (m_isTestMode) {
00058         m_calibdir      = "/reg/d/psdm/AMO/amotut13/calib/CsPad2x2::CalibV1/Camp.0:Cspad2x2.1";
00059         m_calibfilename = "1-end.data";
00060     }
00061 
00062     fillCalibNameVector ();
00063     loadCalibPars ();
00064     //printCalibPars();
00065 }
00066 
00067 //----------------
00068 
00069 CSPad2x2CalibIntensity::CSPad2x2CalibIntensity ( const std::string&   calibDir,      //  "/reg/d/psdm/AMO/amoa1214/calib"
00070                                                  const std::string&   typeGroupName, //  "CsPad2x2::CalibV1"
00071                                                  const std::string&   source,        //  "Camp.0:Cspad2x2.0"
00072                                                  const unsigned long& runNumber,     //  10
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     //printCalibPars();
00088 }
00089 
00090 //----------------
00091 
00092 CSPad2x2CalibIntensity::CSPad2x2CalibIntensity ( const std::string&   calibDir,      //  "/reg/d/psdm/AMO/amoa1214/calib"
00093                                                  const std::string&   typeGroupName, //  "CsPad2x2::CalibV1"
00094                                                  const Pds::Src&      src,           //  Pds::Src m_src; <- is defined in get(...,&m_src)
00095                                                  const unsigned long& runNumber,     //  10
00096                                                  unsigned             print_bits)
00097   : PSCalib::CalibPars()
00098   , m_calibDir(calibDir)
00099   , m_typeGroupName(typeGroupName)
00100   , m_source(std::string()) // "in this constructor source is defined through Pds::Src"
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     //printCalibPars();
00112 }
00113 
00114 //----------------
00115 
00116 void CSPad2x2CalibIntensity::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 CSPad2x2CalibIntensity::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 CSPad2x2CalibIntensity::getCalibFileName ()
00153 {
00154   if ( m_isTestMode ) 
00155     {
00156       m_fname  = m_calibdir + "/"; 
00157       m_fname += m_cur_calibname + "/"; 
00158       m_fname += m_calibfilename; // "/0-end.data"; // !!! THIS IS A SIMPLIFIED CASE OF THE FILE NAME!!!
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       //m_fname = calibfinder -> findCalibFile(m_src, m_cur_calibname, m_runNumber);
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("CSPad2x2CalibIntensity", debug, "getCalibFileName(): " << m_fname);
00177 }
00178 
00179 //----------------
00180 
00181 void CSPad2x2CalibIntensity::fillCalibParsV1 ()
00182 {
00183   if     ( m_cur_calibname == v_calibname[0] ) m_pedestals    = new pdscalibdata::CsPad2x2PedestalsV2  (m_fname);
00184   else if( m_cur_calibname == v_calibname[1] ) m_pixel_status = new pdscalibdata::CsPad2x2PixelStatusV2(m_fname);
00185   else if( m_cur_calibname == v_calibname[2] ) m_common_mode  = new pdscalibdata::CsPad2x2CommonModeV2 (m_fname);
00186   else if( m_cur_calibname == v_calibname[3] ) m_pixel_gain   = new pdscalibdata::CsPad2x2PixelGainV2  (m_fname);
00187   else if( m_cur_calibname == v_calibname[4] ) m_pixel_rms    = new pdscalibdata::CsPad2x2PixelRmsV2   (m_fname);
00188 }
00189 
00190 //----------------
00191 
00192 void CSPad2x2CalibIntensity::fillDefaultCalibParsV1 ()
00193 {
00194   // If default parameters are available - set them.
00195   // For calib types where default parameters are not accaptable and the file is missing - error message and abort.
00196   if     ( m_cur_calibname == v_calibname[0] ) m_pedestals    = new pdscalibdata::CsPad2x2PedestalsV2  ();
00197   else if( m_cur_calibname == v_calibname[1] ) m_pixel_status = new pdscalibdata::CsPad2x2PixelStatusV2();
00198   else if( m_cur_calibname == v_calibname[2] ) m_common_mode  = new pdscalibdata::CsPad2x2CommonModeV2 ();
00199   else if( m_cur_calibname == v_calibname[3] ) m_pixel_gain   = new pdscalibdata::CsPad2x2PixelGainV2  ();
00200   else if( m_cur_calibname == v_calibname[4] ) m_pixel_rms    = new pdscalibdata::CsPad2x2PixelRmsV2   ();
00201 
00202   else if( m_print_bits & 8 ) fatalMissingFileName ();
00203 }
00204 
00205 //----------------
00206 
00207 void CSPad2x2CalibIntensity::fatalMissingFileName ()
00208 {
00209         MsgLog("CSPad2x2CalibIntensity", 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 CSPAD2x2 intensity correction constants can not guarantee correct intensity transformation..."
00214                   << "\nWARNING: Please provide all expected CSPAD2x2 intensity correction constants under the directory .../<experiment>/calib/...");
00215         abort();
00216 }
00217 
00218 //----------------
00219 
00220 void CSPad2x2CalibIntensity::msgUseDefault ()
00221 {
00222         MsgLog("CSPad2x2CalibIntensity", 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 CSPAD2x2 alignment constants will be used.");
00227 }
00228 
00229 //----------------
00230 
00231 void CSPad2x2CalibIntensity::printCalibPars()
00232 {
00233     WithMsgLog("CSPad2x2CalibIntensity", info, str) {
00234       str << "printCalibPars()" ;
00235       //str << "\n getColSize_um()    = " << getColSize_um() ;
00236       //str << "\n getRowSize_um()    = " << getRowSize_um() ;
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 CSPad2x2CalibIntensity::printInputPars()
00249 {
00250     WithMsgLog("CSPad2x2CalibIntensity", 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 CSPad2x2CalibIntensity::printCalibParsStatus ()
00263 {
00264     WithMsgLog("CSPad2x2CalibIntensity", 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 // Destructor --
00279 //--------------
00280 
00281 CSPad2x2CalibIntensity::~CSPad2x2CalibIntensity ()
00282 {
00283   //delete [] m_data; 
00284 }
00285 
00286 //----------------
00287 //----------------
00288 //----------------
00289 //----------------
00290 
00291 } // namespace PSCalib

Generated on 19 Dec 2016 for PSANAmodules by  doxygen 1.4.7