12 #include "CLHEP/Random/RandGaussQ.h" 13 #include "CLHEP/Random/RandFlat.h" 62 makeDigiSimLinks_(conf_common.getUntrackedParameter<
bool>(
"makeDigiSimLinks",
true)),
63 use_ineff_from_db_(conf_specific.getParameter<
bool>(
"Inefficiency_DB")),
64 use_module_killing_(conf_specific.getParameter<
bool>(
"KillModules")),
65 use_deadmodule_DB_(conf_specific.getParameter<
bool>(
"DeadModules_DB")),
66 use_LorentzAngle_DB_(conf_specific.getParameter<
bool>(
"LorentzAngle_DB")),
72 GeVperElectron(3.61E-09),
73 alpha2Order(conf_specific.getParameter<
bool>(
"Alpha2Order")),
74 addXtalk(conf_specific.getParameter<
bool>(
"AddXTalk")),
75 interstripCoupling(conf_specific.getParameter<double>(
"InterstripCoupling")),
77 Sigma0(conf_specific.getParameter<double>(
"SigmaZero")),
78 SigmaCoeff(conf_specific.getParameter<double>(
"SigmaCoeff")),
83 ClusterWidth(conf_specific.getParameter<double>(
"ClusterWidth")),
89 thePhase2ReadoutMode(conf_specific.getParameter<
int>(
"Phase2ReadoutMode")),
96 theElectronPerADC(conf_specific.getParameter<double>(
"ElectronPerAdc")),
99 theAdcFullScale(conf_specific.getParameter<
int>(
"AdcFullScale")),
103 theNoiseInElectrons(conf_specific.getParameter<double>(
"NoiseInElectrons")),
106 theReadoutNoise(conf_specific.getParameter<double>(
"ReadoutNoiseInElec")),
111 theThresholdInE_Endcap(conf_specific.getParameter<double>(
"ThresholdInElectrons_Endcap")),
112 theThresholdInE_Barrel(conf_specific.getParameter<double>(
"ThresholdInElectrons_Barrel")),
115 theThresholdSmearing_Endcap(conf_specific.getParameter<double>(
"ThresholdSmearing_Endcap")),
116 theThresholdSmearing_Barrel(conf_specific.getParameter<double>(
"ThresholdSmearing_Barrel")),
119 theHIPThresholdInE_Endcap(conf_specific.getParameter<double>(
"HIPThresholdInElectrons_Endcap")),
120 theHIPThresholdInE_Barrel(conf_specific.getParameter<double>(
"HIPThresholdInElectrons_Barrel")),
123 theTofLowerCut(conf_specific.getParameter<double>(
"TofLowerCut")),
124 theTofUpperCut(conf_specific.getParameter<double>(
"TofUpperCut")),
127 tanLorentzAnglePerTesla_Endcap(use_LorentzAngle_DB_ ? 0.0 : conf_specific.getParameter<double>(
"TanLorentzAnglePerTesla_Endcap")),
128 tanLorentzAnglePerTesla_Barrel(use_LorentzAngle_DB_ ? 0.0 : conf_specific.getParameter<double>(
"TanLorentzAnglePerTesla_Barrel")),
131 addNoise(conf_specific.getParameter<
bool>(
"AddNoise")),
134 addNoisyPixels(conf_specific.getParameter<
bool>(
"AddNoisyPixels")),
137 fluctuateCharge(conf_specific.getUntrackedParameter<
bool>(
"FluctuateCharge",
true)),
143 addThresholdSmearing(conf_specific.getParameter<
bool>(
"AddThresholdSmearing")),
146 pseudoRadDamage(conf_specific.exists(
"PseudoRadDamage")?conf_specific.getParameter<double>(
"PseudoRadDamage"):double(0.0)),
147 pseudoRadDamageRadius(conf_specific.exists(
"PseudoRadDamageRadius")?conf_specific.getParameter<double>(
"PseudoRadDamageRadius"):double(0.0)),
152 tMax(conf_common.getParameter<double>(
"DeltaProductionCut")),
154 badPixels(conf_specific.getParameter<
std::vector<
edm::
ParameterSet> >(
"CellsToKill")),
158 subdetEfficiencies_(conf_specific)
161 LogInfo(
"Phase2TrackerDigitizerAlgorithm") <<
"Phase2TrackerDigitizerAlgorithm constructed\n" 162 <<
"Configuration parameters:\n" 163 <<
"Threshold/Gain = " 164 <<
"threshold in electron Endcap = " 166 <<
"\nthreshold in electron Barrel = " 170 <<
" The delta cut-off is set to " <<
tMax 175 LogDebug(
"Phase2TrackerDigitizerAlgorithm") <<
"Phase2TrackerDigitizerAlgorithm deleted";
179 barrel_efficiencies = conf.
getParameter< std::vector<double> >(
"EfficiencyFactors_Barrel");
180 endcap_efficiencies = conf.
getParameter< std::vector<double> >(
"EfficiencyFactors_Endcap");
189 std::vector<DigitizerUtility::EnergyDepositUnit>& ionization_points)
const {
191 const float SegmentLength = 0.0010;
198 float length = direction.
mag();
200 int NumberOfSegments =
int (length / SegmentLength);
201 if (NumberOfSegments < 1) NumberOfSegments = 1;
202 LogDebug(
"Phase2TrackerDigitizerAlgorithm")
203 <<
"enter primary_ionzation " << NumberOfSegments
209 <<
" " << hit.
pabs();
211 std::vector<float> elossVector;
212 elossVector.reserve(NumberOfSegments);
217 float momentum = hit.
pabs();
219 fluctuateEloss(pid, momentum, eLoss, length, NumberOfSegments, elossVector);
221 ionization_points.reserve(NumberOfSegments);
224 for (
int i = 0;
i != NumberOfSegments; ++
i) {
233 ionization_points.push_back(edu);
234 LogDebug(
"Phase2TrackerDigitizerAlgorithm")
235 <<
i <<
" " << ionization_points[
i].x() <<
" " 236 << ionization_points[
i].y() <<
" " 237 << ionization_points[
i].z() <<
" " 238 << ionization_points[
i].energy();
248 float particleMomentum,
252 std::vector<float> & elossVector)
const {
259 double particleMass = 139.6;
262 if (pid == 11) particleMass = 0.511;
263 else if (pid == 13) particleMass = 105.7;
264 else if (pid == 321) particleMass = 493.7;
265 else if (pid == 2212) particleMass = 938.3;
268 float segmentLength = length/NumberOfSegs;
273 double segmentEloss = (1000. * eloss)/NumberOfSegs;
274 for (
int i = 0;
i < NumberOfSegs; ++
i) {
280 double deltaCutoff =
tMax;
281 de =
fluctuate->SampleFluctuations(static_cast<double>(particleMomentum*1000.),
282 particleMass, deltaCutoff,
283 static_cast<double>(segmentLength*10.),
286 elossVector.push_back(de);
291 float ratio = eloss/sum;
292 for (
int ii = 0;
ii < NumberOfSegs; ++
ii) elossVector[
ii] = ratio*elossVector[
ii];
295 float averageEloss = eloss/NumberOfSegs;
296 for (
int ii = 0;
ii < NumberOfSegs; ++
ii) elossVector[
ii] = averageEloss;
310 const std::vector<DigitizerUtility::EnergyDepositUnit>& ionization_points,
311 std::vector<DigitizerUtility::SignalPoint>& collection_points)
const {
312 LogDebug(
"Phase2TrackerDigitizerAlgorithm") <<
"enter drift ";
314 collection_points.resize(ionization_points.size());
316 if (driftDir.
z() == 0.) {
317 LogWarning(
"Phase2TrackerDigitizerAlgorithm") <<
" pxlx: drift in z is zero ";
321 float TanLorenzAngleX,
327 TanLorenzAngleX = driftDir.
x();
328 TanLorenzAngleY = driftDir.
y();
329 dir_z = driftDir.
z();
330 CosLorenzAngleX = 1./
std::sqrt(1. + TanLorenzAngleX * TanLorenzAngleX);
331 CosLorenzAngleY = 1./
std::sqrt(1. + TanLorenzAngleY * TanLorenzAngleY);
334 TanLorenzAngleX = driftDir.
x();
335 TanLorenzAngleY = 0.;
336 dir_z = driftDir.
z();
337 CosLorenzAngleX = 1./
std::sqrt(1. + TanLorenzAngleX * TanLorenzAngleX);
338 CosLorenzAngleY = 1.;
344 LogDebug(
"Phase2TrackerDigitizerAlgorithm")
345 <<
" Lorentz Tan " << TanLorenzAngleX <<
" " << TanLorenzAngleY <<
" " 346 << CosLorenzAngleX <<
" " << CosLorenzAngleY <<
" " 347 << moduleThickness*TanLorenzAngleX <<
" " << driftDir;
355 for (
unsigned int i = 0;
i != ionization_points.size(); ++
i) {
356 float SegX, SegY, SegZ;
357 SegX = ionization_points[
i].
x();
358 SegY = ionization_points[
i].y();
359 SegZ = ionization_points[
i].z();
364 DriftDistance = moduleThickness/2. - (dir_z * SegZ);
366 if (DriftDistance < 0.)
368 else if (DriftDistance > moduleThickness)
369 DriftDistance = moduleThickness;
372 float XDriftDueToMagField = DriftDistance * TanLorenzAngleX;
373 float YDriftDueToMagField = DriftDistance * TanLorenzAngleY;
376 float CloudCenterX = SegX + XDriftDueToMagField;
377 float CloudCenterY = SegY + YDriftDueToMagField;
380 DriftLength =
std::sqrt(DriftDistance*DriftDistance +
381 XDriftDueToMagField*XDriftDueToMagField +
382 YDriftDueToMagField*YDriftDueToMagField);
386 Sigma =
std::sqrt(DriftLength/moduleThickness) * (
Sigma0 * moduleThickness/0.0300);
392 Sigma_x = Sigma / CosLorenzAngleX;
393 Sigma_y = Sigma / CosLorenzAngleY;
396 float energyOnCollector = ionization_points[
i].energy();
403 energyOnCollector = energyOnCollector *
exp(-1 * kValue * DriftDistance/moduleThickness);
406 LogDebug(
"Phase2TrackerDigitizerAlgorithm")
407 <<
"Dift DistanceZ = " << DriftDistance <<
" module thickness = " << moduleThickness
408 <<
" Start Energy = " << ionization_points[
i].energy() <<
" Energy after loss= " << energyOnCollector;
411 collection_points[
i] = sp;
419 const size_t hitIndex,
420 const unsigned int tofBin,
422 const std::vector<DigitizerUtility::SignalPoint>& collection_points) {
430 LogDebug(
"Phase2TrackerDigitizerAlgorithm")
431 <<
" enter induce_signal, " 432 << topol->
pitch().first <<
" " << topol->
pitch().second;
435 using hit_map_type = std::map<int, float, std::less<int> >;
436 hit_map_type hit_signal;
439 std::map<int, float, std::less<int> >
x,
y;
446 for (
auto const &
v : collection_points) {
448 float CloudCenterX =
v.position().x();
449 float CloudCenterY =
v.position().y();
452 float Charge =
v.amplitude();
454 LogDebug(
"Phase2TrackerDigitizerAlgorithm")
455 <<
" cloud " <<
v.position().x() <<
" " <<
v.position().y() <<
" " 456 <<
v.sigma_x() <<
" " <<
v.sigma_y() <<
" " <<
v.amplitude();
478 int IPixRightUpX =
int(floor( mp.
x()));
479 int IPixRightUpY =
int(floor( mp.
y()));
481 LogDebug(
"Phase2TrackerDigitizerAlgorithm") <<
" right-up " << PointRightUp <<
" " 482 << mp.
x() <<
" " << mp.
y() <<
" " 483 << IPixRightUpX <<
" " << IPixRightUpY ;
487 int IPixLeftDownX =
int(floor( mp.
x()));
488 int IPixLeftDownY =
int(floor( mp.
y()));
490 LogDebug(
"Phase2TrackerDigitizerAlgorithm") <<
" left-down " << PointLeftDown <<
" " 491 << mp.
x() <<
" " << mp.
y() <<
" " 492 << IPixLeftDownX <<
" " << IPixLeftDownY ;
496 int numRows = topol->
nrows();
498 IPixRightUpX = numRows > IPixRightUpX ? IPixRightUpX : numRows-1;
499 IPixRightUpY = numColumns > IPixRightUpY ? IPixRightUpY : numColumns-1;
500 IPixLeftDownX = 0 < IPixLeftDownX ? IPixLeftDownX : 0;
501 IPixLeftDownY = 0 < IPixLeftDownY ? IPixLeftDownY : 0;
508 for (ix = IPixLeftDownX; ix <= IPixRightUpX; ix++) {
509 float xUB, xLB, UpperBound, LowerBound;
513 if (ix == 0 || SigmaX==0.)
518 LowerBound = 1-
calcQ((xLB-CloudCenterX)/SigmaX);
521 if (ix == numRows-1 || SigmaX == 0.)
526 UpperBound = 1. -
calcQ((xUB-CloudCenterX)/SigmaX);
528 float TotalIntegrationRange = UpperBound - LowerBound;
529 x[ix] = TotalIntegrationRange;
534 for (iy = IPixLeftDownY; iy <= IPixRightUpY; iy++) {
535 float yUB, yLB, UpperBound, LowerBound;
537 if (iy == 0 || SigmaY==0.)
542 LowerBound = 1. -
calcQ((yLB-CloudCenterY)/SigmaY);
545 if (iy == numColumns-1 || SigmaY==0. )
550 UpperBound = 1. -
calcQ((yUB-CloudCenterY)/SigmaY);
553 float TotalIntegrationRange = UpperBound - LowerBound;
554 y[iy] = TotalIntegrationRange;
559 for (ix = IPixLeftDownX; ix <= IPixRightUpX; ix++) {
560 for (iy = IPixLeftDownY; iy <= IPixRightUpY; iy++) {
561 float ChargeFraction = Charge*x[ix]*y[iy];
562 if (ChargeFraction > 0.) {
566 hit_signal[
chan] += ChargeFraction;
573 LogDebug(
"Phase2TrackerDigitizerAlgorithm")
574 <<
" pixel " << ix <<
" " << iy <<
" - "<<
" " 575 << chan <<
" " << ChargeFraction<<
" " 576 << mp.
x() <<
" " << mp.
y() <<
" " 577 << lp.
x() <<
" " << lp.
y() <<
" " 579 ESum += ChargeFraction;
584 for (
auto const & hit_s : hit_signal) {
585 int chan = hit_s.first;
587 : DigitizerUtility::Amplitude( hit_s.second,
nullptr, hit_s.second) ) ;
596 float thePixelThreshold) {
602 int numRows = topol->
nrows();
605 for (
auto &
s : theSignal) {
607 if ((
s.second.ampl() + noise) < 0.)
615 for (
auto const &
s : theSignal) {
616 float signalInElectrons =
s.second.ampl();
617 std::pair<int,int> hitChan;
623 if (hitChan.first != 0) {
624 std::pair<int,int> XtalkPrev = std::pair<int,int>(hitChan.first-1, hitChan.second);
627 signalNew.insert(std::pair<int,DigitizerUtility::Amplitude>(chanXtalkPrev,
DigitizerUtility::Amplitude(signalInElectrons_Xtalk,
nullptr, -1.0)));
629 if (hitChan.first < (numRows-1)) {
630 std::pair<int,int> XtalkNext = std::pair<int,int>(hitChan.first+1, hitChan.second);
633 signalNew.insert(std::pair<int,DigitizerUtility::Amplitude>(chanXtalkNext,
DigitizerUtility::Amplitude(signalInElectrons_Xtalk,
nullptr, -1.0)));
636 for (
auto const &
l : signalNew) {
638 auto iter = theSignal.find(chan);
639 if (iter != theSignal.end()) {
640 theSignal[
chan] +=
l.second.ampl();
651 int numberOfPixels = numRows * numColumns;
652 std::map<int,float, std::less<int> > otherPixels;
653 std::map<int,float, std::less<int> >::iterator mapI;
661 LogDebug(
"Phase2TrackerDigitizerAlgorithm")
662 <<
" Add noisy pixels " << numRows <<
" " 665 << otherPixels.size() ;
668 for (mapI = otherPixels.begin(); mapI!= otherPixels.end(); mapI++) {
669 int iy = ((*mapI).first) / numRows;
670 int ix = ((*mapI).first) - (iy*numRows);
672 if( iy < 0 || iy > (numColumns-1) )
673 LogWarning(
"Phase2TrackerDigitizerAlgorithm") <<
" error in iy " << iy;
674 if( ix < 0 || ix > (numRows-1) )
675 LogWarning(
"Phase2TrackerDigitizerAlgorithm") <<
" error in ix " << ix;
680 LogDebug (
"Phase2TrackerDigitizerAlgorithm")
681 <<
" Storing noise = " << (*mapI).first <<
" " << (*mapI).second
682 <<
" " << ix <<
" " << iy <<
" " <<
chan ;
684 if (theSignal[chan] == 0) {
685 int noise =
int((*mapI).second);
704 float subdetEfficiency = 1.0;
709 unsigned int layerIndex = tTopo->
pxbLayer(detID);
712 unsigned int diskIndex = 2 * tTopo->
pxfDisk(detID) - tTopo->
pxfSide(detID);
716 LogDebug (
"Phase2TrackerDigitizerAlgorithm") <<
" enter pixel_inefficiency " << subdetEfficiency;
720 for (
auto &
s : theSignal) {
722 if( rand>subdetEfficiency ) {
752 const DetId& detId)
const {
780 dir_z = -(1 + alpha2_Barrel* Bfield.z()*Bfield.z() );
781 scale = (1 + alpha2_Barrel* Bfield.z()*Bfield.z() );
786 dir_z = -(1 + alpha2_Endcap* Bfield.z()*Bfield.z() );
787 scale = (1 + alpha2_Endcap* Bfield.z()*Bfield.z() );
794 alpha2 = lorentzAngle * lorentzAngle;
796 dir_x = -( lorentzAngle * Bfield.y() + alpha2 * Bfield.z()* Bfield.x() );
797 dir_y = +( lorentzAngle * Bfield.x() - alpha2 * Bfield.z()* Bfield.y() );
798 dir_z = -(1 + alpha2 * Bfield.z()*Bfield.z() );
799 scale = (1 + alpha2 * Bfield.z()*Bfield.z() );
804 LogDebug (
"Phase2TrackerDigitizerAlgorithm") <<
" The drift direction in local coordinate is " 805 << theDriftDirection ;
806 return theDriftDirection;
815 for (
auto &
s : theSignal) {
816 std::pair<int,int> ip;
835 int Dead_detID = det_m.getParameter<
int>(
"Dead_detID");
836 Module = det_m.getParameter<
std::string>(
"Module");
837 if (detid == Dead_detID){
848 for (
auto &
s : theSignal) {
849 std::pair<int,int> ip;
853 if (Module ==
"whole")
s.second.set(0.);
854 else if (Module ==
"tbmA" && ip.first >= 80 && ip.first <= 159)
s.second.set(0.);
855 else if (Module ==
"tbmB" && ip.first <= 79)
s.second.set(0.);
865 for (
size_t id = 0;
id < disabledModules.size();
id++) {
866 if (detID == disabledModules[
id].DetID) {
868 badmodule = disabledModules[
id];
880 for (
auto &
s : theSignal) {
887 std::vector<GlobalPixel> badrocpositions (0);
888 for (
unsigned int j = 0; j < 16; j++) {
891 for (
auto const &
p : path) {
896 badrocpositions.push_back(global);
904 for (
auto &
s : theSignal) {
905 std::pair<int,int> ip;
909 for (
auto const &
p : badrocpositions) {
911 if (
p.row ==
k.getParameter<
int>(
"row") &&
912 ip.first ==
k.getParameter<
int>(
"row") &&
913 std::abs(ip.second -
p.col) <
k.getParameter<
int>(
"col")) {
s.second.set(0.);}
922 auto& theSignal =
_signal[detId];
925 for(
const auto&
elem: accumulator) {
927 if(!inserted.second) {
928 throw cms::Exception(
"LogicError") <<
"Signal was already set for DetId " << detId;
934 std::map<int, DigitizerUtility::DigiSimInfo> & digi_map,
939 if (it ==
_signal.end())
return;
946 float theThresholdInE = 0.;
947 float theHIPThresholdInE = 0.;
976 for (
auto const &
s : theSignal) {
979 float signalInElectrons = sig_data.
ampl();
981 if (signalInElectrons >= theThresholdInE) {
985 info.
ot_bit = ( signalInElectrons > theHIPThresholdInE ?
true :
false);
988 float charge_frac =
l.first/signalInElectrons;
989 if (
l.first > -5.0) info.
simInfoList.push_back({charge_frac,
l.second.get()});
992 digi_map.insert({
s.first, info});
1002 const int max_limit = 10;
1013 if ( temp_signal > kink_point) temp_signal = std::floor((temp_signal - kink_point)/(
pow(2, dualslope_param-1))) + kink_point;
1016 LogInfo(
"Phase2TrackerDigitizerAlgorithm") <<
" DetId " << detID
1017 <<
" signal_in_elec " << signal_in_elec
1018 <<
" threshold " << threshold <<
" signal_above_thr " 1020 <<
" temp conversion " << std::floor((signal_in_elec-threshold)/
theElectronPerADC)+1
1021 <<
" signal after slope correction " << temp_signal
1022 <<
" signal_in_adc " << signal_in_adc;
1024 return signal_in_adc;
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 double theThresholdSmearing_Endcap
const float theElectronPerADC
virtual void add_noise(const Phase2TrackerGeomDetUnit *pixdet, float thePixelThreshold)
virtual void module_killing_DB(uint32_t detID)
const double theThresholdSmearing_Barrel
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
constexpr uint32_t rawId() const
get the raw id
virtual void initializeEvent(CLHEP::HepRandomEngine &eng)
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
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)
const std::unique_ptr< SiPixelGainCalibrationOfflineSimService > theSiPixelGainCalibrationService_
const bool use_deadmodule_DB_
const float theThresholdInE_Barrel
std::unique_ptr< CLHEP::RandGaussQ > gaussDistribution_
const Parameters DeadModules
Measurement2DPoint MeasurementPoint
Measurement points are two-dimensional by default.
Local3DPoint exitPoint() const
Exit point in the local Det frame.
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)
Phase2TrackerDigitizerAlgorithm(const edm::ParameterSet &conf_common, const edm::ParameterSet &conf_specific)
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
constexpr int subdetId() const
get the contents of the subdetector field (not cast into any detector's numbering enum) ...
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
std::vector< double > barrel_efficiencies
float pabs() const
fast and more accurate access to momentumAtEntry().mag()
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
def elem(elemtype, innerHTML='', html_class='', kwargs)
void loadAccumulator(unsigned int detId, const std::map< int, float > &accumulator)
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
std::unique_ptr< CLHEP::RandGaussQ > smearedThreshold_Barrel_
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_
const float theReadoutNoise
float energyLoss() const
The energy deposit in the PSimHit, in ???.
virtual int ncolumns() const =0
float getLorentzAngle(const uint32_t &) const
unsigned int pxfSide(const DetId &id) const
const RotationType & rotation() const
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 int thePhase2ReadoutMode
const std::unique_ptr< GaussianTailNoiseGenerator > theNoiser
const PositionType & position() const
T const * product() const
Local3DPoint entryPoint() const
Entry point in the local Det frame.
Power< A, B >::type pow(const A &a, const B &b)
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.
int convertSignalToAdc(uint32_t detID, float signal_in_elec, float threshold)
GlobalPixel toGlobal(const LocalPixel &loc) const
edm::ESHandle< SiPixelQuality > SiPixelBadModule_
std::vector< double > endcap_efficiencies