File indexing completed on 2024-12-17 02:43:57
0001 #include "DataFormats/EcalDigi/interface/EcalDigiCollections.h"
0002 #include "DataFormats/EcalRecHit/interface/EcalRecHitCollections.h"
0003 #include "DataFormats/EcalRecHit/interface/EcalUncalibratedRecHit.h"
0004 #include "FWCore/Framework/interface/Event.h"
0005 #include "FWCore/Framework/interface/EventSetup.h"
0006 #include "FWCore/Framework/interface/MakerMacros.h"
0007 #include "FWCore/Framework/interface/global/EDProducer.h"
0008 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0009 #include "FWCore/ParameterSet/interface/EmptyGroupDescription.h"
0010 #include "FWCore/Utilities/interface/EDGetToken.h"
0011 #include "FWCore/Utilities/interface/EDPutToken.h"
0012 #include "DataFormats/EcalRecHit/interface/EcalUncalibratedRecHitHostCollection.h"
0013
0014 class EcalUncalibRecHitSoAToLegacy : public edm::global::EDProducer<> {
0015 public:
0016 explicit EcalUncalibRecHitSoAToLegacy(edm::ParameterSet const &ps);
0017 ~EcalUncalibRecHitSoAToLegacy() override = default;
0018 static void fillDescriptions(edm::ConfigurationDescriptions &);
0019
0020 private:
0021 using InputProduct = EcalUncalibratedRecHitHostCollection;
0022 void produce(edm::StreamID, edm::Event &, edm::EventSetup const &) const override;
0023
0024 private:
0025 const bool isPhase2_;
0026 const edm::EDGetTokenT<InputProduct> inputTokenEB_;
0027 const edm::EDGetTokenT<InputProduct> inputTokenEE_;
0028 const edm::EDPutTokenT<EBUncalibratedRecHitCollection> outputTokenEB_;
0029 const edm::EDPutTokenT<EEUncalibratedRecHitCollection> outputTokenEE_;
0030 };
0031
0032 void EcalUncalibRecHitSoAToLegacy::fillDescriptions(edm::ConfigurationDescriptions &confDesc) {
0033 edm::ParameterSetDescription desc;
0034
0035 desc.add<edm::InputTag>("inputCollectionEB",
0036 edm::InputTag("ecalMultiFitUncalibRecHitPortable", "EcalUncalibRecHitsEB"));
0037 desc.add<std::string>("outputLabelEB", "EcalUncalibRecHitsEB");
0038 desc.ifValue(edm::ParameterDescription<bool>("isPhase2", false, true),
0039 false >> (edm::ParameterDescription<edm::InputTag>(
0040 "inputCollectionEE",
0041 edm::InputTag("ecalMultiFitUncalibRecHitPortable", "EcalUncalibRecHitsEE"),
0042 true) and
0043 edm::ParameterDescription<std::string>("outputLabelEE", "EcalUncalibRecHitsEE", true)) or
0044 true >> edm::EmptyGroupDescription());
0045 confDesc.add("ecalUncalibRecHitSoAToLegacy", desc);
0046 }
0047
0048 EcalUncalibRecHitSoAToLegacy::EcalUncalibRecHitSoAToLegacy(edm::ParameterSet const &ps)
0049 : isPhase2_{ps.getParameter<bool>("isPhase2")},
0050 inputTokenEB_{consumes<InputProduct>(ps.getParameter<edm::InputTag>("inputCollectionEB"))},
0051 inputTokenEE_{isPhase2_ ? edm::EDGetTokenT<InputProduct>{}
0052 : consumes<InputProduct>(ps.getParameter<edm::InputTag>("inputCollectionEE"))},
0053 outputTokenEB_{produces<EBUncalibratedRecHitCollection>(ps.getParameter<std::string>("outputLabelEB"))},
0054 outputTokenEE_{isPhase2_
0055 ? edm::EDPutTokenT<EEUncalibratedRecHitCollection>{}
0056 : produces<EEUncalibratedRecHitCollection>(ps.getParameter<std::string>("outputLabelEE"))} {}
0057
0058 void EcalUncalibRecHitSoAToLegacy::produce(edm::StreamID sid, edm::Event &event, edm::EventSetup const &setup) const {
0059 auto const &inputCollEB = event.get(inputTokenEB_);
0060 auto const &inputCollEBView = inputCollEB.const_view();
0061 auto outputCollEB = std::make_unique<EBUncalibratedRecHitCollection>();
0062 outputCollEB->reserve(inputCollEBView.size());
0063
0064 for (uint32_t i = 0; i < inputCollEBView.size(); ++i) {
0065 outputCollEB->emplace_back(DetId{inputCollEBView.id()[i]},
0066 inputCollEBView.amplitude()[i],
0067 inputCollEBView.pedestal()[i],
0068 inputCollEBView.jitter()[i],
0069 inputCollEBView.chi2()[i],
0070 inputCollEBView.flags()[i]);
0071 if (isPhase2_) {
0072 (*outputCollEB)[i].setAmplitudeError(inputCollEBView.amplitudeError()[i]);
0073 }
0074 (*outputCollEB)[i].setJitterError(inputCollEBView.jitterError()[i]);
0075 for (uint32_t sample = 0; sample < EcalDataFrame::MAXSAMPLES; ++sample) {
0076 (*outputCollEB)[i].setOutOfTimeAmplitude(sample, inputCollEBView.outOfTimeAmplitudes()[i][sample]);
0077 }
0078 }
0079 event.put(outputTokenEB_, std::move(outputCollEB));
0080
0081 if (!isPhase2_) {
0082 auto const &inputCollEE = event.get(inputTokenEE_);
0083 auto const &inputCollEEView = inputCollEE.const_view();
0084 auto outputCollEE = std::make_unique<EEUncalibratedRecHitCollection>();
0085 outputCollEE->reserve(inputCollEEView.size());
0086
0087 for (uint32_t i = 0; i < inputCollEEView.size(); ++i) {
0088 outputCollEE->emplace_back(DetId{inputCollEEView.id()[i]},
0089 inputCollEEView.amplitude()[i],
0090 inputCollEEView.pedestal()[i],
0091 inputCollEEView.jitter()[i],
0092 inputCollEEView.chi2()[i],
0093 inputCollEEView.flags()[i]);
0094 (*outputCollEE)[i].setJitterError(inputCollEEView.jitterError()[i]);
0095 for (uint32_t sample = 0; sample < EcalDataFrame::MAXSAMPLES; ++sample) {
0096 (*outputCollEE)[i].setOutOfTimeAmplitude(sample, inputCollEEView.outOfTimeAmplitudes()[i][sample]);
0097 }
0098 }
0099 event.put(outputTokenEE_, std::move(outputCollEE));
0100 }
0101 }
0102
0103 DEFINE_FWK_MODULE(EcalUncalibRecHitSoAToLegacy);