24 const IInterface* p) :
27 declareInterface<ITRT_TrackTimingTool>(
this);
28 declareInterface<Trk::ITrackTimingTool>(
this);
47 StatusCode
sc = AlgTool::initialize();
49 if (
sc.isFailure())
return sc;
54 return StatusCode::FAILURE;
60 ATH_MSG_INFO(
"InDet::TRT_TrackTimingTool::initialize() successful in " << name() <<
", do eta correction: " <<
62 return StatusCode::SUCCESS;
68 StatusCode
sc = AlgTool::finalize();
76 if (sgmColl !=
nullptr) {
77 ATH_MSG_INFO(
"TRT_TrackTimingTool::timeMeasurements called with SegmentCollection != 0");
80 std::vector<Trk::SpaceTimePoint*> timeMeasurementsVector;
93 int nTRTdriftCircles(0), nMissingRDOs(0), nMissingTrackParameters(0), nUsedHits(0);
94 trackInformation(track, position, nTRTdriftCircles, nMissingRDOs, nMissingTrackParameters, nUsedHits);
97 "trackInformation: " << nTRTdriftCircles <<
", " << nMissingRDOs <<
", " << nMissingTrackParameters <<
" slimmed? " <<
100 if (!nTRTdriftCircles)
return timeMeasurementsVector;
103 if (nMissingTrackParameters) {
104 newtrack = (
m_ITrackFitter->fit(Gaudi::Hive::currentContext(),track,
105 false, track.info().particleHypothesis())).release();
107 if (newtrack ==
nullptr) {
108 ATH_MSG_INFO(
"fit to unslim track has failed, giving up.");
109 return timeMeasurementsVector;
113 const Trk::Track* track_ptr = (newtrack !=
nullptr) ? newtrack : &track;
116 ATH_MSG_DEBUG(
"timeMeasurements(): diagnosed that track has all information already.");
133 float weight = (time == 0.) ? 0. : 0.02 * nUsedHits;
135 ATH_MSG_DEBUG(
"TRT_TrackTimingTool::timeMeasurements: TRT track with " << nTRTdriftCircles <<
" hits, track time = "
136 << time <<
" ns, position: " << position <<
", error: " <<
error <<
", weight: " << weight <<
142 timeMeasurementsVector.push_back(timeMeasurement);
144 ATH_MSG_INFO(
"TRT_TrackTimingTool::timeMeasurement not available");
149 if (newtrack)
delete newtrack;
151 return timeMeasurementsVector;
160 std::vector<Trk::SpaceTimePoint*> v;
169 std::vector<Trk::SpaceTimePoint*> v;
185 if (!trtcirc)
continue;
188 if (!tparp)
continue;
191 if (std::abs(driftR) < 0.000001)
continue;
192 if (std::abs(driftR) > 2.)
continue;
198 if (not rtRelation) {
202 float driftT = rtRelation->
drifttime(std::abs(driftR));
203 float trackT = rtRelation->
drifttime(std::abs(trackR));
206 time += driftT - trackT;
218 const float correctionLargeEta = -0.31;
220 const Trk::Perigee* trackPar = track.perigeeParameters();
223 ATH_MSG_WARNING(
"missing perigee parameters, can not make eta correction");
227 double eta = trackPar->
eta();
229 if (std::abs(
eta) > 1. && correction > correctionLargeEta) correction = correctionLargeEta;
239 int& nTRTdriftCircles,
int& nMissingRDOs,
240 int& nMissingTrackParameters,
int& nUsedHits)
const {
249 if (!trtcirc)
continue;
255 if (!state->trackParameters()) nMissingTrackParameters++;
268 if (nTRTdriftCircles) GlobalPositionSum /= (double) nTRTdriftCircles;
269 position = GlobalPositionSum;
277 int checkNTRThits(0), missingMeasurement(0), noTRT_DriftCircle(0), missingPrepRawData(0), invalidHits(0),
283 missingMeasurement++;
295 missingPrepRawData++;
311 "debugMissingMeasurements: TRT hit " << checkNTRThits <<
", raw drift time: " << rawhit->
rawDriftTime() <<
" ns, track R: " <<
315 ATH_MSG_INFO(
"debugMissingMeasurements: N valid hits: " << checkNTRThits <<
", missing MeasurementBase / Measurement: " << missingMeasurement
316 <<
", missing TRT_DriftCircleOnTrack: " << noTRT_DriftCircle <<
", missingPrepRawData: " << missingPrepRawData
317 <<
", invalid LE or TE: " << invalidHits <<
", missing track parameters: " <<
Scalar eta() const
pseudorapidity method
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_WARNING(x)
static const uint32_t nHits
abstract base class for rt-relations
This is an Identifier helper class for the TRT subdetector.
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
Represents 'corrected' measurements from the TRT (for example, corrected for wire sag).
virtual const TRT_DriftCircle * prepRawData() const override final
returns the PrepRawData - is a TRT_DriftCircle in this scope
virtual const Amg::Vector3D & globalPosition() const override final
return the global position of this RIO_OnTrack
bool driftTimeValid() const
return true if the corrected drift time is OK
bool firstBinHigh() const
returns true if the first bin is high
double rawDriftTime() const
returns the raw driftTime
Base class for rt-relations in the TRT.
virtual float drifttime(float radius) const =0
drifttime for given radius
This class is the pure abstract base class for all fittable tracking measurements.
const LocalParameters & localParameters() const
Interface method to get the LocalParameters.
virtual bool type(MeasurementBaseType::Type type) const =0
Interface method checking the type.
double eta() const
Access method for pseudorapidity - from momentum.
Identifier identify() const
return the identifier -extends MeasurementBase
@ SlimmedTrack
A slimmed track.
const Track * originalTrack() const
Return pointer to associated track.
represents the track state (measurement, material, fit parameters and quality) at a surface.
@ Measurement
This is a measurement, and will at least contain a Trk::MeasurementBase.
Eigen::Matrix< double, 3, 1 > Vector3D
ParametersT< TrackParametersDim, Charged, PerigeeSurface > Perigee
DataVector< Trk::Segment > SegmentCollection
ParametersBase< TrackParametersDim, Charged > TrackParameters