59 std::unordered_map<short, short> wafer_to_module_ee;
60 std::unordered_map<short, short> wafer_to_module_fh;
61 std::unordered_map<short, std::map<short,short>> module_to_wafers_ee;
62 std::unordered_map<short, std::map<short,short>> module_to_wafers_fh;
64 if(!l1tModulesMappingStream.is_open())
edm::LogError(
"HGCalTriggerGeometry") <<
"Cannot open L1TModulesMapping file\n";
68 for(; l1tModulesMappingStream>>subdet>>wafer>>
module; )
72 wafer_to_module_ee.emplace(wafer,module);
73 auto itr_insert = module_to_wafers_ee.emplace(module, std::map<short,short>());
74 itr_insert.first->second.emplace(wafer, 0);
78 wafer_to_module_fh.emplace(wafer,module);
79 auto itr_insert = module_to_wafers_fh.emplace(module, std::map<short,short>());
80 itr_insert.first->second.emplace(wafer, 0);
82 else edm::LogWarning(
"HGCalTriggerGeometry") <<
"Unsupported subdetector number ("<<subdet<<
") in L1TModulesMapping file\n";
84 if(!l1tModulesMappingStream.eof())
edm::LogWarning(
"HGCalTriggerGeometry") <<
"Error reading L1TModulesMapping '"<<wafer<<
" "<<module<<
"' \n";
85 l1tModulesMappingStream.close();
87 std::map<std::pair<short,short>,
short> cells_to_trigger_cells;
88 std::unordered_map<short, short> number_trigger_cells_in_wafers;
90 if(!l1tCellsMappingStream.is_open())
edm::LogError(
"HGCalTriggerGeometry") <<
"Cannot open L1TCellsMapping file\n";
93 short triggerCell = 0;
94 for(; l1tCellsMappingStream>>waferType>>cell>>triggerCell; )
96 cells_to_trigger_cells.emplace(std::make_pair((waferType?1:-1),cell), triggerCell);
97 auto itr_insert = number_trigger_cells_in_wafers.emplace((waferType?1:-1), 0);
98 if(triggerCell+1 > itr_insert.first->second) itr_insert.first->second = triggerCell+1;
100 if(!l1tCellsMappingStream.eof())
edm::LogWarning(
"HGCalTriggerGeometry") <<
"Error reading L1TCellsMapping'"<<waferType<<
" "<<cell<<
" "<<triggerCell<<
"' \n";
101 l1tCellsMappingStream.close();
106 for(
auto& module_wafers : module_to_wafers_ee)
109 for(
auto& wafer_offset : module_wafers.second)
111 wafer_offset.second =
offset;
113 offset += number_trigger_cells_in_wafers.at(wafer_type);
116 for(
auto& module_wafers : module_to_wafers_fh)
119 for(
auto& wafer_offset : module_wafers.second)
121 wafer_offset.second =
offset;
123 offset += number_trigger_cells_in_wafers.at(wafer_type);
129 for(
const auto&
id :
eeGeometry()->getValidGeomDetIds())
131 if(
id.rawId()==0)
continue;
133 short module = wafer_to_module_ee[waferDetId.wafer()];
134 short triggercell_offset = module_to_wafers_ee.at(module).at(waferDetId.wafer());
136 for(
int c=0;
c<nCells;
c++)
138 short triggerCellId = cells_to_trigger_cells[std::make_pair(waferDetId.waferType(),
c)];
140 HGCalDetId cellDetId(
ForwardSubdetector(waferDetId.subdetId()), waferDetId.zside(), waferDetId.layer(), waferDetId.waferType(), waferDetId.wafer(),
c);
144 HGCalDetId triggerCellDetId(
ForwardSubdetector(waferDetId.subdetId()), waferDetId.zside(), waferDetId.layer(), waferDetId.waferType(),
module, triggercell_offset + triggerCellId);
152 for(
const auto&
id :
fhGeometry()->getValidGeomDetIds())
154 if(
id.rawId()==0)
continue;
156 short module = wafer_to_module_fh[waferDetId.wafer()];
157 short triggercell_offset = module_to_wafers_fh.at(module).at(waferDetId.wafer());
159 for(
int c=0;
c<nCells;
c++)
161 short triggerCellId = cells_to_trigger_cells[std::make_pair(waferDetId.waferType(),
c)];
163 HGCalDetId cellDetId(
ForwardSubdetector(waferDetId.subdetId()), waferDetId.zside(), waferDetId.layer(), waferDetId.waferType(), waferDetId.wafer(),
c);
166 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";
167 HGCalDetId triggerCellDetId(
ForwardSubdetector(waferDetId.subdetId()), waferDetId.zside(), waferDetId.layer(), waferDetId.waferType(),
module, triggercell_offset + triggerCellId);
const HGCalGeometry * eeGeometry() const
const HGCalTopology & eeTopology() const
edm::FileInPath l1tCellsMapping_
static const int kHGCalCellMask
int numberCellsHexagon(int wafer) const
const HGCalGeometry * fhGeometry() const
geom_map cells_to_trigger_cells_
const HGCalDDDConstants & dddConstants() const
geom_map trigger_cells_to_modules_
edm::FileInPath l1tModulesMapping_
std::string fullPath() const
int waferTypeT(int wafer) const
const HGCalTopology & fhTopology() const