Back to home page

Project CMSSW displayed by LXR

 
 

    


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   // A list of 2d points
0014   class TimewalkCurve {
0015   public:
0016     // pset must contain "charge" and "delay" of type vdouble
0017     TimewalkCurve(const edm::ParameterSet& pset);
0018 
0019     // linear interpolation
0020     double operator()(double x) const;
0021 
0022   private:
0023     std::vector<double> x_;
0024     std::vector<double> y_;
0025   };
0026 
0027   // Holds the timewalk model data
0028   class TimewalkModel {
0029   public:
0030     TimewalkModel(const edm::ParameterSet& pset);
0031 
0032     // returns the delay for given input charge and threshold
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   // initialization that cannot be done in the constructor
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   // Addition four xtalk-related parameters to PixelDigitizerAlgorithm specific parameters initialized in Phase2TrackerDigitizerAlgorithm
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   // Timewalk parameters
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