PSCalib/include/GenericCalibPars.h

Go to the documentation of this file.
00001 #ifndef PSCALIB_GENERICCALIBPARS_H
00002 #define PSCALIB_GENERICCALIBPARS_H
00003 
00004 //--------------------------------------------------------------------------
00005 // File and Version Information:
00006 //      $Id: GenericCalibPars.h 10156 2015-05-23 00:00:36Z dubrovin@SLAC.STANFORD.EDU $
00007 //
00008 // $Revision: 10156 $
00009 //------------------------------------------------------------------------
00010 
00011 //-----------------
00012 // C/C++ Headers --
00013 //-----------------
00014 #include <iostream>
00015 #include <string>
00016 #include <vector>
00017 #include <map>
00018 #include <fstream>  // open, close etc.
00019 
00020 //----------------------
00021 // Base Class Headers --
00022 //----------------------
00023 #include "PSCalib/CalibPars.h"
00024 #include "pdscalibdata/NDArrIOV1.h"      
00025 
00026 //-------------------------------
00027 // Collaborating Class Headers --
00028 //-------------------------------
00029 #include "ndarray/ndarray.h"
00030 #include "pdsdata/xtc/Src.hh"
00031 
00032 //-------------------------------
00033 
00034 namespace PSCalib {
00035 
00036 /// @addtogroup PSCalib PSCalib
00037 
00038 /**
00039  *  @ingroup PSCalib
00040  *
00041  *  @brief GenericCalibPars class loads/holds/provides access to the pnCCD
00042  *  geometry calibration parameters.
00043  *
00044  *  This software was developed for the LCLS project. If you use all or 
00045  *  part of it, please give an appropriate acknowledgment.
00046  *
00047  *  @see CalibPars, CalibParsStore
00048  *
00049  *  @version $Id: GenericCalibPars.h 10156 2015-05-23 00:00:36Z dubrovin@SLAC.STANFORD.EDU $
00050  *
00051  *  @author Mikhail S. Dubrovin
00052  *
00053  *
00054  *
00055  *
00056  *  @anchor interface
00057  *  @par<interface> Interface Description
00058  * 
00059  *  @li  Include and typedef
00060  *  @code
00061  *  #include "PSCalib/GenericCalibPars.h"
00062  *
00063  *  #include "pdscalibdata/CsPadBaseV2.h"
00064  *  #include "pdscalibdata/CsPad2x2BaseV2.h"
00065  *  #include "pdscalibdata/PnccdBaseV1.h"
00066  *  #include "pdscalibdata/PrincetonBaseV1.h"
00067  *  #include "pdscalibdata/AndorBaseV1.h"
00068  *  #include "pdscalibdata/Opal1000BaseV1.h"
00069  *  #include "pdscalibdata/Opal4000BaseV1.h"
00070  *  ...
00071  *
00072  *  typedef PSCalib::GenericCalibPars<pdscalibdata::PnccdBaseV2>  CALIB;
00073  *  typedef PSCalib::GenericCalibPars<pdscalibdata::...BaseV2> ...CALIB;
00074  *  ... 
00075  *  @endcode
00076  *
00077  *  @li Instatiation
00078  *  \n
00079  *  For default constructor:
00080  *  @code
00081  *  CALIB *calibpars = new CALIB();  
00082  *  @endcode
00083  *  \n
00084  *  For regular constructor:
00085  *  @code
00086  *  const std::string calibDir   = "/reg/d/psdm/AMO/amoa1214/calib";
00087  *  const std::string groupName  = "PNCCD::CalibV1";
00088  *  const std::string source     = "Camp.0:pnCCD.1";
00089  *  unsigned long     runNumber  = 10;
00090  *  unsigned          print_bits = 255;
00091  *  Pds::Src src; env.get(source, key, &src);
00092  *  CALIB *calibpars = new CALIB(calibDir, groupName, src, runNumber, print_bits);  
00093  *  @endcode
00094  *  \n
00095  *  or similar for explicit constructor (depricated):
00096  *  @code
00097  *  CALIB *calibpars = new CALIB(calibDir, groupName, source, runNumber, print_bits);  
00098  *  @endcode
00099  *  \n
00100  *  or for the same list of parameters using polymorphism:
00101  *  @code
00102  *  PSCalib::CalibPars *calibpars = new CALIB(calibDir, groupName, source, runNumber, print_bits);  
00103  *  @endcode
00104  *  In this case all virtual methods defined in the base class PSCalib::CalibPars will be accessible through the calibpars pointer.
00105  *  
00106  *
00107  *  @li Printing methods
00108  *  @code
00109  *  calibpars -> printInputPars();
00110  *  calibpars -> printCalibPars();
00111  *  calibpars -> printCalibParsStatus();
00112  *  @endcode
00113  *
00114  *  @li Access methods
00115  *  @code
00116  *  const size_t    ndim = calibpars -> ndim();
00117  *  const size_t    size = calibpars -> size();
00118  *  const unsigned* p_shape = calibpars -> shape();
00119  *  const CalibPars::pedestals_t*    p_pedestals   = calibpars -> pedestals()
00120  *  const CalibPars::common_mode_t*  p_common_mode = calibpars -> common_mode()
00121  *  const CalibPars::pixel_status_t* p_pixel_stat  = calibpars -> pixel_status()
00122  *  const CalibPars::pixel_gain_t*   p_pixel_gain  = calibpars -> pixel_gain()
00123  *  const CalibPars::pixel_mask_t*   p_pixel_mask  = calibpars -> pixel_mask()
00124  *  const CalibPars::pixel_bkgd_t*   p_pixel_bkgd  = calibpars -> pixel_bkgd()
00125  *  const CalibPars::pixel_rms_t*    p_pixel_rms   = calibpars -> pixel_rms()
00126  *  ... etc. for all other access methods
00127  *  @endcode
00128  *
00129  *  @see CalibFileFinder
00130  */
00131 
00132 
00133 
00134 //----------------
00135 template <typename TBASE> // TBASE stands for something like pdscalibdata::PrincetonBaseV1
00136 class GenericCalibPars: public PSCalib::CalibPars, TBASE  {
00137 
00138 public:
00139 
00140 
00141   typedef PSCalib::CalibPars::shape_t shape_t;
00142 
00143 
00144     // const static size_t Ndim = TBASE::Ndim; 
00145 
00146   /**
00147    *  @brief Constructor, which use string& source
00148    *  
00149    *  @param[in] calibDir   Calibration directory for current experiment.
00150    *  @param[in] groupName  Data type and group names.
00151    *  @param[in] source     The name of the data source.
00152    *  @param[in] runNumber  Run number to search the valid file name.
00153    *  @param[in] print_bits =0-print no messages; +1-input parameters, +2-print msges from  PSCalib::CalibFileFinder, +4-use default, +8-missing type
00154    */ 
00155   GenericCalibPars ( const std::string&   calibDir,  //  /reg/d/psdm/AMO/amoa1214/calib
00156                      const std::string&   groupName, //  PNCCD::CalibV1
00157                      const std::string&   source,    //  Camp.0:pnCCD.0
00158                      const unsigned long& runNumber, //  7
00159                      unsigned             print_bits=255 );
00160 
00161   /**
00162    *  @brief Constructor, which use Pds::Src& src
00163    *  
00164    *  @param[in] calibDir   Calibration directory for current experiment.
00165    *  @param[in] groupName  Data type and group names.
00166    *  @param[in] src        The data source object, for example Pds::Src m_src; defined in the env.get(...,&m_src)
00167    *  @param[in] runNumber  Run number to search the valid file name.
00168    *  @param[in] print_bits =0-print no messages; +1-input parameters, +2-print msges from  PSCalib::CalibFileFinder, +4-use default, +8-missing type
00169    */ 
00170   GenericCalibPars ( const std::string&   calibDir,  //  /reg/d/psdm/AMO/amoa1214/calib
00171                      const std::string&   groupName, //  PNCCD::CalibV1
00172                      const Pds::Src&      src,       //  Pds::Src m_src; <- is defined in env.get(...,&m_src)
00173                      const unsigned long& runNumber, //  7
00174                      unsigned             print_bits=255 ) ;  
00175 
00176   virtual ~GenericCalibPars () ;
00177 
00178   /// INTERFACE METHODS
00179 
00180   virtual const size_t   ndim (const CALIB_TYPE& calibtype=PEDESTALS);
00181   virtual const size_t   size (const CALIB_TYPE& calibtype=PEDESTALS);
00182   virtual const shape_t* shape(const CALIB_TYPE& calibtype=PEDESTALS);
00183 
00184   virtual const int      status(const CALIB_TYPE& calibtype);
00185 
00186   virtual const CalibPars::pedestals_t*    pedestals(); 
00187   virtual const CalibPars::pixel_gain_t*   pixel_gain();
00188   virtual const CalibPars::pixel_mask_t*   pixel_mask();
00189   virtual const CalibPars::pixel_bkgd_t*   pixel_bkgd();
00190   virtual const CalibPars::pixel_rms_t*    pixel_rms();
00191   virtual const CalibPars::pixel_status_t* pixel_status();
00192   virtual const CalibPars::common_mode_t*  common_mode();
00193 
00194   virtual void printCalibPars();
00195 
00196   /// ADDITIONAL METHODS
00197 
00198   const size_t   size_of_ndarray();
00199   const shape_t* shape_of_ndarray();
00200 
00201 
00202   void printInputPars();
00203   void printCalibParsStatus();
00204   std::string str_shape();
00205 
00206   // What if 0-pointer?
00207   //const ndarray<const CalibPars::pedestals_t,    TBASE::Ndim> pedestals_ndarr   (){ return m_pedestals    -> get_ndarray(); }
00208   //const ndarray<const CalibPars::pixel_status_t, TBASE::Ndim> pixel_status_ndarr(){ return m_pixel_status -> get_ndarray(); }
00209   //const ndarray<const CalibPars::pixel_gain_t,   TBASE::Ndim> pixel_gain_ndarr  (){ return m_pixel_gain   -> get_ndarray(); }
00210   //const ndarray<const CalibPars::pixel_mask_t,   TBASE::Ndim> pixel_mask_ndarr  (){ return m_pixel_mask   -> get_ndarray(); }
00211   //const ndarray<const CalibPars::pixel_bkgd_t,   TBASE::Ndim> pixel_bkgd_ndarr  (){ return m_pixel_bkgd   -> get_ndarray(); }
00212   //const ndarray<const CalibPars::pixel_rms_t,    TBASE::Ndim> pixel_rms_ndarr   (){ return m_pixel_rms    -> get_ndarray(); }
00213   //const ndarray<const CalibPars::common_mode_t,            1> common_mode_ndarr (){ return m_common_mode  -> get_ndarray(); }
00214 
00215 private:
00216 
00217   /// Initialization, common for all constructors
00218   void init();
00219 
00220   /// Define the path to the calibration file based on input parameters
00221   std::string getCalibFileName(const CALIB_TYPE& calibtype);
00222 
00223   /// Copy constructor is disabled by default
00224   GenericCalibPars ( const GenericCalibPars& ) ;
00225   /// Assignment is disabled by default
00226   //GenericCalibPars operator = ( const GenericCalibPars& ) ;
00227 
00228   /// Request to load all calib pars for printCalibParsStatus() and printCalibPars()
00229   void loadAllCalibPars();
00230 
00231   // Data members for regular constructor 
00232   std::string   m_calibDir;
00233   std::string   m_groupName;
00234   std::string   m_source;
00235   Pds::Src      m_src;
00236   std::string   m_dataType;
00237   unsigned      m_runNumber;
00238   unsigned      m_print_bits;
00239   unsigned      m_prbits_type;
00240   unsigned      m_prbits_cff;
00241   std::string   m_name;
00242   size_t        m_size;
00243   size_t        m_size_cm;
00244 
00245   /// dynamically generated 1-d shape for 1-d common mode array
00246   shape_t* m_shape_cm;
00247 
00248   // Assuming path: /reg/d/psdm/AMO/amoa1214/calib/PNCCD::CalibV1/Camp.0:pnCCD.1/pedestals/1-end.data
00249   std::string   m_fname;
00250 
00251   const CalibPars::pedestals_t* p_peds;
00252 
00253   typedef pdscalibdata::NDArrIOV1<CalibPars::pedestals_t,   TBASE::Ndim> NDAIPEDS;
00254   typedef pdscalibdata::NDArrIOV1<CalibPars::pixel_gain_t,  TBASE::Ndim> NDAIGAIN;
00255   typedef pdscalibdata::NDArrIOV1<CalibPars::pixel_mask_t,  TBASE::Ndim> NDAIMASK;
00256   typedef pdscalibdata::NDArrIOV1<CalibPars::pixel_bkgd_t,  TBASE::Ndim> NDAIBKGD;
00257   typedef pdscalibdata::NDArrIOV1<CalibPars::pixel_rms_t,   TBASE::Ndim> NDAIRMS;
00258   typedef pdscalibdata::NDArrIOV1<CalibPars::pixel_status_t,TBASE::Ndim> NDAISTATUS;
00259   typedef pdscalibdata::NDArrIOV1<CalibPars::common_mode_t,           1> NDAICMOD; 
00260 
00261   NDAIPEDS   *m_pedestals;
00262   NDAIGAIN   *m_pixel_gain;
00263   NDAIMASK   *m_pixel_mask;
00264   NDAIBKGD   *m_pixel_bkgd;
00265   NDAIRMS    *m_pixel_rms;
00266   NDAISTATUS *m_pixel_status; 
00267   NDAICMOD   *m_common_mode;
00268 };
00269 
00270 } // namespace PSCalib
00271 
00272 #endif // PSCALIB_GENERICCALIBPARS_H

Generated on 19 Dec 2016 for PSANAmodules by  doxygen 1.4.7