CMS 3D CMS Logo

HEFRecHitGPU.cc
Go to the documentation of this file.
1 #include <iostream>
2 #include <string>
3 
11 
13 
18 
23 
25 public:
26  explicit HEFRecHitGPU(const edm::ParameterSet &ps);
27  ~HEFRecHitGPU() override;
28  void beginRun(edm::Run const &, edm::EventSetup const &) override;
29 
30  void produce(edm::Event &, const edm::EventSetup &) override;
31 
32 private:
35 
36  std::unique_ptr<HGChefRecHitCollection> rechits_;
37 
38  //constants
41 
42  //memory
43  std::string assert_error_message_(std::string, const size_t &, const size_t &);
45 
46  //conditions (geometry, topology, ...)
47  std::unique_ptr<hgcal::RecHitTools> tools_;
48 
49  //data processing
52 
56 
58 };
59 
61  : uncalibRecHitCPUToken_{consumes<HGCUncalibratedRecHitCollection>(
62  ps.getParameter<edm::InputTag>("HGCHEFUncalibRecHitsTok"))},
63  recHitGPUToken_{produces<cms::cuda::Product<HGCRecHitGPUProduct>>()} {
64  cdata_.keV2DIGI_ = ps.getParameter<double>("HGCHEF_keV2DIGI");
65  cdata_.xmin_ = ps.getParameter<double>("minValSiPar"); //float
66  cdata_.xmax_ = ps.getParameter<double>("maxValSiPar"); //float
67  cdata_.aterm_ = ps.getParameter<double>("noiseSiPar"); //float
68  cdata_.cterm_ = ps.getParameter<double>("constSiPar"); //float
69  vdata_.fCPerMIP_ = ps.getParameter<std::vector<double>>("HGCHEF_fCPerMIP");
70  vdata_.cce_ = ps.getParameter<edm::ParameterSet>("HGCHEF_cce").getParameter<std::vector<double>>("values");
71  vdata_.noise_fC_ = ps.getParameter<edm::ParameterSet>("HGCHEF_noise_fC").getParameter<std::vector<double>>("values");
72  vdata_.rcorr_ = ps.getParameter<std::vector<double>>("rcorr");
73  vdata_.weights_ = ps.getParameter<std::vector<double>>("weights");
74  cdata_.uncalib2GeV_ = 1e-6 / cdata_.keV2DIGI_;
75  cdata_.layerOffset_ = 28;
76  assert_sizes_constants_(vdata_);
77 
78  kcdata_ = new KernelConstantData<HGChefUncalibRecHitConstantData>(cdata_, vdata_);
79  convert_constant_data_(kcdata_);
80 
81  tools_ = std::make_unique<hgcal::RecHitTools>();
82 }
83 
85 
86 std::string HEFRecHitGPU::assert_error_message_(std::string var, const size_t &s1, const size_t &s2) {
87  std::string str1 = "The '";
88  std::string str2 = "' array must be of size ";
89  std::string str3 = " to hold the configuration data, but is of size ";
90  return str1 + var + str2 + std::to_string(s1) + str3 + std::to_string(s2);
91 }
92 
95  edm::LogError("WrongSize") << this->assert_error_message_(
98  edm::LogError("WrongSize") << this->assert_error_message_(
101  edm::LogError("WrongSize") << this->assert_error_message_(
104  edm::LogError("WrongSize") << this->assert_error_message_(
107  edm::LogError("WrongSize") << this->assert_error_message_(
109 }
110 
112 
114  cms::cuda::ScopedContextProduce ctx{event.streamID()};
115 
116  const auto &hits = event.get(uncalibRecHitCPUToken_);
117  unsigned int nhits(hits.size());
118  rechits_ = std::make_unique<HGCRecHitCollection>();
119 
120  if (nhits == 0)
121  edm::LogError("HEFRecHitGPU") << "WARNING: no input hits!";
122 
123  prod_ = HGCRecHitGPUProduct(nhits, ctx.stream());
124  d_uncalib_ = HGCUncalibRecHitDevice(nhits, ctx.stream());
126 
128  km.run_kernels(kcdata_, ctx.stream());
129 
130  ctx.emplace(event, recHitGPUToken_, std::move(prod_));
131 }
132 
134  for (size_t i = 0; i < kcdata->vdata_.fCPerMIP_.size(); ++i)
135  kcdata->data_.fCPerMIP_[i] = kcdata->vdata_.fCPerMIP_[i];
136  for (size_t i = 0; i < kcdata->vdata_.cce_.size(); ++i)
137  kcdata->data_.cce_[i] = kcdata->vdata_.cce_[i];
138  for (size_t i = 0; i < kcdata->vdata_.noise_fC_.size(); ++i)
139  kcdata->data_.noise_fC_[i] = kcdata->vdata_.noise_fC_[i];
140  for (size_t i = 0; i < kcdata->vdata_.rcorr_.size(); ++i)
141  kcdata->data_.rcorr_[i] = kcdata->vdata_.rcorr_[i];
142  for (size_t i = 0; i < kcdata->vdata_.weights_.size(); ++i)
143  kcdata->data_.weights_[i] = kcdata->vdata_.weights_[i];
144 }
145 
std::unique_ptr< HGChefRecHitCollection > rechits_
Definition: HEFRecHitGPU.cc:36
void convert_constant_data_(KernelConstantData< HGChefUncalibRecHitConstantData > *)
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
edm::EDPutTokenT< cms::cuda::Product< HGCRecHitGPUProduct > > recHitGPUToken_
Definition: HEFRecHitGPU.cc:34
for(int i=first, nt=offsets[nh];i< nt;i+=gridDim.x *blockDim.x)
~HEFRecHitGPU() override
Definition: HEFRecHitGPU.cc:84
std::string to_string(const V &value)
Definition: OMSAccess.h:71
Log< level::Error, false > LogError
std::string assert_error_message_(std::string, const size_t &, const size_t &)
Definition: HEFRecHitGPU.cc:86
KernelConstantData< HGChefUncalibRecHitConstantData > * kcdata_
Definition: HEFRecHitGPU.cc:57
void convert_collection_data_to_soa_(const uint32_t &, const HGChefUncalibratedRecHitCollection &)
HGChefUncalibRecHitConstantData cdata_
Definition: HEFRecHitGPU.cc:39
void assert_sizes_constants_(const HGCConstantVectorData &)
Definition: HEFRecHitGPU.cc:93
HGCRecHitGPUProduct prod_
Definition: HEFRecHitGPU.cc:53
void run_kernels(const KernelConstantData< HGCeeUncalibRecHitConstantData > *, const cudaStream_t &)
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
HGCConstantVectorData vdata_
Definition: HEFRecHitGPU.cc:40
std::vector< DeviationSensor2D * > vd
HEFRecHitGPU(const edm::ParameterSet &ps)
Definition: HEFRecHitGPU.cc:60
void beginRun(edm::Run const &, edm::EventSetup const &) override
HGCUncalibRecHitDevice d_uncalib_
Definition: HEFRecHitGPU.cc:54
std::unique_ptr< hgcal::RecHitTools > tools_
Definition: HEFRecHitGPU.cc:47
HGCUncalibRecHitSoA get() const
edm::EDGetTokenT< HGChefUncalibratedRecHitCollection > uncalibRecHitCPUToken_
Definition: HEFRecHitGPU.cc:33
HGCConstantVectorData vdata_
void produce(edm::Event &, const edm::EventSetup &) override
HGCUncalibRecHitHost< HGChefUncalibratedRecHitCollection > h_uncalib_
Definition: HEFRecHitGPU.cc:55
def move(src, dest)
Definition: eostools.py:511
Definition: event.py:1
Definition: Run.h:45