ATLAS Offline Software
Loading...
Searching...
No Matches
PixelGeoDC2::GeoPixelSiCrystal Class Reference

#include <PixelDetectorDC1DC2.h>

Inheritance diagram for PixelGeoDC2::GeoPixelSiCrystal:
Collaboration diagram for PixelGeoDC2::GeoPixelSiCrystal:

Public Member Functions

 GeoPixelSiCrystal (InDetDD::PixelDetectorManager *ddmgr, PixelGeometryManager *mgr, bool isBLayer)
virtual GeoVPhysVol * Build () override
Identifier getID ()

Protected Attributes

PixelGeometryManagerm_gmt_mgr {}
StoredMaterialManagerm_mat_mgr {}
InDetDD::PixelDetectorManagerm_DDmgr {}
const double m_epsilon {}

Private Attributes

Identifier m_id
const InDetDD::SiDetectorDesignm_design {}
bool m_isBLayer {}

Detailed Description

Definition at line 310 of file PixelDetectorDC1DC2.h.

Constructor & Destructor Documentation

◆ GeoPixelSiCrystal()

GeoPixelSiCrystal::GeoPixelSiCrystal ( InDetDD::PixelDetectorManager * ddmgr,
PixelGeometryManager * mgr,
bool isBLayer )

local-x/phi/row ^ big (1) .... normal pitch (columnsPerCircuit-2) ... big

Definition at line 1171 of file PixelDetectorDC1DC2.cxx.

1174 : GeoVPixelFactory (ddmgr, mgr)
1175{
1176 //
1177 //Builds the design for this crystal
1178 m_isBLayer = isBLayer;
1179 //SiDetectorDesign::Axis etaAxis = SiDetectorDesign::zAxis;
1180 //SiDetectorDesign::Axis phiAxis = SiDetectorDesign::yAxis;
1181 //SiDetectorDesign::Axis depthAxis = SiDetectorDesign::xAxis;
1182 double thickness = m_gmt_mgr->PixelBoardThickness();
1183 int circuitsPerEta = m_gmt_mgr->DesignCircuitsPerColumn();
1184 int circuitsPerPhi = m_gmt_mgr->DesignCircuitsPerRow();
1185 int CellRowPerCirc = m_gmt_mgr->DesignCellRowsPerCircuit(isBLayer);
1186 int CellColPerCirc = m_gmt_mgr->DesignCellColumnsPerCircuit(isBLayer);
1187 int rowsPerCircuit = m_gmt_mgr->DesignDiodeRowsPerCircuit(isBLayer);
1188 int columnsPerCircuit = m_gmt_mgr->DesignDiodeColumnsPerCircuit(isBLayer);
1189
1190 // Add the matrix in the same way as from AGDD...
1191 //
1192 //double startRP = -m_gmt_mgr->DesignRPActiveArea()/2.;
1193 //double startZ = -m_gmt_mgr->DesignZActiveArea()/2.;
1194 //double ColSize = m_gmt_mgr->DesignZActiveArea()/m_gmt_mgr->DesignCircuitsPerRow();
1195 double pitchEtaBig = m_gmt_mgr->DesignPitchZ(isBLayer) + m_gmt_mgr->DesignGapZ()/2;
1196 double pitchPhi = m_gmt_mgr->DesignPitchRP(isBLayer);
1197 double pitchEta = m_gmt_mgr->DesignPitchZ(isBLayer);
1198
1199 InDetDD::detail::FENumbering fe_numbering = InDetDD::detail::FENumbering::kRegular; // also mirrored FE numbering for even-phi endcap modules ?
1200
1201 // assumed layout
1202 // circuit :
1204 // | .
1205 // | .
1206 // | .
1207 // +---> local-y / eta/ column
1208 //
1209 // full matrix : matrix of n-circuits n | ... | N/2
1210 // with 2 rows ----------------
1211 // 0 | ... | N/2-1
1212
1213 constexpr auto readoutTechnology = InDetDD::PixelReadoutTechnology::FEI3;
1216 PixelDiodeTree diode_tree = InDetDD::detail::makePixelDiodeTree(m_gmt_mgr,
1217 readoutTechnology,
1218 std::array<int,kNDirections>{circuitsPerPhi,circuitsPerEta}, // [0]=phi/row, [1]=eta/column
1219 std::array<int,kNDirections>{rowsPerCircuit,columnsPerCircuit}, // [0]=phi/row, [1]=eta/column
1220 std::array<std::array<double,kNDirections>,kNPixelLocations>{ // regular/central,longEnd/outer,long/inner
1221 std::array<double,kNDirections>{pitchPhi,pitchEta},
1222 std::array<double,kNDirections>{0.,pitchEtaBig},
1223 std::array<double,kNDirections>{0.,pitchEtaBig}},
1224 fe_numbering);
1225
1226 std::unique_ptr<PixelModuleDesign> p_barrelDesign2 = std::make_unique<PixelModuleDesign>(thickness,
1227 circuitsPerEta,
1228 circuitsPerPhi,
1229 CellColPerCirc,
1230 CellRowPerCirc,
1231 columnsPerCircuit,
1232 rowsPerCircuit,
1233 std::move(diode_tree),
1235 -1, /* readout side */
1236 false, /* 3D */
1237 InDetDD::Undefined, /* detector type */
1238 readoutTechnology);
1239
1240 // Multiple connections (ganged pixels)
1241 if (m_gmt_mgr->NumberOfEmptyRows() > 0) {
1242 int minRow = m_gmt_mgr->EmptyRows(0);
1243 int maxRow = minRow;
1244
1245
1246 for (int iConnect = 0; iConnect < m_gmt_mgr->NumberOfEmptyRows(); iConnect++){
1247 minRow = std::min(minRow, m_gmt_mgr->EmptyRows(iConnect));
1248 minRow = std::min(minRow, m_gmt_mgr->EmptyRowConnections(iConnect));
1249 maxRow = std::max(maxRow, m_gmt_mgr->EmptyRows(iConnect));
1250 maxRow = std::max(minRow, m_gmt_mgr->EmptyRowConnections(iConnect));
1251 }
1252
1253 std::vector <int> connections(maxRow-minRow+1);
1254
1255 // We fill them all with a one to one correspondence first.
1256 for (unsigned int iRow = 0; iRow < connections.size(); iRow++){
1257 connections[iRow] = iRow + minRow;
1258 }
1259
1260 // Now make the connections.
1261 for (int iConnect = 0; iConnect < m_gmt_mgr->NumberOfEmptyRows(); iConnect++){
1262 connections[m_gmt_mgr->EmptyRows(iConnect)-minRow] = m_gmt_mgr->EmptyRowConnections(iConnect);
1263 }
1264
1265 //std::cout << "MinRow = " << minRow << std::endl;
1266 //std::cout << "MaxRow = " << maxRow << std::endl;
1267 //for (unsigned int iRow = 0; iRow < connections.size(); iRow++){
1268 // std::cout << iRow << " " << connections[iRow] << std::endl;
1269 //}
1270
1271 p_barrelDesign2->addMultipleRowConnection(minRow, connections);
1272
1273 } else {
1274 // No empty rows.
1275 std::cout << "GeoPixelSiCrystal: Warning - No ganged pixels" << std::endl;
1276 }
1277
1278
1279 m_design = m_DDmgr->addDesign(std::move(p_barrelDesign2));
1280
1281}
const InDetDD::SiDetectorDesign * m_design
PixelGeometryManager * m_gmt_mgr
GeoVPixelFactory(InDetDD::PixelDetectorManager *ddmgr, PixelGeometryManager *mgr)
InDetDD::PixelDetectorManager * m_DDmgr
PixelDiodeTree makePixelDiodeTree(T_MsgParent *gmt_mgr, InDetDD::PixelReadoutTechnology readoutTechnology, const std::array< int, kNDirections > &circuits, const std::array< int, kNDirections > &dimPerCircuit, const std::array< std::array< double, kNDirections >, kNPixelLocations > &pitch, FENumbering fe_numbering)

Member Function Documentation

◆ Build()

virtual GeoVPhysVol * PixelGeoDC2::GeoPixelSiCrystal::Build ( )
overridevirtual

◆ getID()

Identifier GeoPixelSiCrystal::getID ( )
inline

Definition at line 326 of file PixelDetectorDC1DC2.h.

Member Data Documentation

◆ m_DDmgr

InDetDD::PixelDetectorManager* PixelGeoDC2::GeoVPixelFactory::m_DDmgr {}
protectedinherited

Definition at line 53 of file PixelDetectorDC1DC2.h.

53{};

◆ m_design

const InDetDD::SiDetectorDesign* PixelGeoDC2::GeoPixelSiCrystal::m_design {}
private

Definition at line 319 of file PixelDetectorDC1DC2.h.

319{};

◆ m_epsilon

const double PixelGeoDC2::GeoVPixelFactory::m_epsilon {}
protectedinherited

Definition at line 54 of file PixelDetectorDC1DC2.h.

54{};

◆ m_gmt_mgr

PixelGeometryManager* PixelGeoDC2::GeoVPixelFactory::m_gmt_mgr {}
protectedinherited

Definition at line 51 of file PixelDetectorDC1DC2.h.

51{};

◆ m_id

Identifier PixelGeoDC2::GeoPixelSiCrystal::m_id
private

Definition at line 318 of file PixelDetectorDC1DC2.h.

◆ m_isBLayer

bool PixelGeoDC2::GeoPixelSiCrystal::m_isBLayer {}
private

Definition at line 320 of file PixelDetectorDC1DC2.h.

320{};

◆ m_mat_mgr

StoredMaterialManager* PixelGeoDC2::GeoVPixelFactory::m_mat_mgr {}
protectedinherited

Definition at line 52 of file PixelDetectorDC1DC2.h.

52{};

The documentation for this class was generated from the following files: