1 #ifndef SiPixelDigitizerAlgorithm_h 2 #define SiPixelDigitizerAlgorithm_h 22 #include "boost/multi_array.hpp" 30 class HepRandomEngine;
65 void accumulateSimHits(
const std::vector<PSimHit>::const_iterator inputBegin,
66 const std::vector<PSimHit>::const_iterator inputEnd,
67 const size_t inputBeginGlobalIndex,
68 const unsigned int tofBin,
72 CLHEP::HepRandomEngine*);
74 std::vector<PixelDigi>& digis,
75 std::vector<PixelDigiSimLink>& simlinks,
77 CLHEP::HepRandomEngine*);
80 std::unique_ptr<PixelFEDChannelCollection> chooseScenario(
PileupMixingContent* puInfo, CLHEP::HepRandomEngine*);
83 void calculateInstlumiFactor(
const std::vector<PileupSummaryInfo>& ps,
85 void setSimAccumulator(
const std::map<uint32_t, std::map<int, int> >& signalMap);
86 std::unique_ptr<PixelFEDChannelCollection> chooseScenario(
const std::vector<PileupSummaryInfo>& ps,
87 CLHEP::HepRandomEngine* engine);
89 bool killBadFEDChannels()
const;
121 if (_frac[0] < -0.5) {
127 : _amp(amp), _frac(1, frac) {
130 if (_frac[0] < -0.5) {
133 _hitInfos.emplace_back(hitp, hitIndex, tofBin);
138 operator float()
const {
return _amp; }
139 float ampl()
const {
return _amp; }
141 const std::vector<SimHitInfoForLinks>&
hitInfos()
const {
return _hitInfos; }
147 if (other.
_frac[0] > -0.5) {
151 _frac.insert(_frac.end(), other.
_frac.begin(), other.
_frac.end());
188 float x()
const {
return _position.x(); }
189 float y()
const {
return _position.y(); }
190 float z()
const {
return _position.z(); }
210 : _pos(x, y), _time(t), _amplitude(
a), _sigma_x(sigma_x), _sigma_y(sigma_y), _hitp(
nullptr) {}
213 : _pos(x, y), _time(t), _amplitude(
a), _sigma_x(sigma_x), _sigma_y(sigma_y), _hitp(&hit) {}
216 float x()
const {
return _pos.x(); }
217 float y()
const {
return _pos.y(); }
220 float time()
const {
return _time; }
246 int NumberOfBarrelLayers,
255 double thePixelEfficiency[20];
256 double thePixelColEfficiency[20];
257 double thePixelChipEfficiency[20];
258 std::vector<double> theLadderEfficiency_BPix[20];
259 std::vector<double> theModuleEfficiency_BPix[20];
260 double theInnerEfficiency_FPix[20];
261 double theOuterEfficiency_FPix[20];
270 std::map<uint32_t, size_t>
iPU;
274 static const int rocIdMaskBits = 0x1F;
288 float thePixelPseudoRadDamage[20];
410 const std::unique_ptr<SiG4UniversalFluctuation>
fluctuate;
411 const std::unique_ptr<GaussianTailNoiseGenerator>
theNoiser;
414 const std::map<int, CalParameters, std::less<int> >
calmap;
418 std::map<int, CalParameters, std::less<int> > initCal()
const;
420 std::vector<EnergyDepositUnit>& ionization_points,
421 CLHEP::HepRandomEngine*)
const;
426 const std::vector<EnergyDepositUnit>& ionization_points,
427 std::vector<SignalPoint>& collection_points)
const;
428 void induce_signal(std::vector<PSimHit>::const_iterator inputBegin,
429 std::vector<PSimHit>::const_iterator inputEnd,
431 const size_t hitIndex,
432 const unsigned int tofBin,
434 const std::vector<SignalPoint>& collection_points);
439 int NumberOfSegments,
441 CLHEP::HepRandomEngine*)
const;
442 void add_noise(
const PixelGeomDetUnit* pixdet,
float thePixelThreshold, CLHEP::HepRandomEngine*);
443 void make_digis(
float thePixelThresholdInE,
446 std::vector<PixelDigi>& digis,
447 std::vector<PixelDigiSimLink>& simlinks,
452 CLHEP::HepRandomEngine*);
454 void pixel_inefficiency_db(uint32_t detID);
464 void module_killing_conf(
466 void module_killing_DB(uint32_t detID);
469 int PixelTempRewgt2D(
int id_gen,
int id_rewgt, array_2d& cluster);
471 std::map<
int,
float, std::less<int> >& hit_signal,
472 const size_t hitIndex,
473 const unsigned int tofBin,
476 signal_map_type& theSignal,
477 unsigned short int processType);
478 void printCluster(array_2d& cluster);
479 void printCluster(
float arr[
BXM2][
BYM2]);
494 return 0.5 * (1.0 - std::copysign(
std::sqrt(1.
f - unsafe_expf<4>(-
xx * (1.
f + 0.2733
f / (1.
f + 0.147
f *
xx)))), x));
const SiPixel2DTemplateDBObject * dbobject_den
void operator+=(const Amplitude &other)
Amplitude(float amp, const PSimHit *hitp, size_t hitIndex, unsigned int tofBin, float frac)
const float theThresholdInE_BPix_L2
signal_map_type::const_iterator signal_map_const_iterator
const bool use_deadmodule_DB_
edm::ESHandle< SiPixelFedCablingMap > map_
const float electronsPerVCAL
const double theThresholdSmearing_FPix
SignalPoint(float x, float y, float sigma_x, float sigma_y, float t, const PSimHit &hit, float a=1.0)
const std::unique_ptr< SiPixelGainCalibrationOfflineSimService > theSiPixelGainCalibrationService_
std::vector< float > track
const std::vector< float > & individualampl() const
EnergyDepositUnit(float energy, Local3DPoint position)
const float tanLorentzAnglePerTesla_FPix
PixelEfficiencies pixelEfficiencies_
const std::unique_ptr< SiG4UniversalFluctuation > fluctuate
const int theAdcFullScale
edm::ESHandle< SiPixelQualityProbabilities > scenarioProbabilityHandle
SignalPoint(float x, float y, float sigma_x, float sigma_y, float t, float a=1.0)
const LocalPoint & position() const
const double theThresholdSmearing_BPix_L1
LocalVector drift(const StripGeomDetUnit *, const MagneticField &, const SiStripLorentzAngle &)
const float theThresholdInE_FPix
std::unique_ptr< PixelFEDChannelCollection > PixelFEDChannelCollection_
const double theThresholdSmearing_BPix
std::vector< std::vector< double > > thePUEfficiency
const float electronsPerVCAL_Offset
const bool addThresholdSmearing
Amplitude(float amp, float frac)
const bool fluctuateCharge
std::map< uint32_t, size_t > iPU
edm::ESHandle< TrackerGeometry > geom_
double calcQ(float x) const
const float GeVperElectron
const double theThresholdSmearing_BPix_L2
edm::ESHandle< PixelFEDChannelCollectionMap > PixelFEDChannelCollectionMapHandle
const bool use_ineff_from_db_
const SiPixel2DTemplateDBObject * dbobject_num
const bool use_LorentzAngle_DB_
const PixelFEDChannelCollectionMap * quality_map
double theInstLumiScaleFactor
const Parameters DeadModules
boost::multi_array< float, 2 > array_2d
std::map< uint32_t, std::vector< double > > PixelGeomFactorsROCBigPixels
const float theTofUpperCut
SiPixelTemplate2D templ2D
const bool use_module_killing_
std::vector< double > pu_scale
const bool PrintTemplates
const float theThresholdInE_BPix
std::string siPixelQualityLabel
const int NumberOfEndcapDisks
signal_map_type::iterator signal_map_iterator
SignalPoint & set_amplitude(float amp)
EnergyDepositUnit(float energy, float x, float y, float z)
const float theThresholdInE_BPix_L1
edm::ESHandle< SiPixelLorentzAngle > SiPixelLorentzAngle_
const float electronsPerVCAL_L1_Offset
boost::multi_array< float, 2 > array_2d
const bool UseReweighting
const std::map< int, CalParameters, std::less< int > > calmap
const bool doMissCalibrate
const bool AddPixelInefficiency
const bool addChargeVCALSmearing
const std::unique_ptr< GaussianTailNoiseGenerator > theNoiser
const float theNoiseInElectrons
std::map< int, Amplitude, std::less< int > > signal_map_type
const float theOffsetSmearing
std::vector< float > _frac
const float electronsPerVCAL_L1
edm::ESHandle< SiPixelQuality > SiPixelBadModule_
std::map< uint32_t, std::vector< double > > PixelGeomFactorsROCStdPixels
std::unordered_map< std::string, PixelFEDChannelCollection > PixelFEDChannelCollectionMap
std::vector< bool > ydouble
GloballyPositioned< double > Frame
const float tanLorentzAnglePerTesla_BPix
std::vector< SiPixelTemplateStore2D > templateStores_
edm::ESHandle< SiPixelDynamicInefficiency > SiPixelDynamicInefficiency_
std::vector< bool > xdouble
std::vector< edm::ParameterSet > Parameters
const bool KillBadFEDChannels
const std::vector< SimHitInfoForLinks > & hitInfos() const
const float theGainSmearing
std::vector< SimHitInfoForLinks > _hitInfos
void operator+=(const float &)
static int position[264][3]
const float theReadoutNoise
std::map< uint32_t, double > ColGeomFactors
const float theTofLowerCut
std::map< uint32_t, double > PixelGeomFactors
std::map< uint32_t, double > ChipGeomFactors
const bool addNoisyPixels
const PixelAging pixelAging_
std::map< uint32_t, signal_map_type > signalMaps
const float theElectronPerADC
const bool makeDigiSimLinks_
const int NumberOfBarrelLayers