CMS 3D CMS Logo

Pixel3DDigitizerAlgorithm.h
Go to the documentation of this file.
1 #ifndef SimTracker_SiPhase2Digitizer_Pixel3DDigitizerAlgorithm_h
2 #define SimTracker_SiPhase2Digitizer_Pixel3DDigitizerAlgorithm_h
3 
4 //-------------------------------------------------------------
5 // class Pixel3DDigitizerAlgorithm
6 //
7 // Specialization of the tracker digitizer for the 3D pixel
8 // sensors placed at PXB-Layer1 (and possibly Layer2), and
9 // at PXF-Disk1 and Disk2
10 //
11 // Authors: Jordi Duarte-Campderros (CERN/IFCA)
12 // Clara Lasaosa Garcia (IFCA)
13 //--------------------------------------------------------------
14 
22 
23 // Data formats
25 
26 // system
27 #include <functional>
28 
30 public:
32  ~Pixel3DDigitizerAlgorithm() override;
33 
34  std::vector<digitizerUtility::SignalPoint> drift(
35  const PSimHit& hit,
36  const Phase2TrackerGeomDetUnit* pixdet,
37  const GlobalVector& bfield,
38  const std::vector<digitizerUtility::EnergyDepositUnit>& ionization_points) const override;
39  // overload drift
40  std::vector<digitizerUtility::SignalPoint> driftFor3DSensors(
41  const PSimHit& hit,
42  const Phase2TrackerGeomDetUnit* pixdet,
43  const GlobalVector& bfield,
44  const std::vector<digitizerUtility::EnergyDepositUnit>& ionization_points,
45  bool diffusion_activated) const;
46 
47  // New diffusion function: check implementation
48  std::vector<digitizerUtility::EnergyDepositUnit> diffusion(const LocalPoint& pos,
49  const float& ncarriers,
50  const std::function<LocalVector(float, float)>& u_drift,
51  const std::pair<float, float> pitches,
52  const float& thickness) const;
53  // Specific for 3D-pixel
54  void induce_signal(std::vector<PSimHit>::const_iterator inputBegin,
55  const PSimHit& hit,
56  const size_t hitIndex,
57  const size_t firstHitIndex,
58  const uint32_t tofBin,
59  const Phase2TrackerGeomDetUnit* pixdet,
60  const std::vector<digitizerUtility::SignalPoint>& collection_points) override;
61 
62 private:
63  // Radius of Column np and ohmic
64  const float np_column_radius_;
65  const float ohm_column_radius_;
66  // Gap of np column
67  const float np_column_gap_;
68 
73 
74  // Check if a carrier is inside the column: The point should
75  // be described in the pixel cell frame
76  const bool is_inside_n_column_(const LocalPoint& p, const float& sensor_thickness) const;
77  const bool is_inside_ohmic_column_(const LocalPoint& p, const std::pair<float, float>& pitch) const;
78 };
79 #endif
Pixel3DDigitizerAlgorithm(const edm::ParameterSet &conf, edm::ConsumesCollector iC)
Local3DVector LocalVector
Definition: LocalVector.h:12
const edm::ESGetToken< SiPixelFedCablingMap, SiPixelFedCablingMapRcd > fedCablingMapToken_
std::vector< digitizerUtility::EnergyDepositUnit > diffusion(const LocalPoint &pos, const float &ncarriers, const std::function< LocalVector(float, float)> &u_drift, const std::pair< float, float > pitches, const float &thickness) const
std::vector< digitizerUtility::SignalPoint > driftFor3DSensors(const PSimHit &hit, const Phase2TrackerGeomDetUnit *pixdet, const GlobalVector &bfield, const std::vector< digitizerUtility::EnergyDepositUnit > &ionization_points, bool diffusion_activated) const
edm::ESGetToken< SiPixelLorentzAngle, SiPixelLorentzAngleSimRcd > siPixelLorentzAngleToken_
std::vector< digitizerUtility::SignalPoint > drift(const PSimHit &hit, const Phase2TrackerGeomDetUnit *pixdet, const GlobalVector &bfield, const std::vector< digitizerUtility::EnergyDepositUnit > &ionization_points) const override
const edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecord > geomToken_
const bool is_inside_n_column_(const LocalPoint &p, const float &sensor_thickness) const
const bool is_inside_ohmic_column_(const LocalPoint &p, const std::pair< float, float > &pitch) const
edm::ESGetToken< SiPixelQuality, SiPixelQualityRcd > siPixelBadModuleToken_
void induce_signal(std::vector< PSimHit >::const_iterator inputBegin, const PSimHit &hit, const size_t hitIndex, const size_t firstHitIndex, const uint32_t tofBin, const Phase2TrackerGeomDetUnit *pixdet, const std::vector< digitizerUtility::SignalPoint > &collection_points) override