18 #include "GaudiKernel/MsgStream.h"
19 #include "CLHEP/Units/SystemOfUnits.h"
20 #include "GaudiKernel/ServiceHandle.h"
25 const std::string&
name,
29 , m_maxDistance( 2.0001*
CLHEP::
mm )
31 , m_maxFieldSquaredLimit(999)
32 , m_invMaxFieldSquared(0.0)
34 , m_nTabulatedDistances(4000)
35 , m_invDeltaTabulatedDistances( (m_nTabulatedDistances-1)/(m_maxDistance-m_minDistance) )
38 declareInterface<ITRT_SimDriftTimeTool>(
this);
64 return StatusCode::FAILURE;
74 std::vector<std::unique_ptr<ITRT_DriftTimeData>> pDTData;
75 pDTData.emplace_back(std::make_unique<TRT_BarrelDriftTimeData>(
m_digversion,0));
76 pDTData.emplace_back(std::make_unique<TRT_BarrelDriftTimeData>(
m_digversion,1));
77 pDTData.emplace_back(std::make_unique<TRT_BarrelDriftTimeData>(
m_digversion,2));
89 for (
auto &
i : pDTData)
94 std::vector<double> table_of_dist2meanDT_at_noField;
95 std::vector<double> table_of_dist2meanDT_at_maxField;
104 table_of_dist2meanDT_at_noField[distIndex] =
i->DriftTimeAtNoField(
distance);
105 table_of_dist2meanDT_at_maxField[distIndex] =
i->DriftTimeAtMaxField(
distance);
116 return StatusCode::SUCCESS;
123 const double& effectivefield_squared,
124 int strawGasType)
const
129 ATH_MSG_WARNING (
"Extrapolation from tabulated field values greater than 10% (at "
130 << std::sqrt(effectivefield_squared)/
CLHEP::tesla<<
" Tesla)");
137 ATH_MSG_FATAL(
"getAverageDriftTime: Somehow distIndex (" << distIndex <<
" ) is out of bounds ("
139 throw std::runtime_error(
"getAverageDriftTime distIndex out of bounds");
145 return (
A * effectivefield_squared) +
C;