39 edm::LogWarning(
"HGCalTriggerGeometry") <<
"WARNING: This HGCal trigger geometry is incomplete.\n" 40 <<
"WARNING: There is no neighbor information.\n";
54 <<
"HGCalTriggerGeometryHexImp1 geometry cannot be initialized with the V9 HGCAL geometry";
63 std::unordered_map<short, short> wafer_to_module_ee;
64 std::unordered_map<short, short> wafer_to_module_fh;
65 std::unordered_map<short, std::map<short, short>> module_to_wafers_ee;
66 std::unordered_map<short, std::map<short, short>> module_to_wafers_fh;
68 if (!l1tModulesMappingStream.is_open())
69 edm::LogError(
"HGCalTriggerGeometry") <<
"Cannot open L1TModulesMapping file\n";
73 for (; l1tModulesMappingStream >> subdet >> wafer >> module;) {
75 wafer_to_module_ee.emplace(wafer, module);
76 auto itr_insert = module_to_wafers_ee.emplace(module, std::map<short, short>());
77 itr_insert.first->second.emplace(wafer, 0);
78 }
else if (subdet == 4) {
79 wafer_to_module_fh.emplace(wafer, module);
80 auto itr_insert = module_to_wafers_fh.emplace(module, std::map<short, short>());
81 itr_insert.first->second.emplace(wafer, 0);
84 <<
"Unsupported subdetector number (" << subdet <<
") in L1TModulesMapping file\n";
86 if (!l1tModulesMappingStream.eof())
87 edm::LogWarning(
"HGCalTriggerGeometry") <<
"Error reading L1TModulesMapping '" << wafer <<
" " << module <<
"' \n";
88 l1tModulesMappingStream.close();
90 std::map<std::pair<short, short>,
short> cells_to_trigger_cells;
91 std::unordered_map<short, short> number_trigger_cells_in_wafers;
93 if (!l1tCellsMappingStream.is_open())
94 edm::LogError(
"HGCalTriggerGeometry") <<
"Cannot open L1TCellsMapping file\n";
97 short triggerCell = 0;
98 for (; l1tCellsMappingStream >> waferType >> cell >> triggerCell;) {
99 cells_to_trigger_cells.emplace(std::make_pair((waferType ? 1 : -1), cell), triggerCell);
100 auto itr_insert = number_trigger_cells_in_wafers.emplace((waferType ? 1 : -1), 0);
101 if (triggerCell + 1 > itr_insert.first->second)
102 itr_insert.first->second = triggerCell + 1;
104 if (!l1tCellsMappingStream.eof())
106 <<
"Error reading L1TCellsMapping'" << waferType <<
" " << cell <<
" " << triggerCell <<
"' \n";
107 l1tCellsMappingStream.close();
112 for (
auto& module_wafers : module_to_wafers_ee) {
114 for (
auto& wafer_offset : module_wafers.second) {
115 wafer_offset.second =
offset;
117 offset += number_trigger_cells_in_wafers.at(wafer_type);
120 for (
auto& module_wafers : module_to_wafers_fh) {
122 for (
auto& wafer_offset : module_wafers.second) {
123 wafer_offset.second =
offset;
125 offset += number_trigger_cells_in_wafers.at(wafer_type);
131 for (
const auto&
id :
eeGeometry()->getValidGeomDetIds()) {
135 short module = wafer_to_module_ee[waferDetId.
wafer()];
136 short triggercell_offset = module_to_wafers_ee.at(module).at(waferDetId.
wafer());
138 for (
int c = 0;
c < nCells;
c++) {
139 short triggerCellId = cells_to_trigger_cells[std::make_pair(waferDetId.
waferType(),
c)];
151 <<
"Trigger cell id requested with a cell field larger than available in HGCalDetId (" 158 triggercell_offset + triggerCellId);
171 for (
const auto&
id :
fhGeometry()->getValidGeomDetIds()) {
175 short module = wafer_to_module_fh[waferDetId.
wafer()];
176 short triggercell_offset = module_to_wafers_fh.at(module).at(waferDetId.
wafer());
178 for (
int c = 0;
c < nCells;
c++) {
179 short triggerCellId = cells_to_trigger_cells[std::make_pair(waferDetId.
waferType(),
c)];
191 <<
"Trigger cell id requested with a cell field larger than available in HGCalDetId (" 198 triggercell_offset + triggerCellId);
220 std::unordered_map<unsigned, list_cells> trigger_cells_to_cells;
222 unsigned cell = cell_triggerCell.first;
223 unsigned triggerCell = cell_triggerCell.second;
224 auto itr_exist = trigger_cells_to_cells.emplace(triggerCell, list_cells());
225 itr_exist.first->second.emplace(cell);
228 for (
const auto& triggerCell_cells : trigger_cells_to_cells) {
229 unsigned triggerCellId = triggerCell_cells.first;
230 list_cells cellIds = triggerCell_cells.second;
233 for (
const auto& cell : cellIds) {
239 GlobalPoint triggerCellPoint(triggerCellVector / cellIds.size());
242 ? triggerCellToModuleItr->second
247 std::make_unique<const HGCalTriggerGeometry::TriggerCell>(
248 triggerCellId, moduleId, triggerCellPoint, list_cells(), cellIds));
255 std::unordered_map<unsigned, list_triggerCells> modules_to_trigger_cells;
257 unsigned triggerCell = triggerCell_module.first;
258 unsigned module = triggerCell_module.second;
259 auto itr_exist = modules_to_trigger_cells.emplace(module, list_triggerCells());
260 itr_exist.first->second.emplace(triggerCell);
263 for (
const auto& module_triggerCell : modules_to_trigger_cells) {
264 unsigned moduleId = module_triggerCell.first;
265 list_triggerCells triggerCellIds = module_triggerCell.second;
266 tc_map_to_cells cellsInTriggerCells;
269 for (
const auto& triggerCell : triggerCellIds) {
270 const auto& cells_in_tc = trigger_cells_to_cells.at(triggerCell);
271 for (
const unsigned cell : cells_in_tc) {
272 cellsInTriggerCells.emplace(triggerCell, cell);
274 moduleVector +=
trigger_cells_.at(triggerCell)->position().basicVector();
276 GlobalPoint modulePoint(moduleVector / triggerCellIds.size());
279 std::make_unique<const HGCalTriggerGeometry::Module>(
280 moduleId, modulePoint, list_triggerCells(), triggerCellIds, cellsInTriggerCells));
std::unordered_set< unsigned > list_type
std::unordered_multimap< unsigned, unsigned > tc_map_type
void initialize(const CaloGeometry *) final
const HGCalGeometry * eeGeometry() const
const HGCalTopology & eeTopology() const
GlobalPoint getPosition(const DetId &id) const
edm::FileInPath l1tCellsMapping_
static const int kHGCalCellMask
int zside() const
get the z-side of the cell (1/-1)
int numberCellsHexagon(int wafer) const
const HGCalGeometry * fhGeometry() const
geom_map cells_to_trigger_cells_
void buildTriggerCellsAndModules()
constexpr int subdetId() const
get the contents of the subdetector field (not cast into any detector's numbering enum) ...
int wafer() const
get the wafer #
void setCaloGeometry(const CaloGeometry *geom)
const HGCalDDDConstants & dddConstants() const
geom_map trigger_cells_to_modules_
edm::FileInPath l1tModulesMapping_
trigger_cell_map trigger_cells_
std::string fullPath() const
int waferType() const
get the wafer type
#define DEFINE_EDM_PLUGIN(factory, type, name)
HGCalTriggerGeometryHexImp1(const edm::ParameterSet &conf)
int waferTypeT(int wafer) const
std::unordered_set< unsigned > list_type
const HGCalTopology & fhTopology() const
int layer() const
get the layer #