File indexing completed on 2024-04-06 12:30:55
0001 #ifndef _SimTracker_SiPhase2Digitizer_PixelDigitizerAlgorithm_h
0002 #define _SimTracker_SiPhase2Digitizer_PixelDigitizerAlgorithm_h
0003
0004 #include "CondFormats/SiPixelObjects/interface/GlobalPixel.h"
0005 #include "CondFormats/DataRecord/interface/SiPixelQualityRcd.h"
0006 #include "CondFormats/DataRecord/interface/SiPixelLorentzAngleSimRcd.h"
0007 #include "FWCore/Utilities/interface/ESGetToken.h"
0008 #include "Geometry/Records/interface/TrackerDigiGeometryRecord.h"
0009 #include "SimTracker/SiPhase2Digitizer/plugins/Phase2TrackerDigitizerAlgorithm.h"
0010
0011 class PixelDigitizerAlgorithm : public Phase2TrackerDigitizerAlgorithm {
0012 private:
0013
0014 class TimewalkCurve {
0015 public:
0016
0017 TimewalkCurve(const edm::ParameterSet& pset);
0018
0019
0020 double operator()(double x) const;
0021
0022 private:
0023 std::vector<double> x_;
0024 std::vector<double> y_;
0025 };
0026
0027
0028 class TimewalkModel {
0029 public:
0030 TimewalkModel(const edm::ParameterSet& pset);
0031
0032
0033 double operator()(double q_in, double q_threshold) const;
0034
0035 private:
0036 std::size_t find_closest_index(const std::vector<double>& vec, double value) const;
0037
0038 std::vector<double> threshold_values;
0039 std::vector<TimewalkCurve> curves;
0040 };
0041
0042 public:
0043 PixelDigitizerAlgorithm(const edm::ParameterSet& conf, edm::ConsumesCollector iC);
0044 ~PixelDigitizerAlgorithm() override;
0045
0046
0047 void init(const edm::EventSetup& es) override;
0048
0049 bool select_hit(const PSimHit& hit, double tCorr, double& sigScale) const override;
0050 bool isAboveThreshold(const digitizerUtility::SimHitInfo* hitInfo, float charge, float thr) const override;
0051 void add_cross_talk(const Phase2TrackerGeomDetUnit* pixdet) override;
0052 void module_killing_DB(const Phase2TrackerGeomDetUnit* pixdet) override;
0053
0054
0055 double odd_row_interchannelCoupling_next_row_;
0056 double even_row_interchannelCoupling_next_row_;
0057 double odd_column_interchannelCoupling_next_column_;
0058 double even_column_interchannelCoupling_next_column_;
0059
0060
0061 bool apply_timewalk_;
0062 const TimewalkModel timewalk_model_;
0063
0064 edm::ESGetToken<SiPixelQuality, SiPixelQualityRcd> siPixelBadModuleToken_;
0065 edm::ESGetToken<SiPixelLorentzAngle, SiPixelLorentzAngleSimRcd> siPixelLorentzAngleToken_;
0066 const edm::ESGetToken<TrackerGeometry, TrackerDigiGeometryRecord> geomToken_;
0067 };
0068 #endif