CSPadPixCoords/src/PixCoordsCSPad2x2V2.cpp

Go to the documentation of this file.
00001 //--------------------------------------------------------------------------
00002 // File and Version Information:
00003 //      $Id$
00004 //
00005 // Description:
00006 //      Class PixCoordsCSPad2x2V2...
00007 //
00008 // Author List:
00009 //      Mikhail S. Dubrovin
00010 //
00011 //------------------------------------------------------------------------
00012 
00013 //-----------------------
00014 // This Class's Header --
00015 //-----------------------
00016 #include "CSPadPixCoords/PixCoordsCSPad2x2V2.h"
00017 //#include "MsgLogger/MsgLogger.h"
00018 
00019 //-----------------
00020 // C/C++ Headers --
00021 //-----------------
00022 #include <math.h>
00023 #include <sstream>
00024 
00025 //-------------------------------
00026 // Collaborating Class Headers --
00027 //-------------------------------
00028 #include <boost/math/constants/constants.hpp>
00029 
00030 //-----------------------------------------------------------------------
00031 // Local Macros, Typedefs, Structures, Unions and Forward Declarations --
00032 //-----------------------------------------------------------------------
00033 
00034 using namespace std;
00035 
00036 namespace CSPadPixCoords {
00037 
00038 const char logger[] = "CSPadPixCoords";
00039 
00040 //----------------
00041 // Constructors --
00042 //----------------
00043 
00044 /*
00045 PixCoordsCSPad2x2V2::PixCoordsCSPad2x2V2 ()
00046     : PixCoords2x1V2 ()
00047     , m_tiltIsApplied (false)
00048 {
00049   // Use default calibration parameters
00050   m_cspad2x2_calibpars = new PSCalib::CSPad2x2CalibPars(); 
00051   fillPixelCoordinateArrays();
00052   resetXYOriginAndMinMax();
00053 }
00054 */
00055 
00056 //--------------
00057 
00058 PixCoordsCSPad2x2V2::PixCoordsCSPad2x2V2 (PSCalib::CSPad2x2CalibPars *cspad2x2_calibpars, bool tiltIsApplied, bool use_wide_pix_center)
00059     : PixCoords2x1V2(use_wide_pix_center)
00060     , m_cspad2x2_calibpars(cspad2x2_calibpars)
00061     , m_tiltIsApplied (tiltIsApplied)
00062 {
00063   fillPixelCoordinateArrays();
00064   resetXYOriginAndMinMax();
00065   //printXYLimits();
00066 }
00067 
00068 //--------------
00069 
00070 void PixCoordsCSPad2x2V2::fillPixelCoordinateArrays()
00071 {
00072     m_coor_x_min = 1e5;
00073     m_coor_x_max = 0;
00074     m_coor_y_min = 1e5;
00075     m_coor_y_max = 0;
00076 
00077     double rotation_2x1[] = {180,180}; // ...Just because of conventions in this code...
00078 
00079     double xcenter, ycenter, zcenter, rotation, tilt;
00080 
00081     for (unsigned sect=0; sect < N2X1_IN_DET; ++sect)
00082       {
00083         xcenter  = m_cspad2x2_calibpars -> getCenterX (sect) * PIX_SIZE_UM;
00084         ycenter  = m_cspad2x2_calibpars -> getCenterY (sect) * PIX_SIZE_UM;
00085         zcenter  = m_cspad2x2_calibpars -> getCenterZ (sect);
00086         tilt     = m_cspad2x2_calibpars -> getTilt    (sect);
00087 
00088         rotation = rotation_2x1[sect];
00089         if (m_tiltIsApplied) rotation += tilt;
00090 
00091         fillOneSectionInDet (sect, xcenter, ycenter, zcenter, rotation);
00092       }
00093 }
00094 
00095 //--------------
00096 
00097 void PixCoordsCSPad2x2V2::fillOneSectionInDet(uint32_t sect, double xcenter, double ycenter, double zcenter, double rotation)
00098 {
00099     double* x_map_arr = get_coord_map_2x1 (AXIS_X, UM, rotation); 
00100     double* y_map_arr = get_coord_map_2x1 (AXIS_Y, UM, rotation); 
00101 
00102     for (unsigned row=0; row<ROWS2X1; row++) {
00103     for (unsigned col=0; col<COLS2X1; col++) {
00104 
00105        unsigned ind = row*COLS2X1 + col;
00106 
00107        double coor_x = xcenter + x_map_arr[ind];
00108        double coor_y = ycenter + y_map_arr[ind]; 
00109 
00110        m_coor_x[row][col][sect] = coor_x;
00111        m_coor_y[row][col][sect] = coor_y;
00112 
00113        if ( coor_x < m_coor_x_min ) m_coor_x_min = coor_x;
00114        if ( coor_x > m_coor_x_max ) m_coor_x_max = coor_x;
00115        if ( coor_y < m_coor_y_min ) m_coor_y_min = coor_y;
00116        if ( coor_y > m_coor_y_max ) m_coor_y_max = coor_y;
00117     }
00118     }
00119 }
00120 
00121 //--------------
00122 
00123 void PixCoordsCSPad2x2V2::resetXYOriginAndMinMax()
00124 {
00125     for (unsigned row=0; row<ROWS2X1;  row++) {
00126     for (unsigned col=0; col<COLS2X1;  col++) {
00127     for (unsigned sec=0; sec<N2X1_IN_DET; sec++) {
00128 
00129        m_coor_x[row][col][sec] -= m_coor_x_min;
00130        m_coor_y[row][col][sec] -= m_coor_y_min;
00131     }
00132     }
00133     }
00134 
00135     m_coor_x_max -= m_coor_x_min;
00136     m_coor_y_max -= m_coor_y_min;
00137     m_coor_x_min = 0;
00138     m_coor_y_min = 0;
00139 }
00140 
00141 //--------------
00142 
00143 double PixCoordsCSPad2x2V2::getPixCoor_um (AXIS axis, unsigned sect, unsigned row, unsigned col)
00144 {
00145   //cout << "      get sect:" << sect << "  r:" << row << "  c:" << col << "  axis:" << axis << "\n"; 
00146   switch (axis)
00147     {
00148     case AXIS_X : return m_coor_x[row][col][sect];
00149     case AXIS_Y : return m_coor_y[row][col][sect];
00150     case AXIS_Z : return 0;
00151     default: return 0;
00152     }
00153 }
00154 
00155 //--------------
00156 
00157 double PixCoordsCSPad2x2V2::getPixCoor_pix (AXIS axis, unsigned sect, unsigned row, unsigned col)
00158 {
00159     return getPixCoor_um (axis, sect, row, col) * UM_TO_PIX;
00160 }
00161 
00162 //--------------
00163 
00164 void PixCoordsCSPad2x2V2::printXYLimits()
00165 {
00166   std::stringstream ss; ss << "  Xmin: " << m_coor_x_min 
00167                            << "  Xmax: " << m_coor_x_max
00168                            << "  Ymin: " << m_coor_y_min
00169                            << "  Ymax: " << m_coor_y_max;
00170 
00171   //MsgLog(logger, info, ss.str());
00172   cout << "PixCoordsCSPad2x2V2::printXYLimits():" << ss.str() << "\n";
00173 }
00174 
00175 //--------------
00176 
00177 void PixCoordsCSPad2x2V2::printConstants()
00178 {
00179   cout << "PixCoordsCSPad2x2V2::printConstants():"    
00180        << "\n  ROWS2X1       = " << ROWS2X1    
00181        << "\n  COLS2X1       = " << COLS2X1     
00182        << "\n  COLS2X1HALF   = " << COLS2X1HALF 
00183        << "\n  SIZE2X1       = " << SIZE2X1     
00184        << "\n  PIX_SIZE_COLS = " << PIX_SIZE_COLS 
00185        << "\n  PIX_SIZE_ROWS = " << PIX_SIZE_ROWS 
00186        << "\n  PIX_SIZE_WIDE = " << PIX_SIZE_WIDE 
00187        << "\n  PIX_SIZE_UM   = " << PIX_SIZE_UM   
00188        << "\n  UM_TO_PIX     = " << UM_TO_PIX     
00189        << "\n";
00190 }
00191 
00192 //--------------
00193 
00194 void PixCoordsCSPad2x2V2::printCoordArray(unsigned r1, unsigned r2, unsigned c1, unsigned c2)
00195 {
00196     cout << "PixCoordsCSPad2x2V2::printCoordArray():"
00197          << "\nsizeof(m_coor_x) / sizeof(double)=" << sizeof(m_coor_x) / sizeof(double)
00198          << "\nsizeof(m_coor_y) / sizeof(double)=" << sizeof(m_coor_y) / sizeof(double) 
00199          << "\n";
00200 
00201     for (unsigned row=r1; row<r2;  row++) {
00202       cout << "\nrow=" << row << ": ";
00203     for (unsigned col=c1; col<c2;  col++) {
00204     for (unsigned sec=0; sec<N2X1_IN_DET; sec++) {
00205       cout << " (" << m_coor_x[row][col][sec] << ", " << m_coor_y[row][col][sec] << ") ";
00206     }
00207     }
00208     }
00209     cout <<"\n";  
00210 }
00211 
00212 
00213 //--------------
00214 // Destructor --
00215 //--------------
00216 
00217 PixCoordsCSPad2x2V2::~PixCoordsCSPad2x2V2 ()
00218 {
00219 }
00220 
00221 } // namespace CSPadPixCoords

Generated on 19 Dec 2016 for PSANAmodules by  doxygen 1.4.7