17 #include "GaudiKernel/MsgStream.h"
18 #include "CLHEP/Units/SystemOfUnits.h"
19 #include "GaudiKernel/ServiceHandle.h"
24 const std::string&
name,
28 , m_maxDistance( 2.0001*
CLHEP::
mm )
30 , m_maxFieldSquaredLimit(999)
31 , m_invMaxFieldSquared(0.0)
32 , m_nTabulatedDistances(4000)
33 , m_invDeltaTabulatedDistances( (m_nTabulatedDistances-1)/(m_maxDistance-m_minDistance) )
36 declareInterface<ITRT_SimDriftTimeTool>(
this);
64 std::vector<std::unique_ptr<ITRT_DriftTimeData>> pDTData;
65 pDTData.emplace_back(std::make_unique<TRT_BarrelDriftTimeData>(0));
66 pDTData.emplace_back(std::make_unique<TRT_BarrelDriftTimeData>(1));
67 pDTData.emplace_back(std::make_unique<TRT_BarrelDriftTimeData>(2));
79 for (
auto &
i : pDTData)
84 std::vector<double> table_of_dist2meanDT_at_noField;
85 std::vector<double> table_of_dist2meanDT_at_maxField;
94 table_of_dist2meanDT_at_noField[distIndex] =
i->DriftTimeAtNoField(
distance);
95 table_of_dist2meanDT_at_maxField[distIndex] =
i->DriftTimeAtMaxField(
distance);
106 return StatusCode::SUCCESS;
113 const double& effectivefield_squared,
114 int strawGasType)
const
119 ATH_MSG_WARNING (
"Extrapolation from tabulated field values greater than 10% (at "
120 << std::sqrt(effectivefield_squared)/
CLHEP::tesla<<
" Tesla)");
127 ATH_MSG_FATAL(
"getAverageDriftTime: Somehow distIndex (" << distIndex <<
" ) is out of bounds ("
129 throw std::runtime_error(
"getAverageDriftTime distIndex out of bounds");
135 return (
A * effectivefield_squared) +
C;