12 #include "CLHEP/Random/RandGaussQ.h" 13 #include "CLHEP/Random/RandFlat.h" 61 CLHEP::HepRandomEngine& eng):
63 makeDigiSimLinks_(conf_specific.getUntrackedParameter<
bool>(
"makeDigiSimLinks",
true)),
64 use_ineff_from_db_(conf_specific.getParameter<
bool>(
"Inefficiency_DB")),
65 use_module_killing_(conf_specific.getParameter<
bool>(
"KillModules")),
66 use_deadmodule_DB_(conf_specific.getParameter<
bool>(
"DeadModules_DB")),
67 use_LorentzAngle_DB_(conf_specific.getParameter<
bool>(
"LorentzAngle_DB")),
73 GeVperElectron(3.61E-09),
74 alpha2Order(conf_specific.getParameter<
bool>(
"Alpha2Order")),
75 addXtalk(conf_specific.getParameter<
bool>(
"AddXTalk")),
76 interstripCoupling(conf_specific.getParameter<double>(
"InterstripCoupling")),
78 Sigma0(conf_specific.getParameter<double>(
"SigmaZero")),
79 SigmaCoeff(conf_specific.getParameter<double>(
"SigmaCoeff")),
84 ClusterWidth(conf_specific.getParameter<double>(
"ClusterWidth")),
86 doDigitalReadout(conf_specific.getParameter<
bool>(
"DigitalReadout")),
93 theElectronPerADC(conf_specific.getParameter<double>(
"ElectronPerAdc")),
96 theAdcFullScale(conf_specific.getParameter<
int>(
"AdcFullScale")),
100 theNoiseInElectrons(conf_specific.getParameter<double>(
"NoiseInElectrons")),
103 theReadoutNoise(conf_specific.getParameter<double>(
"ReadoutNoiseInElec")),
108 theThresholdInE_Endcap(conf_specific.getParameter<double>(
"ThresholdInElectrons_Endcap")),
109 theThresholdInE_Barrel(conf_specific.getParameter<double>(
"ThresholdInElectrons_Barrel")),
112 theThresholdSmearing_Endcap(conf_specific.getParameter<double>(
"ThresholdSmearing_Endcap")),
113 theThresholdSmearing_Barrel(conf_specific.getParameter<double>(
"ThresholdSmearing_Barrel")),
116 theHIPThresholdInE_Endcap(conf_specific.getParameter<double>(
"HIPThresholdInElectrons_Endcap")),
117 theHIPThresholdInE_Barrel(conf_specific.getParameter<double>(
"HIPThresholdInElectrons_Barrel")),
120 theTofLowerCut(conf_specific.getParameter<double>(
"TofLowerCut")),
121 theTofUpperCut(conf_specific.getParameter<double>(
"TofUpperCut")),
124 tanLorentzAnglePerTesla_Endcap(use_LorentzAngle_DB_ ? 0.0 : conf_specific.getParameter<double>(
"TanLorentzAnglePerTesla_Endcap")),
125 tanLorentzAnglePerTesla_Barrel(use_LorentzAngle_DB_ ? 0.0 : conf_specific.getParameter<double>(
"TanLorentzAnglePerTesla_Barrel")),
128 addNoise(conf_specific.getParameter<
bool>(
"AddNoise")),
131 addNoisyPixels(conf_specific.getParameter<
bool>(
"AddNoisyPixels")),
134 fluctuateCharge(conf_specific.getUntrackedParameter<
bool>(
"FluctuateCharge",
true)),
140 addThresholdSmearing(conf_specific.getParameter<
bool>(
"AddThresholdSmearing")),
143 pseudoRadDamage(conf_specific.exists(
"PseudoRadDamage")?conf_specific.getParameter<double>(
"PseudoRadDamage"):double(0.0)),
144 pseudoRadDamageRadius(conf_specific.exists(
"PseudoRadDamageRadius")?conf_specific.getParameter<double>(
"PseudoRadDamageRadius"):double(0.0)),
149 tMax(conf_common.getParameter<double>(
"DeltaProductionCut")),
151 badPixels(conf_specific.getParameter<
std::vector<
edm::
ParameterSet> >(
"CellsToKill")),
155 subdetEfficiencies_(conf_specific),
157 gaussDistribution_((addNoise ||
AddPixelInefficiency || fluctuateCharge || addThresholdSmearing) ? new
CLHEP::RandGaussQ(eng, 0., theReadoutNoise) :
nullptr),
159 smearedThreshold_Endcap_(addThresholdSmearing ? new
CLHEP::RandGaussQ(eng, theThresholdInE_Endcap , theThresholdSmearing_Endcap) :
nullptr),
160 smearedThreshold_Barrel_(addThresholdSmearing ? new
CLHEP::RandGaussQ(eng, theThresholdInE_Barrel , theThresholdSmearing_Barrel) :
nullptr),
163 LogInfo(
"Phase2TrackerDigitizerAlgorithm") <<
"Phase2TrackerDigitizerAlgorithm constructed\n" 164 <<
"Configuration parameters:\n" 165 <<
"Threshold/Gain = " 166 <<
"threshold in electron Endcap = " 168 <<
"\nthreshold in electron Barrel = " 171 <<
" The delta cut-off is set to " <<
tMax 176 LogDebug(
"Phase2TrackerDigitizerAlgorithm") <<
"Phase2TrackerDigitizerAlgorithm deleted";
180 barrel_efficiencies = conf.
getParameter< std::vector<double> >(
"EfficiencyFactors_Barrel");
181 endcap_efficiencies = conf.
getParameter< std::vector<double> >(
"EfficiencyFactors_Endcap");
190 std::vector<DigitizerUtility::EnergyDepositUnit>& ionization_points)
const {
192 const float SegmentLength = 0.0010;
199 float length = direction.
mag();
201 int NumberOfSegments =
int (length / SegmentLength);
202 if (NumberOfSegments < 1) NumberOfSegments = 1;
203 LogDebug(
"Phase2TrackerDigitizerAlgorithm")
204 <<
"enter primary_ionzation " << NumberOfSegments
210 <<
" " << hit.
pabs();
212 std::vector<float> elossVector;
213 elossVector.reserve(NumberOfSegments);
218 float momentum = hit.
pabs();
220 fluctuateEloss(pid, momentum, eLoss, length, NumberOfSegments, elossVector);
222 ionization_points.reserve(NumberOfSegments);
225 for (
int i = 0;
i != NumberOfSegments; ++
i) {
234 ionization_points.push_back(edu);
235 LogDebug(
"Phase2TrackerDigitizerAlgorithm")
236 <<
i <<
" " << ionization_points[
i].x() <<
" " 237 << ionization_points[
i].y() <<
" " 238 << ionization_points[
i].z() <<
" " 239 << ionization_points[
i].energy();
249 float particleMomentum,
253 std::vector<float> & elossVector)
const {
260 double particleMass = 139.6;
263 if (pid == 11) particleMass = 0.511;
264 else if (pid == 13) particleMass = 105.7;
265 else if (pid == 321) particleMass = 493.7;
266 else if (pid == 2212) particleMass = 938.3;
269 float segmentLength = length/NumberOfSegs;
274 double segmentEloss = (1000. * eloss)/NumberOfSegs;
275 for (
int i = 0;
i < NumberOfSegs; ++
i) {
281 double deltaCutoff =
tMax;
282 de =
fluctuate->SampleFluctuations(static_cast<double>(particleMomentum*1000.),
283 particleMass, deltaCutoff,
284 static_cast<double>(segmentLength*10.),
287 elossVector.push_back(de);
292 float ratio = eloss/sum;
293 for (
int ii = 0;
ii < NumberOfSegs; ++
ii) elossVector[
ii] = ratio*elossVector[
ii];
296 float averageEloss = eloss/NumberOfSegs;
297 for (
int ii = 0;
ii < NumberOfSegs; ++
ii) elossVector[
ii] = averageEloss;
311 const std::vector<DigitizerUtility::EnergyDepositUnit>& ionization_points,
312 std::vector<DigitizerUtility::SignalPoint>& collection_points)
const {
313 LogDebug(
"Phase2TrackerDigitizerAlgorithm") <<
"enter drift ";
315 collection_points.resize(ionization_points.size());
317 if (driftDir.
z() == 0.) {
318 LogWarning(
"Phase2TrackerDigitizerAlgorithm") <<
" pxlx: drift in z is zero ";
322 float TanLorenzAngleX,
328 TanLorenzAngleX = driftDir.
x();
329 TanLorenzAngleY = driftDir.
y();
330 dir_z = driftDir.
z();
331 CosLorenzAngleX = 1./
std::sqrt(1. + TanLorenzAngleX * TanLorenzAngleX);
332 CosLorenzAngleY = 1./
std::sqrt(1. + TanLorenzAngleY * TanLorenzAngleY);
335 TanLorenzAngleX = driftDir.
x();
336 TanLorenzAngleY = 0.;
337 dir_z = driftDir.
z();
338 CosLorenzAngleX = 1./
std::sqrt(1. + TanLorenzAngleX * TanLorenzAngleX);
339 CosLorenzAngleY = 1.;
345 LogDebug(
"Phase2TrackerDigitizerAlgorithm")
346 <<
" Lorentz Tan " << TanLorenzAngleX <<
" " << TanLorenzAngleY <<
" " 347 << CosLorenzAngleX <<
" " << CosLorenzAngleY <<
" " 348 << moduleThickness*TanLorenzAngleX <<
" " << driftDir;
356 for (
unsigned int i = 0;
i != ionization_points.size(); ++
i) {
357 float SegX, SegY, SegZ;
358 SegX = ionization_points[
i].
x();
359 SegY = ionization_points[
i].y();
360 SegZ = ionization_points[
i].z();
365 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;
381 DriftLength =
std::sqrt(DriftDistance*DriftDistance +
382 XDriftDueToMagField*XDriftDueToMagField +
383 YDriftDueToMagField*YDriftDueToMagField);
387 Sigma =
std::sqrt(DriftLength/moduleThickness) * (
Sigma0 * moduleThickness/0.0300);
393 Sigma_x = Sigma / CosLorenzAngleX;
394 Sigma_y = Sigma / CosLorenzAngleY;
397 float energyOnCollector = ionization_points[
i].energy();
404 energyOnCollector = energyOnCollector *
exp(-1 * kValue * DriftDistance/moduleThickness);
407 LogDebug(
"Phase2TrackerDigitizerAlgorithm")
408 <<
"Dift DistanceZ = " << DriftDistance <<
" module thickness = " << moduleThickness
409 <<
" Start Energy = " << ionization_points[
i].energy() <<
" Energy after loss= " << energyOnCollector;
412 collection_points[
i] = sp;
420 const size_t hitIndex,
421 const unsigned int tofBin,
423 const std::vector<DigitizerUtility::SignalPoint>& collection_points) {
431 LogDebug(
"Phase2TrackerDigitizerAlgorithm")
432 <<
" enter induce_signal, " 433 << topol->
pitch().first <<
" " << topol->
pitch().second;
436 using hit_map_type = std::map<int, float, std::less<int> >;
437 hit_map_type hit_signal;
440 std::map<int, float, std::less<int> >
x,
y;
447 for (
auto const &
v : collection_points) {
449 float CloudCenterX =
v.position().x();
450 float CloudCenterY =
v.position().y();
453 float Charge =
v.amplitude();
455 LogDebug(
"Phase2TrackerDigitizerAlgorithm")
456 <<
" cloud " <<
v.position().x() <<
" " <<
v.position().y() <<
" " 457 <<
v.sigma_x() <<
" " <<
v.sigma_y() <<
" " <<
v.amplitude();
479 int IPixRightUpX =
int(floor( mp.
x()));
480 int IPixRightUpY =
int(floor( mp.
y()));
482 LogDebug(
"Phase2TrackerDigitizerAlgorithm") <<
" right-up " << PointRightUp <<
" " 483 << mp.
x() <<
" " << mp.
y() <<
" " 484 << IPixRightUpX <<
" " << IPixRightUpY ;
488 int IPixLeftDownX =
int(floor( mp.
x()));
489 int IPixLeftDownY =
int(floor( mp.
y()));
491 LogDebug(
"Phase2TrackerDigitizerAlgorithm") <<
" left-down " << PointLeftDown <<
" " 492 << mp.
x() <<
" " << mp.
y() <<
" " 493 << IPixLeftDownX <<
" " << IPixLeftDownY ;
497 int numRows = topol->
nrows();
499 IPixRightUpX = numRows > IPixRightUpX ? IPixRightUpX : numRows-1;
500 IPixRightUpY = numColumns > IPixRightUpY ? IPixRightUpY : numColumns-1;
501 IPixLeftDownX = 0 < IPixLeftDownX ? IPixLeftDownX : 0;
502 IPixLeftDownY = 0 < IPixLeftDownY ? IPixLeftDownY : 0;
509 for (ix = IPixLeftDownX; ix <= IPixRightUpX; ix++) {
510 float xUB, xLB, UpperBound, LowerBound;
514 if (ix == 0 || SigmaX==0.)
519 LowerBound = 1-
calcQ((xLB-CloudCenterX)/SigmaX);
522 if (ix == numRows-1 || SigmaX == 0.)
527 UpperBound = 1. -
calcQ((xUB-CloudCenterX)/SigmaX);
529 float TotalIntegrationRange = UpperBound - LowerBound;
530 x[ix] = TotalIntegrationRange;
535 for (iy = IPixLeftDownY; iy <= IPixRightUpY; iy++) {
536 float yUB, yLB, UpperBound, LowerBound;
538 if (iy == 0 || SigmaY==0.)
543 LowerBound = 1. -
calcQ((yLB-CloudCenterY)/SigmaY);
546 if (iy == numColumns-1 || SigmaY==0. )
551 UpperBound = 1. -
calcQ((yUB-CloudCenterY)/SigmaY);
554 float TotalIntegrationRange = UpperBound - LowerBound;
555 y[iy] = TotalIntegrationRange;
560 for (ix = IPixLeftDownX; ix <= IPixRightUpX; ix++) {
561 for (iy = IPixLeftDownY; iy <= IPixRightUpY; iy++) {
562 float ChargeFraction = Charge*x[ix]*y[iy];
563 if (ChargeFraction > 0.) {
567 hit_signal[
chan] += ChargeFraction;
574 LogDebug(
"Phase2TrackerDigitizerAlgorithm")
575 <<
" pixel " << ix <<
" " << iy <<
" - "<<
" " 576 << chan <<
" " << ChargeFraction<<
" " 577 << mp.
x() <<
" " << mp.
y() <<
" " 578 << lp.
x() <<
" " << lp.
y() <<
" " 580 ESum += ChargeFraction;
585 for (
auto const & hit_s : hit_signal) {
586 int chan = hit_s.first;
588 : DigitizerUtility::Amplitude( hit_s.second,
nullptr, hit_s.second) ) ;
597 float thePixelThreshold) {
603 int numRows = topol->
nrows();
606 for (
auto &
s : theSignal) {
608 if ((
s.second.ampl() + noise) < 0.)
616 for (
auto const &
s : theSignal) {
617 float signalInElectrons =
s.second.ampl();
618 std::pair<int,int> hitChan;
624 if (hitChan.first != 0) {
625 std::pair<int,int> XtalkPrev = std::pair<int,int>(hitChan.first-1, hitChan.second);
628 signalNew.insert(std::pair<int,DigitizerUtility::Amplitude>(chanXtalkPrev,
DigitizerUtility::Amplitude(signalInElectrons_Xtalk,
nullptr, -1.0)));
630 if (hitChan.first < (numRows-1)) {
631 std::pair<int,int> XtalkNext = std::pair<int,int>(hitChan.first+1, hitChan.second);
634 signalNew.insert(std::pair<int,DigitizerUtility::Amplitude>(chanXtalkNext,
DigitizerUtility::Amplitude(signalInElectrons_Xtalk,
nullptr, -1.0)));
637 for (
auto const &
l : signalNew) {
639 auto iter = theSignal.find(chan);
640 if (iter != theSignal.end()) {
641 theSignal[
chan] +=
l.second.ampl();
652 int numberOfPixels = numRows * numColumns;
653 std::map<int,float, std::less<int> > otherPixels;
654 std::map<int,float, std::less<int> >::iterator mapI;
662 LogDebug(
"Phase2TrackerDigitizerAlgorithm")
663 <<
" Add noisy pixels " << numRows <<
" " 666 << otherPixels.size() ;
669 for (mapI = otherPixels.begin(); mapI!= otherPixels.end(); mapI++) {
670 int iy = ((*mapI).first) / numRows;
671 int ix = ((*mapI).first) - (iy*numRows);
673 if( iy < 0 || iy > (numColumns-1) )
674 LogWarning(
"Phase2TrackerDigitizerAlgorithm") <<
" error in iy " << iy;
675 if( ix < 0 || ix > (numRows-1) )
676 LogWarning(
"Phase2TrackerDigitizerAlgorithm") <<
" error in ix " << ix;
681 LogDebug (
"Phase2TrackerDigitizerAlgorithm")
682 <<
" Storing noise = " << (*mapI).first <<
" " << (*mapI).second
683 <<
" " << ix <<
" " << iy <<
" " <<
chan ;
685 if (theSignal[chan] == 0) {
686 int noise =
int((*mapI).second);
705 float subdetEfficiency = 1.0;
710 unsigned int layerIndex = tTopo->
pxbLayer(detID);
713 unsigned int diskIndex = 2 * tTopo->
pxfDisk(detID) - tTopo->
pxfSide(detID);
717 LogDebug (
"Phase2TrackerDigitizerAlgorithm") <<
" enter pixel_inefficiency " << subdetEfficiency;
721 for (
auto &
s : theSignal) {
723 if( rand>subdetEfficiency ) {
739 const DetId& detId)
const {
767 dir_z = -(1 + alpha2_Barrel* Bfield.z()*Bfield.z() );
768 scale = (1 + alpha2_Barrel* Bfield.z()*Bfield.z() );
773 dir_z = -(1 + alpha2_Endcap* Bfield.z()*Bfield.z() );
774 scale = (1 + alpha2_Endcap* Bfield.z()*Bfield.z() );
781 alpha2 = lorentzAngle * lorentzAngle;
783 dir_x = -( lorentzAngle * Bfield.y() + alpha2 * Bfield.z()* Bfield.x() );
784 dir_y = +( lorentzAngle * Bfield.x() - alpha2 * Bfield.z()* Bfield.y() );
785 dir_z = -(1 + alpha2 * Bfield.z()*Bfield.z() );
786 scale = (1 + alpha2 * Bfield.z()*Bfield.z() );
791 LogDebug (
"Phase2TrackerDigitizerAlgorithm") <<
" The drift direction in local coordinate is " 792 << theDriftDirection ;
793 return theDriftDirection;
802 for (
auto &
s : theSignal) {
803 std::pair<int,int> ip;
822 int Dead_detID = det_m.getParameter<
int>(
"Dead_detID");
823 Module = det_m.getParameter<
std::string>(
"Module");
824 if (detid == Dead_detID){
835 for (
auto &
s : theSignal) {
836 std::pair<int,int> ip;
840 if (Module ==
"whole")
s.second.set(0.);
841 else if (Module ==
"tbmA" && ip.first >= 80 && ip.first <= 159)
s.second.set(0.);
842 else if (Module ==
"tbmB" && ip.first <= 79)
s.second.set(0.);
852 for (
size_t id = 0;
id < disabledModules.size();
id++) {
853 if (detID == disabledModules[
id].DetID) {
855 badmodule = disabledModules[
id];
867 for (
auto &
s : theSignal) {
874 std::vector<GlobalPixel> badrocpositions (0);
875 for (
unsigned int j = 0; j < 16; j++) {
878 for (
auto const &
p : path) {
883 badrocpositions.push_back(global);
891 for (
auto &
s : theSignal) {
892 std::pair<int,int> ip;
896 for (
auto const &
p : badrocpositions) {
898 if (
p.row ==
k.getParameter<
int>(
"row") &&
899 ip.first ==
k.getParameter<
int>(
"row") &&
900 std::abs(ip.second -
p.col) <
k.getParameter<
int>(
"col")) {
s.second.set(0.);}
907 std::map<int, DigitizerUtility::DigiSimInfo> & digi_map,
912 if (it ==
_signal.end())
return;
919 float theThresholdInE = 0.;
920 float theHIPThresholdInE = 0.;
949 for (
auto const &
s : theSignal) {
952 float signalInElectrons = sig_data.
ampl();
954 if (signalInElectrons >= theThresholdInE) {
959 info.
ot_bit = ( signalInElectrons > theHIPThresholdInE ?
true :
false);
962 float charge_frac =
l.first/signalInElectrons;
963 if (
l.first > -5.0) info.
simInfoList.push_back({charge_frac,
l.second.get()});
966 digi_map.insert({
s.first, info});
void primary_ionization(const PSimHit &hit, std::vector< DigitizerUtility::EnergyDepositUnit > &ionization_points) const
int adc(sample_type sample)
get the ADC sample (12 bits)
CLHEP::HepRandomEngine * rengine_
T getParameter(std::string const &) const
virtual int nrows() const =0
const float theThresholdInE_Endcap
LocalVector DriftDirection(const Phase2TrackerGeomDetUnit *pixdet, const GlobalVector &bfield, const DetId &detId) const
Local3DVector LocalVector
float tof() const
deprecated name for timeOfFlight()
Point3DBase< Scalar, LocalTag > LocalPoint
const float theElectronPerADC
virtual void add_noise(const Phase2TrackerGeomDetUnit *pixdet, float thePixelThreshold)
virtual void module_killing_DB(uint32_t detID)
unsigned int pxfDisk(const DetId &id) const
void drift(const PSimHit &hit, const Phase2TrackerGeomDetUnit *pixdet, const GlobalVector &bfield, const std::vector< DigitizerUtility::EnergyDepositUnit > &ionization_points, std::vector< DigitizerUtility::SignalPoint > &collection_points) const
const float tanLorentzAnglePerTesla_Barrel
const std::unique_ptr< SiG4UniversalFluctuation > fluctuate
virtual std::pair< float, float > pitch() const =0
edm::ESHandle< SiPixelFedCablingMap > map_
const Bounds & bounds() const
const float theNoiseInElectrons
const bool addNoisyPixels
const bool addThresholdSmearing
const bool doDigitalReadout
bool IsRocBad(const uint32_t &detid, const short &rocNb) const
const Plane & surface() const
The nominal surface of the GeomDet.
virtual void module_killing_conf(uint32_t detID)
identify pixel inside single ROC
virtual ~Phase2TrackerDigitizerAlgorithm()
const bool use_LorentzAngle_DB_
static int pixelToChannel(int row, int col)
global coordinates (row and column in DetUnit, as in PixelDigi)
uint32_t rawId() const
get the raw id
const std::unique_ptr< SiPixelGainCalibrationOfflineSimService > theSiPixelGainCalibrationService_
const bool use_deadmodule_DB_
const float theThresholdInE_Barrel
const Parameters DeadModules
Measurement2DPoint MeasurementPoint
Measurement points are two-dimensional by default.
Local3DPoint exitPoint() const
Exit point in the local Det frame.
Phase2TrackerDigitizerAlgorithm(const edm::ParameterSet &conf_common, const edm::ParameterSet &conf_specific, CLHEP::HepRandomEngine &)
std::vector< edm::ParameterSet > badPixels
const bool use_ineff_from_db_
static PackedDigiType pixelToChannel(unsigned int row, unsigned int col)
const int theAdcFullScale
edm::ESHandle< SiPixelLorentzAngle > SiPixelLorentzAngle_
const double pseudoRadDamage
const float tanLorentzAnglePerTesla_Endcap
Cos< T >::type cos(const T &t)
virtual MeasurementPoint measurementPosition(const LocalPoint &) const =0
const double theHIPThresholdInE_Barrel
unsigned int idInDetUnit() const
id of this ROC in DetUnit etermined by token path
Abs< T >::type abs(const T &t)
const float interstripCoupling
const bool use_module_killing_
DetId geographicalId() const
The label of this GeomDet.
virtual int channel(const LocalPoint &p) const =0
virtual void pixel_inefficiency_db(uint32_t detID)
const std::vector< disabledModuleType > getBadComponentList() const
const std::unique_ptr< CLHEP::RandGaussQ > smearedThreshold_Barrel_
std::vector< double > barrel_efficiencies
float pabs() const
fast and more accurate access to momentumAtEntry().mag()
int subdetId() const
get the contents of the subdetector field (not cast into any detector's numbering enum) ...
const std::unique_ptr< CLHEP::RandGaussQ > smearedThreshold_Endcap_
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
unsigned int pxbLayer(const DetId &id) const
void fluctuateEloss(int particleId, float momentum, float eloss, float length, int NumberOfSegments, std::vector< float > &elossVector) const
const double theHIPThresholdInE_Endcap
void induce_signal(const PSimHit &hit, const size_t hitIndex, const unsigned int tofBin, const Phase2TrackerGeomDetUnit *pixdet, const std::vector< DigitizerUtility::SignalPoint > &collection_points)
const float GeVperElectron
const bool AddPixelInefficiency
virtual float thickness() const =0
static std::pair< int, int > channelToPixel(int ch)
virtual const PixelTopology & specificTopology() const
Returns a reference to the pixel proxy topology.
row and collumn in ROC representation
const sipixelobjects::PixelROC * findItem(const sipixelobjects::CablingPathToDetUnit &path) const final
virtual LocalPoint localPosition(const MeasurementPoint &) const =0
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 bool fluctuateCharge
std::vector< sipixelobjects::CablingPathToDetUnit > pathToDetUnit(uint32_t rawDetId) const final
const SubdetEfficiencies subdetEfficiencies_
float energyLoss() const
The energy deposit in the PSimHit, in ???.
virtual int ncolumns() const =0
float getLorentzAngle(const uint32_t &) const
const std::unique_ptr< CLHEP::RandFlat > flatDistribution_
unsigned int pxfSide(const DetId &id) const
const RotationType & rotation() const
const std::unique_ptr< CLHEP::RandGaussQ > gaussDistribution_
std::vector< std::pair< float, SimHitInfoForLinks * > > simInfoList
const double pseudoRadDamageRadius
virtual void pixel_inefficiency(const SubdetEfficiencies &eff, const Phase2TrackerGeomDetUnit *pixdet, const TrackerTopology *tTopo)
const std::vector< std::pair< float, std::unique_ptr< SimHitInfoForLinks > > > & simInfoList() const
const bool makeDigiSimLinks_
const std::unique_ptr< GaussianTailNoiseGenerator > theNoiser
const PositionType & position() const
T const * product() const
Local3DPoint entryPoint() const
Entry point in the local Det frame.
double calcQ(float x) const
static std::pair< unsigned int, unsigned int > channelToPixel(unsigned int ch)
*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
unsigned int detUnitId() const
const Plane & specificSurface() const
Same as surface(), kept for backward compatibility.
GlobalPixel toGlobal(const LocalPixel &loc) const
edm::ESHandle< SiPixelQuality > SiPixelBadModule_
std::vector< double > endcap_efficiencies