11 #include <top/dbobjects/TOPGeoPMT.h>
23 unsigned TOPGeoPMT::getPixelColumn(
double x)
const
25 if (fabs(x) >= m_sensSizeX / 2)
return 0;
26 return m_numColumns - int((x + m_sensSizeX / 2) / m_sensSizeX * m_numColumns);
30 unsigned TOPGeoPMT::getPixelRow(
double y)
const
32 if (fabs(y) >= m_sensSizeY / 2)
return 0;
33 return int((y + m_sensSizeY / 2) / m_sensSizeY * m_numRows) + 1;
36 unsigned TOPGeoPMT::getPixelID(
double x,
double y)
const
38 auto col = getPixelColumn(x);
39 if (col == 0)
return 0;
40 auto row = getPixelRow(y);
41 if (row == 0)
return 0;
43 return (row - 1) * m_numColumns + col;
46 bool TOPGeoPMT::isConsistent()
const
48 if (m_sizeX <= 0)
return false;
49 if (m_sizeY <= 0)
return false;
50 if (m_sizeZ <= 0)
return false;
51 if (m_wallThickness <= 0)
return false;
53 if (m_sensSizeX <= 0)
return false;
54 if (m_sensSizeY <= 0)
return false;
55 if (m_sensThickness <= 0)
return false;
56 if (m_numColumns == 0)
return false;
57 if (m_numRows == 0)
return false;
58 if (m_sensMaterial.empty())
return false;
60 if (m_winThickness <= 0)
return false;
61 if (m_winMaterial.empty())
return false;
63 if (m_botThickness <= 0)
return false;
64 if (m_botMaterial.empty())
return false;
66 if (m_reflEdgeWidth <= 0)
return false;
67 if (m_reflEdgeThickness <= 0)
return false;
73 void TOPGeoPMT::print(
const std::string& title)
const
75 TOPGeoBase::print(title);
77 cout <<
" outer dimensions: " << getSizeX() <<
" X " << getSizeY()
78 <<
" X " << getSizeZ() <<
" " << s_unitName << endl;
79 cout <<
" wall thickness: " << getWallThickness() <<
" " << s_unitName << endl;
80 cout <<
" window thickness: " << getWinThickness() <<
" " << s_unitName << endl;
81 cout <<
" bottom thickness: " << getBotThickness() <<
" " << s_unitName << endl;
82 cout <<
" sensitive area: " << getSensSizeX() <<
" X " << getSensSizeY()
84 cout <<
", thickness: " << getSensThickness() <<
" " << s_unitName << endl;
85 cout <<
" number of pixels: " << getNumColumns() <<
" X " << getNumRows() << endl;
86 cout <<
" casing material: " << getWallMaterial() << endl;
87 cout <<
" inner material: " << getFillMaterial() << endl;
88 cout <<
" window material: " << getWinMaterial() << endl;
89 cout <<
" bottom material: " << getBotMaterial() << endl;
90 cout <<
" sensitive material: " << getSensMaterial() << endl;
91 cout <<
" reflective edge: " << endl;
92 cout <<
" - width: " << getReflEdgeWidth() <<
" " << s_unitName;
93 cout <<
", thickness: " << getReflEdgeThickness() <<
" " << s_unitName << endl;
95 printSurface(m_reflEdgeSurface);