00001 #ifndef CSPADPIXCOORDS_PIXCOORDSCSPAD_H
00002 #define CSPADPIXCOORDS_PIXCOORDSCSPAD_H
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include "CSPadPixCoords/PixCoordsQuad.h"
00021 #include "PSCalib/CSPadCalibPars.h"
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035 namespace CSPadPixCoords {
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058 class PixCoordsCSPad {
00059 public:
00060
00061 enum { NQuadsInCSPad = 4 };
00062 enum { N2x1InQuad = 8 };
00063 enum { NCols2x1 = Psana::CsPad::ColumnsPerASIC };
00064 enum { NRows2x1 = Psana::CsPad::MaxRowsPerASIC * 2 };
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074 PixCoordsCSPad ( PixCoordsQuad *pix_coords_quad, PSCalib::CSPadCalibPars *cspad_calibpar, bool tiltIsApplied = true ) ;
00075
00076
00077 virtual ~PixCoordsCSPad () ;
00078
00079 void fillAllQuadCoordsInCSPad() ;
00080 void fillOneQuadCoordsInCSPad(uint32_t quad) ;
00081 void fillOneQuadTiltedCoordsInCSPad(uint32_t quad) ;
00082 void setConstXYMinMax() ;
00083 void fillArrsOfCSPadPixCoords() ;
00084
00085
00086 void fillArrsOfCSPadPixCoordsFromCenterGlobal() ;
00087
00088
00089
00090
00091
00092 double getPixCoor_um (CSPadPixCoords::PixCoords2x1::COORDINATE icoor, unsigned quad, unsigned sect, unsigned row, unsigned col) ;
00093 double getPixCoor_pix(CSPadPixCoords::PixCoords2x1::COORDINATE icoor, unsigned quad, unsigned sect, unsigned row, unsigned col) ;
00094 double getPixCoor_int(CSPadPixCoords::PixCoords2x1::COORDINATE icoor, unsigned quad, unsigned sect, unsigned row, unsigned col) ;
00095
00096
00097
00098
00099 double* getPixCoorArrX_um (){return &m_coor_x [0][0][0][0];}
00100 double* getPixCoorArrY_um (){return &m_coor_y [0][0][0][0];}
00101 double* getPixCoorArrX_pix(){return &m_coor_x_pix[0][0][0][0];}
00102 double* getPixCoorArrY_pix(){return &m_coor_y_pix[0][0][0][0];}
00103 uint32_t* getPixCoorArrX_int(){return &m_coor_x_int[0][0][0][0];}
00104 uint32_t* getPixCoorArrY_int(){return &m_coor_y_int[0][0][0][0];}
00105
00106 private:
00107
00108
00109 CSPadPixCoords::PixCoords2x1::COORDINATE XCOOR;
00110 CSPadPixCoords::PixCoords2x1::COORDINATE YCOOR;
00111 CSPadPixCoords::PixCoords2x1::COORDINATE ZCOOR;
00112
00113 double m_degToRad;
00114
00115 PixCoordsQuad *m_pix_coords_quad;
00116 PSCalib::CSPadCalibPars *m_cspad_calibpar;
00117 bool m_tiltIsApplied;
00118
00119 double m_coor_x [NQuadsInCSPad][N2x1InQuad][NCols2x1][NRows2x1];
00120 double m_coor_y [NQuadsInCSPad][N2x1InQuad][NCols2x1][NRows2x1];
00121 double m_coor_x_pix[NQuadsInCSPad][N2x1InQuad][NCols2x1][NRows2x1];
00122 double m_coor_y_pix[NQuadsInCSPad][N2x1InQuad][NCols2x1][NRows2x1];
00123 uint32_t m_coor_x_int[NQuadsInCSPad][N2x1InQuad][NCols2x1][NRows2x1];
00124 uint32_t m_coor_y_int[NQuadsInCSPad][N2x1InQuad][NCols2x1][NRows2x1];
00125
00126 double m_xmin_quad [NQuadsInCSPad];
00127 double m_ymin_quad [NQuadsInCSPad];
00128
00129 double m_coor_x_min;
00130 double m_coor_y_min;
00131 double m_coor_x_max;
00132 double m_coor_y_max;
00133
00134
00135 PixCoordsCSPad ( const PixCoordsCSPad& ) ;
00136
00137 PixCoordsCSPad& operator = ( const PixCoordsCSPad& ) ;
00138
00139 enum { NX_CSPAD = 1750,
00140 NY_CSPAD = 1750 };
00141 };
00142
00143 }
00144
00145 #endif // CSPADPIXCOORDS_PIXCOORDSCSPAD_H