File indexing completed on 2024-04-06 12:11:28
0001 #include "Fireworks/Core/interface/FWSimpleProxyBuilderTemplate.h"
0002
0003 #include "Fireworks/Core/interface/FWEventItem.h"
0004 #include "Fireworks/Core/interface/FWProxyBuilderConfiguration.h"
0005
0006 #include "DataFormats/ForwardDetId/interface/HGCScintillatorDetId.h"
0007 #include "DataFormats/ForwardDetId/interface/HGCSiliconDetId.h"
0008 #include "DataFormats/ForwardDetId/interface/HGCalTriggerDetId.h"
0009 #include "DataFormats/HcalDetId/interface/HcalDetId.h"
0010
0011 template <typename T>
0012 class FWL1THGCalProxyTemplate : public FWSimpleProxyBuilderTemplate<T> {
0013 protected:
0014 void setItem(const FWEventItem *iItem) override {
0015 FWProxyBuilderBase::setItem(iItem);
0016 if (iItem) {
0017 iItem->getConfig()->keepEntries(true);
0018 iItem->getConfig()->assertParam("Layer", 0L, 0L, 52L);
0019 iItem->getConfig()->assertParam("EnergyCutOff", 0.5, 0.2, 5.0);
0020 iItem->getConfig()->assertParam("Heatmap", true);
0021 iItem->getConfig()->assertParam("Z+", true);
0022 iItem->getConfig()->assertParam("Z-", true);
0023 }
0024 }
0025
0026 std::unordered_set<unsigned> getCellsFromTriggerCell(const unsigned trigger_cell_id) const {
0027 constexpr unsigned hSc_triggercell_size_ = 2;
0028
0029
0030 DetId trigger_cell_det_id(trigger_cell_id);
0031 unsigned det = trigger_cell_det_id.det();
0032
0033 std::unordered_set<unsigned> cell_det_ids;
0034
0035
0036 if (det == DetId::HGCalHSc) {
0037 HGCScintillatorDetId trigger_cell_sc_id(trigger_cell_id);
0038 int ieta0 = (trigger_cell_sc_id.ietaAbs() - 1) * hSc_triggercell_size_ + 1;
0039 int iphi0 = (trigger_cell_sc_id.iphi() - 1) * hSc_triggercell_size_ + 1;
0040 for (int ietaAbs = ieta0; ietaAbs < ieta0 + (int)hSc_triggercell_size_; ietaAbs++) {
0041 int ieta = ietaAbs * trigger_cell_sc_id.zside();
0042 for (int iphi = iphi0; iphi < iphi0 + (int)hSc_triggercell_size_; iphi++) {
0043 unsigned cell_id = HGCScintillatorDetId(trigger_cell_sc_id.type(), trigger_cell_sc_id.layer(), ieta, iphi);
0044 #if 0
0045 if (validCellId(DetId::HGCalHSc, cell_id))
0046 #endif
0047 cell_det_ids.emplace(cell_id);
0048 }
0049 }
0050 }
0051
0052 else {
0053 HGCalTriggerDetId trigger_cell_trig_id(trigger_cell_id);
0054 unsigned subdet = trigger_cell_trig_id.subdet();
0055 if (subdet == HGCalTriggerSubdetector::HGCalEETrigger || subdet == HGCalTriggerSubdetector::HGCalHSiTrigger) {
0056 DetId::Detector cell_det =
0057 (subdet == HGCalTriggerSubdetector::HGCalEETrigger ? DetId::HGCalEE : DetId::HGCalHSi);
0058 int layer = trigger_cell_trig_id.layer();
0059 int zside = trigger_cell_trig_id.zside();
0060 int type = trigger_cell_trig_id.type();
0061 int waferu = trigger_cell_trig_id.waferU();
0062 int waferv = trigger_cell_trig_id.waferV();
0063 std::vector<int> cellus = trigger_cell_trig_id.cellU();
0064 std::vector<int> cellvs = trigger_cell_trig_id.cellV();
0065 for (unsigned ic = 0; ic < cellus.size(); ic++) {
0066 HGCSiliconDetId cell_det_id(cell_det, zside, type, layer, waferu, waferv, cellus[ic], cellvs[ic]);
0067 cell_det_ids.emplace(cell_det_id.rawId());
0068 }
0069 }
0070 }
0071 return cell_det_ids;
0072 }
0073 };