diff --git a/L1Trigger/L1THGCal/data/panel_mapping_tdr.txt b/L1Trigger/L1THGCal/data/panel_mapping_tdr.txt new file mode 100644 index 0000000000000..5ddcff6c81229 --- /dev/null +++ b/L1Trigger/L1THGCal/data/panel_mapping_tdr.txt @@ -0,0 +1,468 @@ +7 33 +8 11 +9 1 +10 171 +11 161 +12 139 +13 129 +14 107 +15 97 +16 75 +17 65 +18 43 +19 33 +20 11 +21 4 +22 1 +23 171 +24 164 +25 161 +26 139 +27 132 +28 129 +29 107 +30 100 +31 97 +32 75 +33 68 +34 65 +35 43 +36 36 +37 33 +38 11 +39 4 +40 4 +41 1 +42 171 +43 164 +44 164 +45 161 +46 139 +47 132 +48 132 +49 129 +50 107 +51 100 +52 100 +53 97 +54 75 +55 68 +56 68 +57 65 +58 43 +59 36 +60 36 +61 34 +62 12 +63 14 +64 7 +65 5 +66 2 +67 172 +68 174 +69 167 +70 165 +71 162 +72 140 +73 142 +74 135 +75 133 +76 130 +77 108 +78 110 +79 103 +80 101 +81 98 +82 76 +83 78 +84 71 +85 69 +86 66 +87 44 +88 46 +89 39 +90 37 +91 34 +92 12 +93 14 +94 9 +95 7 +96 5 +97 2 +98 172 +99 174 +100 169 +101 167 +102 165 +103 162 +104 140 +105 142 +106 137 +107 135 +108 133 +109 130 +110 108 +111 110 +112 105 +113 103 +114 101 +115 98 +116 76 +117 78 +118 73 +119 71 +120 69 +121 66 +122 44 +123 46 +124 41 +125 39 +126 37 +127 34 +128 12 +129 14 +130 16 +131 9 +132 7 +133 5 +134 2 +135 172 +136 174 +137 176 +138 169 +139 167 +140 165 +141 162 +142 140 +143 142 +144 144 +145 137 +146 135 +147 133 +148 130 +149 108 +150 110 +151 112 +152 105 +153 103 +154 101 +155 98 +156 76 +157 78 +158 80 +159 73 +160 71 +161 69 +162 66 +163 44 +164 46 +165 48 +166 41 +167 39 +168 37 +169 35 +170 13 +171 15 +172 16 +173 17 +174 9 +175 8 +176 6 +177 3 +178 173 +179 175 +180 176 +181 177 +182 169 +183 168 +184 166 +185 163 +186 141 +187 143 +188 144 +189 145 +190 137 +191 136 +192 134 +193 131 +194 109 +195 111 +196 112 +197 113 +198 105 +199 104 +200 102 +201 99 +202 77 +203 79 +204 80 +205 81 +206 73 +207 72 +208 70 +209 67 +210 45 +211 47 +212 48 +213 49 +214 41 +215 40 +216 38 +217 35 +218 13 +219 15 +220 16 +221 17 +222 18 +223 10 +224 8 +225 6 +226 3 +227 173 +228 175 +229 176 +230 177 +231 178 +232 170 +233 168 +234 166 +235 163 +236 141 +237 143 +238 144 +239 145 +240 146 +241 138 +242 136 +243 134 +244 131 +245 109 +246 111 +247 112 +248 113 +249 114 +250 106 +251 104 +252 102 +253 99 +254 77 +255 79 +256 80 +257 81 +258 82 +259 74 +260 72 +261 70 +262 67 +263 45 +264 47 +265 48 +266 49 +267 50 +268 42 +269 40 +270 38 +271 35 +272 13 +273 15 +274 16 +275 17 +276 19 +277 18 +278 10 +279 8 +280 6 +281 3 +282 173 +283 175 +284 176 +285 177 +286 179 +287 178 +288 170 +289 168 +290 166 +291 163 +292 141 +293 143 +294 144 +295 145 +296 147 +297 146 +298 138 +299 136 +300 134 +301 131 +302 109 +303 111 +304 112 +305 113 +306 115 +307 114 +308 106 +309 104 +310 102 +311 99 +312 77 +313 79 +314 80 +315 81 +316 83 +317 82 +318 74 +319 72 +320 70 +321 67 +322 45 +323 47 +324 48 +325 49 +326 51 +327 50 +328 42 +329 40 +330 38 +331 35 +332 13 +333 15 +334 16 +335 17 +336 19 +337 19 +338 18 +339 10 +340 8 +341 6 +342 3 +343 173 +344 175 +345 176 +346 177 +347 179 +348 179 +349 178 +350 170 +351 168 +352 166 +353 163 +354 141 +355 143 +356 144 +357 145 +358 147 +359 147 +360 146 +361 138 +362 136 +363 134 +364 131 +365 109 +366 111 +367 112 +368 113 +369 115 +370 115 +371 114 +372 106 +373 104 +374 102 +375 99 +376 77 +377 79 +378 80 +379 81 +380 83 +381 83 +382 82 +383 74 +384 72 +385 70 +386 67 +387 45 +388 47 +389 48 +390 49 +391 51 +392 51 +393 50 +394 42 +395 40 +396 38 +399 15 +400 16 +401 17 +402 19 +403 19 +404 19 +405 18 +406 10 +407 8 +411 175 +412 176 +413 177 +414 179 +415 179 +416 179 +417 178 +418 170 +419 168 +423 143 +424 144 +425 145 +426 147 +427 147 +428 147 +429 146 +430 138 +431 136 +435 111 +436 112 +437 113 +438 115 +439 115 +440 115 +441 114 +442 106 +443 104 +447 79 +448 80 +449 81 +450 83 +451 83 +452 83 +453 82 +454 74 +455 72 +459 47 +460 48 +461 49 +462 51 +463 51 +464 51 +465 50 +466 42 +467 40 +474 20 +475 20 +476 20 +477 20 +487 180 +488 180 +489 180 +490 180 +500 148 +501 148 +502 148 +503 148 +513 116 +514 116 +515 116 +516 116 +526 84 +527 84 +528 84 +529 84 +539 52 +540 52 +541 52 +542 52 diff --git a/L1Trigger/L1THGCal/plugins/ntuples/HGCalTriggerNtupleHGCPanels.cc b/L1Trigger/L1THGCal/plugins/ntuples/HGCalTriggerNtupleHGCPanels.cc new file mode 100644 index 0000000000000..d0ac617ada1a1 --- /dev/null +++ b/L1Trigger/L1THGCal/plugins/ntuples/HGCalTriggerNtupleHGCPanels.cc @@ -0,0 +1,171 @@ + +#include "DataFormats/L1THGCal/interface/HGCalTriggerCell.h" +#include "DataFormats/ForwardDetId/interface/HGCalDetId.h" +#include "Geometry/Records/interface/CaloGeometryRecord.h" +#include "L1Trigger/L1THGCal/interface/HGCalTriggerGeometryBase.h" +#include "L1Trigger/L1THGCal/interface/HGCalTriggerNtupleBase.h" + + + +class HGCalTriggerNtupleHGCPanels : public HGCalTriggerNtupleBase +{ + + public: + HGCalTriggerNtupleHGCPanels(const edm::ParameterSet& conf); + ~HGCalTriggerNtupleHGCPanels(){}; + virtual void initialize(TTree&, const edm::ParameterSet&, edm::ConsumesCollector&&) override final; + virtual void fill(const edm::Event& e, const edm::EventSetup& es) override final; + + private: + virtual void clear() override final; + + + edm::EDGetToken trigger_cells_token_; + edm::ESHandle geometry_; + + int panel_n_ ; + std::vector panel_id_; + std::vector panel_zside_; + std::vector panel_layer_; + std::vector panel_sector_; + std::vector panel_number_; + std::vector panel_tc_n_; + std::vector > panel_tc_id_; + std::vector > panel_tc_mod_; + std::vector > panel_tc_third_; + std::vector > panel_tc_cell_; + std::vector > panel_tc_mipPt_; + std::vector > panel_tc_pt_; + + private: + static const unsigned kPanel_offset_ = 0; + static const unsigned kPanel_mask_ = 0x1F; + static const unsigned kSector_offset_ = 5; + static const unsigned kSector_mask_ = 0x7; + static const unsigned kThird_offset_ = 4; + static const unsigned kThird_mask_ = 0x3; + static const unsigned kCell_mask_ = 0xF; + +}; + +DEFINE_EDM_PLUGIN(HGCalTriggerNtupleFactory, + HGCalTriggerNtupleHGCPanels, + "HGCalTriggerNtupleHGCPanels" ); + + +HGCalTriggerNtupleHGCPanels:: +HGCalTriggerNtupleHGCPanels(const edm::ParameterSet& conf):HGCalTriggerNtupleBase(conf) +{ +} + +void +HGCalTriggerNtupleHGCPanels:: +initialize(TTree& tree, const edm::ParameterSet& conf, edm::ConsumesCollector&& collector) +{ + trigger_cells_token_ = collector.consumes(conf.getParameter("TriggerCells")); + + tree.Branch("panel_n", &panel_n_, "panel_n/I"); + tree.Branch("panel_id", &panel_id_); + tree.Branch("panel_zside", &panel_zside_); + tree.Branch("panel_layer", &panel_layer_); + tree.Branch("panel_sector", &panel_sector_); + tree.Branch("panel_number", &panel_number_); + tree.Branch("panel_tc_n", &panel_tc_n_); + tree.Branch("panel_tc_id", &panel_tc_id_); + tree.Branch("panel_tc_mod", &panel_tc_mod_); + tree.Branch("panel_tc_third", &panel_tc_third_); + tree.Branch("panel_tc_cell", &panel_tc_cell_); + tree.Branch("panel_tc_mipPt", &panel_tc_mipPt_); + tree.Branch("panel_tc_pt", &panel_tc_pt_); + +} + +void +HGCalTriggerNtupleHGCPanels:: +fill(const edm::Event& e, const edm::EventSetup& es) +{ + + // retrieve trigger cells + edm::Handle trigger_cells_h; + e.getByToken(trigger_cells_token_, trigger_cells_h); + const l1t::HGCalTriggerCellBxCollection& trigger_cells = *trigger_cells_h; + + // retrieve geometry + es.get().get(geometry_); + + clear(); + + // Regroup trigger cells by panel + std::unordered_map< uint32_t,vector > panelids_tcs; + for(auto tc_itr=trigger_cells.begin(0); tc_itr!=trigger_cells.end(0); tc_itr++) + { + if(tc_itr->hwPt()>0 && tc_itr->subdetId()!=ForwardSubdetector::HGCHEB) + { + HGCalDetId id(tc_itr->detId()); + HGCalDetId panelid(geometry_->getModuleFromTriggerCell(id)); + panelids_tcs[panelid].push_back(tc_itr); + } + } + for (const auto& panelid_tcs : panelids_tcs) + { + panel_n_++; + HGCalDetId panelid(panelid_tcs.first); + int panel_sector = (panelid.wafer()>>kSector_offset_) & kSector_mask_ ; + int panel_number = (panelid.wafer()>>kPanel_offset_) & kPanel_mask_ ; + const auto& tcs = panelid_tcs.second; + panel_id_.emplace_back(panelid); + panel_zside_.emplace_back(panelid.zside()); + panel_layer_.emplace_back(geometry_->triggerLayer(panelid)); + panel_sector_.emplace_back(panel_sector); + panel_number_.emplace_back(panel_number); + panel_tc_n_.emplace_back(tcs.size()); + panel_tc_id_.emplace_back(); + panel_tc_mod_.emplace_back(); + panel_tc_third_.emplace_back(); + panel_tc_cell_.emplace_back(); + panel_tc_mipPt_.emplace_back(); + panel_tc_pt_.emplace_back(); + + std::unordered_map modules_mipPt; + std::unordered_map thirds_mipPt; + for (const auto& tc : tcs) + { + panel_tc_id_.back().push_back(tc->detId()); + panel_tc_mipPt_.back().push_back(tc->mipPt()); + panel_tc_pt_.back().push_back(tc->pt()); + HGCalDetId tc_detid(tc->detId()); + unsigned module_id = tc_detid.wafer(); + unsigned third_id = (tc_detid.cell()>>kThird_offset_) & kThird_mask_; + unsigned cell_id = tc_detid.cell() & kCell_mask_; + panel_tc_mod_.back().push_back(module_id); + panel_tc_third_.back().push_back(third_id); + panel_tc_cell_.back().push_back(cell_id); + modules_mipPt[module_id] += tc->mipPt(); + thirds_mipPt[third_id] += tc->mipPt(); + } + } +} + + +void +HGCalTriggerNtupleHGCPanels:: +clear() +{ + panel_n_ = 0; + panel_id_.clear(); + panel_zside_.clear(); + panel_layer_.clear(); + panel_sector_.clear(); + panel_number_.clear(); + panel_tc_n_.clear(); + panel_tc_id_.clear(); + panel_tc_mod_.clear(); + panel_tc_third_.clear(); + panel_tc_cell_.clear(); + panel_tc_mipPt_.clear(); + panel_tc_pt_.clear(); +} + + + + diff --git a/L1Trigger/L1THGCal/plugins/ntuples/HGCalTriggerNtupleHGCTriggerCells.cc b/L1Trigger/L1THGCal/plugins/ntuples/HGCalTriggerNtupleHGCTriggerCells.cc index e560a31d33405..d1f6ff89ed15f 100644 --- a/L1Trigger/L1THGCal/plugins/ntuples/HGCalTriggerNtupleHGCTriggerCells.cc +++ b/L1Trigger/L1THGCal/plugins/ntuples/HGCalTriggerNtupleHGCTriggerCells.cc @@ -23,6 +23,7 @@ class HGCalTriggerNtupleHGCTriggerCells : public HGCalTriggerNtupleBase virtual void fill(const edm::Event& e, const edm::EventSetup& es) override final; private: + double calibrate(double, int, int); void simhits(const edm::Event& e, std::unordered_map& simhits_ee, std::unordered_map& simhits_fh, std::unordered_map& simhits_bh); virtual void clear() override final; @@ -31,6 +32,10 @@ class HGCalTriggerNtupleHGCTriggerCells : public HGCalTriggerNtupleBase edm::EDGetToken simhits_ee_token_, simhits_fh_token_, simhits_bh_token_; bool fill_simenergy_; bool filter_cells_in_multiclusters_; + double keV2fC_; + std::vector fcPerMip_; + std::vector layerWeights_; + std::vector thicknessCorrections_; edm::ESHandle geometry_; @@ -68,6 +73,10 @@ HGCalTriggerNtupleHGCTriggerCells(const edm::ParameterSet& conf):HGCalTriggerNtu { fill_simenergy_ = conf.getParameter("FillSimEnergy"); filter_cells_in_multiclusters_ = conf.getParameter("FilterCellsInMulticlusters"); + keV2fC_ = conf.getParameter("keV2fC"); + fcPerMip_ = conf.getParameter>("fcPerMip"); + layerWeights_ = conf.getParameter>("layerWeights"); + thicknessCorrections_ = conf.getParameter>("thicknessCorrections"); } void @@ -198,13 +207,25 @@ fill(const edm::Event& e, const edm::EventSetup& es) case ForwardSubdetector::HGCEE: { auto itr = simhits_ee.find(c_id); - if(itr!=simhits_ee.end()) energy += itr->second; + if(itr!=simhits_ee.end()) + { + HGCalDetId detid(c_id); + int thickness = geometry_->eeTopology().dddConstants().waferTypeL(detid.wafer())-1; + int layer = detid.layer(); + energy += calibrate(itr->second, thickness, layer); + } break; } case ForwardSubdetector::HGCHEF: { auto itr = simhits_fh.find(c_id); - if(itr!=simhits_fh.end()) energy += itr->second; + if(itr!=simhits_fh.end()) + { + HGCalDetId detid(c_id); + int thickness = geometry_->fhTopology().dddConstants().waferTypeL(detid.wafer())-1; + int layer = detid.layer(); + energy += calibrate(itr->second, thickness, layer); + } break; } case ForwardSubdetector::HGCHEB: @@ -223,6 +244,16 @@ fill(const edm::Event& e, const edm::EventSetup& es) } } +double +HGCalTriggerNtupleHGCTriggerCells:: +calibrate(double energy, int thickness, int layer) +{ + double fcPerMip = fcPerMip_[thickness]; + double thicknessCorrection = thicknessCorrections_[thickness]; + double layerWeight = layerWeights_[layer]; + double TeV2GeV = 1.e3; + return energy*keV2fC_/fcPerMip*layerWeight*TeV2GeV/thicknessCorrection; +} void HGCalTriggerNtupleHGCTriggerCells:: diff --git a/L1Trigger/L1THGCal/python/hgcalLayersCalibrationCoefficients_cfi.py b/L1Trigger/L1THGCal/python/hgcalLayersCalibrationCoefficients_cfi.py index db076eb5d8402..ebd349289ec37 100644 --- a/L1Trigger/L1THGCal/python/hgcalLayersCalibrationCoefficients_cfi.py +++ b/L1Trigger/L1THGCal/python/hgcalLayersCalibrationCoefficients_cfi.py @@ -109,3 +109,57 @@ 0.1171, 0.328053 ) + +TrgLayer_dEdX_weights = cms.vdouble(0.0, # there is no layer zero + 8.603+8.0675, # Mev + 0., + 8.0675*2, + 0., + 8.0675*2, + 0., + 8.0675*2., + 0., + 8.0675+8.9515, + 0., + 10.135*2, + 0., + 10.135*2., + 0., + 10.135*2., + 0., + 10.135*2., + 0., + 10.135+11.682, + 0., + 13.654*2., + 0., + 13.654*2., + 0., + 13.654*2., + 0., + 13.654+38.2005, + 0., + 55.0265, + 49.871, + 49.871, + 49.871, + 49.871, + 49.871, + 49.871, + 49.871, + 49.871, + 49.871, + 49.871, + 62.005, + 83.1675, + 92.196, + 92.196, + 92.196, + 92.196, + 92.196, + 92.196, + 92.196, + 92.196, + 92.196, + 92.196, + 46.098) diff --git a/L1Trigger/L1THGCal/python/hgcalTriggerNtuples_cfi.py b/L1Trigger/L1THGCal/python/hgcalTriggerNtuples_cfi.py index 78bbbeaf71587..a6217bd55a535 100644 --- a/L1Trigger/L1THGCal/python/hgcalTriggerNtuples_cfi.py +++ b/L1Trigger/L1THGCal/python/hgcalTriggerNtuples_cfi.py @@ -1,5 +1,15 @@ import FWCore.ParameterSet.Config as cms +import SimCalorimetry.HGCalSimProducers.hgcalDigitizer_cfi as digiparam +import RecoLocalCalo.HGCalRecProducers.HGCalUncalibRecHit_cfi as recoparam +import RecoLocalCalo.HGCalRecProducers.HGCalRecHit_cfi as recocalibparam +import hgcalLayersCalibrationCoefficients_cfi as layercalibparam + + +fcPerMip = recoparam.HGCalUncalibRecHit.HGCEEConfig.fCPerMIP +keV2fC = digiparam.hgceeDigitizer.digiCfg.keV2fC +layerWeights = layercalibparam.TrgLayer_dEdX_weights +thicknessCorrections = recocalibparam.HGCalRecHit.thicknessCorrection ntuple_event = cms.PSet( NtupleName = cms.string('HGCalTriggerNtupleEvent') @@ -41,6 +51,10 @@ fhSimHits = cms.InputTag('g4SimHits:HGCHitsHEfront'), bhSimHits = cms.InputTag('g4SimHits:HcalHits'), FillSimEnergy = cms.bool(False), + fcPerMip = fcPerMip, + keV2fC = keV2fC, + layerWeights = layerWeights, + thicknessCorrections = thicknessCorrections, FilterCellsInMulticlusters = cms.bool(True) ) @@ -56,6 +70,11 @@ Multiclusters = cms.InputTag('hgcalTriggerPrimitiveDigiProducer:cluster3D') ) +ntuple_panels = cms.PSet( + NtupleName = cms.string('HGCalTriggerNtupleHGCPanels'), + TriggerCells = cms.InputTag('hgcalTriggerPrimitiveDigiProducer:calibratedTriggerCells') +) + hgcalTriggerNtuplizer = cms.EDAnalyzer( "HGCalTriggerNtupleManager", Ntuples = cms.VPSet( diff --git a/L1Trigger/L1THGCal/python/hgcalTriggerPrimitiveDigiProducer_cfi.py b/L1Trigger/L1THGCal/python/hgcalTriggerPrimitiveDigiProducer_cfi.py index f77c926db7411..c320d6955210f 100644 --- a/L1Trigger/L1THGCal/python/hgcalTriggerPrimitiveDigiProducer_cfi.py +++ b/L1Trigger/L1THGCal/python/hgcalTriggerPrimitiveDigiProducer_cfi.py @@ -15,7 +15,7 @@ # Reco calibration parameters fCPerMIPee = recoparam.HGCalUncalibRecHit.HGCEEConfig.fCPerMIP fCPerMIPfh = recoparam.HGCalUncalibRecHit.HGCHEFConfig.fCPerMIP -layerWeights = recocalibparam.HGCalRecHit.layerWeights +layerWeights = layercalibparam.TrgLayer_dEdX_weights thicknessCorrection = recocalibparam.HGCalRecHit.thicknessCorrection # Parameters used in several places @@ -37,8 +37,8 @@ linnBits = cms.uint32(16), triggerCellTruncationBits = cms.uint32(triggerCellTruncationBits), NData = cms.uint32(999), - TCThreshold_fC = cms.double(1.), - TCThresholdBH_MIP = cms.double(1.), + TCThreshold_fC = cms.double(0.), + TCThresholdBH_MIP = cms.double(0.), #take the following parameters from the digitization config file adcsaturation = adcSaturation_fC, adcnBits = adcNbits, diff --git a/L1Trigger/L1THGCal/test/testHGCalL1TGeometry_cfg.py b/L1Trigger/L1THGCal/test/testHGCalL1TGeometry_cfg.py index dd3c15593ab31..fc4c0276435c7 100644 --- a/L1Trigger/L1THGCal/test/testHGCalL1TGeometry_cfg.py +++ b/L1Trigger/L1THGCal/test/testHGCalL1TGeometry_cfg.py @@ -102,12 +102,7 @@ process.load('L1Trigger.L1THGCal.hgcalTriggerPrimitives_cff') # Eventually modify default geometry parameters -process.hgcalTriggerGeometryESProducer.TriggerGeometry.TriggerGeometryName = cms.string('HGCalTriggerGeometryHexLayerBasedImp1') -process.hgcalTriggerGeometryESProducer.TriggerGeometry.L1TCellsMapping = cms.FileInPath("L1Trigger/L1THGCal/data/triggercell_mapping_8inch_aligned_192_432_V8_0.txt") -process.hgcalTriggerGeometryESProducer.TriggerGeometry.L1TModulesMapping = cms.FileInPath("L1Trigger/L1THGCal/data/panel_mapping_60deg_6mod_0.txt") -process.hgcalTriggerGeometryESProducer.TriggerGeometry.L1TCellNeighborsMapping = cms.FileInPath("L1Trigger/L1THGCal/data/triggercell_neighbor_mapping_8inch_aligned_192_432_0.txt") -process.hgcalTriggerGeometryESProducer.TriggerGeometry.L1TCellsBHMapping = cms.FileInPath("L1Trigger/L1THGCal/data/triggercell_mapping_BH_3x3_30deg_0.txt") -process.hgcalTriggerGeometryESProducer.TriggerGeometry.L1TCellNeighborsBHMapping = cms.FileInPath("L1Trigger/L1THGCal/data/triggercell_neighbor_mapping_BH_3x3_30deg_0.txt") +process.hgcalTriggerGeometryESProducer.TriggerGeometry.L1TModulesMapping = cms.FileInPath("L1Trigger/L1THGCal/data/panel_mapping_tdr.txt") process.hgcaltriggergeomtester = cms.EDAnalyzer( "HGCalTriggerGeomTester"