Back to home page

Project CMSSW displayed by LXR

 
 

    


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

0001 #include "FWCore/Framework/interface/stream/EDProducer.h"
0002 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0003 #include "DataFormats/HGCRecHit/interface/HGCRecHit.h"
0004 #include "DataFormats/HGCRecHit/interface/HGCRecHitCollections.h"
0005 #include "DataFormats/ForwardDetId/interface/HGCSiliconDetId.h"
0006 #include "FWCore/Utilities/interface/EDGetToken.h"
0007 #include "FWCore/Utilities/interface/EDPutToken.h"
0008 
0009 #include "CUDADataFormats/HGCal/interface/HGCRecHitCPUProduct.h"
0010 #include "CUDADataFormats/HGCal/interface/ConstHGCRecHitSoA.h"
0011 
0012 class HEFRecHitFromSoA : public edm::stream::EDProducer<> {
0013 public:
0014   explicit HEFRecHitFromSoA(const edm::ParameterSet& ps);
0015   ~HEFRecHitFromSoA() override;
0016 
0017   void produce(edm::Event&, const edm::EventSetup&) override;
0018   void convert_soa_data_to_collection_(uint32_t, HGCRecHitCollection&, ConstHGCRecHitSoA*);
0019 
0020 private:
0021   std::unique_ptr<HGChefRecHitCollection> rechits_;
0022   edm::EDGetTokenT<HGCRecHitCPUProduct> recHitSoAToken_;
0023   edm::EDPutTokenT<HGChefRecHitCollection> recHitCollectionToken_;
0024 };
0025 
0026 HEFRecHitFromSoA::HEFRecHitFromSoA(const edm::ParameterSet& ps) {
0027   recHitSoAToken_ = consumes<HGCRecHitCPUProduct>(ps.getParameter<edm::InputTag>("HEFRecHitSoATok"));
0028   recHitCollectionToken_ = produces<HGChefRecHitCollection>();
0029 }
0030 
0031 HEFRecHitFromSoA::~HEFRecHitFromSoA() {}
0032 
0033 void HEFRecHitFromSoA::produce(edm::Event& event, const edm::EventSetup& setup) {
0034   const HGCRecHitCPUProduct& recHits = event.get(recHitSoAToken_);
0035   ConstHGCRecHitSoA recHitsSoA = recHits.get();
0036   rechits_ = std::make_unique<HGCRecHitCollection>();
0037   convert_soa_data_to_collection_(recHits.nHits(), *rechits_, &recHitsSoA);
0038   event.put(std::move(rechits_));
0039 }
0040 
0041 void HEFRecHitFromSoA::convert_soa_data_to_collection_(uint32_t nhits,
0042                                                        HGCRecHitCollection& rechits,
0043                                                        ConstHGCRecHitSoA* h_calibSoA) {
0044   rechits.reserve(nhits);
0045   for (uint i = 0; i < nhits; ++i) {
0046     DetId id_converted(h_calibSoA->id_[i]);
0047     rechits.emplace_back(id_converted,
0048                          h_calibSoA->energy_[i],
0049                          h_calibSoA->time_[i],
0050                          0,
0051                          h_calibSoA->flagBits_[i],
0052                          h_calibSoA->son_[i],
0053                          h_calibSoA->timeError_[i]);
0054   }
0055 }
0056 
0057 #include "FWCore/Framework/interface/MakerMacros.h"
0058 DEFINE_FWK_MODULE(HEFRecHitFromSoA);