HerdSoftware  0.4.0
ScdDriftDiffusionAlgo.h
Go to the documentation of this file.
1 
2 /*
3  * ScdDriftDiffusionAlgo.h
4  *
5  * Created on: 23 Sep 2020
6  * Author: Valerio Formato
7  */
8 
9 #ifndef HERD_SCDDRIFTDIFFUSIONALGO_H_
10 #define HERD_SCDDRIFTDIFFUSIONALGO_H_
11 
12 // HerdSoftware headers
16 
17 // EventAnalysis headers
18 #include "algorithm/Algorithm.h"
19 
20 namespace Herd {
21 
22 // clang-format off
77 // clang-format on
78 
79 namespace ScdDigitizationTools {
80 class ScdChargePacket;
81 }
82 
83 class ScdDriftDiffusionAlgo : public EA::Algorithm {
84 public:
89  ScdDriftDiffusionAlgo(const std::string &name);
90 
95  bool Initialize() override;
96 
101  bool Process() override;
102 
111  std::vector<std::string> FreeObjects(const std::vector<std::string> &objs, EA::Memory::Status memStatus) override;
112 
113 protected:
114  // Parameters
115  float m_pitch;
117 
118  // diffusion parameters
119  std::string m_diffusionType;
120 
121  // - Gaussian drift parameters
124 
125  // - non-linear Gaussian drift parameters
128 
129 private:
132 
134  EA::observer_ptr<ScdGeoParamsColl> m_origScdGeoParamsColl;
135  std::shared_ptr<ScdGeoParamsColl> m_digScdGeoParamsColl;
136 
137  EA::StorePtr m_evStore, m_globStore;
138 
139  // Helper functions
140 
150  void GenerateHits(const ScdParticleHitsColl &particleHitsColl, const ScdHitsColl &hitsColl, ScdHitsColl &digHitsColl);
151 
162  ScdGeoParams CreateGeoParams(const ScdGeoParams &origGeoParams);
163 
169  std::vector<Point> PartitionTrajectory(const ParticleHit &hit);
170 
171  void AccumulateSteps(std::vector<Hit> &layerHits, const ScdGeoParams &geoParams, unsigned int firstStrip,
172  unsigned int lastStrip, const ScdDigitizationTools::ScdChargePacket &packet, float edep);
173 
174  // Helper function to generate different kinds of charge packets
175  std::unique_ptr<ScdDigitizationTools::ScdChargePacket> CreatePacket(Point position, DiffusionType diffType,
176  const ScdGeoParams &geoParams);
177 };
178 
179 } // namespace Herd
180 
181 #endif /* HERD_SCDDriftDiffusionALGO_H_ */
Herd::ScdDriftDiffusionAlgo::AccumulateSteps
void AccumulateSteps(std::vector< Hit > &layerHits, const ScdGeoParams &geoParams, unsigned int firstStrip, unsigned int lastStrip, const ScdDigitizationTools::ScdChargePacket &packet, float edep)
Definition: ScdDriftDiffusionAlgo.cpp:285
Herd::ScdDriftDiffusionAlgo::m_origScdGeoParamsColl
EA::observer_ptr< ScdGeoParamsColl > m_origScdGeoParamsColl
Definition: ScdDriftDiffusionAlgo.h:134
Herd::ParticleHit
Class to describe the energy deposit of a single particle.
Definition: ParticleHit.h:33
Herd::Vec3D
A class describing a vector in 3D space.
Definition: Vec3D.h:33
Herd::ScdDriftDiffusionAlgo
Base algorithm for digitizers of the Monte Carlo hits of the Silicon Charge Detector implementing the...
Definition: ScdDriftDiffusionAlgo.h:83
Herd::ScdDigitizationTools::ScdChargePacket
Definition: ScdChargePacket.h:18
Herd::ScdDriftDiffusionAlgo::PartitionTrajectory
std::vector< Point > PartitionTrajectory(const ParticleHit &hit)
Splits the trajectory of a particle hit into N sub-steps, according to the step-size specified in the...
Definition: ScdDriftDiffusionAlgo.cpp:269
Herd::ScdDriftDiffusionAlgo::m_evStore
EA::StorePtr m_evStore
Definition: ScdDriftDiffusionAlgo.h:137
Herd::ScdDriftDiffusionAlgo::CreateGeoParams
ScdGeoParams CreateGeoParams(const ScdGeoParams &origGeoParams)
Creates the geometry parameter objects for the digitized detector.
Definition: ScdDriftDiffusionAlgo.cpp:245
Herd::ScdDriftDiffusionAlgo::FreeObjects
std::vector< std::string > FreeObjects(const std::vector< std::string > &objs, EA::Memory::Status memStatus) override
Free the memory of unneeded objects.
Definition: ScdDriftDiffusionAlgo.cpp:117
Herd::ScdDriftDiffusionAlgo::m_diffType
DiffusionType m_diffType
Definition: ScdDriftDiffusionAlgo.h:131
Herd::ScdDriftDiffusionAlgo::GenerateHits
void GenerateHits(const ScdParticleHitsColl &particleHitsColl, const ScdHitsColl &hitsColl, ScdHitsColl &digHitsColl)
Generate the diffused hits.
Definition: ScdDriftDiffusionAlgo.cpp:131
Herd::ScdDriftDiffusionAlgo::m_siliconDetectorDigHitsColl
ScdHitsColl m_siliconDetectorDigHitsColl
Definition: ScdDriftDiffusionAlgo.h:133
Herd::ScdDriftDiffusionAlgo::m_biasVoltage
float m_biasVoltage
Definition: ScdDriftDiffusionAlgo.h:126
Herd::ScdDriftDiffusionAlgo::m_digScdGeoParamsColl
std::shared_ptr< ScdGeoParamsColl > m_digScdGeoParamsColl
Definition: ScdDriftDiffusionAlgo.h:135
Herd::ScdDriftDiffusionAlgo::CreatePacket
std::unique_ptr< ScdDigitizationTools::ScdChargePacket > CreatePacket(Point position, DiffusionType diffType, const ScdGeoParams &geoParams)
Definition: ScdDriftDiffusionAlgo.cpp:318
Herd::ScdDriftDiffusionAlgo::m_minStepSize
float m_minStepSize
Definition: ScdDriftDiffusionAlgo.h:116
Herd
CssGeoParams.h CssGeoParams class declaration.
Definition: CaloPDCalibrationAlgo.h:22
Herd::ScdDriftDiffusionAlgo::ScdDriftDiffusionAlgo
ScdDriftDiffusionAlgo(const std::string &name)
Constructor.
Definition: ScdDriftDiffusionAlgo.cpp:22
Herd::ScdDriftDiffusionAlgo::Process
bool Process() override
Process a single event.
Definition: ScdDriftDiffusionAlgo.cpp:89
Herd::ScdDriftDiffusionAlgo::Initialize
bool Initialize() override
Initialization of the algorithm.
Definition: ScdDriftDiffusionAlgo.cpp:38
ScdGeoParamsColl.h
Herd::ScdDriftDiffusionAlgo::m_intrinsicVoltage
float m_intrinsicVoltage
Definition: ScdDriftDiffusionAlgo.h:127
Herd::ScdDriftDiffusionAlgo::DiffusionType::GaussianNonLinear
@ GaussianNonLinear
ScdHitsColl.h
Herd::ScdDriftDiffusionAlgo::m_posEffDiffCoeff
float m_posEffDiffCoeff
Definition: ScdDriftDiffusionAlgo.h:122
Herd::ScdDriftDiffusionAlgo::m_diffusionType
std::string m_diffusionType
Definition: ScdDriftDiffusionAlgo.h:119
ScdParticleHitsColl.h
Herd::ScdDriftDiffusionAlgo::DiffusionType::Gaussian
@ Gaussian
Herd::ScdDriftDiffusionAlgo::m_pitch
float m_pitch
Definition: ScdDriftDiffusionAlgo.h:115
Herd::ScdDriftDiffusionAlgo::m_globStore
EA::StorePtr m_globStore
Definition: ScdDriftDiffusionAlgo.h:137
Herd::ScdGeoParams
Data structure for single silicon layer geometry parameters.
Definition: ScdGeoParams.h:35
Herd::SidesArray< ScdHits >
Herd::ScdDriftDiffusionAlgo::DiffusionType
DiffusionType
Definition: ScdDriftDiffusionAlgo.h:130
Herd::ScdDriftDiffusionAlgo::m_negEffDiffCoeff
float m_negEffDiffCoeff
Definition: ScdDriftDiffusionAlgo.h:123