diff --git a/DataFormats/L1THGCal/interface/HGCalClusterT.h b/DataFormats/L1THGCal/interface/HGCalClusterT.h index 3977055b8f50b..15c0e9d4cf7bf 100644 --- a/DataFormats/L1THGCal/interface/HGCalClusterT.h +++ b/DataFormats/L1THGCal/interface/HGCalClusterT.h @@ -6,7 +6,6 @@ #include "DataFormats/GeometryVector/interface/GlobalPoint.h" #include "DataFormats/L1Trigger/interface/L1Candidate.h" #include "DataFormats/L1THGCal/interface/HGCalTriggerCell.h" -#include "DataFormats/L1THGCal/interface/ClusterShapes.h" #include "DataFormats/ForwardDetId/interface/ForwardSubdetector.h" #include "DataFormats/HcalDetId/interface/HcalSubdetector.h" #include "DataFormats/ForwardDetId/interface/HGCalTriggerDetId.h" @@ -102,9 +101,6 @@ namespace l1t { const GlobalPoint& centre() const { return centre_; } const GlobalPoint& centreProj() const { return centreProj_; } - // FIXME: will need to fix places where the shapes are directly accessed - // Right now keep shapes() getter as non-const - ClusterShapes& shapes() { return shapes_; } double hOverE() const { double pt_em = 0.; double pt_had = 0.; @@ -228,8 +224,6 @@ namespace l1t { float triggerCells67percent_ = 0.; float triggerCells90percent_ = 0.; - ClusterShapes shapes_; - void updateP4AndPosition(const edm::Ptr& c, bool updateCentre = true, float fraction = 1.) { double cMipt = c->mipPt() * fraction; double cPt = c->pt() * fraction; diff --git a/DataFormats/L1THGCal/src/classes_def.xml b/DataFormats/L1THGCal/src/classes_def.xml index 11a2aedc3076b..041ae7bef01ef 100644 --- a/DataFormats/L1THGCal/src/classes_def.xml +++ b/DataFormats/L1THGCal/src/classes_def.xml @@ -30,7 +30,8 @@ - + + @@ -46,7 +47,8 @@ - + + diff --git a/L1Trigger/L1THGCal/interface/HGCalTriggerBackendAlgorithmBase.h b/L1Trigger/L1THGCal/interface/HGCalTriggerBackendAlgorithmBase.h deleted file mode 100644 index ede6bc136d832..0000000000000 --- a/L1Trigger/L1THGCal/interface/HGCalTriggerBackendAlgorithmBase.h +++ /dev/null @@ -1,81 +0,0 @@ -#ifndef __L1Trigger_L1THGCal_HGCalTriggerBackendAlgorithmBase_h__ -#define __L1Trigger_L1THGCal_HGCalTriggerBackendAlgorithmBase_h__ - -#include "FWCore/ParameterSet/interface/ParameterSet.h" - -#include "L1Trigger/L1THGCal/interface/HGCalTriggerGeometryBase.h" - -#include "DataFormats/L1THGCal/interface/HGCFETriggerDigi.h" -#include "DataFormats/L1THGCal/interface/HGCFETriggerDigiDefs.h" - -#include "DataFormats/HGCDigi/interface/HGCDigiCollections.h" - -#include "FWCore/Framework/interface/stream/EDProducer.h" -#include "FWCore/Framework/interface/Event.h" - -#include - -/******* - * - * class: HGCalTriggerBackendAlgorithmBase - * author: L.Gray (FNAL) - * date: 27 July, 2015 - * - * This contains two base classes, one which presents the abstract interface, - * and a second that allows specialization to various FE codecs so that - * data can be manipulated directly. - * - *******/ - -class HGCalTriggerBackendAlgorithmBase { -public: - // Allow HGCalTriggerBackend to be passed a consume collector - HGCalTriggerBackendAlgorithmBase(const edm::ParameterSet& conf, edm::ConsumesCollector& cc) - : geometry_(nullptr), name_(conf.getParameter("AlgorithmName")) {} - - virtual ~HGCalTriggerBackendAlgorithmBase() {} - - const std::string& name() const { return name_; } - - virtual void setGeometry(const HGCalTriggerGeometryBase* const geom) { geometry_ = geom; } - - //runs the trigger algorithm, storing internally the results - virtual void setProduces(edm::stream::EDProducer<>& prod) const = 0; - - virtual void run(const l1t::HGCFETriggerDigiCollection& coll, const edm::EventSetup& es, edm::Event& e) = 0; - - virtual void putInEvent(edm::Event& evt) = 0; - - virtual void reset() = 0; - -protected: - const HGCalTriggerGeometryBase* geometry_; - -private: - const std::string name_; -}; - -// ----> all backend algorithm classes derive from this <---- -// inheritance looks like class MyAlgorithm : public HGCalTriggerBackend::Algorithm -namespace HGCalTriggerBackend { - template - class Algorithm : public HGCalTriggerBackendAlgorithmBase { - public: - Algorithm(const edm::ParameterSet& conf, edm::ConsumesCollector& cc) - : HGCalTriggerBackendAlgorithmBase(conf, cc), codec_(conf.getParameterSet("FECodec")) {} - - void setGeometry(const HGCalTriggerGeometryBase* const geom) final { - HGCalTriggerBackendAlgorithmBase::setGeometry(geom); - codec_.setGeometry(geom); - } - - protected: - FECODEC codec_; - }; -} // namespace HGCalTriggerBackend - -#include "FWCore/PluginManager/interface/PluginFactory.h" -typedef edmplugin::PluginFactory - HGCalTriggerBackendAlgorithmFactory; - -#endif diff --git a/L1Trigger/L1THGCal/interface/HGCalTriggerBackendProcessor.h b/L1Trigger/L1THGCal/interface/HGCalTriggerBackendProcessor.h deleted file mode 100644 index 6003e6c8d6566..0000000000000 --- a/L1Trigger/L1THGCal/interface/HGCalTriggerBackendProcessor.h +++ /dev/null @@ -1,50 +0,0 @@ -#ifndef __L1Trigger_L1THGCal_HGCalTriggerBackendProcessor_h__ -#define __L1Trigger_L1THGCal_HGCalTriggerBackendProcessor_h__ - -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Framework/interface/stream/EDProducer.h" -#include "FWCore/Framework/interface/Event.h" - -#include "DataFormats/L1THGCal/interface/HGCFETriggerDigi.h" -#include "DataFormats/L1THGCal/interface/HGCFETriggerDigiDefs.h" - -#include "L1Trigger/L1THGCal/interface/HGCalTriggerGeometryBase.h" - -#include "L1Trigger/L1THGCal/interface/HGCalTriggerBackendAlgorithmBase.h" - -#include -#include - -/******* - * - * class: HGCalTriggerBackendProcessor - * author: L.Gray (FNAL) - * date: 12 August, 2015 - * - * This class contains a list of backend algorithms - * that are run in the sequence defined in python (order of pset vector). - * This is mostly a wrapper class that manages calling the algorithms. - * - *******/ - -class HGCalTriggerBackendProcessor { -public: - typedef std::unique_ptr algo_ptr; - - HGCalTriggerBackendProcessor(const edm::ParameterSet& conf, edm::ConsumesCollector&& cc); - - void setGeometry(const HGCalTriggerGeometryBase* const geom); - - void setProduces(edm::stream::EDProducer<>& prod) const; - - void run(const l1t::HGCFETriggerDigiCollection& coll, const edm::EventSetup& es, edm::Event& e); - - void putInEvent(edm::Event& evt); - - void reset(); - -private: - std::vector algorithms_; -}; - -#endif diff --git a/L1Trigger/L1THGCal/interface/HGCalTriggerFECodecBase.h b/L1Trigger/L1THGCal/interface/HGCalTriggerFECodecBase.h deleted file mode 100644 index 1fa9109e2b31c..0000000000000 --- a/L1Trigger/L1THGCal/interface/HGCalTriggerFECodecBase.h +++ /dev/null @@ -1,152 +0,0 @@ -#ifndef __L1Trigger_L1THGCal_HGCalTriggerFECodecBase_h__ -#define __L1Trigger_L1THGCal_HGCalTriggerFECodecBase_h__ - -#include "FWCore/ParameterSet/interface/ParameterSet.h" - -#include "L1Trigger/L1THGCal/interface/HGCalTriggerGeometryBase.h" - -#include "DataFormats/L1THGCal/interface/HGCFETriggerDigi.h" - -#include "DataFormats/HGCDigi/interface/HGCDigiCollections.h" - -/******* - * - * class: HGCalTriggerCodecBase - * author: L.Gray (FNAL) - * date: 27 July, 2015 - * - * Base classes for defining HGCal FE codec classes. - * The base class defines an abstract interface, which is then specialized - * by the "Codec<>" class to handle a specific data format. - * To keep the implementation properly factorized, an implementation class - * is used to provide the appropriate coding and decoding. - * - *******/ - -class HGCalTriggerFECodecBase { -public: - HGCalTriggerFECodecBase(const edm::ParameterSet& conf) - : geometry_(nullptr), - name_(conf.getParameter("CodecName")), - codec_idx_(static_cast(conf.getParameter("CodecIndex"))) {} - virtual ~HGCalTriggerFECodecBase() {} - - const std::string& name() const { return name_; } - - const unsigned char getCodecType() const { return codec_idx_; } - void setGeometry(const HGCalTriggerGeometryBase* const geom) { geometry_ = geom; } - - // give the FECodec the input digis and it sets itself - // with the approprate data - virtual void setDataPayload(const HGCalDigiCollection&, const HGCalDigiCollection&, const HGCalDigiCollection&) = 0; - virtual void setDataPayload(const l1t::HGCFETriggerDigi&) = 0; - virtual void unSetDataPayload() = 0; - // get the set data out for your own enjoyment - virtual std::vector getDataPayload() const = 0; - - // abstract interface to manipulating l1t::HGCFETriggerDigis - // these will yell at you if you haven't set the data in the Codec class - virtual void encode(l1t::HGCFETriggerDigi&) = 0; - virtual void decode(const l1t::HGCFETriggerDigi&) = 0; - virtual void print(const l1t::HGCFETriggerDigi& digi, std::ostream& out = std::cout) const = 0; - -protected: - const HGCalTriggerGeometryBase* geometry_; - -private: - const std::string name_; - unsigned char codec_idx_; // I hope we never come to having 256 FE codecs :-) -}; - -// ----> all codec classes derive from this <---- -// inheritance looks like class MyCodec : public HGCalTriggerFE::Codec -namespace HGCalTriggerFE { - template - class Codec : public HGCalTriggerFECodecBase { - public: - Codec(const edm::ParameterSet& conf) : HGCalTriggerFECodecBase(conf), dataIsSet_(false) {} - - // mark these as final since at this level we know - // the implementation of the codec - void encode(l1t::HGCFETriggerDigi& digi) final { - if (!dataIsSet_) { - edm::LogWarning("HGCalTriggerFECodec|NoDataPayload") - << "No data payload was set for HGCTriggerFECodec: " << this->name(); - } - digi.encode(static_cast(*this), data_); - } - void decode(const l1t::HGCFETriggerDigi& digi) final { - if (dataIsSet_) { - edm::LogWarning("HGCalTriggerFECodec|OverwritePayload") - << "Data payload was already set for HGCTriggerFECodec: " << this->name() << " overwriting current data!"; - } - digi.decode(static_cast(*this), data_); - dataIsSet_ = true; - } - - void setDataPayload(const HGCalDigiCollection& ee, - const HGCalDigiCollection& fh, - const HGCalDigiCollection& bh) final { - if (dataIsSet_) { - edm::LogWarning("HGCalTriggerFECodec|OverwritePayload") - << "Data payload was already set for HGCTriggerFECodec: " << this->name() << " overwriting current data!"; - } - if (geometry_ == nullptr) { - throw cms::Exception("HGCTriggerBadInitialization") - << "The HGC trigger geometry has not been passed to the front-end codec\n"; - } - static_cast(*this).setDataPayloadImpl(ee, fh, bh); - dataIsSet_ = true; - } - - void setDataPayload(const l1t::HGCFETriggerDigi& digi) final { - if (dataIsSet_) { - edm::LogWarning("HGCalTriggerFECodec|OverwritePayload") - << "Data payload was already set for HGCTriggerFECodec: " << this->name() << " overwriting current data!"; - } - if (geometry_ == nullptr) { - throw cms::Exception("HGCTriggerBadInitialization") - << "The HGC trigger geometry has not been passed to the front-end codec\n"; - } - static_cast(*this).setDataPayloadImpl(digi); - dataIsSet_ = true; - } - - void unSetDataPayload() final { - data_.reset(); - dataIsSet_ = false; - } - std::vector getDataPayload() const final { return this->encode(data_); } - - void print(const l1t::HGCFETriggerDigi& digi, std::ostream& out = std::cout) const final { - digi.print(static_cast(*this), out); - } - - std::vector encode(const DATA& data) const { - if (geometry_ == nullptr) { - throw cms::Exception("HGCTriggerBadInitialization") - << "The HGC trigger geometry has not been passed to the front-end codec\n"; - } - return static_cast(*this).encodeImpl(data); - } - - DATA decode(const std::vector& data, const uint32_t module = 0) const { - if (geometry_ == nullptr) { - throw cms::Exception("HGCTriggerBadInitialization") - << "The HGC trigger geometry has not been passed to the front-end codec\n"; - } - return static_cast(*this).decodeImpl(data, module); - } - - protected: - DATA data_; - - private: - bool dataIsSet_; - }; -} // namespace HGCalTriggerFE - -#include "FWCore/PluginManager/interface/PluginFactory.h" -typedef edmplugin::PluginFactory HGCalTriggerFECodecFactory; - -#endif diff --git a/L1Trigger/L1THGCal/interface/HGCalTriggerGeometryGenericMapping.h b/L1Trigger/L1THGCal/interface/HGCalTriggerGeometryGenericMapping.h deleted file mode 100644 index b924a8147c342..0000000000000 --- a/L1Trigger/L1THGCal/interface/HGCalTriggerGeometryGenericMapping.h +++ /dev/null @@ -1,146 +0,0 @@ -#ifndef __L1Trigger_L1THGCal_HGCalTriggerGeometryGenericMapping_h__ -#define __L1Trigger_L1THGCal_HGCalTriggerGeometryGenericMapping_h__ - -#include "L1Trigger/L1THGCal/interface/HGCalTriggerGeometryBase.h" - -/******* - * - * class: HGCalTriggerGeometryGenericMapping - * author: L.Gray (FNAL) - * date: 26 July, 2015 - * - * This class is the base class for all HGCal trigger geometry definitions. - * Typically this is just a ganging of cells and nearest-neighbour relationships. - * - * Classes for TriggerCells and Modules are defined. They are containers for - * maps relating modules to modules and trigger cells to trigger cells and - * raw HGC cells. - * - * It is up to the user of the class to define what these mappings are through the - * initialize() function. This function takes the full HGC geometry as input and - * creates all the necessary maps for navigating the trigger system. All of the - * containers for parts of the map are available through protected members of the base - * class. - * - * All unsigned ints used here are DetIds, or will become them once we sort out the - * full nature of the trigger detids. - *******/ - -class HGCalTriggerGeometryGenericMapping; - -namespace HGCalTriggerGeometry { - class TriggerCell { - public: - typedef std::unordered_set list_type; - - TriggerCell( - unsigned tc_id, unsigned mod_id, const GlobalPoint& pos, const list_type& neighbs, const list_type& comps) - : trigger_cell_id_(tc_id), module_id_(mod_id), position_(pos), neighbours_(neighbs), components_(comps) {} - ~TriggerCell() {} - - unsigned triggerCellId() const { return trigger_cell_id_; } - unsigned moduleId() const { return module_id_; } - - bool containsCell(const unsigned cell) const { return (components_.find(cell) != components_.end()); } - - const GlobalPoint& position() const { return position_; } - - const std::unordered_set& neighbours() const { return neighbours_; } - const std::unordered_set& components() const { return components_; } - - private: - unsigned trigger_cell_id_; // the ID of this trigger cell - unsigned module_id_; // module this TC belongs to - GlobalPoint position_; - list_type neighbours_; // neighbouring trigger cells - list_type components_; // contained HGC cells - }; - - class Module { - public: - typedef std::unordered_set list_type; - typedef std::unordered_multimap tc_map_type; - - Module(unsigned mod_id, - const GlobalPoint& pos, - const list_type& neighbs, - const list_type& comps, - const tc_map_type& tc_comps) - : module_id_(mod_id), position_(pos), neighbours_(neighbs), components_(comps), tc_components_(tc_comps) {} - ~Module() {} - - unsigned moduleId() const { return module_id_; } - - bool containsTriggerCell(const unsigned trig_cell) const { - return (components_.find(trig_cell) != components_.end()); - } - - bool containsCell(const unsigned cell) const { - for (const auto& value : tc_components_) { - if (value.second == cell) - return true; - } - return false; - } - - const GlobalPoint& position() const { return position_; } - - const list_type& neighbours() const { return neighbours_; } - const list_type& components() const { return components_; } - - const tc_map_type& triggerCellComponents() const { return tc_components_; } - - private: - unsigned module_id_; // module this TC belongs to - GlobalPoint position_; - list_type neighbours_; // neighbouring Modules - list_type components_; // contained HGC trigger cells - tc_map_type tc_components_; // cells contained by trigger cells - }; -} // namespace HGCalTriggerGeometry - -class HGCalTriggerGeometryGenericMapping : public HGCalTriggerGeometryBase { -public: - typedef std::unordered_map > module_map; - typedef std::unordered_map > trigger_cell_map; - - HGCalTriggerGeometryGenericMapping(const edm::ParameterSet& conf); - ~HGCalTriggerGeometryGenericMapping() override {} - - // non-const access to the geometry class - void reset() final; - - unsigned getTriggerCellFromCell(const unsigned cell_det_id) const final; - unsigned getModuleFromCell(const unsigned cell_det_id) const final; - unsigned getModuleFromTriggerCell(const unsigned trigger_cell_det_id) const final; - - geom_set getCellsFromTriggerCell(const unsigned cell_det_id) const final; - geom_set getCellsFromModule(const unsigned cell_det_id) const final; - geom_set getTriggerCellsFromModule(const unsigned trigger_cell_det_id) const final; - - geom_ordered_set getOrderedCellsFromModule(const unsigned cell_det_id) const final; - geom_ordered_set getOrderedTriggerCellsFromModule(const unsigned trigger_cell_det_id) const final; - - geom_set getNeighborsFromTriggerCell(const unsigned trigger_cell_det_id) const final; - - unsigned getLinksInModule(const unsigned module_id) const final; - unsigned getModuleSize(const unsigned module_id) const final; - - GlobalPoint getTriggerCellPosition(const unsigned trigger_cell_det_id) const final; - GlobalPoint getModulePosition(const unsigned module_det_id) const final; - - bool validCell(const unsigned cell_det_id) const final { return true; } - bool validTriggerCell(const unsigned trigger_cell_det_id) const final; - bool disconnectedModule(const unsigned module_id) const final; - unsigned lastTriggerLayer() const final; - unsigned triggerLayer(const unsigned id) const final; - -protected: - geom_map cells_to_trigger_cells_; - geom_map trigger_cells_to_modules_; - - module_map modules_; - trigger_cell_map trigger_cells_; -}; - -#endif diff --git a/L1Trigger/L1THGCal/plugins/HGCalTriggerDigiFEReproducer.cc b/L1Trigger/L1THGCal/plugins/HGCalTriggerDigiFEReproducer.cc deleted file mode 100644 index 8086dcb1cbe3b..0000000000000 --- a/L1Trigger/L1THGCal/plugins/HGCalTriggerDigiFEReproducer.cc +++ /dev/null @@ -1,102 +0,0 @@ -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/stream/EDProducer.h" - -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/Framework/interface/ConsumesCollector.h" - -#include "DataFormats/L1THGCal/interface/HGCFETriggerDigi.h" -#include "DataFormats/L1THGCal/interface/HGCFETriggerDigiDefs.h" -#include "DataFormats/HGCDigi/interface/HGCDigiCollections.h" - -#include "Geometry/Records/interface/CaloGeometryRecord.h" - -#include "L1Trigger/L1THGCal/interface/HGCalTriggerGeometryBase.h" -#include "L1Trigger/L1THGCal/interface/HGCalTriggerFECodecBase.h" -#include "L1Trigger/L1THGCal/interface/HGCalTriggerBackendProcessor.h" - -#include -#include - -class HGCalTriggerDigiFEReproducer : public edm::stream::EDProducer<> { -public: - HGCalTriggerDigiFEReproducer(const edm::ParameterSet&); - ~HGCalTriggerDigiFEReproducer() override {} - - void beginRun(const edm::Run&, const edm::EventSetup&) override; - void produce(edm::Event&, const edm::EventSetup&) override; - -private: - // inputs - edm::EDGetToken inputdigi_; - edm::ESHandle triggerGeometry_; - // algorithm containers - std::unique_ptr codec_; - std::unique_ptr backEndProcessor_; -}; - -DEFINE_FWK_MODULE(HGCalTriggerDigiFEReproducer); - -/*****************************************************************/ -HGCalTriggerDigiFEReproducer::HGCalTriggerDigiFEReproducer(const edm::ParameterSet& conf) - : inputdigi_(consumes(conf.getParameter("feDigis"))), - backEndProcessor_( - std::make_unique(conf.getParameterSet("BEConfiguration"), consumesCollector())) -/*****************************************************************/ -{ - //setup FE codec - const edm::ParameterSet& feCodecConfig = conf.getParameterSet("FECodec"); - const std::string& feCodecName = feCodecConfig.getParameter("CodecName"); - codec_ = HGCalTriggerFECodecFactory::get()->create(feCodecName, feCodecConfig); - codec_->unSetDataPayload(); - - produces(); - // register backend processor products - backEndProcessor_->setProduces(*this); -} - -/*****************************************************************/ -void HGCalTriggerDigiFEReproducer::beginRun(const edm::Run& /*run*/, const edm::EventSetup& es) -/*****************************************************************/ -{ - es.get().get(triggerGeometry_); - codec_->setGeometry(triggerGeometry_.product()); - backEndProcessor_->setGeometry(triggerGeometry_.product()); -} - -/*****************************************************************/ -void HGCalTriggerDigiFEReproducer::produce(edm::Event& e, const edm::EventSetup& es) -/*****************************************************************/ -{ - std::unique_ptr fe_output(new l1t::HGCFETriggerDigiCollection); - - edm::Handle digis_h; - - e.getByToken(inputdigi_, digis_h); - - const l1t::HGCFETriggerDigiCollection& digis = *digis_h; - - fe_output->reserve(digis.size()); - std::stringstream output; - for (const auto& digi_in : digis) { - fe_output->push_back(l1t::HGCFETriggerDigi()); - l1t::HGCFETriggerDigi& digi_out = fe_output->back(); - codec_->setDataPayload(digi_in); - codec_->encode(digi_out); - digi_out.setDetId(digi_in.getDetId()); - codec_->print(digi_out, output); - edm::LogInfo("HGCalTriggerDigiFEReproducer") << output.str(); - codec_->unSetDataPayload(); - output.str(std::string()); - output.clear(); - } - - // get the orphan handle and fe digi collection - auto fe_digis_handle = e.put(std::move(fe_output)); - auto fe_digis_coll = *fe_digis_handle; - - //now we run the emulation of the back-end processor - backEndProcessor_->run(fe_digis_coll, es, e); - backEndProcessor_->putInEvent(e); - backEndProcessor_->reset(); -} diff --git a/L1Trigger/L1THGCal/plugins/backend/HGCalTowerMapProcessor.cc b/L1Trigger/L1THGCal/plugins/backend/HGCalTowerMapProcessor.cc index c6aee25146231..f325e62629ec4 100644 --- a/L1Trigger/L1THGCal/plugins/backend/HGCalTowerMapProcessor.cc +++ b/L1Trigger/L1THGCal/plugins/backend/HGCalTowerMapProcessor.cc @@ -6,7 +6,6 @@ #include "Geometry/Records/interface/CaloGeometryRecord.h" #include "L1Trigger/L1THGCal/interface/HGCalTriggerGeometryBase.h" -#include "L1Trigger/L1THGCal/interface/HGCalTriggerBackendAlgorithmBase.h" #include "L1Trigger/L1THGCal/interface/backend/HGCalTowerMap2DImpl.h" class HGCalTowerMapProcessor : public HGCalTowerMapProcessorBase { diff --git a/L1Trigger/L1THGCal/plugins/backend/HGCalTowerProcessor.cc b/L1Trigger/L1THGCal/plugins/backend/HGCalTowerProcessor.cc index 4ab658073d601..0735461338f57 100644 --- a/L1Trigger/L1THGCal/plugins/backend/HGCalTowerProcessor.cc +++ b/L1Trigger/L1THGCal/plugins/backend/HGCalTowerProcessor.cc @@ -6,7 +6,6 @@ #include "Geometry/Records/interface/CaloGeometryRecord.h" #include "L1Trigger/L1THGCal/interface/HGCalTriggerGeometryBase.h" -#include "L1Trigger/L1THGCal/interface/HGCalTriggerBackendAlgorithmBase.h" #include "L1Trigger/L1THGCal/interface/backend/HGCalTowerMap3DImpl.h" class HGCalTowerProcessor : public HGCalTowerProcessorBase { diff --git a/L1Trigger/L1THGCal/plugins/geometries/HGCalTriggerGeometryHexImp1.cc b/L1Trigger/L1THGCal/plugins/geometries/HGCalTriggerGeometryHexImp1.cc deleted file mode 100644 index 637cf5b0d07d4..0000000000000 --- a/L1Trigger/L1THGCal/plugins/geometries/HGCalTriggerGeometryHexImp1.cc +++ /dev/null @@ -1,293 +0,0 @@ -#include "FWCore/ParameterSet/interface/FileInPath.h" - -#include "DataFormats/ForwardDetId/interface/HGCalDetId.h" -#include "L1Trigger/L1THGCal/interface/HGCalTriggerGeometryGenericMapping.h" - -#include -#include -#include - -const int HGCalDetId::kHGCalCellMask; - -class HGCalTriggerGeometryHexImp1 : public HGCalTriggerGeometryGenericMapping { -public: - HGCalTriggerGeometryHexImp1(const edm::ParameterSet& conf); - - void initialize(const CaloGeometry*) final; - void initialize(const HGCalGeometry*, const HGCalGeometry*, const HGCalGeometry*) final; - void initialize(const HGCalGeometry*, const HGCalGeometry*, const HGCalGeometry*, const HGCalGeometry*) final; - -private: - edm::FileInPath l1tCellsMapping_; - edm::FileInPath l1tModulesMapping_; - - void fillMaps(); - void buildTriggerCellsAndModules(); -}; - -/*****************************************************************/ -HGCalTriggerGeometryHexImp1::HGCalTriggerGeometryHexImp1(const edm::ParameterSet& conf) - : HGCalTriggerGeometryGenericMapping(conf), - l1tCellsMapping_(conf.getParameter("L1TCellsMapping")), - l1tModulesMapping_(conf.getParameter("L1TModulesMapping")) -/*****************************************************************/ -{} - -/*****************************************************************/ -void HGCalTriggerGeometryHexImp1::initialize(const CaloGeometry* calo_geometry) -/*****************************************************************/ -{ - edm::LogWarning("HGCalTriggerGeometry") << "WARNING: This HGCal trigger geometry is incomplete.\n" - << "WARNING: There is no neighbor information.\n"; - - setCaloGeometry(calo_geometry); - fillMaps(); - buildTriggerCellsAndModules(); -} - -/*****************************************************************/ -void HGCalTriggerGeometryHexImp1::initialize(const HGCalGeometry* hgc_ee_geometry, - const HGCalGeometry* hgc_hsi_geometry, - const HGCalGeometry* hgc_hsc_geometry) -/*****************************************************************/ -{ - throw cms::Exception("BadGeometry") - << "HGCalTriggerGeometryHexImp1 geometry cannot be initialized with the V9 HGCAL geometry"; -} - -/*****************************************************************/ -void HGCalTriggerGeometryHexImp1::initialize(const HGCalGeometry* hgc_ee_geometry, - const HGCalGeometry* hgc_hsi_geometry, - const HGCalGeometry* hgc_hsc_geometry, - const HGCalGeometry* hgc_nose_geometry) -/*****************************************************************/ -{ - throw cms::Exception("BadGeometry") - << "HGCalTriggerGeometryHexImp1 geometry cannot be initialized with the V9 HGCAL+NOSE geometry"; -} - -/*****************************************************************/ -void HGCalTriggerGeometryHexImp1::fillMaps() -/*****************************************************************/ -{ - // - // read module mapping file - std::unordered_map wafer_to_module_ee; - std::unordered_map wafer_to_module_fh; - std::unordered_map> module_to_wafers_ee; - std::unordered_map> module_to_wafers_fh; - std::ifstream l1tModulesMappingStream(l1tModulesMapping_.fullPath()); - if (!l1tModulesMappingStream.is_open()) - edm::LogError("HGCalTriggerGeometry") << "Cannot open L1TModulesMapping file\n"; - short subdet = 0; - short wafer = 0; - short module = 0; - for (; l1tModulesMappingStream >> subdet >> wafer >> module;) { - if (subdet == 3) { - wafer_to_module_ee.emplace(wafer, module); - auto itr_insert = module_to_wafers_ee.emplace(module, std::map()); - itr_insert.first->second.emplace(wafer, 0); - } else if (subdet == 4) { - wafer_to_module_fh.emplace(wafer, module); - auto itr_insert = module_to_wafers_fh.emplace(module, std::map()); - itr_insert.first->second.emplace(wafer, 0); - } else - edm::LogWarning("HGCalTriggerGeometry") - << "Unsupported subdetector number (" << subdet << ") in L1TModulesMapping file\n"; - } - if (!l1tModulesMappingStream.eof()) - edm::LogWarning("HGCalTriggerGeometry") << "Error reading L1TModulesMapping '" << wafer << " " << module << "' \n"; - l1tModulesMappingStream.close(); - // read trigger cell mapping file - std::map, short> cells_to_trigger_cells; - std::unordered_map number_trigger_cells_in_wafers; // the map key is the wafer type - std::ifstream l1tCellsMappingStream(l1tCellsMapping_.fullPath()); - if (!l1tCellsMappingStream.is_open()) - edm::LogError("HGCalTriggerGeometry") << "Cannot open L1TCellsMapping file\n"; - short waferType = 0; - short cell = 0; - short triggerCell = 0; - for (; l1tCellsMappingStream >> waferType >> cell >> triggerCell;) { - cells_to_trigger_cells.emplace(std::make_pair((waferType ? 1 : -1), cell), triggerCell); - auto itr_insert = number_trigger_cells_in_wafers.emplace((waferType ? 1 : -1), 0); - if (triggerCell + 1 > itr_insert.first->second) - itr_insert.first->second = triggerCell + 1; - } - if (!l1tCellsMappingStream.eof()) - edm::LogWarning("HGCalTriggerGeometry") - << "Error reading L1TCellsMapping'" << waferType << " " << cell << " " << triggerCell << "' \n"; - l1tCellsMappingStream.close(); - // For each wafer compute the trigger cell offset according to the wafer position inside - // the module. The first wafer will have an offset equal to 0, the second an offset equal to the - // number of trigger cells in the first wafer, etc. - short offset = 0; - for (auto& module_wafers : module_to_wafers_ee) { - offset = 0; - for (auto& wafer_offset : module_wafers.second) { - wafer_offset.second = offset; - int wafer_type = (eeTopology().dddConstants().waferTypeT(wafer_offset.first) == 1 ? 1 : -1); - offset += number_trigger_cells_in_wafers.at(wafer_type); - } - } - for (auto& module_wafers : module_to_wafers_fh) { - offset = 0; - for (auto& wafer_offset : module_wafers.second) { - wafer_offset.second = offset; - int wafer_type = (fhTopology().dddConstants().waferTypeT(wafer_offset.first) == 1 ? 1 : -1); - offset += number_trigger_cells_in_wafers.at(wafer_type); - } - } - // - // Loop over HGC cells - // EE - for (const auto& id : eeGeometry()->getValidGeomDetIds()) { - if (id.rawId() == 0) - continue; - HGCalDetId waferDetId(id); - short module = wafer_to_module_ee[waferDetId.wafer()]; - short triggercell_offset = module_to_wafers_ee.at(module).at(waferDetId.wafer()); - int nCells = eeTopology().dddConstants().numberCellsHexagon(waferDetId.wafer()); - for (int c = 0; c < nCells; c++) { - short triggerCellId = cells_to_trigger_cells[std::make_pair(waferDetId.waferType(), c)]; - // Fill cell -> trigger cell mapping - HGCalDetId cellDetId(ForwardSubdetector(waferDetId.subdetId()), - waferDetId.zside(), - waferDetId.layer(), - waferDetId.waferType(), - waferDetId.wafer(), - c); - // The module id is used instead of the wafer id for the trigger cells - // Since there are several wafers per module, an offset is applied on the HGCalDetId::cell field - 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"; - HGCalDetId triggerCellDetId(ForwardSubdetector(waferDetId.subdetId()), - waferDetId.zside(), - waferDetId.layer(), - waferDetId.waferType(), - module, - triggercell_offset + triggerCellId); - cells_to_trigger_cells_.emplace(cellDetId, triggerCellDetId); - // Fill trigger cell -> module mapping - HGCalDetId moduleDetId(ForwardSubdetector(waferDetId.subdetId()), - waferDetId.zside(), - waferDetId.layer(), - waferDetId.waferType(), - module, - HGCalDetId::kHGCalCellMask); - trigger_cells_to_modules_.emplace(triggerCellDetId, moduleDetId); - } - } - // FH - for (const auto& id : fhGeometry()->getValidGeomDetIds()) { - if (id.rawId() == 0) - continue; - HGCalDetId waferDetId(id); - short module = wafer_to_module_fh[waferDetId.wafer()]; - short triggercell_offset = module_to_wafers_fh.at(module).at(waferDetId.wafer()); - int nCells = fhTopology().dddConstants().numberCellsHexagon(waferDetId.wafer()); - for (int c = 0; c < nCells; c++) { - short triggerCellId = cells_to_trigger_cells[std::make_pair(waferDetId.waferType(), c)]; - // Fill cell -> trigger cell mapping - HGCalDetId cellDetId(ForwardSubdetector(waferDetId.subdetId()), - waferDetId.zside(), - waferDetId.layer(), - waferDetId.waferType(), - waferDetId.wafer(), - c); - // The module id is used instead of the wafer id for the trigger cells - // Since there are several wafers per module, an offset is applied on the HGCalDetId::cell field - 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"; - HGCalDetId triggerCellDetId(ForwardSubdetector(waferDetId.subdetId()), - waferDetId.zside(), - waferDetId.layer(), - waferDetId.waferType(), - module, - triggercell_offset + triggerCellId); - cells_to_trigger_cells_.emplace(cellDetId, triggerCellDetId); - // Fill trigger cell -> module mapping - HGCalDetId moduleDetId(ForwardSubdetector(waferDetId.subdetId()), - waferDetId.zside(), - waferDetId.layer(), - waferDetId.waferType(), - module, - HGCalDetId::kHGCalCellMask); - trigger_cells_to_modules_.emplace(triggerCellDetId, moduleDetId); - } - } -} - -/*****************************************************************/ -void HGCalTriggerGeometryHexImp1::buildTriggerCellsAndModules() -/*****************************************************************/ -{ - // - // Build trigger cells and fill map - typedef HGCalTriggerGeometry::TriggerCell::list_type list_cells; - // make list of cells in trigger cells - std::unordered_map trigger_cells_to_cells; - for (const auto& cell_triggerCell : cells_to_trigger_cells_) { - unsigned cell = cell_triggerCell.first; - unsigned triggerCell = cell_triggerCell.second; - auto itr_exist = trigger_cells_to_cells.emplace(triggerCell, list_cells()); - itr_exist.first->second.emplace(cell); - } - for (const auto& triggerCell_cells : trigger_cells_to_cells) { - unsigned triggerCellId = triggerCell_cells.first; - list_cells cellIds = triggerCell_cells.second; - // Position: barycenter of the trigger cell. - Basic3DVector triggerCellVector(0., 0., 0.); - for (const auto& cell : cellIds) { - HGCalDetId cellDetId(cell); - triggerCellVector += (cellDetId.subdetId() == ForwardSubdetector::HGCEE ? eeGeometry()->getPosition(cellDetId) - : fhGeometry()->getPosition(cellDetId)) - .basicVector(); - } - GlobalPoint triggerCellPoint(triggerCellVector / cellIds.size()); - const auto& triggerCellToModuleItr = trigger_cells_to_modules_.find(triggerCellId); - unsigned moduleId = (triggerCellToModuleItr != trigger_cells_to_modules_.end() - ? triggerCellToModuleItr->second - : 0); // 0 if the trigger cell doesn't belong to a module - // FIXME: empty neighbours - trigger_cells_.emplace(triggerCellId, - std::make_unique( - triggerCellId, moduleId, triggerCellPoint, list_cells(), cellIds)); - } - // - // Build modules and fill map - typedef HGCalTriggerGeometry::Module::list_type list_triggerCells; - typedef HGCalTriggerGeometry::Module::tc_map_type tc_map_to_cells; - // make list of trigger cells in modules - std::unordered_map modules_to_trigger_cells; - for (const auto& triggerCell_module : trigger_cells_to_modules_) { - unsigned triggerCell = triggerCell_module.first; - unsigned module = triggerCell_module.second; - auto itr_exist = modules_to_trigger_cells.emplace(module, list_triggerCells()); - itr_exist.first->second.emplace(triggerCell); - } - for (const auto& module_triggerCell : modules_to_trigger_cells) { - unsigned moduleId = module_triggerCell.first; - list_triggerCells triggerCellIds = module_triggerCell.second; - tc_map_to_cells cellsInTriggerCells; - // Position: barycenter of the module, from trigger cell positions - Basic3DVector moduleVector(0., 0., 0.); - for (const auto& triggerCell : triggerCellIds) { - const auto& cells_in_tc = trigger_cells_to_cells.at(triggerCell); - for (const unsigned cell : cells_in_tc) { - cellsInTriggerCells.emplace(triggerCell, cell); - } - moduleVector += trigger_cells_.at(triggerCell)->position().basicVector(); - } - GlobalPoint modulePoint(moduleVector / triggerCellIds.size()); - // FIXME: empty neighbours - modules_.emplace(moduleId, - std::make_unique( - moduleId, modulePoint, list_triggerCells(), triggerCellIds, cellsInTriggerCells)); - } -} - -DEFINE_EDM_PLUGIN(HGCalTriggerGeometryFactory, HGCalTriggerGeometryHexImp1, "HGCalTriggerGeometryHexImp1"); diff --git a/L1Trigger/L1THGCal/plugins/geometries/HGCalTriggerGeometryHexImp2.cc b/L1Trigger/L1THGCal/plugins/geometries/HGCalTriggerGeometryHexImp2.cc deleted file mode 100644 index dcd4189e62a15..0000000000000 --- a/L1Trigger/L1THGCal/plugins/geometries/HGCalTriggerGeometryHexImp2.cc +++ /dev/null @@ -1,825 +0,0 @@ -#include "FWCore/ParameterSet/interface/FileInPath.h" - -#include "DataFormats/ForwardDetId/interface/ForwardSubdetector.h" -#include "DataFormats/ForwardDetId/interface/HGCalDetId.h" -#include "L1Trigger/L1THGCal/interface/HGCalTriggerGeometryBase.h" - -#include -#include -#include -#include - -class HGCalTriggerGeometryHexImp2 : public HGCalTriggerGeometryBase { -public: - HGCalTriggerGeometryHexImp2(const edm::ParameterSet& conf); - - void initialize(const CaloGeometry*) final; - void initialize(const HGCalGeometry*, const HGCalGeometry*, const HGCalGeometry*) final; - void initialize(const HGCalGeometry*, const HGCalGeometry*, const HGCalGeometry*, const HGCalGeometry*) final; - void reset() final; - - unsigned getTriggerCellFromCell(const unsigned) const final; - unsigned getModuleFromCell(const unsigned) const final; - unsigned getModuleFromTriggerCell(const unsigned) const final; - - geom_set getCellsFromTriggerCell(const unsigned) const final; - geom_set getCellsFromModule(const unsigned) const final; - geom_set getTriggerCellsFromModule(const unsigned) const final; - - geom_ordered_set getOrderedCellsFromModule(const unsigned) const final; - geom_ordered_set getOrderedTriggerCellsFromModule(const unsigned) const final; - - geom_set getNeighborsFromTriggerCell(const unsigned) const final; - - unsigned getLinksInModule(const unsigned module_id) const final; - unsigned getModuleSize(const unsigned module_id) const final; - - GlobalPoint getTriggerCellPosition(const unsigned) const final; - GlobalPoint getModulePosition(const unsigned) const final; - - bool validCell(const unsigned) const final; - bool validTriggerCell(const unsigned) const final; - bool disconnectedModule(const unsigned) const final; - unsigned lastTriggerLayer() const final; - unsigned triggerLayer(const unsigned) const final; - -private: - edm::FileInPath l1tCellsMapping_; - edm::FileInPath l1tCellNeighborsMapping_; - edm::FileInPath l1tWaferNeighborsMapping_; - edm::FileInPath l1tModulesMapping_; - - // module related maps - std::unordered_map wafer_to_module_ee_; - std::unordered_map wafer_to_module_fh_; - std::unordered_multimap module_to_wafers_ee_; - std::unordered_multimap module_to_wafers_fh_; - - // trigger cell related maps - std::map, short> cells_to_trigger_cells_; // FIXME: something else than map? - std::multimap, short> trigger_cells_to_cells_; // FIXME: something else than map? - std::unordered_map number_trigger_cells_in_wafers_; // the map key is the wafer type - std::unordered_map number_cells_in_wafers_; // the map key is the wafer type - std::unordered_set invalid_triggercells_; - - // neighbor related maps - // trigger cell neighbors: - // - The key includes the trigger cell id and the wafer configuration. - // The wafer configuration is a 7 bits word encoding the type - // (small or large cells) of the wafer containing the trigger cell - // (central wafer) as well as the type of the 6 surrounding wafers - // - The value is a set of (wafer_idx, trigger_cell_id) - // wafer_idx is a number between 0 and 7. 0=central wafer, 1..7=surrounding - // wafers - std::unordered_map>> trigger_cell_neighbors_; - // wafer neighbors: - // List of the 6 surrounding neighbors around each wafer - std::unordered_map> wafer_neighbors_ee_; - std::unordered_map> wafer_neighbors_fh_; - - void fillMaps(); - void fillNeighborMaps(); - void fillInvalidTriggerCells(); - unsigned packTriggerCell(unsigned, const std::vector&) const; - // returns transverse wafer type: -1=coarse, 1=fine, 0=undefined - int detIdWaferType(unsigned subdet, short wafer) const; - bool validCellId(unsigned subdet, unsigned cell_id) const; - bool validTriggerCellFromCells(const unsigned) const; -}; - -HGCalTriggerGeometryHexImp2::HGCalTriggerGeometryHexImp2(const edm::ParameterSet& conf) - : HGCalTriggerGeometryBase(conf), - l1tCellsMapping_(conf.getParameter("L1TCellsMapping")), - l1tCellNeighborsMapping_(conf.getParameter("L1TCellNeighborsMapping")), - l1tWaferNeighborsMapping_(conf.getParameter("L1TWaferNeighborsMapping")), - l1tModulesMapping_(conf.getParameter("L1TModulesMapping")) {} - -void HGCalTriggerGeometryHexImp2::reset() { - wafer_to_module_ee_.clear(); - wafer_to_module_fh_.clear(); - module_to_wafers_ee_.clear(); - module_to_wafers_fh_.clear(); - cells_to_trigger_cells_.clear(); - trigger_cells_to_cells_.clear(); - number_trigger_cells_in_wafers_.clear(); - number_cells_in_wafers_.clear(); -} - -void HGCalTriggerGeometryHexImp2::initialize(const CaloGeometry* calo_geometry) { - setCaloGeometry(calo_geometry); - fillMaps(); - fillNeighborMaps(); - fillInvalidTriggerCells(); -} - -void HGCalTriggerGeometryHexImp2::initialize(const HGCalGeometry* hgc_ee_geometry, - const HGCalGeometry* hgc_hsi_geometry, - const HGCalGeometry* hgc_hsc_geometry) { - throw cms::Exception("BadGeometry") - << "HGCalTriggerGeometryHexImp2 geometry cannot be initialized with the V9 HGCAL geometry"; -} - -void HGCalTriggerGeometryHexImp2::initialize(const HGCalGeometry* hgc_ee_geometry, - const HGCalGeometry* hgc_hsi_geometry, - const HGCalGeometry* hgc_hsc_geometry, - const HGCalGeometry* hgc_nose_geometry) { - throw cms::Exception("BadGeometry") - << "HGCalTriggerGeometryHexImp2 geometry cannot be initialized with the V9 HGCAL+Nose geometry"; -} - -unsigned HGCalTriggerGeometryHexImp2::getTriggerCellFromCell(const unsigned cell_id) const { - if (DetId(cell_id).det() == DetId::Hcal) - return 0; - HGCalDetId cell_det_id(cell_id); - int wafer_type = cell_det_id.waferType(); - unsigned cell = cell_det_id.cell(); - // FIXME: better way to do this cell->TC mapping? - auto trigger_cell_itr = cells_to_trigger_cells_.find(std::make_pair(wafer_type, cell)); - if (trigger_cell_itr == cells_to_trigger_cells_.end()) { - throw cms::Exception("BadGeometry") << "HGCalTriggerGeometry: HGCal cell " << cell - << " is not mapped to any trigger cell for the wafer type " << wafer_type - << ". The trigger cell mapping should be modified.\n"; - } - unsigned trigger_cell = trigger_cell_itr->second; - return HGCalDetId((ForwardSubdetector)cell_det_id.subdetId(), - cell_det_id.zside(), - cell_det_id.layer(), - cell_det_id.waferType(), - cell_det_id.wafer(), - trigger_cell) - .rawId(); -} - -unsigned HGCalTriggerGeometryHexImp2::getModuleFromCell(const unsigned cell_id) const { - if (DetId(cell_id).det() == DetId::Hcal) - return 0; - HGCalDetId cell_det_id(cell_id); - unsigned wafer = cell_det_id.wafer(); - unsigned subdet = cell_det_id.subdetId(); - std::unordered_map::const_iterator module_itr; - bool out_of_range_error = false; - switch (subdet) { - case ForwardSubdetector::HGCEE: - module_itr = wafer_to_module_ee_.find(wafer); - if (module_itr == wafer_to_module_ee_.end()) - out_of_range_error = true; - break; - case ForwardSubdetector::HGCHEF: - module_itr = wafer_to_module_fh_.find(wafer); - if (module_itr == wafer_to_module_fh_.end()) - out_of_range_error = true; - break; - default: - edm::LogError("HGCalTriggerGeometry") << "Unknown wafer->module mapping for subdet " << subdet << "\n"; - return 0; - }; - if (out_of_range_error) { - throw cms::Exception("BadGeometry") << "HGCalTriggerGeometry: Wafer " << wafer - << " is not mapped to any trigger module for subdetector " << subdet - << ". The module mapping should be modified. See " - "https://twiki.cern.ch/twiki/bin/viewauth/CMS/" - "HGCALTriggerPrimitivesSimulation#Trigger_geometry for details.\n"; - } - unsigned module = module_itr->second; - return HGCalDetId((ForwardSubdetector)cell_det_id.subdetId(), - cell_det_id.zside(), - cell_det_id.layer(), - cell_det_id.waferType(), - module, - HGCalDetId::kHGCalCellMask) - .rawId(); -} - -unsigned HGCalTriggerGeometryHexImp2::getModuleFromTriggerCell(const unsigned trigger_cell_id) const { - HGCalDetId trigger_cell_det_id(trigger_cell_id); - unsigned wafer = trigger_cell_det_id.wafer(); - unsigned subdet = trigger_cell_det_id.subdetId(); - if (subdet == ForwardSubdetector::HGCHEB) - return 0; - std::unordered_map::const_iterator module_itr; - bool out_of_range_error = false; - switch (subdet) { - case ForwardSubdetector::HGCEE: - module_itr = wafer_to_module_ee_.find(wafer); - if (module_itr == wafer_to_module_ee_.end()) - out_of_range_error = true; - break; - case ForwardSubdetector::HGCHEF: - module_itr = wafer_to_module_fh_.find(wafer); - if (module_itr == wafer_to_module_fh_.end()) - out_of_range_error = true; - break; - default: - edm::LogError("HGCalTriggerGeometry") << "Unknown wafer->module mapping for subdet " << subdet << "\n"; - return 0; - }; - if (out_of_range_error) { - throw cms::Exception("BadGeometry") << "HGCalTriggerGeometry: Wafer " << wafer - << " is not mapped to any trigger module for subdetector " << subdet - << ". The module mapping should be modified. See " - "https://twiki.cern.ch/twiki/bin/viewauth/CMS/" - "HGCALTriggerPrimitivesSimulation#Trigger_geometry for details.\n"; - } - unsigned module = module_itr->second; - return HGCalDetId((ForwardSubdetector)trigger_cell_det_id.subdetId(), - trigger_cell_det_id.zside(), - trigger_cell_det_id.layer(), - trigger_cell_det_id.waferType(), - module, - HGCalDetId::kHGCalCellMask) - .rawId(); -} - -HGCalTriggerGeometryBase::geom_set HGCalTriggerGeometryHexImp2::getCellsFromTriggerCell( - const unsigned trigger_cell_id) const { - HGCalDetId trigger_cell_det_id(trigger_cell_id); - unsigned subdet = trigger_cell_det_id.subdetId(); - if (subdet == ForwardSubdetector::HGCHEB) - return geom_set(); - int wafer_type = trigger_cell_det_id.waferType(); - unsigned trigger_cell = trigger_cell_det_id.cell(); - // FIXME: better way to do this TC->cell mapping? - const auto& cell_range = trigger_cells_to_cells_.equal_range(std::make_pair(wafer_type, trigger_cell)); - geom_set cell_det_ids; - for (auto tc_c_itr = cell_range.first; tc_c_itr != cell_range.second; tc_c_itr++) { - cell_det_ids.emplace(HGCalDetId((ForwardSubdetector)trigger_cell_det_id.subdetId(), - trigger_cell_det_id.zside(), - trigger_cell_det_id.layer(), - trigger_cell_det_id.waferType(), - trigger_cell_det_id.wafer(), - tc_c_itr->second) - .rawId()); - } - return cell_det_ids; -} - -HGCalTriggerGeometryBase::geom_set HGCalTriggerGeometryHexImp2::getCellsFromModule(const unsigned module_id) const { - HGCalDetId module_det_id(module_id); - unsigned subdet = module_det_id.subdetId(); - if (subdet == ForwardSubdetector::HGCHEB) - return geom_set(); - unsigned module = module_det_id.wafer(); - std::pair::const_iterator, std::unordered_multimap::const_iterator> - wafer_itrs; - switch (subdet) { - case ForwardSubdetector::HGCEE: - wafer_itrs = module_to_wafers_ee_.equal_range(module); - break; - case ForwardSubdetector::HGCHEF: - wafer_itrs = module_to_wafers_fh_.equal_range(module); - break; - default: - edm::LogError("HGCalTriggerGeometry") << "Unknown module->wafers mapping for subdet " << subdet << "\n"; - return geom_set(); - }; - geom_set cell_det_ids; - for (auto wafer_itr = wafer_itrs.first; wafer_itr != wafer_itrs.second; wafer_itr++) { - int wafer_type = detIdWaferType(subdet, wafer_itr->second); - if (wafer_type == 0) - wafer_type = module_det_id.waferType(); - // loop on the cells in each wafer and return valid ones - for (int cell = 0; cell < number_cells_in_wafers_.at(wafer_type); cell++) { - HGCalDetId cell_id((ForwardSubdetector)module_det_id.subdetId(), - module_det_id.zside(), - module_det_id.layer(), - wafer_type, - wafer_itr->second, - cell); - if (validCellId(subdet, cell_id)) - cell_det_ids.emplace(cell_id.rawId()); - } - } - return cell_det_ids; -} - -HGCalTriggerGeometryBase::geom_ordered_set HGCalTriggerGeometryHexImp2::getOrderedCellsFromModule( - const unsigned module_id) const { - HGCalDetId module_det_id(module_id); - unsigned subdet = module_det_id.subdetId(); - if (subdet == ForwardSubdetector::HGCHEB) - return geom_ordered_set(); - unsigned module = module_det_id.wafer(); - std::pair::const_iterator, std::unordered_multimap::const_iterator> - wafer_itrs; - switch (subdet) { - case ForwardSubdetector::HGCEE: - wafer_itrs = module_to_wafers_ee_.equal_range(module); - break; - case ForwardSubdetector::HGCHEF: - wafer_itrs = module_to_wafers_fh_.equal_range(module); - break; - default: - edm::LogError("HGCalTriggerGeometry") << "Unknown module->wafers mapping for subdet " << subdet << "\n"; - return geom_ordered_set(); - }; - geom_ordered_set cell_det_ids; - for (auto wafer_itr = wafer_itrs.first; wafer_itr != wafer_itrs.second; wafer_itr++) { - int wafer_type = detIdWaferType(subdet, wafer_itr->second); - if (wafer_type == 0) - wafer_type = module_det_id.waferType(); - // loop on the cells in each wafer - for (int cell = 0; cell < number_cells_in_wafers_.at(wafer_type); cell++) { - HGCalDetId cell_id((ForwardSubdetector)module_det_id.subdetId(), - module_det_id.zside(), - module_det_id.layer(), - wafer_type, - wafer_itr->second, - cell); - if (validCellId(subdet, cell_id)) - cell_det_ids.emplace(cell_id.rawId()); - } - } - return cell_det_ids; -} - -HGCalTriggerGeometryBase::geom_set HGCalTriggerGeometryHexImp2::getTriggerCellsFromModule( - const unsigned module_id) const { - HGCalDetId module_det_id(module_id); - unsigned subdet = module_det_id.subdetId(); - if (subdet == ForwardSubdetector::HGCHEB) - return geom_set(); - unsigned module = module_det_id.wafer(); - std::pair::const_iterator, std::unordered_multimap::const_iterator> - wafer_itrs; - switch (subdet) { - case ForwardSubdetector::HGCEE: - wafer_itrs = module_to_wafers_ee_.equal_range(module); - break; - case ForwardSubdetector::HGCHEF: - wafer_itrs = module_to_wafers_fh_.equal_range(module); - break; - default: - edm::LogError("HGCalTriggerGeometry") << "Unknown module->wafers mapping for subdet " << subdet << "\n"; - return geom_set(); - }; - geom_set trigger_cell_det_ids; - // loop on the wafers included in the module - for (auto wafer_itr = wafer_itrs.first; wafer_itr != wafer_itrs.second; wafer_itr++) { - int wafer_type = detIdWaferType(subdet, wafer_itr->second); - if (wafer_type == 0) - wafer_type = module_det_id.waferType(); - // loop on the trigger cells in each wafer - for (int trigger_cell = 0; trigger_cell < number_trigger_cells_in_wafers_.at(wafer_type); trigger_cell++) { - HGCalDetId trigger_cell_id((ForwardSubdetector)module_det_id.subdetId(), - module_det_id.zside(), - module_det_id.layer(), - wafer_type, - wafer_itr->second, - trigger_cell); - if (validTriggerCell(trigger_cell_id)) - trigger_cell_det_ids.emplace(trigger_cell_id.rawId()); - } - } - return trigger_cell_det_ids; -} - -HGCalTriggerGeometryBase::geom_ordered_set HGCalTriggerGeometryHexImp2::getOrderedTriggerCellsFromModule( - const unsigned module_id) const { - HGCalDetId module_det_id(module_id); - unsigned subdet = module_det_id.subdetId(); - if (subdet == ForwardSubdetector::HGCHEB) - return geom_ordered_set(); - unsigned module = module_det_id.wafer(); - std::pair::const_iterator, std::unordered_multimap::const_iterator> - wafer_itrs; - switch (subdet) { - case ForwardSubdetector::HGCEE: - wafer_itrs = module_to_wafers_ee_.equal_range(module); - break; - case ForwardSubdetector::HGCHEF: - wafer_itrs = module_to_wafers_fh_.equal_range(module); - break; - default: - edm::LogError("HGCalTriggerGeometry") << "Unknown module->wafers mapping for subdet " << subdet << "\n"; - return geom_ordered_set(); - }; - geom_ordered_set trigger_cell_det_ids; - // loop on the wafers included in the module - for (auto wafer_itr = wafer_itrs.first; wafer_itr != wafer_itrs.second; wafer_itr++) { - int wafer_type = detIdWaferType(subdet, wafer_itr->second); - if (wafer_type == 0) - wafer_type = module_det_id.waferType(); - // loop on the trigger cells in each wafer - for (int trigger_cell = 0; trigger_cell < number_trigger_cells_in_wafers_.at(wafer_type); trigger_cell++) { - HGCalDetId trigger_cell_id((ForwardSubdetector)module_det_id.subdetId(), - module_det_id.zside(), - module_det_id.layer(), - wafer_type, - wafer_itr->second, - trigger_cell); - if (validTriggerCell(trigger_cell_id)) - trigger_cell_det_ids.emplace(trigger_cell_id.rawId()); - } - } - return trigger_cell_det_ids; -} - -HGCalTriggerGeometryBase::geom_set HGCalTriggerGeometryHexImp2::getNeighborsFromTriggerCell( - const unsigned trigger_cell_id) const { - HGCalDetId trigger_cell_det_id(trigger_cell_id); - unsigned wafer = trigger_cell_det_id.wafer(); - int wafer_type = trigger_cell_det_id.waferType(); - unsigned subdet = trigger_cell_det_id.subdetId(); - unsigned trigger_cell = trigger_cell_det_id.cell(); - if (subdet == ForwardSubdetector::HGCHEB) - return geom_set(); - // Retrieve surrounding wafers (around the wafer containing - // the trigger cell) - std::unordered_map>::const_iterator surrounding_wafers_itr; - bool out_of_range_error = false; - switch (subdet) { - case ForwardSubdetector::HGCEE: - surrounding_wafers_itr = wafer_neighbors_ee_.find(wafer); - if (surrounding_wafers_itr == wafer_neighbors_ee_.end()) - out_of_range_error = true; - break; - case ForwardSubdetector::HGCHEF: - surrounding_wafers_itr = wafer_neighbors_fh_.find(wafer); - if (surrounding_wafers_itr == wafer_neighbors_fh_.end()) - out_of_range_error = true; - break; - default: - edm::LogError("HGCalTriggerGeometry") << "Unknown wafer neighbours for subdet " << subdet << "\n"; - return geom_set(); - } - if (out_of_range_error) { - throw cms::Exception("BadGeometry") << "HGCalTriggerGeometry: Neighbors are not defined for wafer " << wafer - << " in subdetector " << subdet - << ". The wafer neighbor mapping should be modified. \n"; - }; - const std::vector& surrounding_wafers = surrounding_wafers_itr->second; - // Find the types of the surrounding wafers - std::vector types; - types.reserve(surrounding_wafers.size() + 1); // includes the central wafer -> +1 - types.emplace_back(wafer_type); - for (const auto w : surrounding_wafers) { - // if no neighbor, use the same type as the central one - // to create the wafer configuration - int wt = wafer_type; - if (w != -1) - wt = detIdWaferType(subdet, w); - if (wt == 0) - return geom_set(); // invalid wafer type - types.emplace_back(wt); - } - // retrieve neighbors - unsigned trigger_cell_key = packTriggerCell(trigger_cell, types); - geom_set neighbor_detids; - auto neighbors_itr = trigger_cell_neighbors_.find(trigger_cell_key); - if (neighbors_itr == trigger_cell_neighbors_.end()) { - throw cms::Exception("BadGeometry") << "HGCalTriggerGeometry: Neighbors are not defined for trigger cell " - << trigger_cell << " with wafer configuration " - << std::bitset<7>(trigger_cell_key >> 8) - << ". The trigger cell neighbor mapping should be modified. \n"; - } - const auto& neighbors = neighbors_itr->second; - // create HGCalDetId of neighbors and check their validity - neighbor_detids.reserve(neighbors.size()); - for (const auto& wafer_tc : neighbors) { - if (wafer_tc.first - 1 >= (int)surrounding_wafers.size()) { - throw cms::Exception("BadGeometry") - << "HGCalTriggerGeometry: Undefined wafer neighbor number " << wafer_tc.first << " for wafer " << wafer - << " and trigger cell " << trigger_cell << ". The neighbor mapping files should be modified."; - } - int neighbor_wafer = (wafer_tc.first == 0 ? wafer : surrounding_wafers.at(wafer_tc.first - 1)); - if (neighbor_wafer == -1) - continue; // non-existing wafer - int type = types.at(wafer_tc.first); - HGCalDetId neighbor_det_id((ForwardSubdetector)trigger_cell_det_id.subdetId(), - trigger_cell_det_id.zside(), - trigger_cell_det_id.layer(), - type, - neighbor_wafer, - wafer_tc.second); - if (validTriggerCell(neighbor_det_id.rawId())) { - neighbor_detids.emplace(neighbor_det_id.rawId()); - } - } - return neighbor_detids; -} - -unsigned HGCalTriggerGeometryHexImp2::getLinksInModule(const unsigned module_id) const { return 1; } - -unsigned HGCalTriggerGeometryHexImp2::getModuleSize(const unsigned module_id) const { return 1; } - -GlobalPoint HGCalTriggerGeometryHexImp2::getTriggerCellPosition(const unsigned trigger_cell_det_id) const { - // Position: barycenter of the trigger cell. - Basic3DVector triggerCellVector(0., 0., 0.); - const auto cell_ids = getCellsFromTriggerCell(trigger_cell_det_id); - if (cell_ids.empty()) - return GlobalPoint(0, 0, 0); - for (const auto& cell : cell_ids) { - HGCalDetId cellDetId(cell); - triggerCellVector += (cellDetId.subdetId() == ForwardSubdetector::HGCEE ? eeGeometry()->getPosition(cellDetId) - : fhGeometry()->getPosition(cellDetId)) - .basicVector(); - } - return GlobalPoint(triggerCellVector / cell_ids.size()); -} - -GlobalPoint HGCalTriggerGeometryHexImp2::getModulePosition(const unsigned module_det_id) const { - // Position: barycenter of the module. - Basic3DVector moduleVector(0., 0., 0.); - const auto cell_ids = getCellsFromModule(module_det_id); - if (cell_ids.empty()) - return GlobalPoint(0, 0, 0); - for (const auto& cell : cell_ids) { - HGCalDetId cellDetId(cell); - moduleVector += (cellDetId.subdetId() == ForwardSubdetector::HGCEE ? eeGeometry()->getPosition(cellDetId) - : fhGeometry()->getPosition(cellDetId)) - .basicVector(); - } - return GlobalPoint(moduleVector / cell_ids.size()); -} - -void HGCalTriggerGeometryHexImp2::fillMaps() { - // - // read module mapping file - std::ifstream l1tModulesMappingStream(l1tModulesMapping_.fullPath()); - if (!l1tModulesMappingStream.is_open()) { - throw cms::Exception("MissingDataFile") << "Cannot open HGCalTriggerGeometry L1TModulesMapping file\n"; - } - short subdet = 0; - short wafer = 0; - short module = 0; - for (; l1tModulesMappingStream >> subdet >> wafer >> module;) { - int wafer_type = detIdWaferType(subdet, wafer); - switch (subdet) { - case ForwardSubdetector::HGCEE: { - // fill module <-> wafers mappings - wafer_to_module_ee_.emplace(wafer, module); - module_to_wafers_ee_.emplace(module, wafer); - // fill number of cells for a given wafer type - number_cells_in_wafers_.emplace(wafer_type, eeTopology().dddConstants().numberCellsHexagon(wafer)); - break; - } - case ForwardSubdetector::HGCHEF: { - // fill module <-> wafers mappings - wafer_to_module_fh_.emplace(wafer, module); - module_to_wafers_fh_.emplace(module, wafer); - // fill number of cells for a given wafer type - number_cells_in_wafers_.emplace(wafer_type, fhTopology().dddConstants().numberCellsHexagon(wafer)); - break; - } - default: - edm::LogWarning("HGCalTriggerGeometry") - << "Unsupported subdetector number (" << subdet << ") in L1TModulesMapping file\n"; - break; - } - } - if (!l1tModulesMappingStream.eof()) - edm::LogWarning("HGCalTriggerGeometry") << "Error reading L1TModulesMapping '" << wafer << " " << module << "' \n"; - l1tModulesMappingStream.close(); - // read trigger cell mapping file - std::ifstream l1tCellsMappingStream(l1tCellsMapping_.fullPath()); - if (!l1tCellsMappingStream.is_open()) { - throw cms::Exception("MissingDataFile") << "Cannot open HGCalTriggerGeometry L1TCellsMapping file\n"; - } - short waferType = 0; - short cell = 0; - short triggerCell = 0; - for (; l1tCellsMappingStream >> waferType >> cell >> triggerCell;) { - // fill cell <-> trigger cell mappings - cells_to_trigger_cells_.emplace(std::make_pair((waferType ? 1 : -1), cell), triggerCell); - trigger_cells_to_cells_.emplace(std::make_pair((waferType ? 1 : -1), triggerCell), cell); - // fill number of cells for a given wafer type - auto itr_insert = number_trigger_cells_in_wafers_.emplace((waferType ? 1 : -1), 0); - if (triggerCell + 1 > itr_insert.first->second) - itr_insert.first->second = triggerCell + 1; - } - if (!l1tCellsMappingStream.eof()) - edm::LogWarning("HGCalTriggerGeometry") - << "Error reading L1TCellsMapping'" << waferType << " " << cell << " " << triggerCell << "' \n"; - l1tCellsMappingStream.close(); -} - -void HGCalTriggerGeometryHexImp2::fillNeighborMaps() { - // Fill trigger neighbor map - std::ifstream l1tCellNeighborsMappingStream(l1tCellNeighborsMapping_.fullPath()); - if (!l1tCellNeighborsMappingStream.is_open()) { - throw cms::Exception("MissingDataFile") << "Cannot open HGCalTriggerGeometry L1TCellNeighborsMapping file\n"; - } - for (std::array buffer; l1tCellNeighborsMappingStream.getline(&buffer[0], 512);) { - std::string line(&buffer[0]); - // Extract keys consisting of the wafer configuration - // and of the trigger cell id - // Match patterns (X,Y) - // where X is a set of 7 bits - // and Y is a number with less than 4 digits - std::regex key_regex("\\(\\s*[01]{7}\\s*,\\s*\\d{1,3}\\s*\\)"); - std::vector key_tokens{std::sregex_token_iterator(line.begin(), line.end(), key_regex), {}}; - if (key_tokens.size() != 1) { - throw cms::Exception("BadGeometry") << "Syntax error in the L1TCellNeighborsMapping:\n" - << " Cannot find the trigger cell key in line:\n" - << " '" << &buffer[0] << "'\n"; - } - std::regex digits_regex("([01]{7})|(\\d{1,3})"); - std::vector type_tc{ - std::sregex_token_iterator(key_tokens[0].begin(), key_tokens[0].end(), digits_regex), {}}; - // get cell id and wafer configuration - int trigger_cell = std::stoi(type_tc[1]); - std::vector wafer_types; - wafer_types.reserve(type_tc[0].size()); - // Convert waferType coarse=0, fine=1 to coarse=-1, fine=1 - for (const char c : type_tc[0]) - wafer_types.emplace_back((std::stoi(std::string(&c)) ? 1 : -1)); - unsigned map_key = packTriggerCell(trigger_cell, wafer_types); - // Extract neighbors - // Match patterns (X,Y) - // where X is a number with less than 4 digits - // and Y is one single digit (the neighbor wafer, between 0 and 6) - std::regex neighbors_regex("\\(\\s*\\d{1,3}\\s*,\\s*\\d\\s*\\)"); - std::vector neighbors_tokens{std::sregex_token_iterator(line.begin(), line.end(), neighbors_regex), - {}}; - if (neighbors_tokens.empty()) { - throw cms::Exception("BadGeometry") << "Syntax error in the L1TCellNeighborsMapping:\n" - << " Cannot find any neighbor in line:\n" - << " '" << &buffer[0] << "'\n"; - } - auto itr_insert = trigger_cell_neighbors_.emplace(map_key, std::set>()); - for (const auto& neighbor : neighbors_tokens) { - std::vector pair_neighbor{std::sregex_token_iterator(neighbor.begin(), neighbor.end(), digits_regex), - {}}; - short neighbor_wafer(std::stoi(pair_neighbor[1])); - short neighbor_cell(std::stoi(pair_neighbor[0])); - itr_insert.first->second.emplace(neighbor_wafer, neighbor_cell); - } - } - if (!l1tCellNeighborsMappingStream.eof()) - edm::LogWarning("HGCalTriggerGeometry") << "Error reading L1TCellNeighborsMapping'\n"; - l1tCellNeighborsMappingStream.close(); - - // Fill wafer neighbor map - std::ifstream l1tWaferNeighborsMappingStream(l1tWaferNeighborsMapping_.fullPath()); - if (!l1tWaferNeighborsMappingStream.is_open()) { - throw cms::Exception("MissingDataFile") << "Cannot open HGCalTriggerGeometry L1TWaferNeighborsMapping file\n"; - } - for (std::array buffer; l1tWaferNeighborsMappingStream.getline(&buffer[0], 512);) { - std::string line(&buffer[0]); - // split line using spaces as delimiter - std::regex delimiter("\\s+"); - std::vector tokens{std::sregex_token_iterator(line.begin(), line.end(), delimiter, -1), {}}; - if (tokens.size() != 8) { - throw cms::Exception("BadGeometry") - << "Syntax error in the L1TWaferNeighborsMapping in line:\n" - << " '" << &buffer[0] << "'\n" - << " A line should be composed of 8 integers separated by spaces:\n" - << " subdet waferid neighbor1 neighbor2 neighbor3 neighbor4 neighbor5 neighbor6\n"; - } - short subdet(std::stoi(tokens[0])); - short wafer(std::stoi(tokens[1])); - - std::unordered_map>* wafer_neighbors; - switch (subdet) { - case ForwardSubdetector::HGCEE: - wafer_neighbors = &wafer_neighbors_ee_; - break; - case ForwardSubdetector::HGCHEF: - wafer_neighbors = &wafer_neighbors_fh_; - break; - default: - throw cms::Exception("BadGeometry") << "Unknown subdet " << subdet << " in L1TWaferNeighborsMapping:\n" - << " '" << &buffer[0] << "'\n"; - }; - auto wafer_itr = wafer_neighbors->emplace(wafer, std::vector()); - for (auto neighbor_itr = tokens.cbegin() + 2; neighbor_itr != tokens.cend(); ++neighbor_itr) { - wafer_itr.first->second.emplace_back(std::stoi(*neighbor_itr)); - } - } -} - -void HGCalTriggerGeometryHexImp2::fillInvalidTriggerCells() { - unsigned n_layers_ee = eeTopology().dddConstants().layers(true); - for (unsigned layer = 1; layer <= n_layers_ee; layer++) { - for (const auto& wafer_module : wafer_to_module_ee_) { - unsigned wafer = wafer_module.first; - int wafer_type = detIdWaferType(ForwardSubdetector::HGCEE, wafer); - // loop on the trigger cells in each wafer - for (int trigger_cell = 0; trigger_cell < number_trigger_cells_in_wafers_.at(wafer_type); trigger_cell++) { - HGCalDetId trigger_cell_id_neg(ForwardSubdetector::HGCEE, -1, layer, wafer_type, wafer, trigger_cell); - HGCalDetId trigger_cell_id_pos(ForwardSubdetector::HGCEE, 1, layer, wafer_type, wafer, trigger_cell); - if (!validTriggerCellFromCells(trigger_cell_id_neg)) - invalid_triggercells_.emplace(trigger_cell_id_neg.rawId()); - if (!validTriggerCellFromCells(trigger_cell_id_pos)) - invalid_triggercells_.emplace(trigger_cell_id_pos.rawId()); - } - } - } - unsigned n_layers_fh = fhTopology().dddConstants().layers(true); - for (unsigned layer = 1; layer <= n_layers_fh; layer++) { - for (const auto& wafer_module : wafer_to_module_fh_) { - unsigned wafer = wafer_module.first; - int wafer_type = detIdWaferType(ForwardSubdetector::HGCHEF, wafer); - // loop on the trigger cells in each wafer - for (int trigger_cell = 0; trigger_cell < number_trigger_cells_in_wafers_.at(wafer_type); trigger_cell++) { - HGCalDetId trigger_cell_id_neg(ForwardSubdetector::HGCHEF, -1, layer, wafer_type, wafer, trigger_cell); - HGCalDetId trigger_cell_id_pos(ForwardSubdetector::HGCHEF, 1, layer, wafer_type, wafer, trigger_cell); - if (!validTriggerCellFromCells(trigger_cell_id_neg)) - invalid_triggercells_.emplace(trigger_cell_id_neg.rawId()); - if (!validTriggerCellFromCells(trigger_cell_id_pos)) - invalid_triggercells_.emplace(trigger_cell_id_pos.rawId()); - } - } - } -} - -unsigned HGCalTriggerGeometryHexImp2::packTriggerCell(unsigned trigger_cell, - const std::vector& wafer_types) const { - unsigned packed_value = trigger_cell; - for (unsigned i = 0; i < wafer_types.size(); i++) { - // trigger cell id on 8 bits - // wafer configuration bits: 0=coarse, 1=fine - if (wafer_types.at(i) == 1) - packed_value += (0x1 << (8 + i)); - } - return packed_value; -} - -int HGCalTriggerGeometryHexImp2::detIdWaferType(unsigned subdet, short wafer) const { - int wafer_type = 0; - switch (subdet) { - // HGCalDDDConstants::waferTypeT() returns 2=coarse, 1=fine - // HGCalDetId::waferType() returns -1=coarse, 1=fine - // Convert to HGCalDetId waferType - case ForwardSubdetector::HGCEE: - wafer_type = (eeTopology().dddConstants().waferTypeT(wafer) == 2 ? -1 : 1); - break; - case ForwardSubdetector::HGCHEF: - wafer_type = (fhTopology().dddConstants().waferTypeT(wafer) == 2 ? -1 : 1); - break; - default: - break; - }; - return wafer_type; -} - -bool HGCalTriggerGeometryHexImp2::validCell(unsigned cell_id) const { - bool is_valid = false; - if (DetId(cell_id).det() == DetId::Hcal) { - HcalDetId cell_det_id(cell_id); - if (cell_det_id.subdetId() != HcalEndcap) - is_valid = false; - else - is_valid = bhTopology().valid(cell_id); - } else if (DetId(cell_id).det() == DetId::Forward) { - HGCalDetId cell_det_id(cell_id); - unsigned subdet = cell_det_id.subdetId(); - switch (subdet) { - case ForwardSubdetector::HGCEE: - is_valid = eeTopology().valid(cell_id); - break; - case ForwardSubdetector::HGCHEF: - is_valid = fhTopology().valid(cell_id); - break; - default: - is_valid = false; - break; - } - } - return is_valid; -} - -bool HGCalTriggerGeometryHexImp2::validTriggerCell(const unsigned trigger_cell_id) const { - return invalid_triggercells_.find(trigger_cell_id) == invalid_triggercells_.end(); -} - -bool HGCalTriggerGeometryHexImp2::disconnectedModule(const unsigned module_id) const { return false; } - -unsigned HGCalTriggerGeometryHexImp2::lastTriggerLayer() const { return eeTopology().dddConstants().layers(true); } - -unsigned HGCalTriggerGeometryHexImp2::triggerLayer(const unsigned id) const { return HGCalDetId(id).layer(); } - -bool HGCalTriggerGeometryHexImp2::validTriggerCellFromCells(const unsigned trigger_cell_id) const { - // Check the validity of a trigger cell with the - // validity of the cells. One valid cell in the - // trigger cell is enough to make the trigger cell - // valid. - HGCalDetId trigger_cell_det_id(trigger_cell_id); - unsigned subdet = trigger_cell_det_id.subdetId(); - const geom_set cells = getCellsFromTriggerCell(trigger_cell_id); - bool is_valid = false; - for (const auto cell_id : cells) { - is_valid |= validCellId(subdet, cell_id); - if (is_valid) - break; - } - return is_valid; -} - -bool HGCalTriggerGeometryHexImp2::validCellId(unsigned subdet, unsigned cell_id) const { - bool is_valid = false; - switch (subdet) { - case ForwardSubdetector::HGCEE: - is_valid = eeTopology().valid(cell_id); - break; - case ForwardSubdetector::HGCHEF: - is_valid = fhTopology().valid(cell_id); - break; - default: - is_valid = false; - break; - } - return is_valid; -} - -DEFINE_EDM_PLUGIN(HGCalTriggerGeometryFactory, HGCalTriggerGeometryHexImp2, "HGCalTriggerGeometryHexImp2"); diff --git a/L1Trigger/L1THGCal/plugins/geometries/HGCalTriggerGeometryImp1.cc b/L1Trigger/L1THGCal/plugins/geometries/HGCalTriggerGeometryImp1.cc deleted file mode 100644 index a3660466eddcd..0000000000000 --- a/L1Trigger/L1THGCal/plugins/geometries/HGCalTriggerGeometryImp1.cc +++ /dev/null @@ -1,169 +0,0 @@ -#include "FWCore/ParameterSet/interface/FileInPath.h" - -#include "DataFormats/ForwardDetId/interface/HGCEEDetId.h" -#include "DataFormats/ForwardDetId/interface/HGCTriggerDetId.h" -#include "L1Trigger/L1THGCal/interface/HGCalTriggerGeometryGenericMapping.h" - -#include -#include -#include - -class HGCalTriggerGeometryImp1 : public HGCalTriggerGeometryGenericMapping { -public: - HGCalTriggerGeometryImp1(const edm::ParameterSet& conf); - - void initialize(const CaloGeometry*) final; - void initialize(const HGCalGeometry*, const HGCalGeometry*, const HGCalGeometry*) final; - void initialize(const HGCalGeometry*, const HGCalGeometry*, const HGCalGeometry*, const HGCalGeometry*) final; - -private: - edm::FileInPath l1tCellsMapping_; - - void buildMaps(); -}; - -/*****************************************************************/ -HGCalTriggerGeometryImp1::HGCalTriggerGeometryImp1(const edm::ParameterSet& conf) - : HGCalTriggerGeometryGenericMapping(conf), - l1tCellsMapping_(conf.getParameter("L1TCellsMapping")) -/*****************************************************************/ -{} - -/*****************************************************************/ -void HGCalTriggerGeometryImp1::initialize(const CaloGeometry* calo_geometry) -/*****************************************************************/ -{ - // FIXME: !!!Only for HGCEE for the moment!!! - edm::LogWarning("HGCalTriggerGeometry") << "WARNING: This HGCal trigger geometry is incomplete.\n" - << "WARNING: Only the EE part is covered.\n" - << "WARNING: There is no neighbor information.\n"; - setCaloGeometry(calo_geometry); -} - -/*****************************************************************/ -void HGCalTriggerGeometryImp1::initialize(const HGCalGeometry* hgc_ee_geometry, - const HGCalGeometry* hgc_hsi_geometry, - const HGCalGeometry* hgc_hsc_geometry) -/*****************************************************************/ -{ - throw cms::Exception("BadGeometry") - << "HGCalTriggerGeometryImp1 geometry cannot be initialized with the V9 HGCAL geometry"; -} - -/*****************************************************************/ -void HGCalTriggerGeometryImp1::initialize(const HGCalGeometry* hgc_ee_geometry, - const HGCalGeometry* hgc_hsi_geometry, - const HGCalGeometry* hgc_hsc_geometry, - const HGCalGeometry* hgc_nose_geometry) -/*****************************************************************/ -{ - throw cms::Exception("BadGeometry") - << "HGCalTriggerGeometryImp1 geometry cannot be initialized with the V9 HGCAL+NOSE geometry"; -} - -/*****************************************************************/ -void HGCalTriggerGeometryImp1::buildMaps() -/*****************************************************************/ -{ - // - // read trigger cell mapping file - std::ifstream l1tCellsMappingStream(l1tCellsMapping_.fullPath()); - if (!l1tCellsMappingStream.is_open()) - edm::LogError("HGCalTriggerGeometry") << "Cannot open L1TCellsMapping file\n"; - short layer = 0; - short subsector = 0; - short cell = 0; - short module = 0; - short triggercell = 0; - for (; l1tCellsMappingStream >> layer >> subsector >> cell >> module >> triggercell;) { - if (layer > 30 || layer <= 0) { - edm::LogWarning("HGCalTriggerGeometry") << "Bad layer index in L1TCellsMapping\n"; - continue; - } - // Loop on all sectors - // FIXME: Number of sectors in each zside should not be hardcoded - for (unsigned z = 0; z <= 1; z++) { - int zside = (z == 0 ? -1 : 1); - for (unsigned sector = 1; sector <= 18; sector++) { - HGCEEDetId detid(HGCEE, zside, layer, sector, subsector, cell); - // - // Fill cell -> trigger cell mapping - HGCTriggerDetId triggerDetid(HGCTrigger, zside, layer, sector, module, triggercell); - const auto& ret = cells_to_trigger_cells_.insert(std::make_pair(detid, triggerDetid)); - if (!ret.second) - edm::LogWarning("HGCalTriggerGeometry") << "Duplicate cell in L1TCellsMapping\n"; - // Fill trigger cell -> module mapping - HGCTriggerDetId moduleDetid(HGCTrigger, zside, layer, sector, module, HGCTriggerDetId::UndefinedCell()); - trigger_cells_to_modules_.insert( - std::make_pair(triggerDetid, moduleDetid)); // do nothing if trigger cell has already been inserted - } - } - } - if (!l1tCellsMappingStream.eof()) - edm::LogWarning("HGCalTriggerGeometry") - << "Error reading L1TCellsMapping'" << layer << " " << cell << " " << triggercell << " " << subsector << "' \n"; - l1tCellsMappingStream.close(); - // - // Build trigger cells and fill map - typedef HGCalTriggerGeometry::TriggerCell::list_type list_cells; - // make list of cells in trigger cells - std::map trigger_cells_to_cells; - for (const auto& cell_triggercell : cells_to_trigger_cells_) { - unsigned cell = cell_triggercell.first; - unsigned triggercell = cell_triggercell.second; - trigger_cells_to_cells.insert(std::make_pair(triggercell, list_cells())); - trigger_cells_to_cells.at(triggercell).insert(cell); - } - for (const auto& triggercell_cells : trigger_cells_to_cells) { - unsigned triggercellId = triggercell_cells.first; - list_cells cellIds = triggercell_cells.second; - // Position: for the moment, barycenter of the trigger cell. - Basic3DVector triggercellVector(0., 0., 0.); - for (const auto& cell : cellIds) { - HGCTriggerDetId cellId(cell); - triggercellVector += eeGeometry()->getPosition(cellId).basicVector(); - } - GlobalPoint triggercellPoint(triggercellVector / cellIds.size()); - const auto& tc2mItr = trigger_cells_to_modules_.find(triggercellId); - unsigned moduleId = - (tc2mItr != trigger_cells_to_modules_.end() ? tc2mItr->second - : 0); // 0 if the trigger cell doesn't belong to a module - // FIXME: empty neighbours - std::unique_ptr triggercellPtr( - new HGCalTriggerGeometry::TriggerCell(triggercellId, moduleId, triggercellPoint, list_cells(), cellIds)); - trigger_cells_.insert(std::make_pair(triggercellId, std::move(triggercellPtr))); - } - // - // Build modules and fill map - typedef HGCalTriggerGeometry::Module::list_type list_triggercells; - typedef HGCalTriggerGeometry::Module::tc_map_type tc_map_to_cells; - // make list of trigger cells in modules - std::map modules_to_trigger_cells; - for (const auto& triggercell_module : trigger_cells_to_modules_) { - unsigned triggercell = triggercell_module.first; - unsigned module = triggercell_module.second; - modules_to_trigger_cells.insert(std::make_pair(module, list_triggercells())); - modules_to_trigger_cells.at(module).insert(triggercell); - } - for (const auto& module_triggercell : modules_to_trigger_cells) { - unsigned moduleId = module_triggercell.first; - list_triggercells triggercellIds = module_triggercell.second; - tc_map_to_cells cellsInTriggerCells; - // Position: for the moment, barycenter of the module, from trigger cell positions - Basic3DVector moduleVector(0., 0., 0.); - for (const auto& triggercell : triggercellIds) { - const auto& cells_in_tc = trigger_cells_to_cells[triggercell]; - for (const unsigned cell : cells_in_tc) { - cellsInTriggerCells.emplace(triggercell, cell); - } - moduleVector += trigger_cells_.at(triggercell)->position().basicVector(); - } - GlobalPoint modulePoint(moduleVector / triggercellIds.size()); - // FIXME: empty neighbours - std::unique_ptr modulePtr(new HGCalTriggerGeometry::Module( - moduleId, modulePoint, list_triggercells(), triggercellIds, cellsInTriggerCells)); - modules_.insert(std::make_pair(moduleId, std::move(modulePtr))); - } -} - -DEFINE_EDM_PLUGIN(HGCalTriggerGeometryFactory, HGCalTriggerGeometryImp1, "HGCalTriggerGeometryImp1"); diff --git a/L1Trigger/L1THGCal/plugins/geometries/NullGeometry.cc b/L1Trigger/L1THGCal/plugins/geometries/NullGeometry.cc deleted file mode 100644 index 086b87f301eaa..0000000000000 --- a/L1Trigger/L1THGCal/plugins/geometries/NullGeometry.cc +++ /dev/null @@ -1,12 +0,0 @@ -#include "L1Trigger/L1THGCal/interface/HGCalTriggerGeometryGenericMapping.h" - -class NullGeometry : public HGCalTriggerGeometryGenericMapping { -public: - NullGeometry(const edm::ParameterSet& conf) : HGCalTriggerGeometryGenericMapping(conf) {} - - void initialize(const CaloGeometry*) final {} - void initialize(const HGCalGeometry*, const HGCalGeometry*, const HGCalGeometry*) final {} - void initialize(const HGCalGeometry*, const HGCalGeometry*, const HGCalGeometry*, const HGCalGeometry*) final {} -}; - -DEFINE_EDM_PLUGIN(HGCalTriggerGeometryFactory, NullGeometry, "NullGeometry"); diff --git a/L1Trigger/L1THGCal/plugins/geometries/README.md b/L1Trigger/L1THGCal/plugins/geometries/README.md index b24ca5c9c0251..0b219a90dd67a 100644 --- a/L1Trigger/L1THGCal/plugins/geometries/README.md +++ b/L1Trigger/L1THGCal/plugins/geometries/README.md @@ -3,24 +3,13 @@ Trigger geometries provide the following interfaces: * Navigation between trigger cells The available HGCAL trigger geometries are the following: -* `HGCalTriggerGeometryHexLayerBasedImp1` (DEFAULT for V8 geometry) - - The trigger cell mapping is defined over a full layer and is not constrained by wafer boundaries - - Compatible with the V8 HGCAL geometry -* `HGCalTriggerGeometryV9Imp2` +* `HGCalTriggerGeometryV9Imp2` (DEFAULT for geometries >= V9) - Implementation without trigger cell external mappings. Makes use of the `HGCSiliconDetId`, `HGCScintillatorDetId`, and `HGCalTriggerDetId` - - Compatible with the V9 HGCAL geometry + - Compatible with the HGCAL geometries >= V9 - The trigger cell neighbors are not defined (no navigation) -* `HGCalTriggerGeometryV9Imp1` (DEFAULT for V9 geometry) +* `HGCalTriggerGeometryV9Imp1` - Similar implementation as `HGCalTriggerGeometryHexLayerBasedImp1`, but for the V9 geometry - Compatible with the V9 HGCAL geometry -* `HGCalTriggerGeometryHexImp2` (DEPRECATED) - - The trigger cell mapping is defined within single wafers. Trigger cells are therefore constrained by the wafer boundaries - - The trigger cells in the BH section are not defined -* `HGCalTriggerGeometryHexImp1` (DEPRECATED) - - The trigger cell mapping is defined over the full detector - - The trigger cells in the BH section are not defined - - The trigger cell neighbors are not defined (no navigation) -* `HGCalTriggerGeometryImp1` (DEPRECATED) - - It is based on the old HGCAL square geometry - - The trigger cell mapping is defined over the full detector - - The trigger cell neighbors are not defined (no navigation) +* `HGCalTriggerGeometryHexLayerBasedImp1` (DEFAULT for V8 geometry) + - The trigger cell mapping is defined over a full layer and is not constrained by wafer boundaries + - Compatible with the V8 HGCAL geometry diff --git a/L1Trigger/L1THGCal/plugins/geometries/TrivialGeometry.cc b/L1Trigger/L1THGCal/plugins/geometries/TrivialGeometry.cc deleted file mode 100644 index 9779fc9d9abd8..0000000000000 --- a/L1Trigger/L1THGCal/plugins/geometries/TrivialGeometry.cc +++ /dev/null @@ -1,26 +0,0 @@ -#include "L1Trigger/L1THGCal/interface/HGCalTriggerGeometryGenericMapping.h" - -class TrivialGeometry : public HGCalTriggerGeometryGenericMapping { -public: - TrivialGeometry(const edm::ParameterSet& conf) : HGCalTriggerGeometryGenericMapping(conf) {} - - void initialize(const CaloGeometry*) final { - constexpr unsigned nmodules = 6; - for (unsigned i = 0; i < nmodules; ++i) { - trigger_cells_to_modules_[i] = i; - - HGCalTriggerGeometry::TriggerCell::list_type tc_empty; - trigger_cells_[i] = std::make_unique(i, i, GlobalPoint(), tc_empty, tc_empty); - - HGCalTriggerGeometry::Module::list_type mod_empty; - HGCalTriggerGeometry::Module::list_type mod_comps = {i}; - HGCalTriggerGeometry::Module::tc_map_type map_empty; - modules_[i] = std::make_unique(i, GlobalPoint(), mod_empty, mod_comps, map_empty); - } - } - - void initialize(const HGCalGeometry*, const HGCalGeometry*, const HGCalGeometry*) final {} - void initialize(const HGCalGeometry*, const HGCalGeometry*, const HGCalGeometry*, const HGCalGeometry*) final {} -}; - -DEFINE_EDM_PLUGIN(HGCalTriggerGeometryFactory, TrivialGeometry, "TrivialGeometry"); diff --git a/L1Trigger/L1THGCal/src/HGCalTriggerBackendAlgorithmBase.cc b/L1Trigger/L1THGCal/src/HGCalTriggerBackendAlgorithmBase.cc deleted file mode 100644 index 94b29cfa6dfcd..0000000000000 --- a/L1Trigger/L1THGCal/src/HGCalTriggerBackendAlgorithmBase.cc +++ /dev/null @@ -1,3 +0,0 @@ -#include "L1Trigger/L1THGCal/interface/HGCalTriggerBackendAlgorithmBase.h" - -EDM_REGISTER_PLUGINFACTORY(HGCalTriggerBackendAlgorithmFactory, "HGCalTriggerBackendAlgorithmFactory"); diff --git a/L1Trigger/L1THGCal/src/HGCalTriggerBackendProcessor.cc b/L1Trigger/L1THGCal/src/HGCalTriggerBackendProcessor.cc deleted file mode 100644 index e22be1ad4fb82..0000000000000 --- a/L1Trigger/L1THGCal/src/HGCalTriggerBackendProcessor.cc +++ /dev/null @@ -1,41 +0,0 @@ -#include "L1Trigger/L1THGCal/interface/HGCalTriggerBackendProcessor.h" - -HGCalTriggerBackendProcessor::HGCalTriggerBackendProcessor(const edm::ParameterSet& conf, edm::ConsumesCollector&& cc) { - const std::vector& be_confs = conf.getParameterSetVector("algorithms"); - for (const auto& algo_cfg : be_confs) { - const std::string& algo_name = algo_cfg.getParameter("AlgorithmName"); - algorithms_.emplace_back(HGCalTriggerBackendAlgorithmFactory::get()->create(algo_name, algo_cfg, cc)); - } -} - -void HGCalTriggerBackendProcessor::setGeometry(const HGCalTriggerGeometryBase* const geom) { - for (const auto& algo : algorithms_) { - algo->setGeometry(geom); - } -} - -void HGCalTriggerBackendProcessor::setProduces(edm::stream::EDProducer<>& prod) const { - for (const auto& algo : algorithms_) { - algo->setProduces(prod); - } -} - -void HGCalTriggerBackendProcessor::run(const l1t::HGCFETriggerDigiCollection& coll, - const edm::EventSetup& es, - edm::Event& e) { - for (auto& algo : algorithms_) { - algo->run(coll, es, e); - } -} - -void HGCalTriggerBackendProcessor::putInEvent(edm::Event& evt) { - for (auto& algo : algorithms_) { - algo->putInEvent(evt); - } -} - -void HGCalTriggerBackendProcessor::reset() { - for (auto& algo : algorithms_) { - algo->reset(); - } -} diff --git a/L1Trigger/L1THGCal/src/HGCalTriggerFECodecBase.cc b/L1Trigger/L1THGCal/src/HGCalTriggerFECodecBase.cc deleted file mode 100644 index 4697e82264bb5..0000000000000 --- a/L1Trigger/L1THGCal/src/HGCalTriggerFECodecBase.cc +++ /dev/null @@ -1,3 +0,0 @@ -#include "L1Trigger/L1THGCal/interface/HGCalTriggerFECodecBase.h" - -EDM_REGISTER_PLUGINFACTORY(HGCalTriggerFECodecFactory, "HGCalTriggerFECodecFactory"); diff --git a/L1Trigger/L1THGCal/src/HGCalTriggerGeometryGenericMapping.cc b/L1Trigger/L1THGCal/src/HGCalTriggerGeometryGenericMapping.cc deleted file mode 100644 index 307349e49be98..0000000000000 --- a/L1Trigger/L1THGCal/src/HGCalTriggerGeometryGenericMapping.cc +++ /dev/null @@ -1,116 +0,0 @@ -#include "L1Trigger/L1THGCal/interface/HGCalTriggerGeometryGenericMapping.h" - -using namespace HGCalTriggerGeometry; - -namespace { - std::unique_ptr null_tc; - std::unique_ptr null_mod; -} // namespace - -HGCalTriggerGeometryGenericMapping::HGCalTriggerGeometryGenericMapping(const edm::ParameterSet& conf) - : HGCalTriggerGeometryBase(conf) {} - -void HGCalTriggerGeometryGenericMapping::reset() { - geom_map().swap(cells_to_trigger_cells_); - geom_map().swap(trigger_cells_to_modules_); - module_map().swap(modules_); - trigger_cell_map().swap(trigger_cells_); -} - -unsigned HGCalTriggerGeometryGenericMapping::getTriggerCellFromCell(const unsigned cell_det_id) const { - auto found_tc = cells_to_trigger_cells_.find(cell_det_id); - if (found_tc == cells_to_trigger_cells_.end()) { - return 0; - } - return trigger_cells_.find(found_tc->second)->second->triggerCellId(); -} - -unsigned HGCalTriggerGeometryGenericMapping::getModuleFromCell(const unsigned cell_det_id) const { - auto found_tc = cells_to_trigger_cells_.find(cell_det_id); - if (found_tc == cells_to_trigger_cells_.end()) { - return 0; - } - auto found_mod = trigger_cells_to_modules_.find(found_tc->second); - if (found_mod == trigger_cells_to_modules_.end()) { - return 0; - } - return modules_.find(found_mod->second)->second->moduleId(); -} - -unsigned HGCalTriggerGeometryGenericMapping::getModuleFromTriggerCell(const unsigned trigger_cell_det_id) const { - auto found_mod = trigger_cells_to_modules_.find(trigger_cell_det_id); - if (found_mod == trigger_cells_to_modules_.end()) { - return 0; - } - return modules_.find(found_mod->second)->second->moduleId(); -} - -HGCalTriggerGeometryBase::geom_set HGCalTriggerGeometryGenericMapping::getCellsFromTriggerCell( - const unsigned trigger_cell_det_id) const { - return trigger_cells_.find(trigger_cell_det_id)->second->components(); -} - -HGCalTriggerGeometryBase::geom_set HGCalTriggerGeometryGenericMapping::getCellsFromModule( - const unsigned module_det_id) const { - const auto& triggercell_cells = modules_.find(module_det_id)->second->triggerCellComponents(); - HGCalTriggerGeometryBase::geom_set cells; - for (const auto& tc_c : triggercell_cells) { - cells.emplace(tc_c.second); - } - return cells; -} - -HGCalTriggerGeometryBase::geom_ordered_set HGCalTriggerGeometryGenericMapping::getOrderedCellsFromModule( - const unsigned module_det_id) const { - const auto& triggercell_cells = modules_.find(module_det_id)->second->triggerCellComponents(); - HGCalTriggerGeometryBase::geom_ordered_set cells; - for (const auto& tc_c : triggercell_cells) { - cells.emplace(tc_c.second); - } - return cells; -} - -HGCalTriggerGeometryBase::geom_set HGCalTriggerGeometryGenericMapping::getTriggerCellsFromModule( - const unsigned module_det_id) const { - return modules_.find(module_det_id)->second->components(); -} - -HGCalTriggerGeometryBase::geom_ordered_set HGCalTriggerGeometryGenericMapping::getOrderedTriggerCellsFromModule( - const unsigned module_det_id) const { - // Build set from unordered_set. Maybe a more efficient to do it - HGCalTriggerGeometryBase::geom_ordered_set trigger_cells; - for (const auto& tc : modules_.find(module_det_id)->second->components()) { - trigger_cells.emplace(tc); - } - return trigger_cells; -} - -HGCalTriggerGeometryBase::geom_set HGCalTriggerGeometryGenericMapping::getNeighborsFromTriggerCell( - const unsigned trigger_cell_id) const { - // empty neighbors - return geom_set(); -} - -unsigned HGCalTriggerGeometryGenericMapping::getLinksInModule(const unsigned module_id) const { return 1; } - -unsigned HGCalTriggerGeometryGenericMapping::getModuleSize(const unsigned module_id) const { return 1; } - -GlobalPoint HGCalTriggerGeometryGenericMapping::getTriggerCellPosition(const unsigned trigger_cell_det_id) const { - return trigger_cells_.find(trigger_cell_det_id)->second->position(); -} - -GlobalPoint HGCalTriggerGeometryGenericMapping::getModulePosition(const unsigned module_det_id) const { - return modules_.find(module_det_id)->second->position(); -} - -bool HGCalTriggerGeometryGenericMapping::validTriggerCell(const unsigned trigger_cell_det_id) const { - return (trigger_cells_.find(trigger_cell_det_id) != trigger_cells_.end()); -} - -bool HGCalTriggerGeometryGenericMapping::disconnectedModule(const unsigned module_id) const { return false; } - -unsigned HGCalTriggerGeometryGenericMapping::lastTriggerLayer() const { - return eeTopology().dddConstants().layers(true); -} - -unsigned HGCalTriggerGeometryGenericMapping::triggerLayer(const unsigned id) const { return HGCalDetId(id).layer(); } diff --git a/L1Trigger/L1THGCal/test/BuildFile.xml b/L1Trigger/L1THGCal/test/BuildFile.xml index fc3e5bc126dfb..711a14b7988e2 100644 --- a/L1Trigger/L1THGCal/test/BuildFile.xml +++ b/L1Trigger/L1THGCal/test/BuildFile.xml @@ -6,6 +6,6 @@ - + diff --git a/L1Trigger/L1THGCal/test/HGCalTriggerBestChoiceTester.cc b/L1Trigger/L1THGCal/test/HGCalTriggerBestChoiceTester.cc deleted file mode 100644 index 6c75bed60ce39..0000000000000 --- a/L1Trigger/L1THGCal/test/HGCalTriggerBestChoiceTester.cc +++ /dev/null @@ -1,569 +0,0 @@ -#include -#include -#include - -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/EDAnalyzer.h" -#include "FWCore/ServiceRegistry/interface/Service.h" -#include "CommonTools/UtilAlgos/interface/TFileService.h" - -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/ESTransientHandle.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "FWCore/Framework/interface/MakerMacros.h" - -#include "DataFormats/L1THGCal/interface/HGCFETriggerDigi.h" -#include "DataFormats/L1THGCal/interface/HGCFETriggerDigiDefs.h" -#include "DataFormats/L1THGCal/interface/HGCalCluster.h" -#include "DataFormats/HGCDigi/interface/HGCDigiCollections.h" - -#include "DataFormats/ForwardDetId/interface/HGCalDetId.h" -#include "DataFormats/ForwardDetId/interface/ForwardSubdetector.h" - -#include "SimDataFormats/CaloHit/interface/PCaloHit.h" -#include "SimDataFormats/CaloHit/interface/PCaloHitContainer.h" -#include "SimDataFormats/CaloTest/interface/HGCalTestNumbering.h" - -#include "Geometry/Records/interface/CaloGeometryRecord.h" - -#include "L1Trigger/L1THGCal/interface/HGCalTriggerGeometryBase.h" -#include "L1Trigger/L1THGCal/interface/HGCalTriggerFECodecBase.h" -#include "L1Trigger/L1THGCal/interface/fe_codecs/HGCalBestChoiceCodecImpl.h" - -#include -#include -#include "TH2.h" - -class HGCalTriggerBestChoiceTester : public edm::EDAnalyzer { -public: - explicit HGCalTriggerBestChoiceTester(const edm::ParameterSet&); - ~HGCalTriggerBestChoiceTester(); - - virtual void beginRun(const edm::Run&, const edm::EventSetup&); - virtual void analyze(const edm::Event&, const edm::EventSetup&); - -private: - void checkSelectedCells(const edm::Event&, const edm::EventSetup&); - void rerunBestChoiceFragments(const edm::Event&, const edm::EventSetup&); - void fillModule(const std::vector&, - const std::vector>&, - const HGCalBestChoiceDataPayload&, - const HGCalBestChoiceDataPayload&, - const HGCalBestChoiceDataPayload&, - const std::map&, - const std::unordered_map&); - - // inputs - edm::EDGetToken inputee_, inputfh_, inputbh_, inputbeall_, inputbeselect_; - bool is_Simhit_comp_; - edm::EDGetToken SimHits_inputee_, SimHits_inputfh_, SimHits_inputbh_; - // - edm::ESHandle triggerGeometry_; - std::unique_ptr codec_; - edm::Service fs_; - - // histos - TH1F* hgcCellData_; - TH1F* hgcCellData_SimHitasso_; - TH1F* hgcCellSimHits_; - TH2F* hgcCellData_vsSimHits_; - TH1F* hgcCellsPerModule_; - TH1F* hgcCellModuleSum_; - // - TH1F* hgcCellData_linampl_; - TH2F* hgcCellData_linampl_vsSimHits_; - TH2F* hgcCellData_linampl_vsSimHits_zoom_; - TH1F* triggerCellData_noBestChoice_; - TH2F* triggerCellData_noBestChoice_vsSimHits_; - TH1F* triggerCellSimHits_noBestChoice_; - TH1F* triggerCellData_BestChoice_; - TH2F* triggerCellData_BestChoice_vsSimHits_; - TH1F* triggerCellData_; - TH2F* triggerCellData_vsSimHits_; - TH1F* triggerCellsPerModule_; - TH1F* triggerCellModuleSum_; - // - TH2F* selectedCellsVsAllCells_ee_; - TH2F* energyLossVsNCells_ee_; - TH2F* selectedCellsVsAllCells_fh_; - TH2F* energyLossVsNCells_fh_; - // -}; - -/*****************************************************************/ -HGCalTriggerBestChoiceTester::HGCalTriggerBestChoiceTester(const edm::ParameterSet& conf) - : inputee_(consumes(conf.getParameter("eeDigis"))), - inputfh_(consumes(conf.getParameter("fhDigis"))), - //inputbh_(consumes(conf.getParameter("bhDigis"))), - inputbeall_(consumes(conf.getParameter("beClustersAll"))), - inputbeselect_(consumes(conf.getParameter("beClustersSelect"))), - is_Simhit_comp_(conf.getParameter("isSimhitComp")), - SimHits_inputee_(consumes(conf.getParameter("eeSimHits"))), - SimHits_inputfh_(consumes(conf.getParameter("fhSimHits"))) -// SimHits_inputbh_(consumes(conf.getParameter("bhSimHits"))) -/*****************************************************************/ -{ - //setup FE codec - const edm::ParameterSet& feCodecConfig = conf.getParameterSet("FECodec"); - codec_.reset(new HGCalBestChoiceCodecImpl(feCodecConfig)); - - // initialize output trees - // HGC Cells - hgcCellData_ = fs_->make("hgcCellData", "Cell values", 1000, 0., 2000.); - if (is_Simhit_comp_) { - hgcCellData_SimHitasso_ = - fs_->make("hgcCellData_SimHitasso_", "Cell values with an associated SimHit", 1000, 0, 2000.); - hgcCellSimHits_ = fs_->make("hgcCellSimHits_", "Cell simhit energies", 500, 0, 0.16); - hgcCellData_vsSimHits_ = - fs_->make("hgcCellData_vsSimHits_", "Cell values vs simhit energies", 500, 0, 0.16, 1000, 0., 2000.); - } - hgcCellsPerModule_ = fs_->make("hgcCellsPerModule", "Number of cells per module", 128, 0., 128.); - hgcCellModuleSum_ = fs_->make("hgcCellModuleSum", "Cell sum in modules", 1000, 0., 3000.); - // - hgcCellData_linampl_ = - fs_->make("hgcCellData_linampl_", "Cell linearized amplitudes values All", 1000, 0, 70000); - if (is_Simhit_comp_) { - hgcCellData_linampl_vsSimHits_ = fs_->make("hgcCellData_linampl_vsSimHits_", - "Cell linearized amplitudes vs simhit energies", - 500, - 0, - 0.16, - 1000, - 0, - 70000); - hgcCellData_linampl_vsSimHits_zoom_ = fs_->make("hgcCellData_linampl_vsSimHits_zoom_", - "Cell linearized amplitudes vssimhit energies, zoomed", - 1000, - 0, - 0.002, - 1000, - 0, - 1000); - } - - // HGC Trigger cells - triggerCellData_noBestChoice_ = - fs_->make("triggerCellData_noBestChoice_", "Trigger cell values, no best choice", 1000, 0., 70000.); - if (is_Simhit_comp_) { - triggerCellData_noBestChoice_vsSimHits_ = fs_->make("triggerCellData_noBestChoice_vsSimHits_", - "Trigger cell values vs simhit energies, no best choice", - 500, - 0, - 0.16, - 1000, - 0., - 70000.); - triggerCellSimHits_noBestChoice_ = fs_->make( - "triggerCellSimHits_noBestChoice", "Trigger cell simhit energies, no best choice", 500, 0, 0.16); - } - triggerCellData_BestChoice_ = - fs_->make("triggerCellData_BestChoice_", "Trigger cell values, best choice", 1000, 0., 70000.); - if (is_Simhit_comp_) - triggerCellData_BestChoice_vsSimHits_ = fs_->make("triggerCellData_BestChoice_vsSimHits_", - "Trigger cell values vs simhit energies, best choice", - 500, - 0, - 0.16, - 1000, - 0., - 70000.); - triggerCellData_ = fs_->make("triggerCellData", "Trigger cell values", 1100, 0., 1100.); - if (is_Simhit_comp_) - triggerCellData_vsSimHits_ = fs_->make( - "triggerCellData_vsSimHits_", "Trigger cell values vs simhit energies", 500, 0, 0.16, 1100, 0., 1100.); - triggerCellsPerModule_ = fs_->make("triggerCellsPerModule", "Number of trigger cells per module", 64, 0., 64.); - triggerCellModuleSum_ = fs_->make("TriggerCellModuleSum", "Trigger cell sum in modules", 1000, 0., 10000.); - // - selectedCellsVsAllCells_ee_ = fs_->make( - "selectedCellsVsAllCells_ee", "Number of selected cells vs number of cell", 128, 0, 128, 128, 0., 128.); - energyLossVsNCells_ee_ = fs_->make( - "energyLossVsNCells_ee", "Relative energy loss after selection vs number of cell", 128, 0., 128., 101, 0, 1.01); - selectedCellsVsAllCells_fh_ = fs_->make( - "selectedCellsVsAllCells_fh", "Number of selected cells vs number of cell", 128, 0, 128, 128, 0., 128.); - energyLossVsNCells_fh_ = fs_->make( - "energyLossVsNCells_fh", "Relative energy loss after selection vs number of cell", 128, 0., 128., 101, 0, 1.01); -} - -/*****************************************************************/ -HGCalTriggerBestChoiceTester::~HGCalTriggerBestChoiceTester() -/*****************************************************************/ -{} - -/*****************************************************************/ -void HGCalTriggerBestChoiceTester::beginRun(const edm::Run& /*run*/, const edm::EventSetup& es) -/*****************************************************************/ -{ - es.get().get(triggerGeometry_); -} - -/*****************************************************************/ -void HGCalTriggerBestChoiceTester::analyze(const edm::Event& e, const edm::EventSetup& es) -/*****************************************************************/ -{ - checkSelectedCells(e, es); - rerunBestChoiceFragments(e, es); -} - -/*****************************************************************/ -void HGCalTriggerBestChoiceTester::checkSelectedCells(const edm::Event& e, const edm::EventSetup& es) -/*****************************************************************/ -{ - edm::Handle be_clusters_all_h; - edm::Handle be_clusters_select_h; - e.getByToken(inputbeall_, be_clusters_all_h); - e.getByToken(inputbeselect_, be_clusters_select_h); - - const l1t::HGCalClusterBxCollection& be_clusters_all = *be_clusters_all_h; - const l1t::HGCalClusterBxCollection& be_clusters_select = *be_clusters_select_h; - - // store trigger cells module by module. tuple = zside,subdet,layer,module - std::map, std::vector>> - module_triggercells_all; - for (auto cl_itr = be_clusters_all.begin(0); cl_itr != be_clusters_all.end(0); cl_itr++) { - const l1t::HGCalCluster& cluster = *cl_itr; - uint32_t zside = cluster.eta() < 0. ? 0 : 1; - auto itr_insert = - module_triggercells_all.emplace(std::make_tuple(zside, cluster.subdetId(), cluster.layer(), cluster.module()), - std::vector>()); - itr_insert.first->second.emplace_back( - cluster.hwEta(), cluster.hwPt()); // FIXME: the index within the module has been stored in hwEta - } - std::map, std::vector>> - module_triggercells_select; - for (auto cl_itr = be_clusters_select.begin(0); cl_itr != be_clusters_select.end(0); cl_itr++) { - const l1t::HGCalCluster& cluster = *cl_itr; - uint32_t zside = cluster.eta() < 0. ? 0 : 1; - auto itr_insert = module_triggercells_select.emplace( - std::make_tuple(zside, cluster.subdetId(), cluster.layer(), cluster.module()), - std::vector>()); - itr_insert.first->second.emplace_back( - cluster.hwEta(), cluster.hwPt()); // FIXME: the index within the module has been stored in hwEta - } - - // Compare 'all' and 'selected' trigger cells, module by module - for (const auto& module_cells : module_triggercells_all) { - const auto& module_cells_select_itr = module_triggercells_select.find(module_cells.first); - if (module_cells_select_itr == module_triggercells_select.end()) { - std::cout << "ERROR: Cannot find module for selected cells\n"; - } - size_t ncells_all = module_cells.second.size(); - size_t ncells_select = module_cells_select_itr->second.size(); - uint32_t energy_all = 0; - uint32_t energy_select = 0; - for (const auto& id_energy : module_cells.second) - energy_all += id_energy.second; - for (const auto& id_energy : module_cells_select_itr->second) - energy_select += id_energy.second; - if (std::get<1>(module_cells.first) == ForwardSubdetector::HGCEE) { - selectedCellsVsAllCells_ee_->Fill(ncells_all, ncells_select); - if (energy_all > 0) - energyLossVsNCells_ee_->Fill(ncells_all, (double)energy_select / (double)energy_all); - } else if (std::get<1>(module_cells.first) == ForwardSubdetector::HGCHEF) { - selectedCellsVsAllCells_fh_->Fill(ncells_all, ncells_select); - if (energy_all > 0) - energyLossVsNCells_fh_->Fill(ncells_all, (double)energy_select / (double)energy_all); - } - } - - //std::cout<<"All trigger cells = "< ee_digis_h; - edm::Handle fh_digis_h; - e.getByToken(inputee_, ee_digis_h); - e.getByToken(inputfh_, fh_digis_h); - - const HGCalDigiCollection& ee_digis = *ee_digis_h; - const HGCalDigiCollection& fh_digis = *fh_digis_h; - - HGCalBestChoiceDataPayload data; - - // retrieve simhit collections - std::map simhit_energies; - if (is_Simhit_comp_) { - edm::Handle ee_simhits_h; - e.getByToken(SimHits_inputee_, ee_simhits_h); - const edm::PCaloHitContainer& ee_simhits = *ee_simhits_h; - edm::Handle fh_simhits_h; - e.getByToken(SimHits_inputfh_, fh_simhits_h); - const edm::PCaloHitContainer& fh_simhits = *fh_simhits_h; - - // simhit/digi association EE - HGCalDetId digiid, simid; - int layer = 0, cell = 0, sec = 0, subsec = 0, zp = 0, subdet = 0; - ForwardSubdetector mysubdet; - HGCalDetId recoDetId; - int n_hits_asso = 0; - - // create a map containing all simhit energies - std::unordered_map simhits; - for (const auto& simhit : ee_simhits) { - simid = (HGCalDetId)simhit.id(); - HGCalTestNumbering::unpackHexagonIndex(simid, subdet, zp, layer, sec, subsec, cell); - mysubdet = (ForwardSubdetector)(subdet); - std::pair recoLayerCell = triggerGeometry_->eeTopology().dddConstants().simToReco( - cell, layer, sec, triggerGeometry_->eeTopology().detectorType()); - cell = recoLayerCell.first; - layer = recoLayerCell.second; - if (layer < 0 || cell < 0) { - continue; - } - recoDetId = HGCalDetId(mysubdet, zp, layer, subsec, sec, cell); - auto itr_insert = simhits.emplace(recoDetId, 0.); - itr_insert.first->second += simhit.energy(); - } - // find simhit energies associated to digis - for (const auto& data : ee_digis) { - digiid = (HGCalDetId)data.id(); - double hit_energy = 0; - auto itr = simhits.find(digiid); - if (itr != simhits.end()) { - n_hits_asso++; - hit_energy = itr->second; - } - simhit_energies[digiid] = hit_energy; - } - - // simhit/digi association FH - layer = 0; - cell = 0; - sec = 0; - subsec = 0; - zp = 0; - subdet = 0; - int n_hits_asso_fh = 0; - - // create a map containing all simhit energies - simhits.clear(); - for (const auto& simhit : fh_simhits) { - simid = (HGCalDetId)simhit.id(); - HGCalTestNumbering::unpackHexagonIndex(simid, subdet, zp, layer, sec, subsec, cell); - mysubdet = (ForwardSubdetector)(subdet); - std::pair recoLayerCell = triggerGeometry_->fhTopology().dddConstants().simToReco( - cell, layer, sec, triggerGeometry_->fhTopology().detectorType()); - cell = recoLayerCell.first; - layer = recoLayerCell.second; - if (layer < 0 || cell < 0) { - continue; - } - recoDetId = HGCalDetId(mysubdet, zp, layer, subsec, sec, cell); - auto itr_insert = simhits.emplace(recoDetId, 0.); - itr_insert.first->second += simhit.energy(); - } - // find simhit energies associated to digis - for (const auto& data : fh_digis) { - digiid = (HGCalDetId)data.id(); - double hit_energy = 0; - auto itr = simhits.find(digiid); - if (itr != simhits.end()) { - n_hits_asso_fh++; - hit_energy = itr->second; - } - simhit_energies[digiid] = hit_energy; - } - } - // Find modules containing hits and prepare list of hits for each module - std::unordered_map> hit_modules_ee; - for (const auto& eedata : ee_digis) { - uint32_t module = triggerGeometry_->getModuleFromCell(eedata.id()); - auto itr_insert = hit_modules_ee.emplace(module, std::vector()); - itr_insert.first->second.push_back(eedata); - } - std::unordered_map> hit_modules_fh; - for (const auto& fhdata : fh_digis) { - uint32_t module = triggerGeometry_->getModuleFromCell(fhdata.id()); - auto itr_insert = hit_modules_fh.emplace(module, std::vector()); - itr_insert.first->second.push_back(fhdata); - } - // loop on modules containing hits and call front-end processing - for (const auto& module_hits : hit_modules_ee) { - // prepare input data - std::vector dataframes; - std::vector> linearized_dataframes; - // loop over EE and fill digis belonging to that module - for (const auto& eedata : module_hits.second) { - dataframes.emplace_back(eedata.id()); - for (int i = 0; i < eedata.size(); i++) { - dataframes.back().setSample(i, eedata.sample(i)); - } - } - // Association simhit energies with trigger cells - std::unordered_map TC_simhit_energies; - if (is_Simhit_comp_) { - uint32_t index = 0; // index in module (different from .cell()) - // need an ordered set to loop on it in the correct order - for (const auto& tc : triggerGeometry_->getOrderedTriggerCellsFromModule(module_hits.first)) { - TC_simhit_energies.emplace(index, 0); - for (const auto& cell : triggerGeometry_->getCellsFromTriggerCell(tc)) { - double simenergy = simhit_energies[cell]; - TC_simhit_energies.at(index) += simenergy; - } - index++; - } - } - // Best choice encoding - data.reset(); - codec_->linearize(dataframes, linearized_dataframes); - codec_->triggerCellSums(*triggerGeometry_, linearized_dataframes, data); - HGCalBestChoiceDataPayload data_TCsums_woBestChoice = data; - codec_->bestChoiceSelect(data); - HGCalBestChoiceDataPayload data_TCsums_BestChoice = data; - std::vector dataword = codec_->encode(data); - HGCalBestChoiceDataPayload datadecoded = codec_->decode(dataword); - fillModule(dataframes, - linearized_dataframes, - data_TCsums_woBestChoice, - data_TCsums_BestChoice, - datadecoded, - simhit_energies, - TC_simhit_energies); - - } //end loop on EE modules - for (const auto& module_hits : hit_modules_fh) { - // prepare input data - std::vector dataframes; - std::vector> linearized_dataframes; - // loop over FH digis and fill digis belonging to that module - for (const auto& fhdata : module_hits.second) { - dataframes.emplace_back(fhdata.id()); - for (int i = 0; i < fhdata.size(); i++) { - dataframes.back().setSample(i, fhdata.sample(i)); - } - } - // Association simhit energies with trigger cells - std::unordered_map TC_simhit_energies; - if (is_Simhit_comp_) { - uint32_t index = 0; // index in module (different from .cell()) - // need an ordered set to loop on it in the correct order - for (const auto& tc : triggerGeometry_->getOrderedTriggerCellsFromModule(module_hits.first)) { - TC_simhit_energies.emplace(index, 0); - for (const auto& cell : triggerGeometry_->getCellsFromTriggerCell(tc)) { - double simenergy = simhit_energies[cell]; - TC_simhit_energies.at(index) += simenergy; - } - index++; - } - } - // Best choice encoding - data.reset(); - codec_->linearize(dataframes, linearized_dataframes); - codec_->triggerCellSums(*triggerGeometry_, linearized_dataframes, data); - HGCalBestChoiceDataPayload data_TCsums_woBestChoice = data; - codec_->bestChoiceSelect(data); - HGCalBestChoiceDataPayload data_TCsums_BestChoice = data; - std::vector dataword = codec_->encode(data); - HGCalBestChoiceDataPayload datadecoded = codec_->decode(dataword); - fillModule(dataframes, - linearized_dataframes, - data_TCsums_woBestChoice, - data_TCsums_BestChoice, - datadecoded, - simhit_energies, - TC_simhit_energies); - } //end loop on FH modules -} - -/*****************************************************************/ -void HGCalTriggerBestChoiceTester::fillModule(const std::vector& dataframes, - const std::vector>& linearized_dataframes, - const HGCalBestChoiceDataPayload& fe_payload_TCsums_woBestChoice, - const HGCalBestChoiceDataPayload& fe_payload_TCsums_BestChoice, - const HGCalBestChoiceDataPayload& fe_payload, - const std::map& simhit_energies, - const std::unordered_map& TC_simhit_energies) - -/*****************************************************************/ -{ - // HGC cells part - size_t nHGCDigi = 0; - unsigned hgcCellModuleSum = 0; - // digis, cell based info - for (const auto& frame : dataframes) { - uint32_t value = frame[2].data(); - nHGCDigi++; - hgcCellModuleSum += value; - hgcCellData_->Fill(value); - if (is_Simhit_comp_) { - double sim_energy = simhit_energies.at(frame.id()); - if (sim_energy > 0) { - hgcCellData_SimHitasso_->Fill(value); - hgcCellSimHits_->Fill(sim_energy); - hgcCellData_vsSimHits_->Fill(sim_energy, value); - } - } - } - hgcCellsPerModule_->Fill(nHGCDigi); - hgcCellModuleSum_->Fill(hgcCellModuleSum); - - // linearized samples, cell based info - for (const auto& frame : linearized_dataframes) { - hgcCellData_linampl_->Fill(frame.second); - if (is_Simhit_comp_) { - double sim_energy = simhit_energies.at(frame.first); - if (sim_energy > 0) { - hgcCellData_linampl_vsSimHits_->Fill(sim_energy, frame.second); - hgcCellData_linampl_vsSimHits_zoom_->Fill(sim_energy, frame.second); - } - } - } - - // trigger cells part - // after sum, no best choice, no encode/decode - int icell_noBestChoice = 0; - for (const auto& tc : fe_payload_TCsums_woBestChoice.payload) { - if (tc > 0) { - triggerCellData_noBestChoice_->Fill(tc); - if (is_Simhit_comp_) { - if (TC_simhit_energies.at(icell_noBestChoice) > 0) { - triggerCellSimHits_noBestChoice_->Fill(TC_simhit_energies.at(icell_noBestChoice)); - triggerCellData_noBestChoice_vsSimHits_->Fill(TC_simhit_energies.at(icell_noBestChoice), tc); - } - } - } - icell_noBestChoice++; - } - - // after sum, best choice, no encode/decode - int icell_BestChoice = 0; - for (const auto& tc : fe_payload_TCsums_BestChoice.payload) { - if (tc > 0) { - triggerCellData_BestChoice_->Fill(tc); - if (is_Simhit_comp_) { - if (TC_simhit_energies.at(icell_BestChoice) > 0) - triggerCellData_BestChoice_vsSimHits_->Fill(TC_simhit_energies.at(icell_BestChoice), tc); - } - } - icell_BestChoice++; - } - - // after sum, best choice, encode/decode - int icell = 0; - size_t nFEDigi = 0; - unsigned triggerCellModuleSum = 0; - for (const auto& tc : fe_payload.payload) { - uint32_t tcShifted = (tc << codec_->triggerCellTruncationBits()); - if (tc > 0) { - nFEDigi++; - triggerCellModuleSum += tcShifted; - triggerCellData_->Fill(tc); - if (is_Simhit_comp_) { - if (TC_simhit_energies.at(icell) > 0) - triggerCellData_vsSimHits_->Fill(TC_simhit_energies.at(icell), tc); - } - } - icell++; - } - triggerCellsPerModule_->Fill(nFEDigi); - triggerCellModuleSum_->Fill(triggerCellModuleSum); -} - -//define this as a plug-in -DEFINE_FWK_MODULE(HGCalTriggerBestChoiceTester); diff --git a/L1Trigger/L1THGCal/test/HGCalTriggerBestChoiceTriggerCellTester.cc b/L1Trigger/L1THGCal/test/HGCalTriggerBestChoiceTriggerCellTester.cc deleted file mode 100644 index 6cf3c0df80a49..0000000000000 --- a/L1Trigger/L1THGCal/test/HGCalTriggerBestChoiceTriggerCellTester.cc +++ /dev/null @@ -1,562 +0,0 @@ -#include -#include -#include - -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/EDAnalyzer.h" -#include "FWCore/ServiceRegistry/interface/Service.h" -#include "CommonTools/UtilAlgos/interface/TFileService.h" - -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/ESTransientHandle.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "FWCore/Framework/interface/MakerMacros.h" - -#include "DataFormats/L1THGCal/interface/HGCFETriggerDigi.h" -#include "DataFormats/L1THGCal/interface/HGCFETriggerDigiDefs.h" -#include "DataFormats/L1THGCal/interface/HGCalCluster.h" -#include "DataFormats/HGCDigi/interface/HGCDigiCollections.h" - -#include "DataFormats/ForwardDetId/interface/HGCalDetId.h" -#include "DataFormats/ForwardDetId/interface/ForwardSubdetector.h" - -#include "SimDataFormats/CaloHit/interface/PCaloHit.h" -#include "SimDataFormats/CaloHit/interface/PCaloHitContainer.h" -#include "SimDataFormats/CaloTest/interface/HGCalTestNumbering.h" - -#include "Geometry/Records/interface/CaloGeometryRecord.h" - -#include "L1Trigger/L1THGCal/interface/HGCalTriggerGeometryBase.h" -#include "L1Trigger/L1THGCal/interface/HGCalTriggerFECodecBase.h" -#include "L1Trigger/L1THGCal/interface/fe_codecs/HGCalTriggerCellBestChoiceCodecImpl.h" -#include "L1Trigger/L1THGCal/interface/fe_codecs/HGCalTriggerCellBestChoiceCodec.h" - -#include -#include -#include "TH2.h" - -class HGCalTriggerBestChoiceTriggerCellTester : public edm::EDAnalyzer { -public: - explicit HGCalTriggerBestChoiceTriggerCellTester(const edm::ParameterSet&); - ~HGCalTriggerBestChoiceTriggerCellTester(); - - virtual void beginRun(const edm::Run&, const edm::EventSetup&); - virtual void analyze(const edm::Event&, const edm::EventSetup&); - -private: - void checkSelectedCells(const edm::Event&, const edm::EventSetup&); - void rerunBestChoiceFragments(const edm::Event&, const edm::EventSetup&); - void fillModule(const std::vector&, - const std::vector>&, - const HGCalTriggerCellBestChoiceDataPayload&, - const HGCalTriggerCellBestChoiceDataPayload&, - const HGCalTriggerCellBestChoiceDataPayload&, - const std::map&, - const std::unordered_map&); - - // inputs - edm::EDGetToken inputee_, inputfh_, inputbh_, inputbeall_, inputbeselect_; - bool is_Simhit_comp_; - edm::EDGetToken SimHits_inputee_, SimHits_inputfh_, SimHits_inputbh_; - // - edm::ESHandle triggerGeometry_; - std::unique_ptr codec_; - edm::Service fs_; - - // histos - TH1F* hgcCellData_; - TH1F* hgcCellData_SimHitasso_; - TH1F* hgcCellSimHits_; - TH2F* hgcCellData_vsSimHits_; - TH1F* hgcCellsPerModule_; - TH1F* hgcCellModuleSum_; - // - TH1F* hgcCellData_linampl_; - TH2F* hgcCellData_linampl_vsSimHits_; - TH2F* hgcCellData_linampl_vsSimHits_zoom_; - TH1F* triggerCellData_noBestChoice_; - TH2F* triggerCellData_noBestChoice_vsSimHits_; - TH1F* triggerCellSimHits_noBestChoice_; - TH1F* triggerCellData_BestChoice_; - TH2F* triggerCellData_BestChoice_vsSimHits_; - TH1F* triggerCellData_; - TH2F* triggerCellData_vsSimHits_; - TH1F* triggerCellsPerModule_; - TH1F* triggerCellModuleSum_; - // - TH2F* selectedCellsVsAllCells_ee_; - TH2F* energyLossVsNCells_ee_; - TH2F* selectedCellsVsAllCells_fh_; - TH2F* energyLossVsNCells_fh_; - // -}; - -HGCalTriggerBestChoiceTriggerCellTester::HGCalTriggerBestChoiceTriggerCellTester(const edm::ParameterSet& conf) - : inputee_(consumes(conf.getParameter("eeDigis"))), - inputfh_(consumes(conf.getParameter("fhDigis"))), - //inputbh_(consumes(conf.getParameter("bhDigis"))), - inputbeall_(consumes(conf.getParameter("beTriggerCellsAll"))), - inputbeselect_( - consumes(conf.getParameter("beTriggerCellsSelect"))), - is_Simhit_comp_(conf.getParameter("isSimhitComp")), - SimHits_inputee_(consumes(conf.getParameter("eeSimHits"))), - SimHits_inputfh_(consumes(conf.getParameter("fhSimHits"))) -// SimHits_inputbh_(consumes(conf.getParameter("bhSimHits"))) -{ - //setup FE codec - const edm::ParameterSet& feCodecConfig = conf.getParameterSet("FECodec"); - codec_.reset(new HGCalTriggerCellBestChoiceCodecImpl(feCodecConfig)); - - // initialize output trees - // HGC Cells - hgcCellData_ = fs_->make("hgcCellData", "Cell values", 1000, 0., 2000.); - if (is_Simhit_comp_) { - hgcCellData_SimHitasso_ = - fs_->make("hgcCellData_SimHitasso_", "Cell values with an associated SimHit", 1000, 0, 2000.); - hgcCellSimHits_ = fs_->make("hgcCellSimHits_", "Cell simhit energies", 500, 0, 0.16); - hgcCellData_vsSimHits_ = - fs_->make("hgcCellData_vsSimHits_", "Cell values vs simhit energies", 500, 0, 0.16, 1000, 0., 2000.); - } - hgcCellsPerModule_ = fs_->make("hgcCellsPerModule", "Number of cells per module", 128, 0., 128.); - hgcCellModuleSum_ = fs_->make("hgcCellModuleSum", "Cell sum in modules", 1000, 0., 3000.); - // - hgcCellData_linampl_ = - fs_->make("hgcCellData_linampl_", "Cell linearized amplitudes values All", 1000, 0, 70000); - if (is_Simhit_comp_) { - hgcCellData_linampl_vsSimHits_ = fs_->make("hgcCellData_linampl_vsSimHits_", - "Cell linearized amplitudes vs simhit energies", - 500, - 0, - 0.16, - 1000, - 0, - 70000); - hgcCellData_linampl_vsSimHits_zoom_ = fs_->make("hgcCellData_linampl_vsSimHits_zoom_", - "Cell linearized amplitudes vssimhit energies, zoomed", - 1000, - 0, - 0.002, - 1000, - 0, - 1000); - } - - // HGC Trigger cells - triggerCellData_noBestChoice_ = - fs_->make("triggerCellData_noBestChoice_", "Trigger cell values, no best choice", 1000, 0., 70000.); - if (is_Simhit_comp_) { - triggerCellData_noBestChoice_vsSimHits_ = fs_->make("triggerCellData_noBestChoice_vsSimHits_", - "Trigger cell values vs simhit energies, no best choice", - 500, - 0, - 0.16, - 1000, - 0., - 70000.); - triggerCellSimHits_noBestChoice_ = fs_->make( - "triggerCellSimHits_noBestChoice", "Trigger cell simhit energies, no best choice", 500, 0, 0.16); - } - triggerCellData_BestChoice_ = - fs_->make("triggerCellData_BestChoice_", "Trigger cell values, best choice", 1000, 0., 70000.); - if (is_Simhit_comp_) - triggerCellData_BestChoice_vsSimHits_ = fs_->make("triggerCellData_BestChoice_vsSimHits_", - "Trigger cell values vs simhit energies, best choice", - 500, - 0, - 0.16, - 1000, - 0., - 70000.); - triggerCellData_ = fs_->make("triggerCellData", "Trigger cell values", 1100, 0., 1100.); - if (is_Simhit_comp_) { - triggerCellData_vsSimHits_ = fs_->make( - "triggerCellData_vsSimHits_", "Trigger cell values vs simhit energies", 500, 0, 0.16, 1100, 0., 1100.); - } - triggerCellsPerModule_ = fs_->make("triggerCellsPerModule", "Number of trigger cells per module", 64, 0., 64.); - triggerCellModuleSum_ = fs_->make("TriggerCellModuleSum", "Trigger cell sum in modules", 1000, 0., 10000.); - // - selectedCellsVsAllCells_ee_ = fs_->make( - "selectedCellsVsAllCells_ee", "Number of selected cells vs number of cell", 128, 0, 128, 128, 0., 128.); - energyLossVsNCells_ee_ = fs_->make( - "energyLossVsNCells_ee", "Relative energy loss after selection vs number of cell", 128, 0., 128., 101, 0, 1.01); - selectedCellsVsAllCells_fh_ = fs_->make( - "selectedCellsVsAllCells_fh", "Number of selected cells vs number of cell", 128, 0, 128, 128, 0., 128.); - energyLossVsNCells_fh_ = fs_->make( - "energyLossVsNCells_fh", "Relative energy loss after selection vs number of cell", 128, 0., 128., 101, 0, 1.01); -} - -HGCalTriggerBestChoiceTriggerCellTester::~HGCalTriggerBestChoiceTriggerCellTester() {} - -void HGCalTriggerBestChoiceTriggerCellTester::beginRun(const edm::Run& /*run*/, const edm::EventSetup& es) { - es.get().get(triggerGeometry_); -} - -void HGCalTriggerBestChoiceTriggerCellTester::analyze(const edm::Event& e, const edm::EventSetup& es) { - checkSelectedCells(e, es); - rerunBestChoiceFragments(e, es); -} - -void HGCalTriggerBestChoiceTriggerCellTester::checkSelectedCells(const edm::Event& e, const edm::EventSetup& es) { - edm::Handle be_triggercells_all_h; - edm::Handle be_triggercells_select_h; - e.getByToken(inputbeall_, be_triggercells_all_h); - e.getByToken(inputbeselect_, be_triggercells_select_h); - - const l1t::HGCalTriggerCellBxCollection& be_triggercells_all = *be_triggercells_all_h; - const l1t::HGCalTriggerCellBxCollection& be_triggercells_select = *be_triggercells_select_h; - - // store trigger cells module by module. tuple = zside,subdet,layer,module - std::map, std::vector> module_triggercells_all; - for (auto cl_itr = be_triggercells_all.begin(0); cl_itr != be_triggercells_all.end(0); cl_itr++) { - const l1t::HGCalTriggerCell& triggercell = *cl_itr; - uint32_t zside = triggercell.eta() < 0. ? 0 : 1; - uint32_t module = HGCalDetId(triggerGeometry_->getModuleFromTriggerCell(triggercell.detId())).wafer(); - uint32_t subdet = HGCalDetId(triggercell.detId()).subdetId(); - uint32_t layer = HGCalDetId(triggercell.detId()).layer(); - auto itr_insert = - module_triggercells_all.emplace(std::make_tuple(zside, subdet, layer, module), std::vector()); - itr_insert.first->second.emplace_back(triggercell.hwPt()); - } - std::map, std::vector> module_triggercells_select; - for (auto cl_itr = be_triggercells_select.begin(0); cl_itr != be_triggercells_select.end(0); cl_itr++) { - const l1t::HGCalTriggerCell& triggercell = *cl_itr; - uint32_t zside = triggercell.eta() < 0. ? 0 : 1; - uint32_t module = HGCalDetId(triggerGeometry_->getModuleFromTriggerCell(triggercell.detId())).wafer(); - uint32_t subdet = HGCalDetId(triggercell.detId()).subdetId(); - uint32_t layer = HGCalDetId(triggercell.detId()).layer(); - auto itr_insert = - module_triggercells_select.emplace(std::make_tuple(zside, subdet, layer, module), std::vector()); - itr_insert.first->second.emplace_back(triggercell.hwPt()); - } - - // Compare 'all' and 'selected' trigger cells, module by module - for (const auto& module_cells : module_triggercells_all) { - const auto& module_cells_select_itr = module_triggercells_select.find(module_cells.first); - if (module_cells_select_itr == module_triggercells_select.end()) { - stringstream error; - error << "ERROR: Cannot find module for selected cells\n"; - error << " Trigger cell values contained in module:\n"; - for (const auto& value : module_cells.second) { - error << value << " "; - } - error << "\n"; - edm::LogError("HGCalTriggerBestChoiceTriggerCellTester") << error.str(); - continue; - } - size_t ncells_all = module_cells.second.size(); - size_t ncells_select = module_cells_select_itr->second.size(); - uint32_t energy_all = 0; - uint32_t energy_select = 0; - for (const auto& energy : module_cells.second) - energy_all += energy; - for (const auto& energy : module_cells_select_itr->second) - energy_select += energy; - if (std::get<1>(module_cells.first) == ForwardSubdetector::HGCEE) { - selectedCellsVsAllCells_ee_->Fill(ncells_all, ncells_select); - if (energy_all > 0) - energyLossVsNCells_ee_->Fill(ncells_all, (double)energy_select / (double)energy_all); - if (energy_all > 0 && ncells_all < codec_->nData() && energy_select < energy_all) { - stringstream error; - error << "ERROR: N(cells)second) { - error << value << " "; - } - error << "\n"; - edm::LogError("HGCalTriggerBestChoiceTriggerCellTester") << error.str(); - } - } else if (std::get<1>(module_cells.first) == ForwardSubdetector::HGCHEF) { - selectedCellsVsAllCells_fh_->Fill(ncells_all, ncells_select); - if (energy_all > 0) - energyLossVsNCells_fh_->Fill(ncells_all, (double)energy_select / (double)energy_all); - } - } -} - -void HGCalTriggerBestChoiceTriggerCellTester::rerunBestChoiceFragments(const edm::Event& e, const edm::EventSetup& es) { - // retrieve digi collections - edm::Handle ee_digis_h; - edm::Handle fh_digis_h; - e.getByToken(inputee_, ee_digis_h); - e.getByToken(inputfh_, fh_digis_h); - - const HGCalDigiCollection& ee_digis = *ee_digis_h; - const HGCalDigiCollection& fh_digis = *fh_digis_h; - - HGCalTriggerCellBestChoiceDataPayload data; - - // retrieve simhit collections - std::map simhit_energies; - if (is_Simhit_comp_) { - edm::Handle ee_simhits_h; - e.getByToken(SimHits_inputee_, ee_simhits_h); - const edm::PCaloHitContainer& ee_simhits = *ee_simhits_h; - edm::Handle fh_simhits_h; - e.getByToken(SimHits_inputfh_, fh_simhits_h); - const edm::PCaloHitContainer& fh_simhits = *fh_simhits_h; - - // simhit/digi association EE - HGCalDetId digiid, simid; - int layer = 0, cell = 0, sec = 0, subsec = 0, zp = 0, subdet = 0; - ForwardSubdetector mysubdet; - HGCalDetId recoDetId; - int n_hits_asso = 0; - - // create a map containing all simhit energies - std::unordered_map simhits; - for (const auto& simhit : ee_simhits) { - simid = (HGCalDetId)simhit.id(); - HGCalTestNumbering::unpackHexagonIndex(simid, subdet, zp, layer, sec, subsec, cell); - mysubdet = (ForwardSubdetector)(subdet); - std::pair recoLayerCell = triggerGeometry_->eeTopology().dddConstants().simToReco( - cell, layer, sec, triggerGeometry_->eeTopology().detectorType()); - cell = recoLayerCell.first; - layer = recoLayerCell.second; - if (layer < 0 || cell < 0) { - continue; - } - recoDetId = HGCalDetId(mysubdet, zp, layer, subsec, sec, cell); - auto itr_insert = simhits.emplace(recoDetId, 0.); - itr_insert.first->second += simhit.energy(); - } - // find simhit energies associated to digis - for (const auto& data : ee_digis) { - digiid = (HGCalDetId)data.id(); - double hit_energy = 0; - auto itr = simhits.find(digiid); - if (itr != simhits.end()) { - n_hits_asso++; - hit_energy = itr->second; - } - simhit_energies[digiid] = hit_energy; - } - - // simhit/digi association FH - layer = 0; - cell = 0; - sec = 0; - subsec = 0; - zp = 0; - subdet = 0; - int n_hits_asso_fh = 0; - - // create a map containing all simhit energies - simhits.clear(); - for (const auto& simhit : fh_simhits) { - simid = (HGCalDetId)simhit.id(); - HGCalTestNumbering::unpackHexagonIndex(simid, subdet, zp, layer, sec, subsec, cell); - mysubdet = (ForwardSubdetector)(subdet); - std::pair recoLayerCell = triggerGeometry_->fhTopology().dddConstants().simToReco( - cell, layer, sec, triggerGeometry_->fhTopology().detectorType()); - cell = recoLayerCell.first; - layer = recoLayerCell.second; - if (layer < 0 || cell < 0) { - continue; - } - recoDetId = HGCalDetId(mysubdet, zp, layer, subsec, sec, cell); - auto itr_insert = simhits.emplace(recoDetId, 0.); - itr_insert.first->second += simhit.energy(); - } - // find simhit energies associated to digis - for (const auto& data : fh_digis) { - digiid = (HGCalDetId)data.id(); - double hit_energy = 0; - auto itr = simhits.find(digiid); - if (itr != simhits.end()) { - n_hits_asso_fh++; - hit_energy = itr->second; - } - simhit_energies[digiid] = hit_energy; - } - } - // Find modules containing hits and prepare list of hits for each module - std::unordered_map> hit_modules_ee; - for (const auto& eedata : ee_digis) { - uint32_t module = triggerGeometry_->getModuleFromCell(eedata.id()); - auto itr_insert = hit_modules_ee.emplace(module, std::vector()); - itr_insert.first->second.push_back(eedata); - } - std::unordered_map> hit_modules_fh; - for (const auto& fhdata : fh_digis) { - uint32_t module = triggerGeometry_->getModuleFromCell(fhdata.id()); - auto itr_insert = hit_modules_fh.emplace(module, std::vector()); - itr_insert.first->second.push_back(fhdata); - } - // loop on modules containing hits and call front-end processing - for (const auto& module_hits : hit_modules_ee) { - // prepare input data - std::vector dataframes; - std::vector> linearized_dataframes; - // loop over EE and fill digis belonging to that module - for (const auto& eedata : module_hits.second) { - dataframes.emplace_back(eedata.id()); - for (int i = 0; i < eedata.size(); i++) { - dataframes.back().setSample(i, eedata.sample(i)); - } - } - // Association simhit energies with trigger cells - std::unordered_map TC_simhit_energies; - if (is_Simhit_comp_) { - // need an ordered set to loop on it in the correct order - for (const auto& tc : triggerGeometry_->getOrderedTriggerCellsFromModule(module_hits.first)) { - TC_simhit_energies.emplace(tc, 0); - for (const auto& cell : triggerGeometry_->getCellsFromTriggerCell(tc)) { - double simenergy = simhit_energies[cell]; - TC_simhit_energies.at(tc) += simenergy; - } - } - } - // Best choice encoding - data.reset(); - codec_->linearize(dataframes, linearized_dataframes); - codec_->triggerCellSums(*triggerGeometry_, linearized_dataframes, data); - HGCalTriggerCellBestChoiceDataPayload data_TCsums_woBestChoice = data; - codec_->bestChoiceSelect(data); - HGCalTriggerCellBestChoiceDataPayload data_TCsums_BestChoice = data; - std::vector dataword = codec_->encode(data, *triggerGeometry_); - HGCalTriggerCellBestChoiceDataPayload datadecoded = codec_->decode(dataword, module_hits.first, *triggerGeometry_); - fillModule(dataframes, - linearized_dataframes, - data_TCsums_woBestChoice, - data_TCsums_BestChoice, - datadecoded, - simhit_energies, - TC_simhit_energies); - - } //end loop on EE modules - for (const auto& module_hits : hit_modules_fh) { - // prepare input data - std::vector dataframes; - std::vector> linearized_dataframes; - // loop over FH digis and fill digis belonging to that module - for (const auto& fhdata : module_hits.second) { - dataframes.emplace_back(fhdata.id()); - for (int i = 0; i < fhdata.size(); i++) { - dataframes.back().setSample(i, fhdata.sample(i)); - } - } - // Association simhit energies with trigger cells - std::unordered_map TC_simhit_energies; - if (is_Simhit_comp_) { - // need an ordered set to loop on it in the correct order - for (const auto& tc : triggerGeometry_->getOrderedTriggerCellsFromModule(module_hits.first)) { - TC_simhit_energies.emplace(tc, 0); - for (const auto& cell : triggerGeometry_->getCellsFromTriggerCell(tc)) { - double simenergy = simhit_energies[cell]; - TC_simhit_energies.at(tc) += simenergy; - } - } - } - // Best choice encoding - data.reset(); - codec_->linearize(dataframes, linearized_dataframes); - codec_->triggerCellSums(*triggerGeometry_, linearized_dataframes, data); - HGCalTriggerCellBestChoiceDataPayload data_TCsums_woBestChoice = data; - codec_->bestChoiceSelect(data); - HGCalTriggerCellBestChoiceDataPayload data_TCsums_BestChoice = data; - std::vector dataword = codec_->encode(data, *triggerGeometry_); - HGCalTriggerCellBestChoiceDataPayload datadecoded = codec_->decode(dataword, module_hits.first, *triggerGeometry_); - fillModule(dataframes, - linearized_dataframes, - data_TCsums_woBestChoice, - data_TCsums_BestChoice, - datadecoded, - simhit_energies, - TC_simhit_energies); - } //end loop on FH modules -} - -void HGCalTriggerBestChoiceTriggerCellTester::fillModule( - const std::vector& dataframes, - const std::vector>& linearized_dataframes, - const HGCalTriggerCellBestChoiceDataPayload& fe_payload_TCsums_woBestChoice, - const HGCalTriggerCellBestChoiceDataPayload& fe_payload_TCsums_BestChoice, - const HGCalTriggerCellBestChoiceDataPayload& fe_payload, - const std::map& simhit_energies, - const std::unordered_map& TC_simhit_energies) { - // HGC cells part - size_t nHGCDigi = 0; - unsigned hgcCellModuleSum = 0; - // digis, cell based info - for (const auto& frame : dataframes) { - uint32_t value = frame[2].data(); - nHGCDigi++; - hgcCellModuleSum += value; - hgcCellData_->Fill(value); - if (is_Simhit_comp_) { - double sim_energy = simhit_energies.at(frame.id()); - if (sim_energy > 0) { - hgcCellData_SimHitasso_->Fill(value); - hgcCellSimHits_->Fill(sim_energy); - hgcCellData_vsSimHits_->Fill(sim_energy, value); - } - } - } - hgcCellsPerModule_->Fill(nHGCDigi); - hgcCellModuleSum_->Fill(hgcCellModuleSum); - - // linearized samples, cell based info - for (const auto& frame : linearized_dataframes) { - hgcCellData_linampl_->Fill(frame.second); - if (is_Simhit_comp_) { - double sim_energy = simhit_energies.at(frame.first); - if (sim_energy > 0) { - hgcCellData_linampl_vsSimHits_->Fill(sim_energy, frame.second); - hgcCellData_linampl_vsSimHits_zoom_->Fill(sim_energy, frame.second); - } - } - } - - // trigger cells part - // after sum, no best choice, no encode/decode - for (const auto& tc : fe_payload_TCsums_woBestChoice.payload) { - if (tc.hwPt() > 0) { - triggerCellData_noBestChoice_->Fill(tc.hwPt()); - if (is_Simhit_comp_) { - if (TC_simhit_energies.at(tc.detId()) > 0) { - triggerCellSimHits_noBestChoice_->Fill(TC_simhit_energies.at(tc.detId())); - triggerCellData_noBestChoice_vsSimHits_->Fill(TC_simhit_energies.at(tc.detId()), tc.hwPt()); - } - } - } - } - - // after sum, best choice, no encode/decode - for (const auto& tc : fe_payload_TCsums_BestChoice.payload) { - if (tc.hwPt() > 0) { - triggerCellData_BestChoice_->Fill(tc.hwPt()); - if (is_Simhit_comp_) { - if (TC_simhit_energies.at(tc.detId()) > 0) - triggerCellData_BestChoice_vsSimHits_->Fill(TC_simhit_energies.at(tc.detId()), tc.hwPt()); - } - } - } - - // after sum, best choice, encode/decode - size_t nFEDigi = 0; - unsigned triggerCellModuleSum = 0; - for (const auto& tc : fe_payload.payload) { - uint32_t tcShifted = (tc.hwPt() << codec_->triggerCellTruncationBits()); - if (tc.hwPt() > 0) { - nFEDigi++; - triggerCellModuleSum += tcShifted; - triggerCellData_->Fill(tc.hwPt()); - if (is_Simhit_comp_) { - if (TC_simhit_energies.at(tc.detId()) > 0) - triggerCellData_vsSimHits_->Fill(TC_simhit_energies.at(tc.detId()), tc.hwPt()); - } - } - } - triggerCellsPerModule_->Fill(nFEDigi); - triggerCellModuleSum_->Fill(triggerCellModuleSum); -} - -//define this as a plug-in -DEFINE_FWK_MODULE(HGCalTriggerBestChoiceTriggerCellTester); diff --git a/L1Trigger/L1THGCal/test/HGCalTriggerThresholdTriggerCellTester.cc b/L1Trigger/L1THGCal/test/HGCalTriggerThresholdTriggerCellTester.cc deleted file mode 100644 index 6ec41a813831b..0000000000000 --- a/L1Trigger/L1THGCal/test/HGCalTriggerThresholdTriggerCellTester.cc +++ /dev/null @@ -1,539 +0,0 @@ -#include -#include -#include - -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/EDAnalyzer.h" -#include "FWCore/ServiceRegistry/interface/Service.h" -#include "CommonTools/UtilAlgos/interface/TFileService.h" - -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/ESTransientHandle.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "FWCore/Framework/interface/MakerMacros.h" - -#include "DataFormats/L1THGCal/interface/HGCFETriggerDigi.h" -#include "DataFormats/L1THGCal/interface/HGCFETriggerDigiDefs.h" -#include "DataFormats/L1THGCal/interface/HGCalCluster.h" -#include "DataFormats/HGCDigi/interface/HGCDigiCollections.h" - -#include "DataFormats/ForwardDetId/interface/HGCalDetId.h" -#include "DataFormats/ForwardDetId/interface/ForwardSubdetector.h" - -#include "SimDataFormats/CaloHit/interface/PCaloHit.h" -#include "SimDataFormats/CaloHit/interface/PCaloHitContainer.h" -#include "SimDataFormats/CaloTest/interface/HGCalTestNumbering.h" - -#include "Geometry/Records/interface/CaloGeometryRecord.h" - -#include "L1Trigger/L1THGCal/interface/HGCalTriggerGeometryBase.h" -#include "L1Trigger/L1THGCal/interface/HGCalTriggerFECodecBase.h" -#include "L1Trigger/L1THGCal/interface/fe_codecs/HGCalTriggerCellThresholdCodecImpl.h" -#include "L1Trigger/L1THGCal/interface/fe_codecs/HGCalTriggerCellThresholdCodec.h" - -#include -#include -#include "TH2.h" - -class HGCalTriggerThresholdTriggerCellTester : public edm::EDAnalyzer { -public: - explicit HGCalTriggerThresholdTriggerCellTester(const edm::ParameterSet&); - ~HGCalTriggerThresholdTriggerCellTester(); - - virtual void beginRun(const edm::Run&, const edm::EventSetup&); - virtual void analyze(const edm::Event&, const edm::EventSetup&); - -private: - void checkSelectedCells(const edm::Event&, const edm::EventSetup&); - void rerunThresholdFragments(const edm::Event&, const edm::EventSetup&); - void fillModule(const std::vector&, - const std::vector>&, - const HGCalTriggerCellThresholdDataPayload&, - const HGCalTriggerCellThresholdDataPayload&, - const HGCalTriggerCellThresholdDataPayload&, - const std::map&, - const std::unordered_map&); - - // inputs - edm::EDGetToken inputee_, inputfh_, inputbh_, inputbeall_, inputbeselect_; - bool is_Simhit_comp_; - edm::EDGetToken SimHits_inputee_, SimHits_inputfh_, SimHits_inputbh_; - // - edm::ESHandle triggerGeometry_; - std::unique_ptr codec_; - edm::Service fs_; - - // histos - TH1F* hgcCellData_; - TH1F* hgcCellData_SimHitasso_; - TH1F* hgcCellSimHits_; - TH2F* hgcCellData_vsSimHits_; - TH1F* hgcCellsPerModule_; - TH1F* hgcCellModuleSum_; - // - TH1F* hgcCellData_linampl_; - TH2F* hgcCellData_linampl_vsSimHits_; - TH2F* hgcCellData_linampl_vsSimHits_zoom_; - TH1F* triggerCellData_noThreshold_; - TH2F* triggerCellData_noThreshold_vsSimHits_; - TH1F* triggerCellSimHits_noThreshold_; - TH1F* triggerCellData_Threshold_; - TH2F* triggerCellData_Threshold_vsSimHits_; - TH1F* triggerCellData_; - TH2F* triggerCellData_vsSimHits_; - TH1F* triggerCellsPerModule_; - TH1F* triggerCellModuleSum_; - // - TH2F* selectedCellsVsAllCells_ee_; - TH2F* energyLossVsNCells_ee_; - TH2F* selectedCellsVsAllCells_fh_; - TH2F* energyLossVsNCells_fh_; - // -}; - -HGCalTriggerThresholdTriggerCellTester::HGCalTriggerThresholdTriggerCellTester(const edm::ParameterSet& conf) - : inputee_(consumes(conf.getParameter("eeDigis"))), - inputfh_(consumes(conf.getParameter("fhDigis"))), - //inputbh_(consumes(conf.getParameter("bhDigis"))), - inputbeall_(consumes(conf.getParameter("beTriggerCellsAll"))), - inputbeselect_( - consumes(conf.getParameter("beTriggerCellsSelect"))), - is_Simhit_comp_(conf.getParameter("isSimhitComp")), - SimHits_inputee_(consumes(conf.getParameter("eeSimHits"))), - SimHits_inputfh_(consumes(conf.getParameter("fhSimHits"))) -// SimHits_inputbh_(consumes(conf.getParameter("bhSimHits"))) -{ - //setup FE codec - const edm::ParameterSet& feCodecConfig = conf.getParameterSet("FECodec"); - codec_.reset(new HGCalTriggerCellThresholdCodecImpl(feCodecConfig)); - - // initialize output trees - // HGC Cells - hgcCellData_ = fs_->make("hgcCellData", "Cell values", 1000, 0., 2000.); - if (is_Simhit_comp_) { - hgcCellData_SimHitasso_ = - fs_->make("hgcCellData_SimHitasso_", "Cell values with an associated SimHit", 1000, 0, 2000.); - hgcCellSimHits_ = fs_->make("hgcCellSimHits_", "Cell simhit energies", 500, 0, 0.16); - hgcCellData_vsSimHits_ = - fs_->make("hgcCellData_vsSimHits_", "Cell values vs simhit energies", 500, 0, 0.16, 1000, 0., 2000.); - } - hgcCellsPerModule_ = fs_->make("hgcCellsPerModule", "Number of cells per module", 128, 0., 128.); - hgcCellModuleSum_ = fs_->make("hgcCellModuleSum", "Cell sum in modules", 1000, 0., 3000.); - // - hgcCellData_linampl_ = - fs_->make("hgcCellData_linampl_", "Cell linearized amplitudes values All", 1000, 0, 70000); - if (is_Simhit_comp_) { - hgcCellData_linampl_vsSimHits_ = fs_->make("hgcCellData_linampl_vsSimHits_", - "Cell linearized amplitudes vs simhit energies", - 500, - 0, - 0.16, - 1000, - 0, - 70000); - hgcCellData_linampl_vsSimHits_zoom_ = fs_->make("hgcCellData_linampl_vsSimHits_zoom_", - "Cell linearized amplitudes vssimhit energies, zoomed", - 1000, - 0, - 0.002, - 1000, - 0, - 1000); - } - - // HGC Trigger cells - triggerCellData_noThreshold_ = - fs_->make("triggerCellData_noThreshold_", "Trigger cell values, no threshold", 1000, 0., 70000.); - if (is_Simhit_comp_) { - triggerCellData_noThreshold_vsSimHits_ = fs_->make("triggerCellData_noThreshold_vsSimHits_", - "Trigger cell values vs simhit energies, no threshold", - 500, - 0, - 0.16, - 1000, - 0., - 70000.); - triggerCellSimHits_noThreshold_ = - fs_->make("triggerCellSimHits_noThreshold", "Trigger cell simhit energies, no threshold", 500, 0, 0.16); - } - triggerCellData_Threshold_ = - fs_->make("triggerCellData_Threshold_", "Trigger cell values, threshold", 1000, 0., 70000.); - if (is_Simhit_comp_) - triggerCellData_Threshold_vsSimHits_ = fs_->make("triggerCellData_Threshold_vsSimHits_", - "Trigger cell values vs simhit energies, threshold", - 500, - 0, - 0.16, - 1000, - 0., - 70000.); - triggerCellData_ = fs_->make("triggerCellData", "Trigger cell values", 1100, 0., 1100.); - if (is_Simhit_comp_) { - triggerCellData_vsSimHits_ = fs_->make( - "triggerCellData_vsSimHits_", "Trigger cell values vs simhit energies", 500, 0, 0.16, 1100, 0., 1100.); - } - triggerCellsPerModule_ = fs_->make("triggerCellsPerModule", "Number of trigger cells per module", 64, 0., 64.); - triggerCellModuleSum_ = fs_->make("TriggerCellModuleSum", "Trigger cell sum in modules", 1000, 0., 10000.); - // - selectedCellsVsAllCells_ee_ = fs_->make( - "selectedCellsVsAllCells_ee", "Number of selected cells vs number of cell", 128, 0, 128, 128, 0., 128.); - energyLossVsNCells_ee_ = fs_->make( - "energyLossVsNCells_ee", "Relative energy loss after selection vs number of cell", 128, 0., 128., 101, 0, 1.01); - selectedCellsVsAllCells_fh_ = fs_->make( - "selectedCellsVsAllCells_fh", "Number of selected cells vs number of cell", 128, 0, 128, 128, 0., 128.); - energyLossVsNCells_fh_ = fs_->make( - "energyLossVsNCells_fh", "Relative energy loss after selection vs number of cell", 128, 0., 128., 101, 0, 1.01); -} - -HGCalTriggerThresholdTriggerCellTester::~HGCalTriggerThresholdTriggerCellTester() {} - -void HGCalTriggerThresholdTriggerCellTester::beginRun(const edm::Run& /*run*/, const edm::EventSetup& es) { - es.get().get(triggerGeometry_); -} - -void HGCalTriggerThresholdTriggerCellTester::analyze(const edm::Event& e, const edm::EventSetup& es) { - checkSelectedCells(e, es); - rerunThresholdFragments(e, es); -} - -void HGCalTriggerThresholdTriggerCellTester::checkSelectedCells(const edm::Event& e, const edm::EventSetup& es) { - edm::Handle be_triggercells_all_h; - edm::Handle be_triggercells_select_h; - e.getByToken(inputbeall_, be_triggercells_all_h); - e.getByToken(inputbeselect_, be_triggercells_select_h); - - const l1t::HGCalTriggerCellBxCollection& be_triggercells_all = *be_triggercells_all_h; - const l1t::HGCalTriggerCellBxCollection& be_triggercells_select = *be_triggercells_select_h; - - // store trigger cells module by module. tuple = zside,subdet,layer,module - std::map, std::vector> module_triggercells_all; - for (auto cl_itr = be_triggercells_all.begin(0); cl_itr != be_triggercells_all.end(0); cl_itr++) { - const l1t::HGCalTriggerCell& triggercell = *cl_itr; - uint32_t zside = triggercell.eta() < 0. ? 0 : 1; - uint32_t module = HGCalDetId(triggerGeometry_->getModuleFromTriggerCell(triggercell.detId())).wafer(); - uint32_t subdet = HGCalDetId(triggercell.detId()).subdetId(); - uint32_t layer = HGCalDetId(triggercell.detId()).layer(); - auto itr_insert = - module_triggercells_all.emplace(std::make_tuple(zside, subdet, layer, module), std::vector()); - itr_insert.first->second.emplace_back(triggercell.hwPt()); - } - std::map, std::vector> module_triggercells_select; - for (auto cl_itr = be_triggercells_select.begin(0); cl_itr != be_triggercells_select.end(0); cl_itr++) { - const l1t::HGCalTriggerCell& triggercell = *cl_itr; - uint32_t zside = triggercell.eta() < 0. ? 0 : 1; - uint32_t module = HGCalDetId(triggerGeometry_->getModuleFromTriggerCell(triggercell.detId())).wafer(); - uint32_t subdet = HGCalDetId(triggercell.detId()).subdetId(); - uint32_t layer = HGCalDetId(triggercell.detId()).layer(); - auto itr_insert = - module_triggercells_select.emplace(std::make_tuple(zside, subdet, layer, module), std::vector()); - itr_insert.first->second.emplace_back(triggercell.hwPt()); - } - - // Compare 'all' and 'selected' trigger cells, module by module - for (const auto& module_cells : module_triggercells_all) { - const auto& module_cells_select_itr = module_triggercells_select.find(module_cells.first); - if (module_cells_select_itr == module_triggercells_select.end()) - continue; - size_t ncells_all = module_cells.second.size(); - size_t ncells_select = module_cells_select_itr->second.size(); - uint32_t energy_all = 0; - uint32_t energy_select = 0; - for (const auto& energy : module_cells.second) - energy_all += energy; - for (const auto& energy : module_cells_select_itr->second) - energy_select += energy; - if (std::get<1>(module_cells.first) == ForwardSubdetector::HGCEE) { - selectedCellsVsAllCells_ee_->Fill(ncells_all, ncells_select); - if (energy_all > 0) - energyLossVsNCells_ee_->Fill(ncells_all, (double)energy_select / (double)energy_all); - - } else if (std::get<1>(module_cells.first) == ForwardSubdetector::HGCHEF) { - selectedCellsVsAllCells_fh_->Fill(ncells_all, ncells_select); - if (energy_all > 0) - energyLossVsNCells_fh_->Fill(ncells_all, (double)energy_select / (double)energy_all); - } - } -} - -void HGCalTriggerThresholdTriggerCellTester::rerunThresholdFragments(const edm::Event& e, const edm::EventSetup& es) { - // retrieve digi collections - edm::Handle ee_digis_h; - edm::Handle fh_digis_h; - e.getByToken(inputee_, ee_digis_h); - e.getByToken(inputfh_, fh_digis_h); - - const HGCalDigiCollection& ee_digis = *ee_digis_h; - const HGCalDigiCollection& fh_digis = *fh_digis_h; - - HGCalTriggerCellThresholdDataPayload data; - - // retrieve simhit collections - std::map simhit_energies; - if (is_Simhit_comp_) { - edm::Handle ee_simhits_h; - e.getByToken(SimHits_inputee_, ee_simhits_h); - const edm::PCaloHitContainer& ee_simhits = *ee_simhits_h; - edm::Handle fh_simhits_h; - e.getByToken(SimHits_inputfh_, fh_simhits_h); - const edm::PCaloHitContainer& fh_simhits = *fh_simhits_h; - - // simhit/digi association EE - HGCalDetId digiid, simid; - int layer = 0, cell = 0, sec = 0, subsec = 0, zp = 0, subdet = 0; - ForwardSubdetector mysubdet; - HGCalDetId recoDetId; - int n_hits_asso = 0; - - // create a map containing all simhit energies - std::unordered_map simhits; - for (const auto& simhit : ee_simhits) { - simid = (HGCalDetId)simhit.id(); - HGCalTestNumbering::unpackHexagonIndex(simid, subdet, zp, layer, sec, subsec, cell); - mysubdet = (ForwardSubdetector)(subdet); - std::pair recoLayerCell = triggerGeometry_->eeTopology().dddConstants().simToReco( - cell, layer, sec, triggerGeometry_->eeTopology().detectorType()); - cell = recoLayerCell.first; - layer = recoLayerCell.second; - if (layer < 0 || cell < 0) { - continue; - } - recoDetId = HGCalDetId(mysubdet, zp, layer, subsec, sec, cell); - auto itr_insert = simhits.emplace(recoDetId, 0.); - itr_insert.first->second += simhit.energy(); - } - // find simhit energies associated to digis - for (const auto& data : ee_digis) { - digiid = (HGCalDetId)data.id(); - double hit_energy = 0; - auto itr = simhits.find(digiid); - if (itr != simhits.end()) { - n_hits_asso++; - hit_energy = itr->second; - } - simhit_energies[digiid] = hit_energy; - } - - // simhit/digi association FH - layer = 0; - cell = 0; - sec = 0; - subsec = 0; - zp = 0; - subdet = 0; - int n_hits_asso_fh = 0; - - // create a map containing all simhit energies - simhits.clear(); - for (const auto& simhit : fh_simhits) { - simid = (HGCalDetId)simhit.id(); - HGCalTestNumbering::unpackHexagonIndex(simid, subdet, zp, layer, sec, subsec, cell); - mysubdet = (ForwardSubdetector)(subdet); - std::pair recoLayerCell = triggerGeometry_->fhTopology().dddConstants().simToReco( - cell, layer, sec, triggerGeometry_->fhTopology().detectorType()); - cell = recoLayerCell.first; - layer = recoLayerCell.second; - if (layer < 0 || cell < 0) { - continue; - } - recoDetId = HGCalDetId(mysubdet, zp, layer, subsec, sec, cell); - auto itr_insert = simhits.emplace(recoDetId, 0.); - itr_insert.first->second += simhit.energy(); - } - // find simhit energies associated to digis - for (const auto& data : fh_digis) { - digiid = (HGCalDetId)data.id(); - double hit_energy = 0; - auto itr = simhits.find(digiid); - if (itr != simhits.end()) { - n_hits_asso_fh++; - hit_energy = itr->second; - } - simhit_energies[digiid] = hit_energy; - } - } - // Find modules containing hits and prepare list of hits for each module - std::unordered_map> hit_modules_ee; - for (const auto& eedata : ee_digis) { - uint32_t module = triggerGeometry_->getModuleFromCell(eedata.id()); - auto itr_insert = hit_modules_ee.emplace(module, std::vector()); - itr_insert.first->second.push_back(eedata); - } - std::unordered_map> hit_modules_fh; - for (const auto& fhdata : fh_digis) { - uint32_t module = triggerGeometry_->getModuleFromCell(fhdata.id()); - auto itr_insert = hit_modules_fh.emplace(module, std::vector()); - itr_insert.first->second.push_back(fhdata); - } - // loop on modules containing hits and call front-end processing - for (const auto& module_hits : hit_modules_ee) { - // prepare input data - std::vector dataframes; - std::vector> linearized_dataframes; - // loop over EE and fill digis belonging to that module - for (const auto& eedata : module_hits.second) { - dataframes.emplace_back(eedata.id()); - for (int i = 0; i < eedata.size(); i++) { - dataframes.back().setSample(i, eedata.sample(i)); - } - } - // Association simhit energies with trigger cells - std::unordered_map TC_simhit_energies; - if (is_Simhit_comp_) { - // need an ordered set to loop on it in the correct order - for (const auto& tc : triggerGeometry_->getOrderedTriggerCellsFromModule(module_hits.first)) { - TC_simhit_energies.emplace(tc, 0); - for (const auto& cell : triggerGeometry_->getCellsFromTriggerCell(tc)) { - double simenergy = simhit_energies[cell]; - TC_simhit_energies.at(tc) += simenergy; - } - } - } - // Threshold encoding - data.reset(); - codec_->linearize(dataframes, linearized_dataframes); - codec_->triggerCellSums(*triggerGeometry_, linearized_dataframes, data); - HGCalTriggerCellThresholdDataPayload data_TCsums_woThreshold = data; - codec_->thresholdSelect(data); - HGCalTriggerCellThresholdDataPayload data_TCsums_Threshold = data; - std::vector dataword = codec_->encode(data, *triggerGeometry_); - HGCalTriggerCellThresholdDataPayload datadecoded = codec_->decode(dataword, module_hits.first, *triggerGeometry_); - fillModule(dataframes, - linearized_dataframes, - data_TCsums_woThreshold, - data_TCsums_Threshold, - datadecoded, - simhit_energies, - TC_simhit_energies); - - } //end loop on EE modules - for (const auto& module_hits : hit_modules_fh) { - // prepare input data - std::vector dataframes; - std::vector> linearized_dataframes; - // loop over FH digis and fill digis belonging to that module - for (const auto& fhdata : module_hits.second) { - dataframes.emplace_back(fhdata.id()); - for (int i = 0; i < fhdata.size(); i++) { - dataframes.back().setSample(i, fhdata.sample(i)); - } - } - // Association simhit energies with trigger cells - std::unordered_map TC_simhit_energies; - if (is_Simhit_comp_) { - // need an ordered set to loop on it in the correct order - for (const auto& tc : triggerGeometry_->getOrderedTriggerCellsFromModule(module_hits.first)) { - TC_simhit_energies.emplace(tc, 0); - for (const auto& cell : triggerGeometry_->getCellsFromTriggerCell(tc)) { - double simenergy = simhit_energies[cell]; - TC_simhit_energies.at(tc) += simenergy; - } - } - } - // Threshold encoding - data.reset(); - codec_->linearize(dataframes, linearized_dataframes); - codec_->triggerCellSums(*triggerGeometry_, linearized_dataframes, data); - HGCalTriggerCellThresholdDataPayload data_TCsums_woThreshold = data; - codec_->thresholdSelect(data); - HGCalTriggerCellThresholdDataPayload data_TCsums_Threshold = data; - std::vector dataword = codec_->encode(data, *triggerGeometry_); - HGCalTriggerCellThresholdDataPayload datadecoded = codec_->decode(dataword, module_hits.first, *triggerGeometry_); - fillModule(dataframes, - linearized_dataframes, - data_TCsums_woThreshold, - data_TCsums_Threshold, - datadecoded, - simhit_energies, - TC_simhit_energies); - } //end loop on FH modules -} - -void HGCalTriggerThresholdTriggerCellTester::fillModule( - const std::vector& dataframes, - const std::vector>& linearized_dataframes, - const HGCalTriggerCellThresholdDataPayload& fe_payload_TCsums_woThreshold, - const HGCalTriggerCellThresholdDataPayload& fe_payload_TCsums_Threshold, - const HGCalTriggerCellThresholdDataPayload& fe_payload, - const std::map& simhit_energies, - const std::unordered_map& TC_simhit_energies) { - // HGC cells part - size_t nHGCDigi = 0; - unsigned hgcCellModuleSum = 0; - // digis, cell based info - for (const auto& frame : dataframes) { - uint32_t value = frame[2].data(); - nHGCDigi++; - hgcCellModuleSum += value; - hgcCellData_->Fill(value); - if (is_Simhit_comp_) { - double sim_energy = simhit_energies.at(frame.id()); - if (sim_energy > 0) { - hgcCellData_SimHitasso_->Fill(value); - hgcCellSimHits_->Fill(sim_energy); - hgcCellData_vsSimHits_->Fill(sim_energy, value); - } - } - } - hgcCellsPerModule_->Fill(nHGCDigi); - hgcCellModuleSum_->Fill(hgcCellModuleSum); - - // linearized samples, cell based info - for (const auto& frame : linearized_dataframes) { - hgcCellData_linampl_->Fill(frame.second); - if (is_Simhit_comp_) { - double sim_energy = simhit_energies.at(frame.first); - if (sim_energy > 0) { - hgcCellData_linampl_vsSimHits_->Fill(sim_energy, frame.second); - hgcCellData_linampl_vsSimHits_zoom_->Fill(sim_energy, frame.second); - } - } - } - - // trigger cells part - // after sum, no threshold, no encode/decode - for (const auto& tc : fe_payload_TCsums_woThreshold.payload) { - if (tc.hwPt() > 0) { - triggerCellData_noThreshold_->Fill(tc.hwPt()); - if (is_Simhit_comp_) { - if (TC_simhit_energies.at(tc.detId()) > 0) { - triggerCellSimHits_noThreshold_->Fill(TC_simhit_energies.at(tc.detId())); - triggerCellData_noThreshold_vsSimHits_->Fill(TC_simhit_energies.at(tc.detId()), tc.hwPt()); - } - } - } - } - - // after sum, threshold, no encode/decode - for (const auto& tc : fe_payload_TCsums_Threshold.payload) { - if (tc.hwPt() > 0) { - triggerCellData_Threshold_->Fill(tc.hwPt()); - if (is_Simhit_comp_) { - if (TC_simhit_energies.at(tc.detId()) > 0) - triggerCellData_Threshold_vsSimHits_->Fill(TC_simhit_energies.at(tc.detId()), tc.hwPt()); - } - } - } - - // after sum, threshold, encode/decode - size_t nFEDigi = 0; - unsigned triggerCellModuleSum = 0; - for (const auto& tc : fe_payload.payload) { - uint32_t tcShifted = (tc.hwPt() << codec_->triggerCellTruncationBits()); - if (tc.hwPt() > 0) { - nFEDigi++; - triggerCellModuleSum += tcShifted; - triggerCellData_->Fill(tc.hwPt()); - if (is_Simhit_comp_) { - if (TC_simhit_energies.at(tc.detId()) > 0) - triggerCellData_vsSimHits_->Fill(TC_simhit_energies.at(tc.detId()), tc.hwPt()); - } - } - } - triggerCellsPerModule_->Fill(nFEDigi); - triggerCellModuleSum_->Fill(triggerCellModuleSum); -} - -//define this as a plug-in -DEFINE_FWK_MODULE(HGCalTriggerThresholdTriggerCellTester); diff --git a/L1Trigger/L1THGCal/test/L1Clustering_cfg.py b/L1Trigger/L1THGCal/test/L1Clustering_cfg.py deleted file mode 100644 index d6232151e5f99..0000000000000 --- a/L1Trigger/L1THGCal/test/L1Clustering_cfg.py +++ /dev/null @@ -1,125 +0,0 @@ -import FWCore.ParameterSet.Config as cms - - -from Configuration.Eras.Era_Phase2_cff import Phase2 -process = cms.Process('test',Phase2) - -# import of standard configurations -process.load('Configuration.StandardSequences.Services_cff') -process.load('SimGeneral.HepPDTESSource.pythiapdt_cfi') -process.load('FWCore.MessageService.MessageLogger_cfi') -process.load('Configuration.EventContent.EventContent_cff') -process.load('SimGeneral.MixingModule.mixNoPU_cfi') -process.load('Configuration.Geometry.GeometryExtended2023D17Reco_cff') -process.load('Configuration.Geometry.GeometryExtended2023D17_cff') -process.load('Configuration.StandardSequences.MagneticField_cff') -process.load('Configuration.StandardSequences.Generator_cff') -process.load('Configuration.StandardSequences.VtxSmearedNoSmear_cff') -process.load('GeneratorInterface.Core.genFilterSummary_cff') -process.load('Configuration.StandardSequences.SimIdeal_cff') -process.load('Configuration.StandardSequences.Digi_cff') -process.load('Configuration.StandardSequences.SimL1Emulator_cff') -process.load('Configuration.StandardSequences.DigiToRaw_cff') -process.load('Configuration.StandardSequences.EndOfProcess_cff') -process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff') -process.load('L1Trigger.L1THGCal.hgcalTriggerPrimitives_cff') - -process.maxEvents = cms.untracked.PSet( - input = cms.untracked.int32(1) - ) - -# Input source -process.source = cms.Source("EmptySource") - -process.options = cms.untracked.PSet( - -) - -# Production Info -process.configurationMetadata = cms.untracked.PSet( - version = cms.untracked.string('$Revision: 1.20 $'), - annotation = cms.untracked.string('SingleElectronPt10_cfi nevts:10'), - name = cms.untracked.string('Applications') - ) - -# Output definition -process.FEVTDEBUGoutput = cms.OutputModule("PoolOutputModule", - splitLevel = cms.untracked.int32(0), - eventAutoFlushCompressedSize = cms.untracked.int32(5242880), - #outputCommands = process.FEVTDEBUGEventContent.outputCommands, - outputCommands = cms.untracked.vstring( - 'keep *_*_HGCHitsEE_*', - 'keep *_*_HGCHitsHEback_*', - 'keep *_*_HGCHitsHEfront_*', - 'keep *_mix_*_*', - 'keep *_genParticles_*_*', - 'keep *_hgcalTriggerPrimitiveDigiProducer_*_*' - ), - fileName = cms.untracked.string('file:test.root'), - dataset = cms.untracked.PSet( - filterName = cms.untracked.string(''), - dataTier = cms.untracked.string('GEN-SIM-DIGI-RAW') - ), - SelectEvents = cms.untracked.PSet( - SelectEvents = cms.vstring('generation_step') - ) -) - - -# Additional output definition -process.TFileService = cms.Service( - "TFileService", - fileName = cms.string("ntuple.root") - ) - -# Other statements -process.genstepfilter.triggerConditions=cms.vstring("generation_step") -from Configuration.AlCa.GlobalTag import GlobalTag -process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:run2_mc', '') - -process.generator = cms.EDProducer("FlatRandomPtGunProducer", - PGunParameters = cms.PSet( - MaxPt = cms.double(200.00), - MinPt = cms.double(5.0), - PartID = cms.vint32(22), - MaxEta = cms.double(3.0), - MaxPhi = cms.double(3.14159265359), - MinEta = cms.double(1.47), - MinPhi = cms.double(-3.14159265359) - ), - Verbosity = cms.untracked.int32(0), - psethack = cms.string('single electron pt 50'), - AddAntiParticle = cms.bool(True), - firstRun = cms.untracked.uint32(1) -) - -process.mix.digitizers = cms.PSet(process.theDigitizersValid) - -# Path and EndPath definitions -process.generation_step = cms.Path(process.pgen) -process.simulation_step = cms.Path(process.psim) -process.genfiltersummary_step = cms.EndPath(process.genFilterSummary) -process.digitisation_step = cms.Path(process.pdigi_valid) -process.L1simulation_step = cms.Path(process.SimL1Emulator) -process.hgcl1tpg_step = cms.Path( process.hgcalTriggerPrimitives ) -process.digi2raw_step = cms.Path( process.DigiToRaw ) - -process.endjob_step = cms.EndPath(process.endOfProcess) -process.FEVTDEBUGoutput_step = cms.EndPath(process.FEVTDEBUGoutput) - -# load ntuplizer -process.load('L1Trigger.L1THGCal.hgcalTriggerNtuples_cff') -process.ntuple_step = cms.Path(process.hgcalTriggerNtuples) - -# Schedule definition -process.schedule = cms.Schedule( process.generation_step, process.genfiltersummary_step, process.simulation_step, - process.digitisation_step, process.L1simulation_step, process.hgcl1tpg_step, - process.digi2raw_step, - process.ntuple_step, - process.endjob_step, -# process.FEVTDEBUGoutput_step - ) - -# filter all path with the production filter sequence -for path in process.paths: - getattr(process,path)._seq = process.generator * getattr(process,path)._seq diff --git a/L1Trigger/L1THGCal/test/L1TC_CalibWeightExt_cfg.py b/L1Trigger/L1THGCal/test/L1TC_CalibWeightExt_cfg.py deleted file mode 100644 index 8559cd0e7e3be..0000000000000 --- a/L1Trigger/L1THGCal/test/L1TC_CalibWeightExt_cfg.py +++ /dev/null @@ -1,138 +0,0 @@ -import FWCore.ParameterSet.Config as cms - - -from Configuration.Eras.Era_Phase2_cff import Phase2 -process = cms.Process('test',Phase2) - -# import of standard configurations -process.load('Configuration.StandardSequences.Services_cff') -process.load('SimGeneral.HepPDTESSource.pythiapdt_cfi') -process.load('FWCore.MessageService.MessageLogger_cfi') -process.load('Configuration.EventContent.EventContent_cff') -process.load('SimGeneral.MixingModule.mixNoPU_cfi') -process.load('Configuration.Geometry.GeometryExtended2023D17Reco_cff') -process.load('Configuration.Geometry.GeometryExtended2023D17_cff') -process.load('Configuration.StandardSequences.MagneticField_cff') -process.load('Configuration.StandardSequences.Generator_cff') -process.load('IOMC.EventVertexGenerators.VtxSmearedHLLHC14TeV_cfi') -process.load('GeneratorInterface.Core.genFilterSummary_cff') -process.load('Configuration.StandardSequences.SimIdeal_cff') -process.load('Configuration.StandardSequences.Digi_cff') -process.load('Configuration.StandardSequences.SimL1Emulator_cff') -process.load('Configuration.StandardSequences.DigiToRaw_cff') -process.load('Configuration.StandardSequences.EndOfProcess_cff') -process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff') -process.load('L1Trigger.L1THGCal.hgcalTriggerPrimitives_cff') - -process.maxEvents = cms.untracked.PSet( - input = cms.untracked.int32(1) - ) - -# Input source -process.source = cms.Source("EmptySource") - -process.options = cms.untracked.PSet( - -) - -# Production Info -process.configurationMetadata = cms.untracked.PSet( - version = cms.untracked.string('$Revision: 1.20 $'), - annotation = cms.untracked.string('SingleElectronPt10_cfi nevts:10'), - name = cms.untracked.string('Applications') - ) - -# Output definition -process.FEVTDEBUGoutput = cms.OutputModule("PoolOutputModule", - splitLevel = cms.untracked.int32(0), - eventAutoFlushCompressedSize = cms.untracked.int32(5242880), - #outputCommands = process.FEVTDEBUGEventContent.outputCommands, - outputCommands = cms.untracked.vstring( - 'keep *_*_HGCHitsEE_*', - 'keep *_*_HGCHitsHEback_*', - 'keep *_*_HGCHitsHEfront_*', - 'keep *_mix_*_*', - 'keep *_genParticles_*_*', - 'keep *_hgcalTriggerPrimitiveDigiProducer_*_*' - ), - fileName = cms.untracked.string('file:test.root'), - dataset = cms.untracked.PSet( - filterName = cms.untracked.string(''), - dataTier = cms.untracked.string('GEN-SIM-DIGI-RAW') - ), - SelectEvents = cms.untracked.PSet( - SelectEvents = cms.vstring('generation_step') - ) -) - - -# Additional output definition -process.TFileService = cms.Service( - "TFileService", - fileName = cms.string("ntuple.root") - ) - -# Other statements -process.genstepfilter.triggerConditions=cms.vstring("generation_step") -from Configuration.AlCa.GlobalTag import GlobalTag -process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:phase2_realistic', '') - -process.generator = cms.EDProducer("FlatRandomPtGunProducer", - PGunParameters = cms.PSet( - MaxPt = cms.double(50.01), - MinPt = cms.double(49.99), - PartID = cms.vint32(11), - MaxEta = cms.double(3.0), - MaxPhi = cms.double(3.14159265359), - MinEta = cms.double(1.5), - MinPhi = cms.double(-3.14159265359) - ), - Verbosity = cms.untracked.int32(0), - psethack = cms.string('single electron pt 50'), - AddAntiParticle = cms.bool(True), - firstRun = cms.untracked.uint32(1) -) - -process.mix.digitizers = cms.PSet(process.theDigitizersValid) - -# Path and EndPath definitions -process.generation_step = cms.Path(process.pgen) -process.simulation_step = cms.Path(process.psim) -process.genfiltersummary_step = cms.EndPath(process.genFilterSummary) -process.digitisation_step = cms.Path(process.pdigi_valid) -process.L1simulation_step = cms.Path(process.SimL1Emulator) -process.load('L1Trigger.L1THGCal.hgcalTriggerPrimitives_cff') - - -process.hgcl1tpg_step = cms.Path(process.hgcalTriggerPrimitives) - - -process.digi2raw_step = cms.Path(process.DigiToRaw) -process.TC_CalibWeight = cms.EDAnalyzer("testCalibration", - triggerCellInputTag=cms.InputTag("hgcalTriggerPrimitiveDigiProducer:calibratedTriggerCells") - ) - -process.test_step = cms.Path(process.TC_CalibWeight) - -process.endjob_step = cms.EndPath(process.endOfProcess) -process.FEVTDEBUGoutput_step = cms.EndPath(process.FEVTDEBUGoutput) - -# load ntuplizer -process.load('L1Trigger.L1THGCal.hgcalTriggerNtuples_cff') -process.ntuple_step = cms.Path(process.hgcalTriggerNtuples) - -# Schedule definition -process.schedule = cms.Schedule( process.generation_step, process.genfiltersummary_step, process.simulation_step, - process.digitisation_step, process.L1simulation_step, process.hgcl1tpg_step, - process.digi2raw_step, process.test_step, process.ntuple_step, process.endjob_step, - process.FEVTDEBUGoutput_step - ) - -# filter all path with the production filter sequence -for path in process.paths: - getattr(process,path)._seq = process.generator * getattr(process,path)._seq - -# Add early deletion of temporary data products to reduce peak memory need -from Configuration.StandardSequences.earlyDeleteSettings_cff import customiseEarlyDelete -process = customiseEarlyDelete(process) -# End adding early deletion diff --git a/L1Trigger/L1THGCal/test/calib/testCalibration.cc b/L1Trigger/L1THGCal/test/calib/testCalibration.cc deleted file mode 100644 index ea2ce102cfda5..0000000000000 --- a/L1Trigger/L1THGCal/test/calib/testCalibration.cc +++ /dev/null @@ -1,141 +0,0 @@ -// -*- C++ -*- -// -// Package: Analyzers -// Class: testCalibration -// -/**\class testCalibration testCalibration.cc HGCPFLab/Analyzers/plugins/testCalibration.cc - - Description: [one line class summary] - - Implementation: - [Notes on implementation] -*/ -// -// Original Author: Luca Mastrolorenzo -// Created: Mon, 07 Dec 2015 16:38:57 GMT -// $Id$ -// -// - -// system include files -#include - -// user include files -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/MessageLogger/interface/MessageLogger.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Framework/interface/EDAnalyzer.h" -#include "FWCore/Utilities/interface/InputTag.h" -#include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "FWCore/ServiceRegistry/interface/Service.h" -#include "DataFormats/Common/interface/Handle.h" -#include "DataFormats/L1THGCal/interface/HGCalTriggerCell.h" -#include "CommonTools/UtilAlgos/interface/TFileService.h" -#include "L1Trigger/L1THGCal/interface/HGCalTriggerBackendProcessor.h" -#include "TTree.h" - -// -// class declaration -// -using namespace std; -using namespace edm; -using namespace reco; -using namespace HGCalTriggerBackend; -using namespace l1t; - -class testCalibration : public edm::EDAnalyzer { -public: - explicit testCalibration(const edm::ParameterSet &); - - ~testCalibration(); - -private: - edm::Service fs_; - virtual void analyze(const edm::Event &, const edm::EventSetup &); - - // ----------member data --------------------------- - EDGetTokenT tokenTrgCell_; - - bool debug_; - int nEvent_ = 0; - - TH1D *h_photon_pt_; - TH1D *h_tc_hwPt_; - TH1D *h_tc_E_; - TH1D *h_tc_pt_; - TH1D *h_tc_eta_; - TH1D *h_tc_phi_; - TH1D *h_tc_layer_; - - TTree *mytree_; - - double TC_pt_ = 0.; -}; - -// constructors and destructor -testCalibration::testCalibration(const edm::ParameterSet &iConfig) - : tokenTrgCell_(consumes(iConfig.getParameter("triggerCellInputTag"))) { - // consumes< BXVector< l1t::HGCalTriggerCell > > (TrgCells_tag_); - // consumes< HGCalTriggerCellBxCollection > (TrgCells_tag_); - - //now do what ever initialization is needed - //edm::Service fs; - h_photon_pt_ = fs_->make("h_photon_pt", "h_photon_pt", 250, 0, 500); - h_tc_hwPt_ = fs_->make("h_tc_hwPt", "h_tc_hwPt", 100, 0, 2); - h_tc_E_ = fs_->make("h_tc_E", "h_tc_E", 200, 0, 50); - h_tc_pt_ = fs_->make("h_tc_pt", "h_tc_pt", 200, 0, 50); - h_tc_eta_ = fs_->make("h_tc_eta", "h_tc_eta", 100, -3.1, 3.1); - h_tc_phi_ = fs_->make("h_tc_phi", "h_tc_phi", 100, -3.14, 3.14); - h_tc_layer_ = fs_->make("h_tc_layer", "h_tc_layer", 40, 0, 40); - - mytree_ = fs_->make("tree", "tree"); - - //TTree branch - mytree_->Branch("event", &nEvent_, "event/I"); - mytree_->Branch("TC_pt", &TC_pt_, "TC_pt/D"); -} - -testCalibration::~testCalibration() {} - -// ------------ method called for each event ------------ -void testCalibration::analyze(const edm::Event &iEvent, const edm::EventSetup &iSetup) { - using namespace std; - using namespace edm; - using namespace reco; - using namespace HGCalTriggerBackend; - using namespace l1t; - - Handle trgCell; - iEvent.getByToken(tokenTrgCell_, trgCell); - - double E_allTC_endcap_PosEta = 0.; - double E_allTC_endcap_NegEta = 0.; - - for (size_t i = 0; i < trgCell->size(); ++i) { - if ((*trgCell)[i].pt() < 0.01) - continue; - HGCalDetId detid((*trgCell)[i].detId()); - int tc_layer = detid.layer(); - - if ((*trgCell)[i].eta() < 0) - E_allTC_endcap_NegEta += (*trgCell)[i].pt(); - else if ((*trgCell)[i].eta() > 0) - E_allTC_endcap_PosEta += (*trgCell)[i].pt(); - - h_tc_pt_->Fill((*trgCell)[i].pt()); - h_tc_eta_->Fill((*trgCell)[i].eta()); - h_tc_phi_->Fill((*trgCell)[i].phi()); - h_tc_layer_->Fill(tc_layer); - } - if (E_allTC_endcap_PosEta > 0) { - h_photon_pt_->Fill(E_allTC_endcap_PosEta); - } else if (E_allTC_endcap_NegEta > 0) { - h_photon_pt_->Fill(E_allTC_endcap_NegEta); - } - mytree_->Fill(); -} - -//define this as a plug-in -DEFINE_FWK_MODULE(testCalibration); diff --git a/L1Trigger/L1THGCal/test/macros/DrawingUtilities.py b/L1Trigger/L1THGCal/test/macros/DrawingUtilities.py deleted file mode 100644 index 84a39ebd07e1f..0000000000000 --- a/L1Trigger/L1THGCal/test/macros/DrawingUtilities.py +++ /dev/null @@ -1,217 +0,0 @@ -from builtins import range -import ROOT -import waferGeometry -import math -from array import array - -def float_equal(a, b, rel_tol=1e-4, abs_tol=1e-2): - return abs(a-b) <= max(rel_tol * max(abs(a), abs(b)), abs_tol) - -def compare_lines(line1, line2): - xy11 = (line1.GetX1(), line1.GetY1()) - xy12 = (line1.GetX2(), line1.GetY2()) - xy21 = (line2.GetX1(), line2.GetY1()) - xy22 = (line2.GetX2(), line2.GetY2()) - samecorner1 = (float_equal(xy11[0],xy21[0]) and float_equal(xy11[1],xy21[1])) or (float_equal(xy11[0],xy22[0]) and float_equal(xy11[1],xy22[1])) - samecorner2 = (float_equal(xy12[0],xy21[0]) and float_equal(xy12[1],xy21[1])) or (float_equal(xy12[0],xy22[0]) and float_equal(xy12[1],xy22[1])) - #if prt: print "[",xy11,xy12,"]","[",xy21,xy22,"]",(samecorner1 and samecorner2) - return samecorner1 and samecorner2 - -def boxlines(box): - lines = [] - lines.append(ROOT.TLine(box.GetX1(), box.GetY1(), box.GetX1(), box.GetY2())) - lines.append(ROOT.TLine(box.GetX1(), box.GetY1(), box.GetX2(), box.GetY1())) - lines.append(ROOT.TLine(box.GetX1(), box.GetY2(), box.GetX2(), box.GetY2())) - lines.append(ROOT.TLine(box.GetX2(), box.GetY1(), box.GetX2(), box.GetY2())) - return lines - -## remove duplicated lines from a list of lines -def merge_lines(lines): - copylines = [] - n = len(lines) - for line1 in lines: - duplicate = False - for line2 in lines: - if line1 is line2: continue - sameline = compare_lines(line1, line2) - if sameline: duplicate = True - if not duplicate: - copylines.append(line1) - return copylines - -def merge_lines(lines1, lines2): - rm1 = [] - rm2 = [] - copylines = [] - for i1,line1 in enumerate(lines1): - sameline = False - for i2,line2 in enumerate(lines2): - sameline = compare_lines(line1, line2) - if sameline: - rm2.append(i2) - break - if not sameline: - copylines.append(line1) - for i,line in enumerate(lines2): - if i not in rm2: - copylines.append(line) - return copylines - - -class Position: - def __init__(self): - self.x = 0. - self.y = 0. - self.z = 0. - -class Cell: - def __init__(self): - self.id = 0 - self.zside = 0 - self.layer = 0 - self.wafer = 0 - self.wafertype = 0 - self.waferrow = 0 - self.wafercolumn = 0 - self.cell = 0 - self.center = Position() - self.corners = [Position(), Position(), Position(), Position()] - self.lines = [] - self.edge = 0. - - def point(self): - return ROOT.TMarker(self.center.x, self.center.y, 1) - - def box(self): - return ROOT.TBox(self.corners[0].x, self.corners[0].y, self.corners[2].x, self.corners[2].y) - - def hexagon_points(self): - wafer_geometry = waferGeometry.smallCellWafer if self.wafertype==1 else waferGeometry.largeCellWafer - self.edge = wafer_geometry['cell_corner_size'] - xs = [] - ys = [] - diameter = self.edge/math.tan(math.radians(30)) - centerx = self.center.x - centery = self.center.y - # Shift center for half cells or corner cells - if self.cell in wafer_geometry['half_cells_edge_left']: - centerx -= 2.*math.sqrt(3)*self.edge/9. - elif self.cell in wafer_geometry['half_cells_edge_topleft']: - centerx -= 2.*math.sqrt(3)*self.edge/9.*math.cos(math.radians(60)) - centery += 2.*math.sqrt(3)*self.edge/9.*math.sin(math.radians(60)) - elif self.cell in wafer_geometry['half_cells_edge_topright']: - centerx += 2.*math.sqrt(3)*self.edge/9.*math.cos(math.radians(60)) - centery += 2.*math.sqrt(3)*self.edge/9.*math.sin(math.radians(60)) - elif self.cell in wafer_geometry['half_cells_edge_bottomright']: - centerx += 2.*math.sqrt(3)*self.edge/9.*math.cos(math.radians(60)) - centery -= 2.*math.sqrt(3)*self.edge/9.*math.sin(math.radians(60)) - elif self.cell in wafer_geometry['half_cells_edge_bottomleft']: - centerx -= 2.*math.sqrt(3)*self.edge/9.*math.cos(math.radians(60)) - centery -= 2.*math.sqrt(3)*self.edge/9.*math.sin(math.radians(60)) - elif self.cell in wafer_geometry['half_cells_edge_right']: - centerx += 2.*math.sqrt(3)*self.edge/9. - x = centerx - diameter/2. - y = centery - self.edge/2. - for angle in range(0, 360, 60): - y += math.cos(math.radians(angle)) * self.edge - x += math.sin(math.radians(angle)) * self.edge - xs.append(x) - ys.append(y) - # Remove corners for half cells and corner cells - if self.cell in wafer_geometry['half_cells_edge_left']: - del xs[0]; del ys[0] - del xs[-1]; del ys[-1] - elif self.cell in wafer_geometry['half_cells_edge_topleft']: - del xs[0]; del ys[0] - del xs[0]; del ys[0] - elif self.cell in wafer_geometry['half_cells_edge_topright']: - del xs[1]; del ys[1] - del xs[1]; del ys[1] - elif self.cell in wafer_geometry['half_cells_edge_bottomright']: - del xs[3]; del ys[3] - del xs[3]; del ys[3] - elif self.cell in wafer_geometry['half_cells_edge_bottomleft']: - del xs[4]; del ys[4] - del xs[4]; del ys[4] - elif self.cell in wafer_geometry['half_cells_edge_right']: - del xs[2]; del ys[2] - del xs[2]; del ys[2] - # Close the cell - xs.append(xs[0]) - ys.append(ys[0]) - return xs,ys - - def hexagon(self): - xs,ys = self.hexagon_points() - return ROOT.TPolyLine(len(xs), array('f',xs), array('f',ys)) - - def hexagon_lines(self): - xs,ys = self.hexagon_points() - lines = [] - for i in range(len(xs)-1): - lines.append(ROOT.TLine(xs[i], ys[i], xs[i+1], ys[i+1])) - self.lines = lines - return lines - - - def __eq__(self, other): - return self.id==other.id - - -class TriggerCell: - def __init__(self): - self.id = 0 - self.zside = 0 - self.layer = 0 - self.wafer = 0 - self.triggercell = 0 - self.center = Position() - self.cells = [] - self.lines = [] - self.color = -1 - - def trigger_lines(self): - lines = [] - for cell in self.cells: - lines = merge_lines(lines, cell.lines) - self.lines = lines - return lines - - - def __eq__(self, other): - return self.id==other.id - - -class Module: - def __init__(self): - self.id = 0 - self.zside = 0 - self.layer = 0 - self.module = 0 - self.row = 0 - self.column = 0 - self.center = Position() - self.cells = [] - self.lines = [] - - def module_lines(self): - lines = [] - for cell in self.cells: - lines = merge_lines(lines, cell.lines) - self.lines = lines - return lines - - def center_from_cells(self): - x,y,z = 0,0,0 - for cell in self.cells: - x += cell.center.x - y += cell.center.y - z += cell.center.z - x /= len(self.cells) - y /= len(self.cells) - z /= len(self.cells) - self.center.x = x - self.center.y = y - self.center.z = z - return self.center - diff --git a/L1Trigger/L1THGCal/test/macros/drawTriggerCells.py b/L1Trigger/L1THGCal/test/macros/drawTriggerCells.py deleted file mode 100644 index baa3d9e6a2385..0000000000000 --- a/L1Trigger/L1THGCal/test/macros/drawTriggerCells.py +++ /dev/null @@ -1,219 +0,0 @@ -from __future__ import print_function -from builtins import range -import ROOT -import random - -### PARAMETERS ##### -layer = 27 -sector = 1 -zside = 1 -inputFileName = "../test_layer26_27.root" -outputFileName = "cellMaps.root" -#################### - -class Position: - def __init__(self): - self.x = 0. - self.y = 0. - self.z = 0. - -class Cell: - def __init__(self): - self.id = 0 - self.zside = 0 - self.layer = 0 - self.sector = 0 - self.center = Position() - self.corners = [Position(), Position(), Position(), Position()] - - def box(self): - return ROOT.TBox(self.corners[0].x, self.corners[0].y, self.corners[2].x, self.corners[2].y) - - #def box(self): - #xs = [] - #xs.append(self.corners[0].x) - #xs.append(self.corners[1].x) - #xs.append(self.corners[2].x) - #xs.append(self.corners[3].x) - #ys = [] - #ys.append(self.corners[0].y) - #ys.append(self.corners[1].y) - #ys.append(self.corners[2].y) - #ys.append(self.corners[3].y) - #return ROOT.TPolyLine(4, array.array('f',xs), array.array('f',ys)) - - def __eq__(self, other): - return self.id==other.id - -class TriggerCell: - def __init__(self): - self.id = 0 - self.zside = 0 - self.layer = 0 - self.sector = 0 - self.center = Position() - self.cells = [] - - -def float_equal(x1, x2): - prec = 1.e-4 - if abs(x1)prec: return False - elif abs(x1)>elist1", cut, "entrylist") -entryList1 = ROOT.gDirectory.Get("elist1") -entryList1.__class__ = ROOT.TEntryList -nentry = entryList1.GetN() -treeCells.SetEntryList(entryList1) -for ie in range(nentry): - if ie%10000==0: print("Entry {0}/{1}".format(ie, nentry)) - entry = entryList1.GetEntry(ie) - treeCells.GetEntry(entry) - cell = Cell() - cell.id = treeCells.id - cell.zside = treeCells.zside - cell.layer = treeCells.layer - cell.sector = treeCells.sector - cell.center.x = treeCells.x - cell.center.y = treeCells.y - cell.center.z = treeCells.z - cell.corners[0].x = treeCells.x1 - cell.corners[0].y = treeCells.y1 - cell.corners[1].x = treeCells.x2 - cell.corners[1].y = treeCells.y2 - cell.corners[2].x = treeCells.x3 - cell.corners[2].y = treeCells.y3 - cell.corners[3].x = treeCells.x4 - cell.corners[3].y = treeCells.y4 - if cell.id not in cells: cells[cell.id] = cell - -## filling trigger cell map -triggercells = {} -treeTriggerCells.Draw(">>elist2", cut, "entrylist") -entryList2 = ROOT.gDirectory.Get("elist2") -entryList2.__class__ = ROOT.TEntryList -nentry = entryList2.GetN() -treeTriggerCells.SetEntryList(entryList2) -for ie in range(nentry): - if ie%10000==0: print("Entry {0}/{1}".format(ie, nentry)) - entry = entryList2.GetEntry(ie) - treeTriggerCells.GetEntry(entry) - triggercell = TriggerCell() - triggercell.id = treeTriggerCells.id - triggercell.zside = treeTriggerCells.zside - triggercell.layer = treeTriggerCells.layer - triggercell.sector = treeTriggerCells.sector - triggercell.center.x = treeTriggerCells.x - triggercell.center.y = treeTriggerCells.y - triggercell.center.z = treeTriggerCells.z - for cellid in treeTriggerCells.c_id: - if not cellid in cells: raise Exception("Cannot find cell {0} in trigger cell".format(cellid)) - cell = cells[cellid] - triggercell.cells.append(cell) - triggercells[triggercell.id] = triggercell - -print("Read", len(cells), "cells") -print("Read", len(triggercells), "trigger cells") - -## create output canvas -outputFile = ROOT.TFile.Open(outputFileName, "RECREATE") -maxx = -99999. -minx = 99999. -maxy = -99999. -miny = 99999. -for id,triggercell in triggercells.items(): - x = triggercell.center.x - y = triggercell.center.y - if x>maxx: maxx=x - if xmaxy: maxy=y - if y0 else minx*1.2 -miny = miny*0.8 if miny>0 else miny*1.2 -maxx = maxx*1.2 if maxx>0 else maxx*0.8 -maxy = maxy*1.2 if maxy>0 else maxy*0.8 -canvas = ROOT.TCanvas("triggerCellMap", "triggerCellMap", 1400, int(1400*(maxy-miny)/(maxx-minx))) -canvas.Range(minx, miny, maxx, maxy) - -## Print trigger cells -drawstyle = "lf" -boxes = [] -lines = [] -for id,triggercell in triggercells.items(): - triggercelllines = [] - for cell in triggercell.cells: - box = cell.box() - thisboxlines = boxlines(box) - for boxline in thisboxlines: - existingline = None - for line in triggercelllines: - if compare_lines(boxline, line): - existingline = line - break - if existingline: - triggercelllines.remove(line) - else: - triggercelllines.append(boxline) - box.SetFillColor(0) - box.SetLineColor(ROOT.kGray) - box.Draw(drawstyle) - boxes.append(box) - if not "same" in drawstyle: drawstyle += " same" - lines.extend(triggercelllines) -for line in lines: - line.Draw() - -## Print missing cells -missingboxes = [] -for id,cell in cells.items(): - missing = True - for tid,triggercell in triggercells.items(): - if cell in triggercell.cells: - missing = False - break - if missing: - box = cell.box() - box.SetFillColor(0) - box.SetLineColor(ROOT.kRed-4) - box.Draw(drawstyle) - missingboxes.append(box) - - -canvas.Write() - - -inputFile.Close() - - - - diff --git a/L1Trigger/L1THGCal/test/macros/drawTriggerModules.py b/L1Trigger/L1THGCal/test/macros/drawTriggerModules.py deleted file mode 100644 index 88c307c8fac8b..0000000000000 --- a/L1Trigger/L1THGCal/test/macros/drawTriggerModules.py +++ /dev/null @@ -1,284 +0,0 @@ -from __future__ import print_function -from builtins import range -import ROOT -import random - -### PARAMETERS ##### -layer = 27 -sector = 1 -zside = 1 -inputFileName = "../test_alllayers_150923.root" -outputFileName = "cellMaps.root" -#################### - -class Position: - def __init__(self): - self.x = 0. - self.y = 0. - self.z = 0. - -class Cell: - def __init__(self): - self.id = 0 - self.zside = 0 - self.layer = 0 - self.sector = 0 - self.center = Position() - self.corners = [Position(), Position(), Position(), Position()] - - def box(self): - return ROOT.TBox(self.corners[0].x, self.corners[0].y, self.corners[2].x, self.corners[2].y) - - #def box(self): - #xs = [] - #xs.append(self.corners[0].x) - #xs.append(self.corners[1].x) - #xs.append(self.corners[2].x) - #xs.append(self.corners[3].x) - #ys = [] - #ys.append(self.corners[0].y) - #ys.append(self.corners[1].y) - #ys.append(self.corners[2].y) - #ys.append(self.corners[3].y) - #return ROOT.TPolyLine(4, array.array('f',xs), array.array('f',ys)) - - def __eq__(self, other): - return self.id==other.id - -class TriggerCell: - def __init__(self): - self.id = 0 - self.zside = 0 - self.layer = 0 - self.sector = 0 - self.module = 0 - self.triggercell = 0 - self.center = Position() - self.cells = [] - -class Module: - def __init__(self): - self.id = 0 - self.zside = 0 - self.layer = 0 - self.sector = 0 - self.module = 0 - self.center = Position() - self.cells = [] - - -def float_equal(x1, x2): - prec = 1.e-4 - if abs(x1)prec: return False - elif abs(x1)>elist1", cut, "entrylist") -entryList1 = ROOT.gDirectory.Get("elist1") -entryList1.__class__ = ROOT.TEntryList -nentry = entryList1.GetN() -treeCells.SetEntryList(entryList1) -for ie in range(nentry): - if ie%10000==0: print("Entry {0}/{1}".format(ie, nentry)) - entry = entryList1.GetEntry(ie) - treeCells.GetEntry(entry) - cell = Cell() - cell.id = treeCells.id - cell.zside = treeCells.zside - cell.layer = treeCells.layer - cell.sector = treeCells.sector - cell.center.x = treeCells.x - cell.center.y = treeCells.y - cell.center.z = treeCells.z - cell.corners[0].x = treeCells.x1 - cell.corners[0].y = treeCells.y1 - cell.corners[1].x = treeCells.x2 - cell.corners[1].y = treeCells.y2 - cell.corners[2].x = treeCells.x3 - cell.corners[2].y = treeCells.y3 - cell.corners[3].x = treeCells.x4 - cell.corners[3].y = treeCells.y4 - if cell.id not in cells: cells[cell.id] = cell - -## filling trigger cell map -triggercells = {} -treeTriggerCells.Draw(">>elist2", cut, "entrylist") -entryList2 = ROOT.gDirectory.Get("elist2") -entryList2.__class__ = ROOT.TEntryList -nentry = entryList2.GetN() -treeTriggerCells.SetEntryList(entryList2) -for ie in range(nentry): - if ie%10000==0: print("Entry {0}/{1}".format(ie, nentry)) - entry = entryList2.GetEntry(ie) - treeTriggerCells.GetEntry(entry) - triggercell = TriggerCell() - triggercell.id = treeTriggerCells.id - triggercell.zside = treeTriggerCells.zside - triggercell.layer = treeTriggerCells.layer - triggercell.sector = treeTriggerCells.sector - triggercell.module = treeTriggerCells.module - triggercell.triggercell = treeTriggerCells.triggercell - triggercell.center.x = treeTriggerCells.x - triggercell.center.y = treeTriggerCells.y - triggercell.center.z = treeTriggerCells.z - for cellid in treeTriggerCells.c_id: - if not cellid in cells: raise Exception("Cannot find cell {0} in trigger cell".format(cellid)) - cell = cells[cellid] - triggercell.cells.append(cell) - triggercells[triggercell.id] = triggercell - -## filling module map -modules = {} -treeModules.Draw(">>elist3", cut, "entrylist") -entryList3 = ROOT.gDirectory.Get("elist3") -entryList3.__class__ = ROOT.TEntryList -nentry = entryList3.GetN() -treeModules.SetEntryList(entryList3) -for ie in range(nentry): - if ie%10000==0: print("Entry {0}/{1}".format(ie, nentry)) - entry = entryList3.GetEntry(ie) - treeModules.GetEntry(entry) - module = Module() - module.id = treeModules.id - module.zside = treeModules.zside - module.layer = treeModules.layer - module.sector = treeModules.sector - module.module = treeModules.module - module.center.x = treeModules.x - module.center.y = treeModules.y - module.center.z = treeModules.z - for cellid in treeModules.tc_id: - if not cellid in triggercells: raise Exception("Cannot find trigger cell {0} in module".format(cellid)) - cell = triggercells[cellid] - module.cells.append(cell) - modules[module.id] = module - -print("Read", len(cells), "cells") -print("Read", len(triggercells), "trigger cells") -print("Read", len(modules), "modules") - -## create output canvas -outputFile = ROOT.TFile.Open(outputFileName, "RECREATE") -maxx = -99999. -minx = 99999. -maxy = -99999. -miny = 99999. -for id,triggercell in triggercells.items(): - x = triggercell.center.x - y = triggercell.center.y - if x>maxx: maxx=x - if xmaxy: maxy=y - if y0 else minx*1.2 -miny = miny*0.8 if miny>0 else miny*1.2 -maxx = maxx*1.1 if maxx>0 else maxx*0.9 -maxy = maxy*1.2 if maxy>0 else maxy*0.8 -canvas = ROOT.TCanvas("triggerCellMap", "triggerCellMap", 1400, int(1400*(maxy-miny)/(maxx-minx))) -canvas.Range(minx, miny, maxx, maxy) - -## Print trigger cells -drawstyle = "lf" -boxes = [] -linesTrigger = [] -linesModule = [] -for id,module in modules.items(): - modulelines = [] - for triggercell in module.cells: - triggercelllines = [] - for cell in triggercell.cells: - box = cell.box() - thisboxlines = boxlines(box) - for boxline in thisboxlines: - ## trigger cell lines - existingline = None - for line in triggercelllines: - if compare_lines(boxline, line): - existingline = line - break - if existingline: - triggercelllines.remove(existingline) - else: - triggercelllines.append(boxline) - ## module lines - existingline = None - for line in modulelines: - if compare_lines(boxline, line): - existingline = line - break - if existingline: - modulelines.remove(existingline) - #if module.module==2: print "Remove line in trigger cell", triggercell.triggercell - else: - modulelines.append(boxline) - #if module.module==2: print "Adding line in trigger cell", triggercell.triggercell - box.SetFillColor(0) - box.SetLineColor(ROOT.kGray) - box.Draw(drawstyle) - boxes.append(box) - if not "same" in drawstyle: drawstyle += " same" - linesTrigger.extend(triggercelllines) - linesModule.extend(modulelines) -for line in linesTrigger: - line.Draw() -for line in linesModule: - line.SetLineColor(ROOT.kBlue) - line.SetLineWidth(3) - line.Draw() - -## Print missing cells -#missingboxes = [] -#for id,cell in cells.items(): - #missing = True - #for tid,triggercell in triggercells.items(): - #if cell in triggercell.cells: - #missing = False - #break - #if missing: - #box = cell.box() - #box.SetFillColor(0) - #box.SetLineColor(ROOT.kRed-4) - #box.Draw(drawstyle) - #missingboxes.append(box) - - -canvas.Write() -canvas.Print("triggerCellMap.png") - - -inputFile.Close() - - - - diff --git a/L1Trigger/L1THGCal/test/macros/drawTriggerModulesHex.py b/L1Trigger/L1THGCal/test/macros/drawTriggerModulesHex.py deleted file mode 100644 index b87ce2647eb85..0000000000000 --- a/L1Trigger/L1THGCal/test/macros/drawTriggerModulesHex.py +++ /dev/null @@ -1,168 +0,0 @@ -from __future__ import print_function -from builtins import range -import ROOT -from DrawingUtilities import Cell, TriggerCell, Module - -### PARAMETERS ##### -subdet = 4 -layer = 12 -zside = 1 -version = 'V8' -inputFileName = "../test_triggergeom.root" -outputFileName = "moduleMap.root" -#################### - - - -inputFile = ROOT.TFile.Open(inputFileName) -treeModules = inputFile.Get("hgcaltriggergeomtester/TreeModules") -treeTriggerCells = inputFile.Get("hgcaltriggergeomtester/TreeTriggerCells") -treeCells = inputFile.Get("hgcaltriggergeomtester/TreeCells") - -## filling cell map -cells = {} -cut = "layer=={0} && zside=={1} && subdet=={2}".format(layer,zside,subdet) -treeCells.Draw(">>elist1", cut, "entrylist") -entryList1 = ROOT.gDirectory.Get("elist1") -entryList1.__class__ = ROOT.TEntryList -nentry = entryList1.GetN() -treeCells.SetEntryList(entryList1) -print('>> Reading cell tree') -for ie in range(nentry): - if ie%10000==0: print(" Entry {0}/{1}".format(ie, nentry)) - entry = entryList1.GetEntry(ie) - treeCells.GetEntry(entry) - cell = Cell() - cell.id = treeCells.id - cell.zside = treeCells.zside - cell.layer = treeCells.layer - cell.wafer = treeCells.wafer - cell.wafertype = treeCells.wafertype - cell.cell = treeCells.cell - cell.center.x = treeCells.x - cell.center.y = treeCells.y - cell.center.z = treeCells.z - cell.corners[0].x = treeCells.x1 - cell.corners[0].y = treeCells.y1 - cell.corners[1].x = treeCells.x2 - cell.corners[1].y = treeCells.y2 - cell.corners[2].x = treeCells.x3 - cell.corners[2].y = treeCells.y3 - cell.corners[3].x = treeCells.x4 - cell.corners[3].y = treeCells.y4 - if cell.id not in cells: cells[cell.id] = cell - -## filling trigger cell map -triggercells = {} -treeTriggerCells.Draw(">>elist2", cut, "entrylist") -entryList2 = ROOT.gDirectory.Get("elist2") -entryList2.__class__ = ROOT.TEntryList -nentry = entryList2.GetN() -treeTriggerCells.SetEntryList(entryList2) -print('>> Reading trigger cell tree') -for ie in range(nentry): - if ie%10000==0: print(" Entry {0}/{1}".format(ie, nentry)) - entry = entryList2.GetEntry(ie) - treeTriggerCells.GetEntry(entry) - triggercell = TriggerCell() - triggercell.id = treeTriggerCells.id - triggercell.zside = treeTriggerCells.zside - triggercell.layer = treeTriggerCells.layer - triggercell.wafer = treeTriggerCells.wafer - triggercell.triggercell = treeTriggerCells.triggercell - triggercell.center.x = treeTriggerCells.x - triggercell.center.y = treeTriggerCells.y - triggercell.center.z = treeTriggerCells.z - for cellid in treeTriggerCells.c_id: - if not cellid in cells: raise Exception("Cannot find cell {0} in trigger cell".format(cellid)) - cell = cells[cellid] - triggercell.cells.append(cell) - triggercells[triggercell.id] = triggercell - -## filling module map -modules = {} -treeModules.Draw(">>elist3", cut, "entrylist") -entryList3 = ROOT.gDirectory.Get("elist3") -entryList3.__class__ = ROOT.TEntryList -nentry = entryList3.GetN() -treeModules.SetEntryList(entryList3) -print('>> Reading module tree') -for ie in range(nentry): - if ie%10000==0: print(" Entry {0}/{1}".format(ie, nentry)) - entry = entryList3.GetEntry(ie) - treeModules.GetEntry(entry) - module = Module() - module.id = treeModules.id - module.zside = treeModules.zside - module.layer = treeModules.layer - module.module = treeModules.module - module.center.x = treeModules.x - module.center.y = treeModules.y - module.center.z = treeModules.z - for cellid in treeModules.tc_id: - if not cellid in triggercells: raise Exception("Cannot find trigger cell {0} in module".format(cellid)) - cell = triggercells[cellid] - module.cells.append(cell) - modules[module.id] = module - -## create output canvas -outputFile = ROOT.TFile.Open(outputFileName, "RECREATE") -maxx = -99999. -minx = 99999. -maxy = -99999. -miny = 99999. -for id,cell in cells.items(): - x = cell.center.x - y = cell.center.y - if x>maxx: maxx=x - if xmaxy: maxy=y - if y0 else minx*1.2 -miny = miny*0.8 if miny>0 else miny*1.2 -maxx = maxx*1.1 if maxx>0 else maxx*0.9 -maxy = maxy*1.2 if maxy>0 else maxy*0.8 -canvas = ROOT.TCanvas("moduleMap", "moduleMap", 10000, int(10000*(maxy-miny)/(maxx-minx))) -canvas.Range(minx, miny, maxx, maxy) - -## Print trigger cells -imod = 0 -hexagons = [] -print('') -print('>> Drawing subdet', subdet, 'layer', layer, 'zside', zside) -print(' Trigger cells are not drawn for all the modules, to reduce the (long) drawing time') -for id,module in modules.items(): - if imod%10==0: print(" Drawing module {0}/{1}".format(imod, len(modules))) - imod+=1 - modulelines = [] - for triggercell in module.cells: - for cell in triggercell.cells: - hexagon = cell.hexagon() - cell.hexagon_lines() - hexagon.SetFillColor(0) - hexagon.SetLineColor(ROOT.kGray) - hexagon.Draw() - hexagons.append(hexagon) - triggercell.trigger_lines() - ## only draw trigger cells in some of the modules to save time - if module.module<100: - for line in triggercell.lines: - line.SetLineColor(ROOT.kBlack) - line.SetLineWidth(2) - line.Draw() - module.module_lines() - for line in module.lines: - line.SetLineColor(ROOT.kRed) - line.SetLineWidth(4) - line.Draw() - - -canvas.Write() -canvas.Print("moduleMap_{0}_{1}_{2}.png".format(version,subdet,layer)) - - -inputFile.Close() - - - - diff --git a/L1Trigger/L1THGCal/test/macros/waferGeometry.py b/L1Trigger/L1THGCal/test/macros/waferGeometry.py deleted file mode 100644 index 2e0f556e899f6..0000000000000 --- a/L1Trigger/L1THGCal/test/macros/waferGeometry.py +++ /dev/null @@ -1,20 +0,0 @@ - -largeCellWafer = { - 'cell_corner_size':0.649, - 'half_cells_edge_topleft':[107,118,126,131], - 'half_cells_edge_topright':[132,130,125,117], - 'half_cells_edge_right':[106,83,60,37], - 'half_cells_edge_bottomright':[25,14,6,1], - 'half_cells_edge_bottomleft':[0,2,7,15], - 'half_cells_edge_left':[26,49,72,95], -} - -smallCellWafer = { - 'cell_corner_size':0.476, - 'half_cells_edge_topleft':[200,214,225,233,238], - 'half_cells_edge_topright':[239,237,232,224,213], - 'half_cells_edge_right':[184,153,122,91,60], - 'half_cells_edge_bottomright':[44,29,17,8,2], - 'half_cells_edge_bottomleft':[0,3,9,18,30], - 'half_cells_edge_left':[45,76,107,138,169], -} diff --git a/L1Trigger/L1THGCal/test/testTriggerSimCluster.py b/L1Trigger/L1THGCal/test/testTriggerSimCluster.py deleted file mode 100644 index cd69060cbd071..0000000000000 --- a/L1Trigger/L1THGCal/test/testTriggerSimCluster.py +++ /dev/null @@ -1,143 +0,0 @@ -from __future__ import print_function -# import ROOT in batch mode -import sys -oldargv = sys.argv[:] -#sys.argv = [ '-b-' ] -import ROOT -#ROOT.gROOT.SetBatch(True) -sys.argv = oldargv - -# load FWLite C++ libraries -ROOT.gSystem.Load("libFWCoreFWLite.so"); -ROOT.gSystem.Load("libDataFormatsFWLite.so"); -ROOT.FWLiteEnabler.enable() - -# load FWlite python libraries -from DataFormats.FWLite import Handle, Events - -# open file (you can use 'edmFileUtil -d /store/whatever.root' to get the physical file name) -events = Events("file:test.root") -clusters, clusterLabel = Handle("l1t::HGCalClusterBxCollection"), "hgcalTriggerPrimitiveDigiProducer:HGCalTriggerSimClusterBestChoice" -genParticles, genParticlesLabel = Handle("vector"),"genParticles" - -verbose=False - -hEta=ROOT.TH1D("eta","eta",1000,-20,20) -hPhi=ROOT.TH1D("phi","phi",1000,-3.1416,3.1416) -hPt = ROOT.TH1D("pt","pt",1000,0,1000) -hE = ROOT.TH1D("E","E",1000,0,1000) -## cluster shapes -hN = ROOT.TH1D("N","N",50,0,1000) -hSEE = ROOT.TH1D("SEE","SEE",1000,0,0.02) -hSPP = ROOT.TH1D("SPP","SPP",1000,0,0.02) -hSRR = ROOT.TH1D("SRR","SRR",1000,0,100.) -## -hLE = ROOT.TH1D("LogEoverE","Log(e)/E",1000,-0.5,1.) -hED = ROOT.TH1D("ED","ED",1000,0.,1.) -hSEP = ROOT.TH1D("SEP","SEP",1000,-0.02,0.02) - -hMatch={ - "deta":ROOT.TH1D("eta_m","eta",1000,-20,20), - "dphi":ROOT.TH1D("phi_m","phi",1000,-3.1416,3.1416), - "pt" : ROOT.TH1D("pt_m","pt",1000,0,1000), - "ptsum" : ROOT.TH1D("pt_sum_m","pt",1000,0,1000), - } - -import math -def deltaPhi(phi1,phi2): - pi=3.14159265359 - dphi=phi1-phi2 - while dphi > pi: dphi -= 2*pi - while dphi < -pi: dphi += 2*pi - return dphi - -def deltaR(eta1,phi1,eta2,phi2): - return math.sqrt( (eta1-eta2)**2 + deltaPhi(phi1,phi2)**2) - -for iev,event in enumerate(events): - if verbose: - print("\nEvent %d: run %6d, lumi %4d, event %12d" % (iev,event.eventAuxiliary().run(), event.eventAuxiliary().luminosityBlock(),event.eventAuxiliary().event())) - - event.getByLabel(clusterLabel, clusters) - event.getByLabel(genParticlesLabel,genParticles) - - ## check that handle is valid - if not clusters.isValid(): print("Cluster handle is invalid") - if not genParticles.isValid(): print("GP handle not valid") - - ## -- - if verbose: print("-> BX=0") - if verbose: print("-> clusters=",clusters,"\n","product=",clusters.product()) - - print("--------------------------------") - print("GP SIZE=",genParticles.product().size()) - for gp in genParticles.product(): - if gp.status() == 1: - print("-> Found GP",gp.pt(),gp.eta(),gp.phi(),gp.pdgId()) - print("--------------------------------") - - ## get 0 bunch crossing vector - ptsum = [ROOT.TLorentzVector(),ROOT.TLorentzVector() ] - for bx,vector in enumerate(clusters.product()): - if verbose: print("-> 0 pos",clusters.product()[0]) - if vector == None: - print(" cluster product is none") - continue - hEta.Fill(vector.eta() ) - if vector.eta() <8: - hE.Fill(vector.energy() ) - hPt.Fill(vector.pt() ) - hPhi.Fill(vector.phi() ) - ## cluster shapes - hN.Fill(vector.shapes.N()) - hSEE.Fill(vector.shapes.SigmaEtaEta()) - hSPP.Fill(vector.shapes.SigmaPhiPhi()) - hSRR.Fill(vector.shapes.SigmaRR()) - hLE.Fill(vector.shapes.LogEoverE() ) - hED.Fill(vector.shapes.eD()) - hSEP.Fill(vector.shapes.SigmaEtaPhi() ) - for idx,gp in enumerate(genParticles.product()): - if gp.status()==1 and deltaR(vector.eta(),vector.phi(),gp.eta(),gp.phi())<0.1: - hMatch["deta"].Fill(vector.eta()-gp.eta()) - hMatch["dphi"].Fill(deltaPhi(vector.phi(),gp.phi())) - hMatch["pt"].Fill(vector.pt()) - ptsum[idx] += ROOT.TLorentzVector(vector.px(),vector.py(),vector.pz(),vector.energy()) - hMatch["ptsum"].Fill( ptsum[0].Pt() ) - hMatch["ptsum"].Fill( ptsum[1].Pt() ) - - - -c=ROOT.TCanvas() -c.Divide(2,2) -c.cd(1) -hPt.Draw("HIST") -c.cd(2) -hEta.Draw("HIST") -c.cd(3) -hPhi.Draw("HIST") -c.cd(4) -hE.Draw("HIST") - -c2=ROOT.TCanvas("c2","c2") -c2.Divide(2,2) -c2.cd(1) -hN.Draw("HIST") -c2.cd(2) -hSEE.Draw("HIST") -c2.cd(3) -hSPP.Draw("HIST") -c2.cd(4) -hSRR.Draw("HIST") - -c4=ROOT.TCanvas("c4","c4") -c4.Divide(2,2) -c4.cd(1) -hMatch["pt"].Draw("HIST") -c4.cd(2) -hMatch["deta"].Draw("HIST") -c4.cd(3) -hMatch["dphi"].Draw("HIST") -c4.cd(4) -hMatch["ptsum"].Draw("HIST") -raw_input("ok?") -