Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:25:44

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/stream/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::stream::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::Event &, edm::EventSetup const &) override;
0023 
0024 private:
0025   const bool isPhase2_;
0026   const edm::EDGetTokenT<InputProduct> uncalibRecHitsPortableEB_;
0027   const edm::EDGetTokenT<InputProduct> uncalibRecHitsPortableEE_;
0028   const edm::EDPutTokenT<EBUncalibratedRecHitCollection> uncalibRecHitsCPUEBToken_;
0029   const edm::EDPutTokenT<EEUncalibratedRecHitCollection> uncalibRecHitsCPUEEToken_;
0030 };
0031 
0032 void EcalUncalibRecHitSoAToLegacy::fillDescriptions(edm::ConfigurationDescriptions &confDesc) {
0033   edm::ParameterSetDescription desc;
0034 
0035   desc.add<edm::InputTag>("uncalibRecHitsPortableEB",
0036                           edm::InputTag("ecalMultiFitUncalibRecHitPortable", "EcalUncalibRecHitsEB"));
0037   desc.add<std::string>("recHitsLabelCPUEB", "EcalUncalibRecHitsEB");
0038   desc.ifValue(edm::ParameterDescription<bool>("isPhase2", false, true),
0039                false >> (edm::ParameterDescription<edm::InputTag>(
0040                              "uncalibRecHitsPortableEE",
0041                              edm::InputTag("ecalMultiFitUncalibRecHitPortable", "EcalUncalibRecHitsEE"),
0042                              true) and
0043                          edm::ParameterDescription<std::string>("recHitsLabelCPUEE", "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       uncalibRecHitsPortableEB_{consumes<InputProduct>(ps.getParameter<edm::InputTag>("uncalibRecHitsPortableEB"))},
0051       uncalibRecHitsPortableEE_{
0052           isPhase2_ ? edm::EDGetTokenT<InputProduct>{}
0053                     : consumes<InputProduct>(ps.getParameter<edm::InputTag>("uncalibRecHitsPortableEE"))},
0054       uncalibRecHitsCPUEBToken_{
0055           produces<EBUncalibratedRecHitCollection>(ps.getParameter<std::string>("recHitsLabelCPUEB"))},
0056       uncalibRecHitsCPUEEToken_{
0057           isPhase2_ ? edm::EDPutTokenT<EEUncalibratedRecHitCollection>{}
0058                     : produces<EEUncalibratedRecHitCollection>(ps.getParameter<std::string>("recHitsLabelCPUEE"))} {}
0059 
0060 void EcalUncalibRecHitSoAToLegacy::produce(edm::Event &event, edm::EventSetup const &setup) {
0061   auto const &uncalRecHitsEBColl = event.get(uncalibRecHitsPortableEB_);
0062   auto const &uncalRecHitsEBCollView = uncalRecHitsEBColl.const_view();
0063   auto recHitsCPUEB = std::make_unique<EBUncalibratedRecHitCollection>();
0064   recHitsCPUEB->reserve(uncalRecHitsEBCollView.size());
0065 
0066   for (uint32_t i = 0; i < uncalRecHitsEBCollView.size(); ++i) {
0067     recHitsCPUEB->emplace_back(DetId{uncalRecHitsEBCollView.id()[i]},
0068                                uncalRecHitsEBCollView.amplitude()[i],
0069                                uncalRecHitsEBCollView.pedestal()[i],
0070                                uncalRecHitsEBCollView.jitter()[i],
0071                                uncalRecHitsEBCollView.chi2()[i],
0072                                uncalRecHitsEBCollView.flags()[i]);
0073     if (isPhase2_) {
0074       (*recHitsCPUEB)[i].setAmplitudeError(uncalRecHitsEBCollView.amplitudeError()[i]);
0075     }
0076     (*recHitsCPUEB)[i].setJitterError(uncalRecHitsEBCollView.jitterError()[i]);
0077     for (uint32_t sample = 0; sample < EcalDataFrame::MAXSAMPLES; ++sample) {
0078       (*recHitsCPUEB)[i].setOutOfTimeAmplitude(sample, uncalRecHitsEBCollView.outOfTimeAmplitudes()[i][sample]);
0079     }
0080   }
0081   event.put(uncalibRecHitsCPUEBToken_, std::move(recHitsCPUEB));
0082 
0083   if (!isPhase2_) {
0084     auto const &uncalRecHitsEEColl = event.get(uncalibRecHitsPortableEE_);
0085     auto const &uncalRecHitsEECollView = uncalRecHitsEEColl.const_view();
0086     auto recHitsCPUEE = std::make_unique<EEUncalibratedRecHitCollection>();
0087     recHitsCPUEE->reserve(uncalRecHitsEECollView.size());
0088 
0089     for (uint32_t i = 0; i < uncalRecHitsEECollView.size(); ++i) {
0090       recHitsCPUEE->emplace_back(DetId{uncalRecHitsEECollView.id()[i]},
0091                                  uncalRecHitsEECollView.amplitude()[i],
0092                                  uncalRecHitsEECollView.pedestal()[i],
0093                                  uncalRecHitsEECollView.jitter()[i],
0094                                  uncalRecHitsEECollView.chi2()[i],
0095                                  uncalRecHitsEECollView.flags()[i]);
0096       (*recHitsCPUEE)[i].setJitterError(uncalRecHitsEECollView.jitterError()[i]);
0097       for (uint32_t sample = 0; sample < EcalDataFrame::MAXSAMPLES; ++sample) {
0098         (*recHitsCPUEE)[i].setOutOfTimeAmplitude(sample, uncalRecHitsEECollView.outOfTimeAmplitudes()[i][sample]);
0099       }
0100     }
0101     event.put(uncalibRecHitsCPUEEToken_, std::move(recHitsCPUEE));
0102   }
0103 }
0104 
0105 DEFINE_FWK_MODULE(EcalUncalibRecHitSoAToLegacy);