File indexing completed on 2023-11-21 00:28:57
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020 #include <memory>
0021 #include <iostream>
0022
0023
0024 #include "FWCore/Framework/interface/EventSetup.h"
0025 #include "FWCore/Framework/interface/Frameworkfwd.h"
0026 #include "FWCore/Framework/interface/stream/EDProducer.h"
0027 #include "FWCore/Framework/interface/ESHandle.h"
0028 #include "FWCore/Framework/interface/Event.h"
0029 #include "FWCore/Framework/interface/MakerMacros.h"
0030 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0031 #include "FWCore/Utilities/interface/EDGetToken.h"
0032 #include "FWCore/Utilities/interface/EDPutToken.h"
0033 #include "FWCore/Utilities/interface/InputTag.h"
0034 #include "FWCore/Utilities/interface/ESGetToken.h"
0035 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0036
0037 #include "L1Trigger/L1TCalorimeter/interface/Stage2Layer2FirmwareFactory.h"
0038 #include "L1Trigger/L1TCalorimeter/interface/Stage2MainProcessor.h"
0039 #include "L1Trigger/L1TCalorimeter/interface/CaloTools.h"
0040
0041 #include "L1Trigger/L1TCalorimeter/interface/CaloParamsHelper.h"
0042 #include "CondFormats/DataRecord/interface/L1TCaloParamsRcd.h"
0043 #include "CondFormats/DataRecord/interface/L1TCaloParamsO2ORcd.h"
0044
0045 #include "DataFormats/L1TCalorimeter/interface/CaloTower.h"
0046 #include "DataFormats/L1Trigger/interface/EGamma.h"
0047 #include "DataFormats/L1Trigger/interface/Tau.h"
0048 #include "DataFormats/L1Trigger/interface/Jet.h"
0049 #include "DataFormats/L1Trigger/interface/EtSum.h"
0050
0051 #include "DataFormats/HcalDigi/interface/HcalDigiCollections.h"
0052
0053
0054
0055
0056
0057 using namespace l1t;
0058
0059 class L1TZDCProducer : public edm::stream::EDProducer<> {
0060 public:
0061 explicit L1TZDCProducer(const edm::ParameterSet& ps);
0062 ~L1TZDCProducer() override = default;
0063
0064 static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
0065
0066 private:
0067 void produce(edm::Event&, const edm::EventSetup&) override;
0068
0069 void beginRun(edm::Run const&, edm::EventSetup const&) override;
0070
0071
0072
0073
0074
0075 edm::EDGetTokenT<HcalTrigPrimDigiCollection> hcalTPSource;
0076
0077
0078 int bxFirst_;
0079 int bxLast_;
0080
0081
0082 edm::EDPutTokenT<EtSumBxCollection> etToken_;
0083 };
0084
0085 L1TZDCProducer::L1TZDCProducer(const edm::ParameterSet& ps)
0086 : hcalTPSource(consumes<HcalTrigPrimDigiCollection>(ps.getParameter<edm::InputTag>("hcalTPDigis"))) {
0087
0088 etToken_ = produces<EtSumBxCollection>();
0089
0090 bxFirst_ = ps.getParameter<int>("bxFirst");
0091 bxLast_ = ps.getParameter<int>("bxLast");
0092 }
0093
0094
0095 void L1TZDCProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) {
0096 using namespace edm;
0097 using namespace l1t;
0098
0099 LogDebug("L1TZDCProducer") << "L1TZDCProducer::produce function called..." << std::endl;
0100
0101
0102 EtSumBxCollection etsumsReduced(0, bxFirst_, bxLast_);
0103
0104 edm::Handle<HcalTrigPrimDigiCollection> hcalTPs;
0105 iEvent.getByToken(hcalTPSource, hcalTPs);
0106
0107
0108 if (hcalTPs.isValid()) {
0109
0110 for (const auto& hcalTp : *hcalTPs) {
0111 int ieta = hcalTp.id().ieta();
0112 uint32_t absIEta = std::abs(ieta);
0113
0114
0115 if (absIEta != 42)
0116 continue;
0117
0118 int iphi = hcalTp.id().iphi();
0119
0120 if (iphi != 99)
0121 continue;
0122
0123
0124 int nSamples = hcalTp.size();
0125 int nPresamples = hcalTp.presamples();
0126
0127 for (int ibx = 0; ibx < nSamples; ibx++) {
0128 if (ibx >= nPresamples + bxFirst_ && ibx <= nPresamples + bxLast_) {
0129 HcalTriggerPrimitiveSample hcalTpSample = hcalTp.sample(ibx);
0130 int ietIn = hcalTpSample.compressedEt();
0131
0132 l1t::EtSum tempEt = l1t::EtSum();
0133 tempEt.setHwPt(ietIn);
0134 tempEt.setHwPhi(0.);
0135
0136
0137 if (ieta < 0) {
0138 tempEt.setHwEta(-1.);
0139 tempEt.setType(EtSum::EtSumType::kZDCM);
0140 } else {
0141 tempEt.setHwEta(1.);
0142 tempEt.setType(EtSum::EtSumType::kZDCP);
0143 }
0144
0145
0146 etsumsReduced.push_back(ibx - nPresamples, CaloTools::etSumP4Demux(tempEt));
0147 }
0148 }
0149 }
0150 } else {
0151
0152 edm::LogWarning("L1TZDCProducer") << "hcalTps not valid; return empty ZDC Et Sum BXCollection" << std::endl;
0153 }
0154
0155
0156
0157 iEvent.emplace(etToken_, std::move(etsumsReduced));
0158 }
0159
0160
0161 void L1TZDCProducer::beginRun(edm::Run const& iRun, edm::EventSetup const& iSetup) {}
0162
0163
0164 void L1TZDCProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0165 edm::ParameterSetDescription desc;
0166 desc.add<edm::InputTag>("hcalTPDigis", edm::InputTag("simHcalTriggerPrimitiveDigis"));
0167 desc.add<int>("bxFirst", -2);
0168 desc.add<int>("bxLast", 2);
0169 descriptions.add("l1tZDCProducer", desc);
0170 }
0171
0172
0173 DEFINE_FWK_MODULE(L1TZDCProducer);