CMS 3D CMS Logo

RPixLinearChargeCollectionDrifter.cc
Go to the documentation of this file.
3 #include <iostream>
4 #include <vector>
5 
7  verbosity_ = params.getParameter<int>("RPixVerbosity");
8 
9  GeV_per_electron_ = params.getParameter<double>("RPixGeVPerElectron");
10  charge_cloud_sigmas_vect_ = params.getParameter<std::vector<double> >("RPixInterSmearing");
12  det_id_ = det_id;
13 }
14 
15 std::vector<RPixSignalPoint> RPixLinearChargeCollectionDrifter::Drift(
16  const std::vector<RPixEnergyDepositUnit> &energy_deposition) {
17  // convert an energy deposit in a point and in a charge of electrons n=E/3.61 (eV)
18  temp_.resize(energy_deposition.size());
19  for (unsigned int i = 0; i < energy_deposition.size(); i++) {
20  temp_[i].setPosition(LocalPoint(energy_deposition[i].Position().x(), energy_deposition[i].Position().y()));
21  temp_[i].setSigma(getSigma_(energy_deposition[i].Position().z()));
22  temp_[i].setCharge(energy_deposition[i].Energy() / GeV_per_electron_);
23  if (verbosity_ > 1) {
24  edm::LogInfo("RPixLinearChargeCollectionDrifter")
25  << det_id_ << " :" << temp_[i].Position() << " " << temp_[i].Sigma() << " " << temp_[i].Charge();
26  }
27  }
28  return temp_;
29 }
31  if (charge_cloud_sigmas_vect_.size() == 1)
32  return charge_cloud_sigmas_vect_[0];
33 
34  double factor = (z / det_thickness_) * (charge_cloud_sigmas_vect_.size() - 1);
35  double lo_i = floor(factor);
36  double hi_i = ceil(factor);
37  if (lo_i == hi_i) {
38  return charge_cloud_sigmas_vect_[(int)factor];
39  } else {
40  double lo_weight = hi_i - factor;
41  double hi_weight = factor - lo_i;
42 
43  return charge_cloud_sigmas_vect_[(int)lo_i] * lo_weight + charge_cloud_sigmas_vect_[(int)hi_i] * hi_weight;
44  }
45 }
T getParameter(std::string const &) const
double detThickness() const
Point3DBase< Scalar, LocalTag > LocalPoint
Definition: Definitions.h:30
std::vector< RPixSignalPoint > Drift(const std::vector< RPixEnergyDepositUnit > &energy_deposition)
constexpr int32_t ceil(float num)
Geometrical and topological information on RPix silicon detector. Uses coordinate a frame with origin...
RPixLinearChargeCollectionDrifter(const edm::ParameterSet &params, uint32_t det_id)