12#ifndef STRIPDIGITIZATION_STRIPSURFACECHARGESGENERATOR_H
13#define STRIPDIGITIZATION_STRIPSURFACECHARGESGENERATOR_H
31#include "GaudiKernel/ITHistSvc.h"
32#include "GaudiKernel/ServiceHandle.h"
33#include "GaudiKernel/ToolHandle.h"
36#include "CLHEP/Units/SystemOfUnits.h"
54 class HepRandomEngine;
75 virtual StatusCode
finalize()
override;
85 CLHEP::HepRandomEngine * rndmEngine,
86 const EventContext& ctx)
override;
90 float eventTime,
unsigned short eventID,
91 CLHEP::HepRandomEngine * rndmEngine,
92 const EventContext& ctx)
const;
105 FloatProperty
m_smallStepLength{
this,
"SmallStepLength", 5 * CLHEP::micrometer,
"max internal step along the larger G4 step"};
108 FloatProperty
m_tSurfaceDrift{
this,
"SurfaceDriftTime", 10 * CLHEP::ns,
"max surface drift time"};
110 FloatProperty
m_tfix{
this,
"FixedTime", -999.,
"fixed time"};
111 FloatProperty
m_tsubtract{
this,
"SubtractTime", -999.,
"subtract drift time from mid gap"};
113 BooleanProperty
m_useSiCondDB{
this,
"UseSiCondDB",
true,
"Usage of SiConditions DB values can be disabled to use setable ones"};
114 FloatProperty
m_vdepl{
this,
"DepletionVoltage", 70.,
"depletion voltage, default 70V"};
115 FloatProperty
m_vbias{
this,
"BiasVoltage", 150.,
"bias voltage, default 150V"};
116 BooleanProperty
m_doTrapping{
this,
"doTrapping",
false,
"Flag to set Charge Trapping"};
117 BooleanProperty
m_doHistoTrap{
this,
"doHistoTrap",
false,
"Histogram the charge trapping effect"};
118 BooleanProperty
m_doRamo{
this,
"doRamo",
false,
"Ramo Potential for charge trapping effect"};
119 BooleanProperty
m_isOverlay{
this,
"isOverlay",
false,
"flag for overlay"};
123 ToolHandle<ISiPropertiesTool>
m_siPropertiesTool{
this,
"SiPropertiesTool",
"StripSiPropertiesTool",
"Tool to retrieve SCT silicon properties"};
124 ToolHandle<ISCT_RadDamageSummaryTool>
m_radDamageTool{
this,
"RadDamageSummaryTool",
"StripRadDamageSummaryTool",
"Tool to retrieve SCT radiation damages"};
125 ToolHandle<ISiliconConditionsTool>
m_siConditionsTool{
this,
"SiConditionsTool",
"StripSiliconConditionsTool",
"Tool to retrieve SCT silicon information"};
126 ToolHandle<ISiLorentzAngleTool>
m_lorentzAngleTool{
this,
"LorentzAngleTool",
"SiLorentzAngleTool/ITkStripLorentzAngleTool",
"Tool to retreive Lorentz angle"};
131 this,
"AtlasFieldCacheCondObj",
"fieldCondObj",
"Name of the Magnetic Field conditions object key"};
141 StatusCode
book (ITHistSvc& histSvc);
165 std::unique_ptr<Hists>
m_h;
BooleanProperty m_doTrapping
float driftTime(float zhit, const InDetDD::SiDetectorElement *element, const EventContext &ctx) const
calculate drift time perpandicular to the surface for a charge at distance zhit from mid gap
float maxDriftTime(const InDetDD::SiDetectorElement *element, const EventContext &ctx) const
max drift charge equivalent to the detector thickness
SG::ReadCondHandleKey< AtlasFieldCacheCondObj > m_fieldCacheCondObjInputKey
float m_tHalfwayDrift
Surface drift time.
bool chargeIsTrapped(double spess, const InDetDD::SiDetectorElement *element, double &trap_pos, double &drift_time) const
ServiceHandle< ITHistSvc > m_thistSvc
BooleanProperty m_isOverlay
BooleanProperty m_useSiCondDB
bool m_SurfaceDriftFlag
surface drift ON/OFF
virtual StatusCode initialize() override
AlgTool initialize.
float surfaceDriftTime(float ysurf) const
Calculate of the surface drift time.
float diffusionSigma(float zhit, const InDetDD::SiDetectorElement *element, const EventContext &ctx) const
calculate diffusion sigma from a gaussian dist scattered charge
IntegerProperty m_numberOfCharges
void processSiHit(const InDetDD::SiDetectorElement *element, const SiHit &phit, ISiSurfaceChargesInserter &inserter, float eventTime, unsigned short eventID, CLHEP::HepRandomEngine *rndmEngine, const EventContext &ctx) const
ToolHandle< ISiPropertiesTool > m_siPropertiesTool
virtual StatusCode finalize() override
AlgTool finalize.
FloatProperty m_tsubtract
FloatProperty m_tSurfaceDrift
related to the surface drift
std::unique_ptr< Hists > m_h
ToolHandle< ISiLorentzAngleTool > m_lorentzAngleTool
BooleanProperty m_doHistoTrap
ToolHandle< ISiliconConditionsTool > m_siConditionsTool
virtual ~StripSurfaceChargesGenerator()=default
Destructor.
float m_distInterStrip
Inter strip distance normalized to 1.
BooleanProperty m_doInducedChargeModel
float maxDiffusionSigma(const InDetDD::SiDetectorElement *element, const EventContext &ctx) const
max sigma diffusion
std::unique_ptr< InducedChargeModel > m_InducedChargeModel
StripSurfaceChargesGenerator(const std::string &type, const std::string &name, const IInterface *parent)
constructor
virtual void setFixedTime(float fixedTime) override
float m_distHalfInterStrip
Half way distance inter strip.
FloatProperty m_smallStepLength
ToolHandle< ISCT_RadDamageSummaryTool > m_radDamageTool
Class to hold geometrical description of a silicon detector element.
a smart pointer to a hit that also provides access to the extended timing info of the host event.
const std::string process
TH1F(name, title, nxbins, bins_par2, bins_par3=None, path='', **kwargs)
TProfile * m_h_velocity_trap
TH2F * m_h_drift_electrode
StatusCode book(ITHistSvc &histSvc)
TH1F * m_h_notrap_drift_t
TProfile * m_h_mobility_trap