5 #include "CLHEP/Random/RandGaussQ.h" 42 makeDigiSimLinks_(conf_common.getUntrackedParameter<
bool>(
"makeDigiSimLinks",
true)),
43 use_ineff_from_db_(conf_specific.getParameter<
bool>(
"Inefficiency_DB")),
44 use_module_killing_(conf_specific.getParameter<
bool>(
"KillModules")),
45 use_deadmodule_DB_(conf_specific.getParameter<
bool>(
"DeadModules_DB")),
47 use_LorentzAngle_DB_(conf_specific.getParameter<
bool>(
"LorentzAngle_DB")),
50 deadModules_(use_deadmodule_DB_ ?
Parameters() : conf_specific.getParameter<
Parameters>(
"DeadModules")),
54 GeVperElectron_(3.61E-09),
55 alpha2Order_(conf_specific.getParameter<
bool>(
"Alpha2Order")),
56 addXtalk_(conf_specific.getParameter<
bool>(
"AddXTalk")),
58 interstripCoupling_(conf_specific.getParameter<double>(
"InterstripCoupling")),
60 Sigma0_(conf_specific.getParameter<double>(
"SigmaZero")),
61 SigmaCoeff_(conf_specific.getParameter<double>(
"SigmaCoeff")),
67 clusterWidth_(conf_specific.getParameter<double>(
"ClusterWidth")),
73 thePhase2ReadoutMode_(conf_specific.getParameter<
int>(
"Phase2ReadoutMode")),
80 theElectronPerADC_(conf_specific.getParameter<double>(
"ElectronPerAdc")),
83 theAdcFullScale_(conf_specific.getParameter<
int>(
"AdcFullScale")),
87 theNoiseInElectrons_(conf_specific.getParameter<double>(
"NoiseInElectrons")),
90 theReadoutNoise_(conf_specific.getParameter<double>(
"ReadoutNoiseInElec")),
95 theThresholdInE_Endcap_(conf_specific.getParameter<double>(
"ThresholdInElectrons_Endcap")),
96 theThresholdInE_Barrel_(conf_specific.getParameter<double>(
"ThresholdInElectrons_Barrel")),
99 theThresholdSmearing_Endcap_(conf_specific.getParameter<double>(
"ThresholdSmearing_Endcap")),
100 theThresholdSmearing_Barrel_(conf_specific.getParameter<double>(
"ThresholdSmearing_Barrel")),
103 theHIPThresholdInE_Endcap_(conf_specific.getParameter<double>(
"HIPThresholdInElectrons_Endcap")),
104 theHIPThresholdInE_Barrel_(conf_specific.getParameter<double>(
"HIPThresholdInElectrons_Barrel")),
107 theTofLowerCut_(conf_specific.getParameter<double>(
"TofLowerCut")),
108 theTofUpperCut_(conf_specific.getParameter<double>(
"TofUpperCut")),
111 tanLorentzAnglePerTesla_Endcap_(
112 use_LorentzAngle_DB_ ? 0.0 : conf_specific.getParameter<double>(
"TanLorentzAnglePerTesla_Endcap")),
113 tanLorentzAnglePerTesla_Barrel_(
114 use_LorentzAngle_DB_ ? 0.0 : conf_specific.getParameter<double>(
"TanLorentzAnglePerTesla_Barrel")),
117 addNoise_(conf_specific.getParameter<
bool>(
"AddNoise")),
120 addNoisyPixels_(conf_specific.getParameter<
bool>(
"AddNoisyPixels")),
123 fluctuateCharge_(conf_specific.getUntrackedParameter<
bool>(
"FluctuateCharge",
true)),
126 addPixelInefficiency_(conf_specific.getParameter<
bool>(
"AddInefficiency")),
129 addThresholdSmearing_(conf_specific.getParameter<
bool>(
"AddThresholdSmearing")),
132 pseudoRadDamage_(conf_specific.exists(
"PseudoRadDamage") ? conf_specific.getParameter<double>(
"PseudoRadDamage")
134 pseudoRadDamageRadius_(conf_specific.exists(
"PseudoRadDamageRadius")
135 ? conf_specific.getParameter<double>(
"PseudoRadDamageRadius")
138 useChargeReweighting_(conf_specific.getParameter<
bool>(
"UseReweighting")),
139 theSiPixelChargeReweightingAlgorithm_(
145 tMax_(conf_common.getParameter<double>(
"DeltaProductionCut")),
147 badPixels_(conf_specific.getParameter<
Parameters>(
"CellsToKill")),
151 theSiPixelGainCalibrationService_(
153 subdetEfficiencies_(conf_specific) {
154 LogDebug(
"Phase2TrackerDigitizerAlgorithm")
155 <<
"Phase2TrackerDigitizerAlgorithm constructed\n" 156 <<
"Configuration parameters:\n" 157 <<
"Threshold/Gain = " 160 <<
" ADC Scale (in bits) " <<
theAdcFullScale_ <<
" The delta cut-off is set to " <<
tMax_ <<
" pix-inefficiency " 165 LogDebug(
"Phase2TrackerDigitizerAlgorithm") <<
"Phase2TrackerDigitizerAlgorithm deleted";
174 std::vector<PSimHit>::const_iterator inputEnd,
175 const size_t inputBeginGlobalIndex,
176 const uint32_t tofBin,
182 size_t simHitGlobalIndex = inputBeginGlobalIndex;
185 std::vector<PSimHit> matchedSimHits;
186 std::copy_if(inputBegin, inputEnd, std::back_inserter(matchedSimHits), [
detId](
auto const&
hit) ->
bool {
190 for (
auto const&
hit : matchedSimHits) {
191 LogDebug(
"Phase2DigitizerAlgorithm") <<
hit.particleType() <<
" " <<
hit.pabs() <<
" " <<
hit.energyLoss() <<
" " 192 <<
hit.tof() <<
" " <<
hit.trackId() <<
" " <<
hit.processType() <<
" " 193 <<
hit.detUnitId() <<
hit.entryPoint() <<
" " <<
hit.exitPoint();
194 double signalScale = 1.0;
200 const auto& collection_points =
drift(
hit, pixdet, bfield, ionization_points);
204 induce_signal(inputBegin,
hit, simHitGlobalIndex, inputBeginGlobalIndex, tofBin, pixdet, collection_points);
205 LogDebug(
"Phase2DigitizerAlgorithm") <<
"Induced signal was computed";
219 constexpr
float SegmentLength = 0.0010;
224 float length = direction.
mag();
226 int NumberOfSegments =
static_cast<int>(length / SegmentLength);
227 if (NumberOfSegments < 1)
228 NumberOfSegments = 1;
229 LogDebug(
"Phase2TrackerDigitizerAlgorithm")
230 <<
"enter primary_ionzation " << NumberOfSegments <<
" shift = " <<
hit.exitPoint().
x() -
hit.entryPoint().
x()
231 <<
" " <<
hit.exitPoint().
y() -
hit.entryPoint().
y() <<
" " <<
hit.exitPoint().
z() -
hit.entryPoint().
z() <<
" " 232 <<
hit.particleType() <<
" " <<
hit.pabs();
234 std::vector<float> elossVector;
235 elossVector.reserve(NumberOfSegments);
240 float averageEloss =
eLoss / NumberOfSegments;
241 elossVector.resize(NumberOfSegments, averageEloss);
244 std::vector<digitizerUtility::EnergyDepositUnit> ionization_points;
245 ionization_points.reserve(NumberOfSegments);
247 for (
size_t i = 0;
i < elossVector.size(); ++
i) {
253 ionization_points.push_back(edu);
254 LogDebug(
"Phase2TrackerDigitizerAlgorithm")
255 <<
"For index = " <<
i <<
" EnergyDepositUnit-x = " << edu.
x() <<
" EnergyDepositUnit-y = " << edu.
y()
256 <<
" EnergyDepositUnit-z = " << edu.
z() <<
" EnergyDepositUnit-energy = " << edu.
energy();
258 return ionization_points;
267 int pid,
float particleMomentum,
float eloss,
float length,
int NumberOfSegs)
const {
277 else if (pid == 2212)
281 float segmentLength = length / NumberOfSegs;
285 double segmentEloss = (1000. * eloss) / NumberOfSegs;
286 std::vector<float> elossVector;
287 elossVector.reserve(NumberOfSegs);
288 for (
int i = 0;
i < NumberOfSegs; ++
i) {
292 double deltaCutoff =
tMax_;
293 float de =
fluctuate_->SampleFluctuations(particleMomentum * 1000.,
300 elossVector.push_back(de);
305 float ratio = eloss / sum;
307 std::begin(elossVector), std::end(elossVector), std::begin(elossVector), [&
ratio](
auto const&
c) ->
float {
311 float averageEloss = eloss / NumberOfSegs;
312 elossVector.resize(NumberOfSegs, averageEloss);
327 const std::vector<digitizerUtility::EnergyDepositUnit>& ionization_points)
const {
328 LogDebug(
"Phase2TrackerDigitizerAlgorithm") <<
"Enter drift ";
330 std::vector<digitizerUtility::SignalPoint> collection_points;
331 collection_points.reserve(ionization_points.size());
333 if (driftDir.
z() == 0.) {
334 LogWarning(
"Phase2TrackerDigitizerAlgorithm") <<
" pxlx: drift in z is zero ";
335 return collection_points;
338 float TanLorenzAngleX = driftDir.
x();
339 float TanLorenzAngleY = 0.;
340 float dir_z = driftDir.
z();
342 float CosLorenzAngleY = 1.;
344 TanLorenzAngleY = driftDir.
y();
351 LogDebug(
"Phase2TrackerDigitizerAlgorithm")
352 <<
" Lorentz Tan-X " << TanLorenzAngleX <<
" Lorentz Tan-Y " << TanLorenzAngleY <<
" Lorentz Cos-X " 353 << CosLorenzAngleX <<
" Lorentz Cos-Y " << CosLorenzAngleY
354 <<
" ticknes * Lorentz Tan-X = " << moduleThickness * TanLorenzAngleX <<
" drift direction " << driftDir;
356 for (
auto const&
val : ionization_points) {
358 float SegX =
val.x(), SegY =
val.y(), SegZ =
val.z();
365 float driftDistance = moduleThickness / 2. - (dir_z * SegZ);
367 if (driftDistance < 0.)
369 else if (driftDistance > moduleThickness)
370 driftDistance = moduleThickness;
373 float XDriftDueToMagField = driftDistance * TanLorenzAngleX;
374 float YDriftDueToMagField = driftDistance * TanLorenzAngleY;
377 float CloudCenterX = SegX + XDriftDueToMagField;
378 float CloudCenterY = SegY + YDriftDueToMagField;
387 float Sigma =
std::sqrt(driftLength / moduleThickness) *
Sigma0_ * moduleThickness / 0.0300;
394 float Sigma_x = Sigma / CosLorenzAngleX;
395 float Sigma_y = Sigma / CosLorenzAngleY;
398 float energyOnCollector =
val.energy();
405 energyOnCollector *=
exp(-1 * kValue * driftDistance / moduleThickness);
408 LogDebug(
"Phase2TrackerDigitizerAlgorithm")
409 <<
"Dift DistanceZ = " << driftDistance <<
" module thickness = " << moduleThickness
410 <<
" Start Energy = " <<
val.energy() <<
" Energy after loss= " << energyOnCollector;
414 collection_points.push_back(sp);
416 return collection_points;
423 std::vector<PSimHit>::const_iterator inputBegin,
425 const size_t hitIndex,
426 const size_t firstHitIndex,
427 const uint32_t tofBin,
429 const std::vector<digitizerUtility::SignalPoint>& collection_points) {
436 LogDebug(
"Phase2TrackerDigitizerAlgorithm")
437 <<
"Enter induce_signal, Pitch size is " << topol->
pitch().first <<
" cm vs " << topol->
pitch().second <<
" cm";
440 using hit_map_type = std::map<int, float, std::less<int> >;
441 hit_map_type hit_signal;
445 for (
auto const&
v : collection_points) {
446 float CloudCenterX =
v.position().x();
447 float CloudCenterY =
v.position().y();
452 LogDebug(
"Phase2TrackerDigitizerAlgorithm") <<
" cloud " <<
v.position().x() <<
" " <<
v.position().y() <<
" " 453 <<
v.sigma_x() <<
" " <<
v.sigma_y() <<
" " <<
v.amplitude();
474 int IPixRightUpX =
static_cast<int>(std::floor(mp.
x()));
475 int IPixRightUpY =
static_cast<int>(std::floor(mp.
y()));
476 LogDebug(
"Phase2TrackerDigitizerAlgorithm")
477 <<
" right-up " << PointRightUp <<
" " << mp.
x() <<
" " << mp.
y() <<
" " << IPixRightUpX <<
" " << IPixRightUpY;
480 int IPixLeftDownX =
static_cast<int>(std::floor(mp.
x()));
481 int IPixLeftDownY =
static_cast<int>(std::floor(mp.
y()));
482 LogDebug(
"Phase2TrackerDigitizerAlgorithm") <<
" left-down " << PointLeftDown <<
" " << mp.
x() <<
" " << mp.
y()
483 <<
" " << IPixLeftDownX <<
" " << IPixLeftDownY;
487 int numRows = topol->
nrows();
489 IPixRightUpX = numRows > IPixRightUpX ? IPixRightUpX : numRows - 1;
490 IPixRightUpY = numColumns > IPixRightUpY ? IPixRightUpY : numColumns - 1;
491 IPixLeftDownX = 0 < IPixLeftDownX ? IPixLeftDownX : 0;
492 IPixLeftDownY = 0 < IPixLeftDownY ? IPixLeftDownY : 0;
496 for (
int ix = IPixLeftDownX; ix <= IPixRightUpX; ++ix) {
497 float xLB, LowerBound;
500 if (ix == 0 ||
SigmaX == 0.) {
505 LowerBound = 1 -
calcQ((xLB - CloudCenterX) /
SigmaX);
508 float xUB, UpperBound;
509 if (ix == numRows - 1 ||
SigmaX == 0.) {
514 UpperBound = 1. -
calcQ((xUB - CloudCenterX) /
SigmaX);
516 float TotalIntegrationRange = UpperBound - LowerBound;
517 x.emplace(ix, TotalIntegrationRange);
522 for (
int iy = IPixLeftDownY; iy <= IPixRightUpY; ++iy) {
523 float yLB, LowerBound;
524 if (iy == 0 ||
SigmaY == 0.) {
529 LowerBound = 1. -
calcQ((yLB - CloudCenterY) /
SigmaY);
532 float yUB, UpperBound;
533 if (iy == numColumns - 1 ||
SigmaY == 0.) {
538 UpperBound = 1. -
calcQ((yUB - CloudCenterY) /
SigmaY);
541 float TotalIntegrationRange = UpperBound - LowerBound;
542 y.emplace(iy, TotalIntegrationRange);
546 for (
int ix = IPixLeftDownX; ix <= IPixRightUpX; ++ix) {
547 for (
int iy = IPixLeftDownY; iy <= IPixRightUpY; ++iy) {
548 float ChargeFraction =
Charge *
x[ix] *
y[iy];
550 if (ChargeFraction > 0.) {
554 hit_signal[chanFired] += ChargeFraction;
561 LogDebug(
"Phase2TrackerDigitizerAlgorithm")
562 <<
" pixel " << ix <<
" " << iy <<
" - " 563 <<
" " << chanFired <<
" " << ChargeFraction <<
" " << mp.
x() <<
" " << mp.
y() <<
" " << lp.
x() <<
" " 570 bool reweighted =
false;
571 size_t referenceIndex4CR = 0;
574 if (
hit.processType() == 0) {
575 referenceIndex4CR = hitIndex;
589 referenceIndex4CR = firstHitIndex;
606 for (
auto const& hit_s : hit_signal) {
607 int chan = hit_s.first;
609 hit_s.second, &
hit, hit_s.second, corr_time, hitIndex, tofBin)
623 for (
auto&
s : theSignal) {
625 if ((
s.second.ampl() +
noise) < 0.)
642 int numRows = topol->
nrows();
644 for (
auto&
s : theSignal) {
645 float signalInElectrons =
s.second.ampl();
647 std::pair<int, int> hitChan;
655 s.second.set(signalInElectrons - signalInElectrons_Xtalk);
657 if (hitChan.first != 0) {
658 auto XtalkPrev = std::make_pair(hitChan.first - 1, hitChan.second);
663 if (hitChan.first < numRows - 1) {
664 auto XtalkNext = std::make_pair(hitChan.first + 1, hitChan.second);
670 for (
auto const&
l : signalNew) {
672 auto iter = theSignal.find(
chan);
673 if (iter != theSignal.end()) {
674 theSignal[
chan] +=
l.second.ampl();
692 int numRows = topol->
nrows();
694 int numberOfPixels = numRows * numColumns;
695 std::map<int, float, std::less<int> > otherPixels;
703 LogDebug(
"Phase2TrackerDigitizerAlgorithm")
706 << otherPixels.size();
709 for (
auto const& el : otherPixels) {
710 int iy = el.first / numRows;
711 if (iy < 0 || iy > numColumns - 1)
712 LogWarning(
"Phase2TrackerDigitizerAlgorithm") <<
" error in iy " << iy;
714 int ix = el.first - iy * numRows;
715 if (ix < 0 || ix > numRows - 1)
716 LogWarning(
"Phase2TrackerDigitizerAlgorithm") <<
" error in ix " << ix;
720 LogDebug(
"Phase2TrackerDigitizerAlgorithm")
721 <<
" Storing noise = " << el.first <<
" " << el.second <<
" " << ix <<
" " << iy <<
" " <<
chan;
723 if (theSignal[
chan] == 0)
738 float subdetEfficiency = 1.0;
743 uint32_t layerIndex = tTopo->
pxbLayer(detID);
747 uint32_t diskIndex = 2 * tTopo->
pxfDisk(detID) - tTopo->
pxfSide(detID);
752 LogDebug(
"Phase2TrackerDigitizerAlgorithm") <<
" enter pixel_inefficiency " << subdetEfficiency;
756 for (
auto&
s : theSignal) {
758 if (rand > subdetEfficiency) {
806 LogDebug(
"Phase2TrackerDigitizerAlgorithm") <<
"Read Lorentz angle from DB for Phase-2 IT";
808 LogDebug(
"Phase2TrackerDigitizerAlgorithm") <<
"Read Lorentz angle from DB for Phase-2 OT";
813 float alpha2 =
std::pow(lorentzAngle, 2);
821 LogDebug(
"Phase2TrackerDigitizerAlgorithm") <<
"Read Lorentz angle from cfg file";
822 float alpha2_Endcap = 0.0;
823 float alpha2_Barrel = 0.0;
844 LogDebug(
"Phase2TrackerDigitizerAlgorithm") <<
" The drift direction in local coordinate is " << theDriftDirection;
845 return theDriftDirection;
854 for (
auto&
s : theSignal) {
855 std::pair<int, int> ip;
876 int Dead_detID = det_m.getParameter<
int>(
"Dead_detID");
877 Module = det_m.getParameter<
std::string>(
"Module");
878 if (detid == Dead_detID) {
888 for (
auto&
s : theSignal) {
889 std::pair<int, int> ip;
895 if (Module ==
"whole" || (Module ==
"tbmA" && ip.first >= 80 && ip.first <= 159) ||
896 (Module ==
"tbmB" && ip.first <= 79))
907 if (!inserted.second) {
914 std::map<int, digitizerUtility::DigiSimInfo>& digi_map,
925 float theThresholdInE = 0.;
926 float theHIPThresholdInE = 0.;
944 float thresholdInNoiseUnits = 99.9;
965 for (
auto const&
s : theSignal) {
967 float signalInElectrons = sig_data.
ampl();
971 if (!info_list.empty())
972 hitInfo = std::max_element(info_list.begin(), info_list.end())->
second.get();
977 info.ot_bit = signalInElectrons > theHIPThresholdInE ?
true :
false;
980 float charge_frac =
l.first / signalInElectrons;
982 info.simInfoList.push_back({charge_frac,
l.second.get()});
985 digi_map.insert({
s.first,
info});
995 const int max_limit = 10;
1007 if (temp_signal > kink_point)
1009 static_cast<int>(std::floor((temp_signal - kink_point) / (
pow(2, dualslope_param - 1)))) + kink_point;
1012 LogTrace(
"Phase2TrackerDigitizerAlgorithm")
1013 <<
" DetId " << detID <<
" signal_in_elec " << signal_in_elec <<
" threshold " <<
threshold 1014 <<
" signal_above_thr " << signal_in_elec -
threshold <<
" temp conversion " 1016 << temp_signal <<
" signal_in_adc " << signal_in_adc;
1018 return signal_in_adc;
1022 constexpr
float p1 = 12.5f;
1023 constexpr
float p2 = 0.2733f;
1024 constexpr
float p3 = 0.147f;
1027 return 0.5f * (1.f - std::copysign(
std::sqrt(1.
f - unsafe_expf<4>(-
xx * (1.
f +
p2 / (1.
f +
p3 *
xx)))),
x));
virtual std::vector< digitizerUtility::EnergyDepositUnit > primary_ionization(const PSimHit &hit) const
float getLorentzAngle(const uint32_t &) const
CLHEP::HepRandomEngine * rengine_
virtual bool select_hit(const PSimHit &hit, double tCorr, double &sigScale) const
T getParameter(std::string const &) const
unsigned int pxbLayer(const DetId &id) const
Local3DVector LocalVector
constexpr double m_proton
const float theElectronPerADC_
Point3DBase< Scalar, LocalTag > LocalPoint
void loadAccumulator(uint32_t detId, const std::map< int, float > &accumulator)
const float tanLorentzAnglePerTesla_Endcap_
static std::pair< int, int > channelToPixel(int ch)
virtual LocalPoint localPosition(const MeasurementPoint &) const =0
virtual int ncolumns() const =0
const bool useChargeReweighting_
const double pseudoRadDamage_
const double pseudoRadDamageRadius_
LocalVector driftDirection(const Phase2TrackerGeomDetUnit *pixdet, const GlobalVector &bfield, const DetId &detId) const
virtual void initializeEvent(CLHEP::HepRandomEngine &eng)
virtual void induce_signal(std::vector< PSimHit >::const_iterator inputBegin, const PSimHit &hit, const size_t hitIndex, const size_t firstHitIndex, const uint32_t tofBin, const Phase2TrackerGeomDetUnit *pixdet, const std::vector< digitizerUtility::SignalPoint > &collection_points)
virtual int nrows() const =0
virtual void add_cross_talk(const Phase2TrackerGeomDetUnit *pixdet)
const float theThresholdInE_Endcap_
const float theNoiseInElectrons_
const SiPixelLorentzAngle * siPixelLorentzAngle_
const std::unique_ptr< SiG4UniversalFluctuation > fluctuate_
const std::unique_ptr< SiPixelChargeReweightingAlgorithm > theSiPixelChargeReweightingAlgorithm_
std::map< int, digitizerUtility::Ph2Amplitude, std::less< int > > signal_map_type
const bool addNoisyPixels_
virtual void add_noise(const Phase2TrackerGeomDetUnit *pixdet)
virtual void module_killing_conf(uint32_t detID)
virtual ~Phase2TrackerDigitizerAlgorithm()
const float interstripCoupling_
const bool use_LorentzAngle_DB_
const double theThresholdSmearing_Endcap_
const double theThresholdSmearing_Barrel_
static int pixelToChannel(int row, int col)
virtual float thickness() const =0
U second(std::pair< T, U > const &p)
const std::unique_ptr< SiPixelGainCalibrationOfflineSimService > theSiPixelGainCalibrationService_
const bool use_deadmodule_DB_
virtual void add_noisy_cells(const Phase2TrackerGeomDetUnit *pixdet, float thePixelThreshold)
std::unique_ptr< CLHEP::RandGaussQ > gaussDistribution_
const bool fluctuateCharge_
virtual void accumulateSimHits(const std::vector< PSimHit >::const_iterator inputBegin, const std::vector< PSimHit >::const_iterator inputEnd, const size_t inputBeginGlobalIndex, const uint32_t tofBin, const Phase2TrackerGeomDetUnit *pixdet, const GlobalVector &bfield)
Measurement2DPoint MeasurementPoint
Measurement points are two-dimensional by default.
const bool use_ineff_from_db_
virtual bool isAboveThreshold(const digitizerUtility::SimHitInfo *hitInfo, float charge, float thr) const
static PackedDigiType pixelToChannel(unsigned int row, unsigned int col)
const bool addPixelInefficiency_
Phase2TrackerDigitizerAlgorithm(const edm::ParameterSet &conf_common, const edm::ParameterSet &conf_specific, edm::ConsumesCollector iC)
const std::unique_ptr< GaussianTailNoiseGenerator > theNoiser_
Cos< T >::type cos(const T &t)
unsigned int pxfDisk(const DetId &id) const
Abs< T >::type abs(const T &t)
const float theThresholdInE_Barrel_
const bool use_module_killing_
virtual int channel(const LocalPoint &p) const =0
virtual std::vector< float > fluctuateEloss(int particleId, float momentum, float eloss, float length, int NumberOfSegments) const
constexpr int subdetId() const
get the contents of the subdetector field (not cast into any detector's numbering enum) ...
virtual MeasurementPoint measurementPosition(const LocalPoint &) const =0
virtual void pixel_inefficiency_db(uint32_t detID)
static constexpr auto TOB
std::vector< double > barrel_efficiencies
std::unique_ptr< CLHEP::RandGaussQ > smearedThreshold_Endcap_
DetId geographicalId() const
The label of this GeomDet.
const Parameters deadModules_
std::vector< edm::ParameterSet > Parameters
constexpr double m_electron
GlobalPoint toGlobal(const Point2DBase< Scalar, LocalTag > lp) const
unsigned int pxfSide(const DetId &id) const
const Plane & surface() const
The nominal surface of the GeomDet.
T mag() const
The vector magnitude. Equivalent to sqrt(vec.mag2())
const PositionType & position() const
const SiPhase2OuterTrackerLorentzAngle * siPhase2OTLorentzAngle_
const float clusterWidth_
constexpr uint32_t rawId() const
get the raw id
virtual void digitize(const Phase2TrackerGeomDetUnit *pixdet, std::map< int, digitizerUtility::DigiSimInfo > &digi_map, const TrackerTopology *tTopo)
const double theHIPThresholdInE_Endcap_
const bool addThresholdSmearing_
std::unique_ptr< CLHEP::RandGaussQ > smearedThreshold_Barrel_
chan
lumi = TPaveText(lowX+0.38, lowY+0.061, lowX+0.45, lowY+0.161, "NDC") lumi.SetBorderSize( 0 ) lumi...
SubdetEfficiencies(const edm::ParameterSet &conf)
const SubdetEfficiencies subdetEfficiencies_
static std::pair< unsigned int, unsigned int > channelToPixel(unsigned int ch)
const float tanLorentzAnglePerTesla_Barrel_
virtual const PixelTopology & specificTopology() const
Returns a reference to the pixel proxy topology.
const int thePhase2ReadoutMode_
const double theHIPThresholdInE_Barrel_
bool isPixel(HitType hitType)
const int theAdcFullScale_
const RotationType & rotation() const
virtual void pixel_inefficiency(const SubdetEfficiencies &eff, const Phase2TrackerGeomDetUnit *pixdet, const TrackerTopology *tTopo)
virtual std::vector< digitizerUtility::SignalPoint > drift(const PSimHit &hit, const Phase2TrackerGeomDetUnit *pixdet, const GlobalVector &bfield, const std::vector< digitizerUtility::EnergyDepositUnit > &ionization_points) const
virtual std::pair< float, float > pitch() const =0
const bool makeDigiSimLinks_
Log< level::Warning, false > LogWarning
const Plane & specificSurface() const
Same as surface(), kept for backward compatibility.
const float GeVperElectron_
float getLorentzAngle(const uint32_t &) const
const std::vector< std::pair< float, std::unique_ptr< SimHitInfo > > > & simInfoList() const
*vegas h *****************************************************used in the default bin number in original ***version of VEGAS is ***a higher bin number might help to derive a more precise ***grade subtle point
virtual void module_killing_DB(const Phase2TrackerGeomDetUnit *pixdet)=0
int convertSignalToAdc(uint32_t detID, float signal_in_elec, float threshold)
const Bounds & bounds() const
std::vector< double > endcap_efficiencies