diff --git a/RecoLocalCalo/EcalRecProducers/plugins/EcalUncalibRecHitConvertGPU2CPUFormat.cc b/RecoLocalCalo/EcalRecProducers/plugins/EcalUncalibRecHitConvertGPU2CPUFormat.cc new file mode 100644 index 0000000000000..916230516f070 --- /dev/null +++ b/RecoLocalCalo/EcalRecProducers/plugins/EcalUncalibRecHitConvertGPU2CPUFormat.cc @@ -0,0 +1,116 @@ +// framework +#include "FWCore/Framework/interface/stream/EDProducer.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/MakerMacros.h" + +// algorithm specific +#include "DataFormats/EcalDigi/interface/EcalDigiCollections.h" +#include "CUDADataFormats/EcalRecHitSoA/interface/EcalUncalibratedRecHit_soa.h" +#include "DataFormats/EcalRecHit/interface/EcalUncalibratedRecHit.h" +#include "DataFormats/EcalRecHit/interface/EcalRecHitCollections.h" +#include "RecoLocalCalo/EcalRecAlgos/interface/Common.h" + +#include + +class EcalUncalibRecHitConvertGPU2CPUFormat + : public edm::stream::EDProducer<> +{ +public: + explicit EcalUncalibRecHitConvertGPU2CPUFormat(edm::ParameterSet const& ps); + ~EcalUncalibRecHitConvertGPU2CPUFormat() override; + static void fillDescriptions(edm::ConfigurationDescriptions&); + +private: + using GPURecHitType = ecal::UncalibratedRecHit; + void produce(edm::Event&, edm::EventSetup const&) override; + +private: + const edm::EDGetTokenT recHitsGPUEB_; + const edm::EDGetTokenT recHitsGPUEE_; + + const std::string recHitsLabelCPUEB_, recHitsLabelCPUEE_; +}; + +void EcalUncalibRecHitConvertGPU2CPUFormat::fillDescriptions( + edm::ConfigurationDescriptions& confDesc) { + edm::ParameterSetDescription desc; + + desc.add("recHitsLabelGPUEB", + edm::InputTag("ecalUncalibRecHitProducerGPU", "EcalUncalibRecHitsEB")); + desc.add("recHitsLabelGPUEE", + edm::InputTag("ecalUncalibRecHitProducerGPU", "EcalUncalibRecHitsEE")); + + desc.add("recHitsLabelCPUEB", "EcalUncalibRecHitsEB"); + desc.add("recHitsLabelCPUEE", "EcalUncalibRecHitsEE"); + + std::string label = "ecalUncalibRecHitConvertGPU2CPUFormat"; + confDesc.add(label, desc); +} + +EcalUncalibRecHitConvertGPU2CPUFormat::EcalUncalibRecHitConvertGPU2CPUFormat( + const edm::ParameterSet& ps) + : recHitsGPUEB_{consumes( + ps.getParameter("recHitsLabelGPUEB"))} + , recHitsGPUEE_{consumes( + ps.getParameter("recHitsLabelGPUEE"))} + , recHitsLabelCPUEB_{ps.getParameter("recHitsLabelCPUEB")} + , recHitsLabelCPUEE_{ps.getParameter("recHitsLabelCPUEE")} +{ + produces(recHitsLabelCPUEB_); + produces(recHitsLabelCPUEE_); +} + +EcalUncalibRecHitConvertGPU2CPUFormat::~EcalUncalibRecHitConvertGPU2CPUFormat() {} + +void EcalUncalibRecHitConvertGPU2CPUFormat::produce( + edm::Event& event, + edm::EventSetup const& setup) +{ + edm::Handle hRecHitsGPUEB, hRecHitsGPUEE; + event.getByToken(recHitsGPUEB_, hRecHitsGPUEB); + event.getByToken(recHitsGPUEE_, hRecHitsGPUEE); + + auto recHitsCPUEB = std::make_unique(); + auto recHitsCPUEE = std::make_unique(); + recHitsCPUEB->reserve(hRecHitsGPUEB->amplitude.size()); + recHitsCPUEE->reserve(hRecHitsGPUEE->amplitude.size()); + + for (uint32_t i=0; iamplitude.size(); ++i) { + recHitsCPUEB->emplace_back( + DetId{hRecHitsGPUEB->did[i]}, + hRecHitsGPUEB->amplitude[i], + hRecHitsGPUEB->pedestal[i], + hRecHitsGPUEB->jitter[i], + hRecHitsGPUEB->chi2[i], + hRecHitsGPUEB->flags[i] + ); + (*recHitsCPUEB)[i].setJitterError(hRecHitsGPUEB->jitterError[i]); + auto const offset = i * EcalDataFrame::MAXSAMPLES; + for (uint32_t sample=0; sampleamplitudesAll[offset + sample]); + } + + for (uint32_t i=0; iamplitude.size(); ++i) { + recHitsCPUEE->emplace_back( + DetId{hRecHitsGPUEE->did[i]}, + hRecHitsGPUEE->amplitude[i], + hRecHitsGPUEE->pedestal[i], + hRecHitsGPUEE->jitter[i], + hRecHitsGPUEE->chi2[i], + hRecHitsGPUEE->flags[i] + ); + (*recHitsCPUEE)[i].setJitterError(hRecHitsGPUEE->jitterError[i]); + auto const offset = i * EcalDataFrame::MAXSAMPLES; + for (uint32_t sample=0; sampleamplitudesAll[offset + sample]); + } + + event.put(std::move(recHitsCPUEB), recHitsLabelCPUEB_); + event.put(std::move(recHitsCPUEE), recHitsLabelCPUEE_); +} + +DEFINE_FWK_MODULE(EcalUncalibRecHitConvertGPU2CPUFormat);