Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2025-04-24 01:30:29

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<std::string>("outputLabelEB", "EcalUncalibRecHitsEB");
0036   desc.ifValue(edm::ParameterDescription<bool>("isPhase2", false, true),
0037                false >> (edm::ParameterDescription<edm::InputTag>(
0038                              "inputCollectionEB",
0039                              edm::InputTag("ecalMultiFitUncalibRecHitPortable", "EcalUncalibRecHitsEB"),
0040                              true) and
0041                          edm::ParameterDescription<edm::InputTag>(
0042                              "inputCollectionEE",
0043                              edm::InputTag("ecalMultiFitUncalibRecHitPortable", "EcalUncalibRecHitsEE"),
0044                              true) and
0045                          edm::ParameterDescription<std::string>("outputLabelEE", "EcalUncalibRecHitsEE", true)) or
0046                    true >> (edm::ParameterDescription<edm::InputTag>(
0047                                "inputCollectionEB",
0048                                edm::InputTag("ecalUncalibRecHitPhase2Portable", "EcalUncalibRecHitsEB"),
0049                                true)));
0050   confDesc.add("ecalUncalibRecHitSoAToLegacy", desc);
0051 }
0052 
0053 EcalUncalibRecHitSoAToLegacy::EcalUncalibRecHitSoAToLegacy(edm::ParameterSet const &ps)
0054     : isPhase2_{ps.getParameter<bool>("isPhase2")},
0055       inputTokenEB_{consumes<InputProduct>(ps.getParameter<edm::InputTag>("inputCollectionEB"))},
0056       inputTokenEE_{isPhase2_ ? edm::EDGetTokenT<InputProduct>{}
0057                               : consumes<InputProduct>(ps.getParameter<edm::InputTag>("inputCollectionEE"))},
0058       outputTokenEB_{produces<EBUncalibratedRecHitCollection>(ps.getParameter<std::string>("outputLabelEB"))},
0059       outputTokenEE_{isPhase2_
0060                          ? edm::EDPutTokenT<EEUncalibratedRecHitCollection>{}
0061                          : produces<EEUncalibratedRecHitCollection>(ps.getParameter<std::string>("outputLabelEE"))} {}
0062 
0063 void EcalUncalibRecHitSoAToLegacy::produce(edm::StreamID sid, edm::Event &event, edm::EventSetup const &setup) const {
0064   auto const &inputCollEB = event.get(inputTokenEB_);
0065   auto const &inputCollEBView = inputCollEB.const_view();
0066   auto outputCollEB = std::make_unique<EBUncalibratedRecHitCollection>();
0067   outputCollEB->reserve(inputCollEBView.size());
0068 
0069   for (uint32_t i = 0; i < inputCollEBView.size(); ++i) {
0070     outputCollEB->emplace_back(DetId{inputCollEBView.id()[i]},
0071                                inputCollEBView.amplitude()[i],
0072                                inputCollEBView.pedestal()[i],
0073                                inputCollEBView.jitter()[i],
0074                                inputCollEBView.chi2()[i],
0075                                inputCollEBView.flags()[i]);
0076     if (isPhase2_) {
0077       (*outputCollEB)[i].setAmplitudeError(inputCollEBView.amplitudeError()[i]);
0078     }
0079     (*outputCollEB)[i].setJitterError(inputCollEBView.jitterError()[i]);
0080     for (uint32_t sample = 0; sample < EcalDataFrame::MAXSAMPLES; ++sample) {
0081       (*outputCollEB)[i].setOutOfTimeAmplitude(sample, inputCollEBView.outOfTimeAmplitudes()[i][sample]);
0082     }
0083   }
0084   event.put(outputTokenEB_, std::move(outputCollEB));
0085 
0086   if (!isPhase2_) {
0087     auto const &inputCollEE = event.get(inputTokenEE_);
0088     auto const &inputCollEEView = inputCollEE.const_view();
0089     auto outputCollEE = std::make_unique<EEUncalibratedRecHitCollection>();
0090     outputCollEE->reserve(inputCollEEView.size());
0091 
0092     for (uint32_t i = 0; i < inputCollEEView.size(); ++i) {
0093       outputCollEE->emplace_back(DetId{inputCollEEView.id()[i]},
0094                                  inputCollEEView.amplitude()[i],
0095                                  inputCollEEView.pedestal()[i],
0096                                  inputCollEEView.jitter()[i],
0097                                  inputCollEEView.chi2()[i],
0098                                  inputCollEEView.flags()[i]);
0099       (*outputCollEE)[i].setJitterError(inputCollEEView.jitterError()[i]);
0100       for (uint32_t sample = 0; sample < EcalDataFrame::MAXSAMPLES; ++sample) {
0101         (*outputCollEE)[i].setOutOfTimeAmplitude(sample, inputCollEEView.outOfTimeAmplitudes()[i][sample]);
0102       }
0103     }
0104     event.put(outputTokenEE_, std::move(outputCollEE));
0105   }
0106 }
0107 
0108 DEFINE_FWK_MODULE(EcalUncalibRecHitSoAToLegacy);