10 #include "CLHEP/Random/RandGaussQ.h" 48 makeDigiSimLinks_(conf_common.getUntrackedParameter<
bool>(
"makeDigiSimLinks",
true)),
49 use_ineff_from_db_(conf_specific.getParameter<
bool>(
"Inefficiency_DB")),
50 use_module_killing_(conf_specific.getParameter<
bool>(
"KillModules")),
51 use_deadmodule_DB_(conf_specific.getParameter<
bool>(
"DeadModules_DB")),
53 use_LorentzAngle_DB_(conf_specific.getParameter<
bool>(
"LorentzAngle_DB")),
56 deadModules_(use_deadmodule_DB_ ?
Parameters() : conf_specific.getParameter<
Parameters>(
"DeadModules")),
60 GeVperElectron_(3.61E-09),
61 alpha2Order_(conf_specific.getParameter<
bool>(
"Alpha2Order")),
62 addXtalk_(conf_specific.getParameter<
bool>(
"AddXTalk")),
64 interstripCoupling_(conf_specific.getParameter<double>(
"InterstripCoupling")),
66 Sigma0_(conf_specific.getParameter<double>(
"SigmaZero")),
67 SigmaCoeff_(conf_specific.getParameter<double>(
"SigmaCoeff")),
73 clusterWidth_(conf_specific.getParameter<double>(
"ClusterWidth")),
79 thePhase2ReadoutMode_(conf_specific.getParameter<
int>(
"Phase2ReadoutMode")),
86 theElectronPerADC_(conf_specific.getParameter<double>(
"ElectronPerAdc")),
89 theAdcFullScale_(conf_specific.getParameter<
int>(
"AdcFullScale")),
93 theNoiseInElectrons_(conf_specific.getParameter<double>(
"NoiseInElectrons")),
96 theReadoutNoise_(conf_specific.getParameter<double>(
"ReadoutNoiseInElec")),
101 theThresholdInE_Endcap_(conf_specific.getParameter<double>(
"ThresholdInElectrons_Endcap")),
102 theThresholdInE_Barrel_(conf_specific.getParameter<double>(
"ThresholdInElectrons_Barrel")),
105 theThresholdSmearing_Endcap_(conf_specific.getParameter<double>(
"ThresholdSmearing_Endcap")),
106 theThresholdSmearing_Barrel_(conf_specific.getParameter<double>(
"ThresholdSmearing_Barrel")),
109 theHIPThresholdInE_Endcap_(conf_specific.getParameter<double>(
"HIPThresholdInElectrons_Endcap")),
110 theHIPThresholdInE_Barrel_(conf_specific.getParameter<double>(
"HIPThresholdInElectrons_Barrel")),
113 theTofLowerCut_(conf_specific.getParameter<double>(
"TofLowerCut")),
114 theTofUpperCut_(conf_specific.getParameter<double>(
"TofUpperCut")),
117 tanLorentzAnglePerTesla_Endcap_(
118 use_LorentzAngle_DB_ ? 0.0 : conf_specific.getParameter<double>(
"TanLorentzAnglePerTesla_Endcap")),
119 tanLorentzAnglePerTesla_Barrel_(
120 use_LorentzAngle_DB_ ? 0.0 : conf_specific.getParameter<double>(
"TanLorentzAnglePerTesla_Barrel")),
123 addNoise_(conf_specific.getParameter<
bool>(
"AddNoise")),
126 addNoisyPixels_(conf_specific.getParameter<
bool>(
"AddNoisyPixels")),
129 fluctuateCharge_(conf_specific.getUntrackedParameter<
bool>(
"FluctuateCharge",
true)),
132 addPixelInefficiency_(conf_specific.getParameter<
bool>(
"AddInefficiency")),
135 addThresholdSmearing_(conf_specific.getParameter<
bool>(
"AddThresholdSmearing")),
138 pseudoRadDamage_(conf_specific.exists(
"PseudoRadDamage") ? conf_specific.getParameter<double>(
"PseudoRadDamage")
140 pseudoRadDamageRadius_(conf_specific.exists(
"PseudoRadDamageRadius")
141 ? conf_specific.getParameter<double>(
"PseudoRadDamageRadius")
147 tMax_(conf_common.getParameter<double>(
"DeltaProductionCut")),
149 badPixels_(conf_specific.getParameter<
Parameters>(
"CellsToKill")),
153 theSiPixelGainCalibrationService_(
155 subdetEfficiencies_(conf_specific) {
156 LogDebug(
"Phase2TrackerDigitizerAlgorithm")
157 <<
"Phase2TrackerDigitizerAlgorithm constructed\n" 158 <<
"Configuration parameters:\n" 159 <<
"Threshold/Gain = " 162 <<
" ADC Scale (in bits) " <<
theAdcFullScale_ <<
" The delta cut-off is set to " <<
tMax_ <<
" pix-inefficiency " 167 LogDebug(
"Phase2TrackerDigitizerAlgorithm") <<
"Phase2TrackerDigitizerAlgorithm deleted";
175 std::vector<PSimHit>::const_iterator inputEnd,
176 const size_t inputBeginGlobalIndex,
177 const uint32_t tofBin,
183 size_t simHitGlobalIndex = inputBeginGlobalIndex;
186 std::vector<PSimHit> matchedSimHits;
187 std::copy_if(inputBegin, inputEnd, std::back_inserter(matchedSimHits), [detId](
auto const&
hit) ->
bool {
188 return hit.detUnitId() == detId;
191 for (
auto const&
hit : matchedSimHits) {
192 LogDebug(
"Phase2DigitizerAlgorithm") <<
hit.particleType() <<
" " <<
hit.pabs() <<
" " <<
hit.energyLoss() <<
" " 193 <<
hit.tof() <<
" " <<
hit.trackId() <<
" " <<
hit.processType() <<
" " 194 <<
hit.detUnitId() <<
hit.entryPoint() <<
" " <<
hit.exitPoint();
195 double signalScale = 1.0;
201 const auto& collection_points =
drift(
hit, pixdet, bfield, ionization_points);
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 <<
i <<
" " << edu.
x() <<
" " << edu.
y() <<
" " << edu.
z() <<
" " << edu.
energy();
257 return ionization_points;
266 int pid,
float particleMomentum,
float eloss,
float length,
int NumberOfSegs)
const {
276 else if (pid == 2212)
280 float segmentLength = length / NumberOfSegs;
284 double segmentEloss = (1000. * eloss) / NumberOfSegs;
285 std::vector<float> elossVector;
286 elossVector.reserve(NumberOfSegs);
287 for (
int i = 0;
i < NumberOfSegs; ++
i) {
291 double deltaCutoff =
tMax_;
292 float de =
fluctuate_->SampleFluctuations(particleMomentum * 1000.,
299 elossVector.push_back(de);
304 float ratio = eloss / sum;
306 std::begin(elossVector),
std::end(elossVector), std::begin(elossVector), [&
ratio](
auto const&
c) ->
float {
310 float averageEloss = eloss / NumberOfSegs;
311 elossVector.resize(NumberOfSegs, averageEloss);
326 const std::vector<DigitizerUtility::EnergyDepositUnit>& ionization_points)
const {
327 LogDebug(
"Phase2TrackerDigitizerAlgorithm") <<
"enter drift ";
329 std::vector<DigitizerUtility::SignalPoint> collection_points;
330 collection_points.reserve(ionization_points.size());
332 if (driftDir.
z() == 0.) {
333 LogWarning(
"Phase2TrackerDigitizerAlgorithm") <<
" pxlx: drift in z is zero ";
334 return collection_points;
337 float TanLorenzAngleX = driftDir.
x();
338 float TanLorenzAngleY = 0.;
339 float dir_z = driftDir.
z();
341 float CosLorenzAngleY = 1.;
343 TanLorenzAngleY = driftDir.
y();
350 LogDebug(
"Phase2TrackerDigitizerAlgorithm")
351 <<
" Lorentz Tan " << TanLorenzAngleX <<
" " << TanLorenzAngleY <<
" " << CosLorenzAngleX <<
" " 352 << CosLorenzAngleY <<
" " << moduleThickness * TanLorenzAngleX <<
" " << driftDir;
354 for (
auto const&
val : ionization_points) {
356 float SegX =
val.x(), SegY =
val.y(), SegZ =
val.z();
363 float driftDistance = moduleThickness / 2. - (dir_z * SegZ);
365 if (driftDistance < 0.)
367 else if (driftDistance > moduleThickness)
368 driftDistance = moduleThickness;
371 float XDriftDueToMagField = driftDistance * TanLorenzAngleX;
372 float YDriftDueToMagField = driftDistance * TanLorenzAngleY;
375 float CloudCenterX = SegX + XDriftDueToMagField;
376 float CloudCenterY = SegY + YDriftDueToMagField;
385 float Sigma =
std::sqrt(driftLength / moduleThickness) *
Sigma0_ * moduleThickness / 0.0300;
392 float Sigma_x = Sigma / CosLorenzAngleX;
393 float Sigma_y = Sigma / CosLorenzAngleY;
396 float energyOnCollector =
val.energy();
403 energyOnCollector *=
exp(-1 * kValue * driftDistance / moduleThickness);
406 LogDebug(
"Phase2TrackerDigitizerAlgorithm")
407 <<
"Dift DistanceZ = " << driftDistance <<
" module thickness = " << moduleThickness
408 <<
" Start Energy = " <<
val.energy() <<
" Energy after loss= " << energyOnCollector;
412 collection_points.push_back(sp);
414 return collection_points;
422 const size_t hitIndex,
423 const uint32_t tofBin,
425 const std::vector<DigitizerUtility::SignalPoint>& collection_points) {
432 LogDebug(
"Phase2TrackerDigitizerAlgorithm")
433 <<
" enter induce_signal, " << topol->
pitch().first <<
" " << topol->
pitch().second;
436 using hit_map_type = std::map<int, float, std::less<int> >;
437 hit_map_type hit_signal;
441 for (
auto const&
v : collection_points) {
442 float CloudCenterX =
v.position().x();
443 float CloudCenterY =
v.position().y();
448 LogDebug(
"Phase2TrackerDigitizerAlgorithm") <<
" cloud " <<
v.position().x() <<
" " <<
v.position().y() <<
" " 449 <<
v.sigma_x() <<
" " <<
v.sigma_y() <<
" " <<
v.amplitude();
470 int IPixRightUpX =
static_cast<int>(std::floor(mp.
x()));
471 int IPixRightUpY =
static_cast<int>(std::floor(mp.
y()));
472 LogDebug(
"Phase2TrackerDigitizerAlgorithm")
473 <<
" right-up " << PointRightUp <<
" " << mp.
x() <<
" " << mp.
y() <<
" " << IPixRightUpX <<
" " << IPixRightUpY;
476 int IPixLeftDownX =
static_cast<int>(std::floor(mp.
x()));
477 int IPixLeftDownY =
static_cast<int>(std::floor(mp.
y()));
478 LogDebug(
"Phase2TrackerDigitizerAlgorithm") <<
" left-down " << PointLeftDown <<
" " << mp.
x() <<
" " << mp.
y()
479 <<
" " << IPixLeftDownX <<
" " << IPixLeftDownY;
483 int numRows = topol->
nrows();
485 IPixRightUpX = numRows > IPixRightUpX ? IPixRightUpX : numRows - 1;
486 IPixRightUpY = numColumns > IPixRightUpY ? IPixRightUpY : numColumns - 1;
487 IPixLeftDownX = 0 < IPixLeftDownX ? IPixLeftDownX : 0;
488 IPixLeftDownY = 0 < IPixLeftDownY ? IPixLeftDownY : 0;
492 for (
int ix = IPixLeftDownX; ix <= IPixRightUpX; ++ix) {
493 float xLB, LowerBound;
496 if (ix == 0 ||
SigmaX == 0.) {
501 LowerBound = 1 -
calcQ((xLB - CloudCenterX) /
SigmaX);
504 float xUB, UpperBound;
505 if (ix == numRows - 1 ||
SigmaX == 0.) {
510 UpperBound = 1. -
calcQ((xUB - CloudCenterX) /
SigmaX);
512 float TotalIntegrationRange = UpperBound - LowerBound;
513 x.emplace(ix, TotalIntegrationRange);
518 for (
int iy = IPixLeftDownY; iy <= IPixRightUpY; ++iy) {
519 float yLB, LowerBound;
520 if (iy == 0 ||
SigmaY == 0.) {
525 LowerBound = 1. -
calcQ((yLB - CloudCenterY) /
SigmaY);
528 float yUB, UpperBound;
529 if (iy == numColumns - 1 ||
SigmaY == 0.) {
534 UpperBound = 1. -
calcQ((yUB - CloudCenterY) /
SigmaY);
537 float TotalIntegrationRange = UpperBound - LowerBound;
538 y.emplace(iy, TotalIntegrationRange);
542 for (
int ix = IPixLeftDownX; ix <= IPixRightUpX; ++ix) {
543 for (
int iy = IPixLeftDownY; iy <= IPixRightUpY; ++iy) {
544 float ChargeFraction =
Charge *
x[ix] *
y[iy];
546 if (ChargeFraction > 0.) {
550 hit_signal[chanFired] += ChargeFraction;
557 LogDebug(
"Phase2TrackerDigitizerAlgorithm")
558 <<
" pixel " << ix <<
" " << iy <<
" - " 559 <<
" " << chanFired <<
" " << ChargeFraction <<
" " << mp.
x() <<
" " << mp.
y() <<
" " << lp.
x() <<
" " 567 for (
auto const& hit_s : hit_signal) {
568 int chan = hit_s.first;
582 for (
auto&
s : theSignal) {
584 if ((
s.second.ampl() +
noise) < 0.)
600 int numRows = topol->
nrows();
602 for (
auto&
s : theSignal) {
603 float signalInElectrons =
s.second.ampl();
605 std::pair<int, int> hitChan;
613 s.second.set(signalInElectrons - signalInElectrons_Xtalk);
615 if (hitChan.first != 0) {
616 auto XtalkPrev = std::make_pair(hitChan.first - 1, hitChan.second);
621 if (hitChan.first < numRows - 1) {
622 auto XtalkNext = std::make_pair(hitChan.first + 1, hitChan.second);
628 for (
auto const&
l : signalNew) {
630 auto iter = theSignal.find(
chan);
631 if (iter != theSignal.end()) {
632 theSignal[
chan] +=
l.second.ampl();
650 int numRows = topol->
nrows();
652 int numberOfPixels = numRows * numColumns;
653 std::map<int, float, std::less<int> > otherPixels;
661 LogDebug(
"Phase2TrackerDigitizerAlgorithm")
664 << otherPixels.size();
667 for (
auto const& el : otherPixels) {
668 int iy = el.first / numRows;
669 if (iy < 0 || iy > numColumns - 1)
670 LogWarning(
"Phase2TrackerDigitizerAlgorithm") <<
" error in iy " << iy;
672 int ix = el.first - iy * numRows;
673 if (ix < 0 || ix > numRows - 1)
674 LogWarning(
"Phase2TrackerDigitizerAlgorithm") <<
" error in ix " << ix;
678 LogDebug(
"Phase2TrackerDigitizerAlgorithm")
679 <<
" Storing noise = " << el.first <<
" " << el.second <<
" " << ix <<
" " << iy <<
" " <<
chan;
681 if (theSignal[
chan] == 0)
696 float subdetEfficiency = 1.0;
701 uint32_t layerIndex = tTopo->
pxbLayer(detID);
705 uint32_t diskIndex = 2 * tTopo->
pxfDisk(detID) - tTopo->
pxfSide(detID);
710 LogDebug(
"Phase2TrackerDigitizerAlgorithm") <<
" enter pixel_inefficiency " << subdetEfficiency;
714 for (
auto&
s : theSignal) {
716 if (rand > subdetEfficiency) {
747 const DetId& detId)
const {
765 float alpha2 =
std::pow(lorentzAngle, 2);
773 float alpha2_Endcap = 0.0;
774 float alpha2_Barrel = 0.0;
795 LogDebug(
"Phase2TrackerDigitizerAlgorithm") <<
" The drift direction in local coordinate is " << theDriftDirection;
796 return theDriftDirection;
805 for (
auto&
s : theSignal) {
806 std::pair<int, int> ip;
827 int Dead_detID = det_m.getParameter<
int>(
"Dead_detID");
829 if (detid == Dead_detID) {
839 for (
auto&
s : theSignal) {
840 std::pair<int, int> ip;
846 if (
Module ==
"whole" || (
Module ==
"tbmA" && ip.first >= 80 && ip.first <= 159) ||
847 (
Module ==
"tbmB" && ip.first <= 79))
853 auto& theSignal =
_signal[detId];
858 if (!inserted.second) {
859 throw cms::Exception(
"LogicError") <<
"Signal was already set for DetId " << detId;
865 std::map<int, DigitizerUtility::DigiSimInfo>& digi_map,
876 float theThresholdInE = 0.;
877 float theHIPThresholdInE = 0.;
912 for (
auto const&
s : theSignal) {
914 float signalInElectrons = sig_data.
ampl();
918 if (!info_list.empty())
919 hitInfo = std::max_element(info_list.begin(), info_list.end())->
second.get();
924 info.ot_bit = signalInElectrons > theHIPThresholdInE ?
true :
false;
927 float charge_frac =
l.first / signalInElectrons;
929 info.simInfoList.push_back({charge_frac,
l.second.get()});
932 digi_map.insert({
s.first,
info});
942 const int max_limit = 10;
954 if (temp_signal > kink_point)
955 temp_signal = std::floor((temp_signal - kink_point) / (
pow(2, dualslope_param - 1))) + kink_point;
958 LogTrace(
"Phase2TrackerDigitizerAlgorithm")
959 <<
" DetId " << detID <<
" signal_in_elec " << signal_in_elec <<
" threshold " <<
threshold 960 <<
" signal_above_thr " << signal_in_elec -
threshold <<
" temp conversion " 962 << temp_signal <<
" signal_in_adc " << signal_in_adc;
964 return signal_in_adc;
967 constexpr
float p1 = 12.5f;
968 constexpr
float p2 = 0.2733f;
969 constexpr
float p3 = 0.147f;
972 return 0.5f * (1.f - std::copysign(
std::sqrt(1.
f - unsafe_expf<4>(-
xx * (1.
f +
p2 / (1.
f +
p3 *
xx)))),
x));
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
LocalVector DriftDirection(const Phase2TrackerGeomDetUnit *pixdet, const GlobalVector &bfield, const DetId &detId) const
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 double pseudoRadDamage_
const double pseudoRadDamageRadius_
const std::vector< std::pair< float, std::unique_ptr< SimHitInfo > > > & simInfoList() const
virtual void initializeEvent(CLHEP::HepRandomEngine &eng)
virtual int nrows() const =0
virtual bool isAboveThreshold(const DigitizerUtility::SimHitInfo *hitInfo, float charge, float thr) const
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 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.
virtual std::vector< DigitizerUtility::EnergyDepositUnit > primary_ionization(const PSimHit &hit) const
const bool use_ineff_from_db_
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 std::vector< DigitizerUtility::SignalPoint > drift(const PSimHit &hit, const Phase2TrackerGeomDetUnit *pixdet, const GlobalVector &bfield, const std::vector< DigitizerUtility::EnergyDepositUnit > &ionization_points) const
virtual int channel(const LocalPoint &p) const =0
virtual void induce_signal(const PSimHit &hit, const size_t hitIndex, const uint32_t tofBin, const Phase2TrackerGeomDetUnit *pixdet, const std::vector< DigitizerUtility::SignalPoint > &collection_points)
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_
virtual void digitize(const Phase2TrackerGeomDetUnit *pixdet, std::map< int, DigitizerUtility::DigiSimInfo > &digi_map, const TrackerTopology *tTopo)
std::map< int, DigitizerUtility::Amplitude, std::less< int > > signal_map_type
std::vector< edm::ParameterSet > Parameters
constexpr double m_electron
GlobalPoint toGlobal(const Point2DBase< Scalar, LocalTag > lp) const
const float theReadoutNoise_
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
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::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
Power< A, B >::type pow(const A &a, const B &b)
*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