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")),
85 doDigitalReadout(conf_specific.getParameter<
bool>(
"DigitalReadout")),
92 theElectronPerADC(conf_specific.getParameter<double>(
"ElectronPerAdc")),
95 theAdcFullScale(conf_specific.getParameter<
int>(
"AdcFullScale")),
99 theNoiseInElectrons(conf_specific.getParameter<double>(
"NoiseInElectrons")),
102 theReadoutNoise(conf_specific.getParameter<double>(
"ReadoutNoiseInElec")),
107 theThresholdInE_Endcap(conf_specific.getParameter<double>(
"ThresholdInElectrons_Endcap")),
108 theThresholdInE_Barrel(conf_specific.getParameter<double>(
"ThresholdInElectrons_Barrel")),
111 theThresholdSmearing_Endcap(conf_specific.getParameter<double>(
"ThresholdSmearing_Endcap")),
112 theThresholdSmearing_Barrel(conf_specific.getParameter<double>(
"ThresholdSmearing_Barrel")),
115 theHIPThresholdInE_Endcap(conf_specific.getParameter<double>(
"HIPThresholdInElectrons_Endcap")),
116 theHIPThresholdInE_Barrel(conf_specific.getParameter<double>(
"HIPThresholdInElectrons_Barrel")),
119 theTofLowerCut(conf_specific.getParameter<double>(
"TofLowerCut")),
120 theTofUpperCut(conf_specific.getParameter<double>(
"TofUpperCut")),
123 tanLorentzAnglePerTesla_Endcap(use_LorentzAngle_DB_ ? 0.0 : conf_specific.getParameter<double>(
"TanLorentzAnglePerTesla_Endcap")),
124 tanLorentzAnglePerTesla_Barrel(use_LorentzAngle_DB_ ? 0.0 : conf_specific.getParameter<double>(
"TanLorentzAnglePerTesla_Barrel")),
127 addNoise(conf_specific.getParameter<
bool>(
"AddNoise")),
130 addNoisyPixels(conf_specific.getParameter<
bool>(
"AddNoisyPixels")),
133 fluctuateCharge(conf_specific.getUntrackedParameter<
bool>(
"FluctuateCharge",
true)),
139 addThresholdSmearing(conf_specific.getParameter<
bool>(
"AddThresholdSmearing")),
142 pseudoRadDamage(conf_specific.exists(
"PseudoRadDamage")?conf_specific.getParameter<double>(
"PseudoRadDamage"):double(0.0)),
143 pseudoRadDamageRadius(conf_specific.exists(
"PseudoRadDamageRadius")?conf_specific.getParameter<double>(
"PseudoRadDamageRadius"):double(0.0)),
148 tMax(conf_common.getParameter<double>(
"DeltaProductionCut")),
150 badPixels(conf_specific.getParameter<
std::vector<
edm::
ParameterSet> >(
"CellsToKill")),
154 subdetEfficiencies_(conf_specific)
157 LogInfo(
"Phase2TrackerDigitizerAlgorithm") <<
"Phase2TrackerDigitizerAlgorithm constructed\n" 158 <<
"Configuration parameters:\n" 159 <<
"Threshold/Gain = " 160 <<
"threshold in electron Endcap = " 162 <<
"\nthreshold in electron Barrel = " 165 <<
" The delta cut-off is set to " <<
tMax 170 LogDebug(
"Phase2TrackerDigitizerAlgorithm") <<
"Phase2TrackerDigitizerAlgorithm deleted";
174 barrel_efficiencies = conf.
getParameter< std::vector<double> >(
"EfficiencyFactors_Barrel");
175 endcap_efficiencies = conf.
getParameter< std::vector<double> >(
"EfficiencyFactors_Endcap");
184 std::vector<DigitizerUtility::EnergyDepositUnit>& ionization_points)
const {
186 const float SegmentLength = 0.0010;
193 float length = direction.
mag();
195 int NumberOfSegments =
int (length / SegmentLength);
196 if (NumberOfSegments < 1) NumberOfSegments = 1;
197 LogDebug(
"Phase2TrackerDigitizerAlgorithm")
198 <<
"enter primary_ionzation " << NumberOfSegments
204 <<
" " << hit.
pabs();
206 std::vector<float> elossVector;
207 elossVector.reserve(NumberOfSegments);
212 float momentum = hit.
pabs();
214 fluctuateEloss(pid, momentum, eLoss, length, NumberOfSegments, elossVector);
216 ionization_points.reserve(NumberOfSegments);
219 for (
int i = 0;
i != NumberOfSegments; ++
i) {
228 ionization_points.push_back(edu);
229 LogDebug(
"Phase2TrackerDigitizerAlgorithm")
230 <<
i <<
" " << ionization_points[
i].x() <<
" " 231 << ionization_points[
i].y() <<
" " 232 << ionization_points[
i].z() <<
" " 233 << ionization_points[
i].energy();
243 float particleMomentum,
247 std::vector<float> & elossVector)
const {
254 double particleMass = 139.6;
257 if (pid == 11) particleMass = 0.511;
258 else if (pid == 13) particleMass = 105.7;
259 else if (pid == 321) particleMass = 493.7;
260 else if (pid == 2212) particleMass = 938.3;
263 float segmentLength = length/NumberOfSegs;
268 double segmentEloss = (1000. * eloss)/NumberOfSegs;
269 for (
int i = 0;
i < NumberOfSegs; ++
i) {
275 double deltaCutoff =
tMax;
276 de =
fluctuate->SampleFluctuations(static_cast<double>(particleMomentum*1000.),
277 particleMass, deltaCutoff,
278 static_cast<double>(segmentLength*10.),
281 elossVector.push_back(de);
286 float ratio = eloss/sum;
287 for (
int ii = 0;
ii < NumberOfSegs; ++
ii) elossVector[
ii] = ratio*elossVector[
ii];
290 float averageEloss = eloss/NumberOfSegs;
291 for (
int ii = 0;
ii < NumberOfSegs; ++
ii) elossVector[
ii] = averageEloss;
305 const std::vector<DigitizerUtility::EnergyDepositUnit>& ionization_points,
306 std::vector<DigitizerUtility::SignalPoint>& collection_points)
const {
307 LogDebug(
"Phase2TrackerDigitizerAlgorithm") <<
"enter drift ";
309 collection_points.resize(ionization_points.size());
311 if (driftDir.
z() == 0.) {
312 LogWarning(
"Phase2TrackerDigitizerAlgorithm") <<
" pxlx: drift in z is zero ";
316 float TanLorenzAngleX,
322 TanLorenzAngleX = driftDir.
x();
323 TanLorenzAngleY = driftDir.
y();
324 dir_z = driftDir.
z();
325 CosLorenzAngleX = 1./
std::sqrt(1. + TanLorenzAngleX * TanLorenzAngleX);
326 CosLorenzAngleY = 1./
std::sqrt(1. + TanLorenzAngleY * TanLorenzAngleY);
329 TanLorenzAngleX = driftDir.
x();
330 TanLorenzAngleY = 0.;
331 dir_z = driftDir.
z();
332 CosLorenzAngleX = 1./
std::sqrt(1. + TanLorenzAngleX * TanLorenzAngleX);
333 CosLorenzAngleY = 1.;
339 LogDebug(
"Phase2TrackerDigitizerAlgorithm")
340 <<
" Lorentz Tan " << TanLorenzAngleX <<
" " << TanLorenzAngleY <<
" " 341 << CosLorenzAngleX <<
" " << CosLorenzAngleY <<
" " 342 << moduleThickness*TanLorenzAngleX <<
" " << driftDir;
350 for (
unsigned int i = 0;
i != ionization_points.size(); ++
i) {
351 float SegX, SegY, SegZ;
352 SegX = ionization_points[
i].
x();
353 SegY = ionization_points[
i].y();
354 SegZ = ionization_points[
i].z();
359 DriftDistance = moduleThickness/2. - (dir_z * SegZ);
361 if (DriftDistance < 0.)
363 else if (DriftDistance > moduleThickness)
364 DriftDistance = moduleThickness;
367 float XDriftDueToMagField = DriftDistance * TanLorenzAngleX;
368 float YDriftDueToMagField = DriftDistance * TanLorenzAngleY;
371 float CloudCenterX = SegX + XDriftDueToMagField;
372 float CloudCenterY = SegY + YDriftDueToMagField;
375 DriftLength =
std::sqrt(DriftDistance*DriftDistance +
376 XDriftDueToMagField*XDriftDueToMagField +
377 YDriftDueToMagField*YDriftDueToMagField);
381 Sigma =
std::sqrt(DriftLength/moduleThickness) * (
Sigma0 * moduleThickness/0.0300);
387 Sigma_x = Sigma / CosLorenzAngleX;
388 Sigma_y = Sigma / CosLorenzAngleY;
391 float energyOnCollector = ionization_points[
i].energy();
398 energyOnCollector = energyOnCollector *
exp(-1 * kValue * DriftDistance/moduleThickness);
401 LogDebug(
"Phase2TrackerDigitizerAlgorithm")
402 <<
"Dift DistanceZ = " << DriftDistance <<
" module thickness = " << moduleThickness
403 <<
" Start Energy = " << ionization_points[
i].energy() <<
" Energy after loss= " << energyOnCollector;
406 collection_points[
i] = sp;
414 const size_t hitIndex,
415 const unsigned int tofBin,
417 const std::vector<DigitizerUtility::SignalPoint>& collection_points) {
425 LogDebug(
"Phase2TrackerDigitizerAlgorithm")
426 <<
" enter induce_signal, " 427 << topol->
pitch().first <<
" " << topol->
pitch().second;
430 using hit_map_type = std::map<int, float, std::less<int> >;
431 hit_map_type hit_signal;
434 std::map<int, float, std::less<int> >
x,
y;
441 for (
auto const &
v : collection_points) {
443 float CloudCenterX =
v.position().x();
444 float CloudCenterY =
v.position().y();
447 float Charge =
v.amplitude();
449 LogDebug(
"Phase2TrackerDigitizerAlgorithm")
450 <<
" cloud " <<
v.position().x() <<
" " <<
v.position().y() <<
" " 451 <<
v.sigma_x() <<
" " <<
v.sigma_y() <<
" " <<
v.amplitude();
473 int IPixRightUpX =
int(floor( mp.
x()));
474 int IPixRightUpY =
int(floor( mp.
y()));
476 LogDebug(
"Phase2TrackerDigitizerAlgorithm") <<
" right-up " << PointRightUp <<
" " 477 << mp.
x() <<
" " << mp.
y() <<
" " 478 << IPixRightUpX <<
" " << IPixRightUpY ;
482 int IPixLeftDownX =
int(floor( mp.
x()));
483 int IPixLeftDownY =
int(floor( mp.
y()));
485 LogDebug(
"Phase2TrackerDigitizerAlgorithm") <<
" left-down " << PointLeftDown <<
" " 486 << mp.
x() <<
" " << mp.
y() <<
" " 487 << IPixLeftDownX <<
" " << IPixLeftDownY ;
491 int numRows = topol->
nrows();
493 IPixRightUpX = numRows > IPixRightUpX ? IPixRightUpX : numRows-1;
494 IPixRightUpY = numColumns > IPixRightUpY ? IPixRightUpY : numColumns-1;
495 IPixLeftDownX = 0 < IPixLeftDownX ? IPixLeftDownX : 0;
496 IPixLeftDownY = 0 < IPixLeftDownY ? IPixLeftDownY : 0;
503 for (ix = IPixLeftDownX; ix <= IPixRightUpX; ix++) {
504 float xUB, xLB, UpperBound, LowerBound;
508 if (ix == 0 || SigmaX==0.)
513 LowerBound = 1-
calcQ((xLB-CloudCenterX)/SigmaX);
516 if (ix == numRows-1 || SigmaX == 0.)
521 UpperBound = 1. -
calcQ((xUB-CloudCenterX)/SigmaX);
523 float TotalIntegrationRange = UpperBound - LowerBound;
524 x[ix] = TotalIntegrationRange;
529 for (iy = IPixLeftDownY; iy <= IPixRightUpY; iy++) {
530 float yUB, yLB, UpperBound, LowerBound;
532 if (iy == 0 || SigmaY==0.)
537 LowerBound = 1. -
calcQ((yLB-CloudCenterY)/SigmaY);
540 if (iy == numColumns-1 || SigmaY==0. )
545 UpperBound = 1. -
calcQ((yUB-CloudCenterY)/SigmaY);
548 float TotalIntegrationRange = UpperBound - LowerBound;
549 y[iy] = TotalIntegrationRange;
554 for (ix = IPixLeftDownX; ix <= IPixRightUpX; ix++) {
555 for (iy = IPixLeftDownY; iy <= IPixRightUpY; iy++) {
556 float ChargeFraction = Charge*x[ix]*y[iy];
557 if (ChargeFraction > 0.) {
561 hit_signal[
chan] += ChargeFraction;
568 LogDebug(
"Phase2TrackerDigitizerAlgorithm")
569 <<
" pixel " << ix <<
" " << iy <<
" - "<<
" " 570 << chan <<
" " << ChargeFraction<<
" " 571 << mp.
x() <<
" " << mp.
y() <<
" " 572 << lp.
x() <<
" " << lp.
y() <<
" " 574 ESum += ChargeFraction;
579 for (
auto const & hit_s : hit_signal) {
580 int chan = hit_s.first;
582 : DigitizerUtility::Amplitude( hit_s.second,
nullptr, hit_s.second) ) ;
591 float thePixelThreshold) {
597 int numRows = topol->
nrows();
600 for (
auto &
s : theSignal) {
602 if ((
s.second.ampl() + noise) < 0.)
610 for (
auto const &
s : theSignal) {
611 float signalInElectrons =
s.second.ampl();
612 std::pair<int,int> hitChan;
618 if (hitChan.first != 0) {
619 std::pair<int,int> XtalkPrev = std::pair<int,int>(hitChan.first-1, hitChan.second);
622 signalNew.insert(std::pair<int,DigitizerUtility::Amplitude>(chanXtalkPrev,
DigitizerUtility::Amplitude(signalInElectrons_Xtalk,
nullptr, -1.0)));
624 if (hitChan.first < (numRows-1)) {
625 std::pair<int,int> XtalkNext = std::pair<int,int>(hitChan.first+1, hitChan.second);
628 signalNew.insert(std::pair<int,DigitizerUtility::Amplitude>(chanXtalkNext,
DigitizerUtility::Amplitude(signalInElectrons_Xtalk,
nullptr, -1.0)));
631 for (
auto const &
l : signalNew) {
633 auto iter = theSignal.find(chan);
634 if (iter != theSignal.end()) {
635 theSignal[
chan] +=
l.second.ampl();
646 int numberOfPixels = numRows * numColumns;
647 std::map<int,float, std::less<int> > otherPixels;
648 std::map<int,float, std::less<int> >::iterator mapI;
656 LogDebug(
"Phase2TrackerDigitizerAlgorithm")
657 <<
" Add noisy pixels " << numRows <<
" " 660 << otherPixels.size() ;
663 for (mapI = otherPixels.begin(); mapI!= otherPixels.end(); mapI++) {
664 int iy = ((*mapI).first) / numRows;
665 int ix = ((*mapI).first) - (iy*numRows);
667 if( iy < 0 || iy > (numColumns-1) )
668 LogWarning(
"Phase2TrackerDigitizerAlgorithm") <<
" error in iy " << iy;
669 if( ix < 0 || ix > (numRows-1) )
670 LogWarning(
"Phase2TrackerDigitizerAlgorithm") <<
" error in ix " << ix;
675 LogDebug (
"Phase2TrackerDigitizerAlgorithm")
676 <<
" Storing noise = " << (*mapI).first <<
" " << (*mapI).second
677 <<
" " << ix <<
" " << iy <<
" " <<
chan ;
679 if (theSignal[chan] == 0) {
680 int noise =
int((*mapI).second);
699 float subdetEfficiency = 1.0;
704 unsigned int layerIndex = tTopo->
pxbLayer(detID);
707 unsigned int diskIndex = 2 * tTopo->
pxfDisk(detID) - tTopo->
pxfSide(detID);
711 LogDebug (
"Phase2TrackerDigitizerAlgorithm") <<
" enter pixel_inefficiency " << subdetEfficiency;
715 for (
auto &
s : theSignal) {
717 if( rand>subdetEfficiency ) {
747 const DetId& detId)
const {
775 dir_z = -(1 + alpha2_Barrel* Bfield.z()*Bfield.z() );
776 scale = (1 + alpha2_Barrel* Bfield.z()*Bfield.z() );
781 dir_z = -(1 + alpha2_Endcap* Bfield.z()*Bfield.z() );
782 scale = (1 + alpha2_Endcap* Bfield.z()*Bfield.z() );
789 alpha2 = lorentzAngle * lorentzAngle;
791 dir_x = -( lorentzAngle * Bfield.y() + alpha2 * Bfield.z()* Bfield.x() );
792 dir_y = +( lorentzAngle * Bfield.x() - alpha2 * Bfield.z()* Bfield.y() );
793 dir_z = -(1 + alpha2 * Bfield.z()*Bfield.z() );
794 scale = (1 + alpha2 * Bfield.z()*Bfield.z() );
799 LogDebug (
"Phase2TrackerDigitizerAlgorithm") <<
" The drift direction in local coordinate is " 800 << theDriftDirection ;
801 return theDriftDirection;
810 for (
auto &
s : theSignal) {
811 std::pair<int,int> ip;
830 int Dead_detID = det_m.getParameter<
int>(
"Dead_detID");
831 Module = det_m.getParameter<
std::string>(
"Module");
832 if (detid == Dead_detID){
843 for (
auto &
s : theSignal) {
844 std::pair<int,int> ip;
848 if (Module ==
"whole")
s.second.set(0.);
849 else if (Module ==
"tbmA" && ip.first >= 80 && ip.first <= 159)
s.second.set(0.);
850 else if (Module ==
"tbmB" && ip.first <= 79)
s.second.set(0.);
860 for (
size_t id = 0;
id < disabledModules.size();
id++) {
861 if (detID == disabledModules[
id].DetID) {
863 badmodule = disabledModules[
id];
875 for (
auto &
s : theSignal) {
882 std::vector<GlobalPixel> badrocpositions (0);
883 for (
unsigned int j = 0; j < 16; j++) {
886 for (
auto const &
p : path) {
891 badrocpositions.push_back(global);
899 for (
auto &
s : theSignal) {
900 std::pair<int,int> ip;
904 for (
auto const &
p : badrocpositions) {
906 if (
p.row ==
k.getParameter<
int>(
"row") &&
907 ip.first ==
k.getParameter<
int>(
"row") &&
908 std::abs(ip.second -
p.col) <
k.getParameter<
int>(
"col")) {
s.second.set(0.);}
917 auto& theSignal =
_signal[detId];
920 for(
const auto&
elem: accumulator) {
922 if(!inserted.second) {
923 throw cms::Exception(
"LogicError") <<
"Signal was already set for DetId " << detId;
929 std::map<int, DigitizerUtility::DigiSimInfo> & digi_map,
934 if (it ==
_signal.end())
return;
941 float theThresholdInE = 0.;
942 float theHIPThresholdInE = 0.;
971 for (
auto const &
s : theSignal) {
974 float signalInElectrons = sig_data.
ampl();
976 if (signalInElectrons >= theThresholdInE) {
981 info.
ot_bit = ( signalInElectrons > theHIPThresholdInE ?
true :
false);
984 float charge_frac =
l.first/signalInElectrons;
985 if (
l.first > -5.0) info.
simInfoList.push_back({charge_frac,
l.second.get()});
988 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 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
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)
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 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