58 std::unordered_map<short, short> wafer_to_module_ee;
59 std::unordered_map<short, short> wafer_to_module_fh;
60 std::unordered_map<short, std::map<short,short>> module_to_wafers_ee;
61 std::unordered_map<short, std::map<short,short>> module_to_wafers_fh;
63 if(!l1tModulesMappingStream.is_open())
edm::LogError(
"HGCalTriggerGeometry") <<
"Cannot open L1TModulesMapping file\n";
67 for(; l1tModulesMappingStream>>subdet>>wafer>>
module; )
71 wafer_to_module_ee.emplace(wafer,module);
72 auto itr_insert = module_to_wafers_ee.emplace(module, std::map<short,short>());
73 itr_insert.first->second.emplace(wafer, 0);
77 wafer_to_module_fh.emplace(wafer,module);
78 auto itr_insert = module_to_wafers_fh.emplace(module, std::map<short,short>());
79 itr_insert.first->second.emplace(wafer, 0);
81 else edm::LogWarning(
"HGCalTriggerGeometry") <<
"Unsupported subdetector number ("<<subdet<<
") in L1TModulesMapping file\n";
83 if(!l1tModulesMappingStream.eof())
edm::LogWarning(
"HGCalTriggerGeometry") <<
"Error reading L1TModulesMapping '"<<wafer<<
" "<<module<<
"' \n";
84 l1tModulesMappingStream.close();
86 std::map<std::pair<short,short>,
short> cells_to_trigger_cells;
87 std::unordered_map<short, short> number_trigger_cells_in_wafers;
89 if(!l1tCellsMappingStream.is_open())
edm::LogError(
"HGCalTriggerGeometry") <<
"Cannot open L1TCellsMapping file\n";
92 short triggerCell = 0;
93 for(; l1tCellsMappingStream>>waferType>>cell>>triggerCell; )
95 cells_to_trigger_cells.emplace(std::make_pair((waferType?1:-1),cell), triggerCell);
96 auto itr_insert = number_trigger_cells_in_wafers.emplace((waferType?1:-1), 0);
97 if(triggerCell+1 > itr_insert.first->second) itr_insert.first->second = triggerCell+1;
99 if(!l1tCellsMappingStream.eof())
edm::LogWarning(
"HGCalTriggerGeometry") <<
"Error reading L1TCellsMapping'"<<waferType<<
" "<<cell<<
" "<<triggerCell<<
"' \n";
100 l1tCellsMappingStream.close();
105 for(
auto& module_wafers : module_to_wafers_ee)
108 for(
auto& wafer_offset : module_wafers.second)
110 wafer_offset.second =
offset;
111 int wafer_type = (esInfo.topo_ee->dddConstants().waferTypeT(wafer_offset.first)==1?1:-1);
112 offset += number_trigger_cells_in_wafers.at(wafer_type);
115 for(
auto& module_wafers : module_to_wafers_fh)
118 for(
auto& wafer_offset : module_wafers.second)
120 wafer_offset.second =
offset;
121 int wafer_type = (esInfo.topo_fh->dddConstants().waferTypeT(wafer_offset.first)==1?1:-1);
122 offset += number_trigger_cells_in_wafers.at(wafer_type);
128 for(
const auto&
id : esInfo.geom_ee->getValidGeomDetIds())
130 if(
id.rawId()==0)
continue;
132 short module = wafer_to_module_ee[waferDetId.wafer()];
133 short triggercell_offset = module_to_wafers_ee.at(module).at(waferDetId.wafer());
134 int nCells = esInfo.topo_ee->dddConstants().numberCellsHexagon(waferDetId.wafer());
135 for(
int c=0;
c<nCells;
c++)
137 short triggerCellId = cells_to_trigger_cells[std::make_pair(waferDetId.waferType(),
c)];
139 HGCalDetId cellDetId(
ForwardSubdetector(waferDetId.subdetId()), waferDetId.zside(), waferDetId.layer(), waferDetId.waferType(), waferDetId.wafer(),
c);
143 HGCalDetId triggerCellDetId(
ForwardSubdetector(waferDetId.subdetId()), waferDetId.zside(), waferDetId.layer(), waferDetId.waferType(),
module, triggercell_offset + triggerCellId);
151 for(
const auto&
id : esInfo.geom_fh->getValidGeomDetIds())
153 if(
id.rawId()==0)
continue;
155 short module = wafer_to_module_fh[waferDetId.wafer()];
156 short triggercell_offset = module_to_wafers_fh.at(module).at(waferDetId.wafer());
157 int nCells = esInfo.topo_fh->dddConstants().numberCellsHexagon(waferDetId.wafer());
158 for(
int c=0;
c<nCells;
c++)
160 short triggerCellId = cells_to_trigger_cells[std::make_pair(waferDetId.waferType(),
c)];
162 HGCalDetId cellDetId(
ForwardSubdetector(waferDetId.subdetId()), waferDetId.zside(), waferDetId.layer(), waferDetId.waferType(), waferDetId.wafer(),
c);
165 if(triggercell_offset+triggerCellId >= HGCalDetId::kHGCalCellMask)
edm::LogError(
"HGCalTriggerGeometry") <<
"Trigger cell id requested with a cell field larger than available in HGCalDetId (" << triggercell_offset+triggerCellId <<
" >= " << HGCalDetId::kHGCalCellMask <<
")\n";
166 HGCalDetId triggerCellDetId(
ForwardSubdetector(waferDetId.subdetId()), waferDetId.zside(), waferDetId.layer(), waferDetId.waferType(),
module, triggercell_offset + triggerCellId);
edm::FileInPath l1tCellsMapping_
static const int kHGCalCellMask
geom_map cells_to_trigger_cells_
geom_map trigger_cells_to_modules_
edm::FileInPath l1tModulesMapping_
std::string fullPath() const