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) ) ;
598 for (
auto &
s : theSignal) {
600 if ((
s.second.ampl() + noise) < 0.)
616 int numRows = topol->
nrows();
618 for (
auto &
s : theSignal) {
619 float signalInElectrons =
s.second.ampl();
621 std::pair<int,int> hitChan;
627 s.second.set(signalInElectrons-signalInElectrons_Xtalk);
629 if (hitChan.first != 0) {
630 auto XtalkPrev = std::make_pair(hitChan.first-1, hitChan.second);
633 signalNew.emplace(chanXtalkPrev,
636 if (hitChan.first < (numRows-1)) {
637 auto XtalkNext = std::make_pair(hitChan.first+1, hitChan.second);
640 signalNew.emplace(chanXtalkNext,
644 for (
auto const &
l : signalNew) {
646 auto iter = theSignal.find(chan);
647 if (iter != theSignal.end()) {
648 theSignal[
chan] +=
l.second.ampl();
665 int numRows = topol->
nrows();
667 int numberOfPixels = numRows * numColumns;
668 std::map<int,float, std::less<int> > otherPixels;
669 std::map<int,float, std::less<int> >::iterator mapI;
677 LogDebug(
"Phase2TrackerDigitizerAlgorithm")
678 <<
" Add noisy pixels " << numRows <<
" " 681 << otherPixels.size() ;
684 for (mapI = otherPixels.begin(); mapI!= otherPixels.end(); mapI++) {
685 int iy = ((*mapI).first) / numRows;
686 int ix = ((*mapI).first) - (iy*numRows);
688 if( iy < 0 || iy > (numColumns-1) )
689 LogWarning(
"Phase2TrackerDigitizerAlgorithm") <<
" error in iy " << iy;
690 if( ix < 0 || ix > (numRows-1) )
691 LogWarning(
"Phase2TrackerDigitizerAlgorithm") <<
" error in ix " << ix;
696 LogDebug (
"Phase2TrackerDigitizerAlgorithm")
697 <<
" Storing noise = " << (*mapI).first <<
" " << (*mapI).second
698 <<
" " << ix <<
" " << iy <<
" " <<
chan ;
700 if (theSignal[chan] == 0) {
701 int noise =
int((*mapI).second);
719 float subdetEfficiency = 1.0;
724 unsigned int layerIndex = tTopo->
pxbLayer(detID);
727 unsigned int diskIndex = 2 * tTopo->
pxfDisk(detID) - tTopo->
pxfSide(detID);
731 LogDebug (
"Phase2TrackerDigitizerAlgorithm") <<
" enter pixel_inefficiency " << subdetEfficiency;
735 for (
auto &
s : theSignal) {
737 if( rand>subdetEfficiency ) {
767 const DetId& detId)
const {
795 dir_z = -(1 + alpha2_Barrel* Bfield.z()*Bfield.z() );
796 scale = (1 + alpha2_Barrel* Bfield.z()*Bfield.z() );
801 dir_z = -(1 + alpha2_Endcap* Bfield.z()*Bfield.z() );
802 scale = (1 + alpha2_Endcap* Bfield.z()*Bfield.z() );
809 alpha2 = lorentzAngle * lorentzAngle;
811 dir_x = -( lorentzAngle * Bfield.y() + alpha2 * Bfield.z()* Bfield.x() );
812 dir_y = +( lorentzAngle * Bfield.x() - alpha2 * Bfield.z()* Bfield.y() );
813 dir_z = -(1 + alpha2 * Bfield.z()*Bfield.z() );
814 scale = (1 + alpha2 * Bfield.z()*Bfield.z() );
819 LogDebug (
"Phase2TrackerDigitizerAlgorithm") <<
" The drift direction in local coordinate is " 820 << theDriftDirection ;
821 return theDriftDirection;
830 for (
auto &
s : theSignal) {
831 std::pair<int,int> ip;
850 int Dead_detID = det_m.getParameter<
int>(
"Dead_detID");
851 Module = det_m.getParameter<
std::string>(
"Module");
852 if (detid == Dead_detID){
863 for (
auto &
s : theSignal) {
864 std::pair<int,int> ip;
868 if (Module ==
"whole")
s.second.set(0.);
869 else if (Module ==
"tbmA" && ip.first >= 80 && ip.first <= 159)
s.second.set(0.);
870 else if (Module ==
"tbmB" && ip.first <= 79)
s.second.set(0.);
880 for (
size_t id = 0;
id < disabledModules.size();
id++) {
881 if (detID == disabledModules[
id].DetID) {
883 badmodule = disabledModules[
id];
895 for (
auto &
s : theSignal) {
902 std::vector<GlobalPixel> badrocpositions (0);
903 for (
unsigned int j = 0; j < 16; j++) {
906 for (
auto const &
p : path) {
911 badrocpositions.push_back(global);
919 for (
auto &
s : theSignal) {
920 std::pair<int,int> ip;
924 for (
auto const &
p : badrocpositions) {
926 if (
p.row ==
k.getParameter<
int>(
"row") &&
927 ip.first ==
k.getParameter<
int>(
"row") &&
928 std::abs(ip.second -
p.col) <
k.getParameter<
int>(
"col")) {
s.second.set(0.);}
937 auto& theSignal =
_signal[detId];
940 for(
const auto&
elem: accumulator) {
942 if(!inserted.second) {
943 throw cms::Exception(
"LogicError") <<
"Signal was already set for DetId " << detId;
949 std::map<int, DigitizerUtility::DigiSimInfo> & digi_map,
954 if (it ==
_signal.end())
return;
961 float theThresholdInE = 0.;
962 float theHIPThresholdInE = 0.;
994 for (
auto const &
s : theSignal) {
997 float signalInElectrons = sig_data.
ampl();
999 if (signalInElectrons >= theThresholdInE) {
1003 info.
ot_bit = ( signalInElectrons > theHIPThresholdInE ?
true :
false);
1006 float charge_frac =
l.first/signalInElectrons;
1007 if (
l.first > -5.0) info.
simInfoList.push_back({charge_frac,
l.second.get()});
1010 digi_map.insert({
s.first, info});
1020 const int max_limit = 10;
1031 if ( temp_signal > kink_point) temp_signal = std::floor((temp_signal - kink_point)/(
pow(2, dualslope_param-1))) + kink_point;
1034 LogInfo(
"Phase2TrackerDigitizerAlgorithm") <<
" DetId " << detID
1035 <<
" signal_in_elec " << signal_in_elec
1036 <<
" threshold " << threshold <<
" signal_above_thr " 1038 <<
" temp conversion " << std::floor((signal_in_elec-threshold)/
theElectronPerADC)+1
1039 <<
" signal after slope correction " << temp_signal
1040 <<
" signal_in_adc " << signal_in_adc;
1042 return signal_in_adc;
void primary_ionization(const PSimHit &hit, std::vector< DigitizerUtility::EnergyDepositUnit > &ionization_points) const
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 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
virtual void add_cross_talk(const Phase2TrackerGeomDetUnit *pixdet)
bool IsRocBad(const uint32_t &detid, const short &rocNb) const
const Plane & surface() const
The nominal surface of the GeomDet.
virtual void add_noise(const Phase2TrackerGeomDetUnit *pixdet)
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_
virtual void add_noisy_cells(const Phase2TrackerGeomDetUnit *pixdet, float thePixelThreshold)
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
constexpr int adc(sample_type sample)
get the ADC sample (12 bits)
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