Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:11:28

0001 #include "Fireworks/Core/interface/FWSimpleProxyBuilderTemplate.h"
0002 // #include "Fireworks/Calo/interface/FWHeatmapProxyBuilderTemplate.h"
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     // constexpr unsigned hSc_module_size_ = 12; // in TC units (144 TC / panel = 36 e-links)
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     // Scintillator
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     // Silicon
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 };