File indexing completed on 2024-04-06 12:24:51
0001
0002
0003
0004
0005
0006
0007
0008 #include "DataFormats/Common/interface/Handle.h"
0009 #include "DataFormats/EgammaReco/interface/BasicClusterFwd.h"
0010 #include "FWCore/Framework/interface/Event.h"
0011 #include "FWCore/Framework/interface/EventSetup.h"
0012 #include "FWCore/Framework/interface/stream/EDProducer.h"
0013 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0014 #include "Geometry/Records/interface/CaloGeometryRecord.h"
0015
0016 #include "HFClusterAlgo.h"
0017
0018 class HFEMClusterProducer : public edm::stream::EDProducer<> {
0019 public:
0020 explicit HFEMClusterProducer(edm::ParameterSet const& conf);
0021 void produce(edm::Event& e, edm::EventSetup const& iSetup) override;
0022 void beginRun(edm::Run const&, edm::EventSetup const&) final { algo_.resetForRun(); }
0023
0024 private:
0025 const edm::EDGetTokenT<HFRecHitCollection> hfreco_;
0026 const edm::ESGetToken<CaloGeometry, CaloGeometryRecord> geometryToken_;
0027 HFClusterAlgo algo_;
0028 };
0029
0030 #include "FWCore/Framework/interface/MakerMacros.h"
0031 DEFINE_FWK_MODULE(HFEMClusterProducer);
0032
0033 using namespace reco;
0034 HFEMClusterProducer::HFEMClusterProducer(edm::ParameterSet const& conf)
0035 : hfreco_(consumes(conf.getParameter<edm::InputTag>("hits"))), geometryToken_{esConsumes()} {
0036 produces<reco::HFEMClusterShapeCollection>();
0037 produces<reco::BasicClusterCollection>();
0038 produces<reco::SuperClusterCollection>();
0039 produces<reco::HFEMClusterShapeAssociationCollection>();
0040 algo_.setup(conf.getParameter<double>("minTowerEnergy"),
0041 conf.getParameter<double>("seedThresholdET"),
0042 conf.getParameter<double>("maximumSL"),
0043 conf.getParameter<double>("maximumRenergy"),
0044 conf.getParameter<bool>("usePMTFlag"),
0045 conf.getParameter<bool>("usePulseFlag"),
0046 conf.getParameter<bool>("forcePulseFlagMC"),
0047 conf.getParameter<int>("correctionType"));
0048 }
0049
0050 void HFEMClusterProducer::produce(edm::Event& e, edm::EventSetup const& iSetup) {
0051 auto const& hf_hits = e.get(hfreco_);
0052 auto const& geometry = iSetup.getData(geometryToken_);
0053
0054
0055 auto retdata1 = std::make_unique<HFEMClusterShapeCollection>();
0056 auto retdata2 = std::make_unique<SuperClusterCollection>();
0057
0058 algo_.isMC(!e.isRealData());
0059
0060 algo_.clusterize(hf_hits, geometry, *retdata1, *retdata2);
0061 edm::OrphanHandle<reco::SuperClusterCollection> SupHandle;
0062 edm::OrphanHandle<reco::HFEMClusterShapeCollection> ShapeHandle;
0063
0064
0065 ShapeHandle = e.put(std::move(retdata1));
0066 SupHandle = e.put(std::move(retdata2));
0067
0068 auto retdata3 = std::make_unique<HFEMClusterShapeAssociationCollection>(SupHandle, ShapeHandle);
0069
0070 for (unsigned int i = 0; i < ShapeHandle->size(); i++) {
0071 retdata3->insert(edm::Ref<reco::SuperClusterCollection>(SupHandle, i),
0072 edm::Ref<reco::HFEMClusterShapeCollection>(ShapeHandle, i));
0073 }
0074
0075 e.put(std::move(retdata3));
0076 }