50 :
GeoVPixelFactory (ddmgr, mgr, sqliteReader, std::move(mapFPV), std::move(mapAX))
51{
52
53
56
57
61
69
74
75 auto readoutTechnology = getPixelReadoutTechnology(rowsPerCircuit,columnsPerCircuit );
76 auto circuitsPerPhi_corr = circuitsPerPhi;
77 auto rowsPerCircuit_corr = rowsPerCircuit;
79
80
81
82 circuitsPerPhi_corr*=2;
83 rowsPerCircuit_corr/=2;
84 }
85
86
87
89 for (
unsigned int design_i=0; design_i<
m_nPhiDesigns ; ++design_i) {
90
91
92
94
98 readoutTechnology,
99 std::array<int,kNDirections>{circuitsPerPhi_corr,circuitsPerEta},
100 std::array<int,kNDirections>{rowsPerCircuit_corr,columnsPerCircuit},
102 std::array<double,kNDirections>{pitchPhi,pitchEta},
103 std::array<double,kNDirections>{0.,pitchEtaLongEnd},
104 std::array<double,kNDirections>{0.,pitchEtaLong}},
105 fe_numbering);
106
107 std::unique_ptr<PixelModuleDesign> p_barrelDesign2 = std::make_unique<PixelModuleDesign>(thickness,
108 circuitsPerPhi,
109 circuitsPerEta,
110 cellColPerCirc,
111 cellRowPerCirc,
112 columnsPerCircuit,
113 rowsPerCircuit,
114 std::move(diode_tree),
116 readoutSide,
117 false,
119 readoutTechnology);
120
121
122 if (
m_gmt_mgr->NumberOfEmptyRows() > 0) {
124 int maxRow = minRow;
125 for (
int iConnect = 0; iConnect <
m_gmt_mgr->NumberOfEmptyRows(); iConnect++){
126 minRow = std::min(minRow,
m_gmt_mgr->EmptyRows(iConnect));
127 minRow = std::min(minRow,
m_gmt_mgr->EmptyRowConnections(iConnect));
128 maxRow = std::max(maxRow,
m_gmt_mgr->EmptyRows(iConnect));
129 maxRow = std::max(maxRow,
m_gmt_mgr->EmptyRowConnections(iConnect));
130 }
131
132 std::vector <int> connections(maxRow-minRow+1);
133
134
135 for (unsigned int iRow = 0; iRow < connections.size(); iRow++){
136 connections[iRow] = iRow + minRow;
137 }
138
139
140 for (
int iConnect = 0; iConnect <
m_gmt_mgr->NumberOfEmptyRows(); iConnect++){
141 connections[
m_gmt_mgr->EmptyRows(iConnect)-minRow] =
m_gmt_mgr->EmptyRowConnections(iConnect);
142 }
143
144 p_barrelDesign2->addMultipleRowConnection(minRow, connections);
145
146 } else {
147
149 m_gmt_mgr->msg(MSG::WARNING) <<
"GeoPixelSiCrystal: No ganged pixels" <<
endmsg;
150 } else {
152 }
153 }
154
155
156
161 m_gmt_mgr->msg(MSG::WARNING) <<
"GeoPixelSiCrystal: Active area not consistent with sensor size. Sensor: "
162 <<
width/Gaudi::Units::mm <<
" x " <<
length/Gaudi::Units::mm <<
", Active: "
165 } else {
167 << "GeoPixelSiCrystal: Sensor: "
168 <<
width/Gaudi::Units::mm <<
" x " <<
length/Gaudi::Units::mm <<
", Active: "
171 }
172
173
174 m_design.at(design_i) =
m_DDmgr->addDesign(std::move(p_barrelDesign2));
175 }
176
177
178}
unsigned int m_nPhiDesigns
std::array< const InDetDD::SiDetectorDesign *, 2 > m_design
PixelGeometryManager * m_gmt_mgr
InDetDD::PixelDetectorManager * m_DDmgr
GeoVPixelFactory(InDetDD::PixelDetectorManager *ddmgr, PixelGeometryManager *mgr, GeoModelIO::ReadGeoModel *sqliteReader, std::shared_ptr< std::map< std::string, GeoFullPhysVol * > > mapFPV, std::shared_ptr< std::map< std::string, GeoAlignableTransform * > > mapAX)
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)