27 declareInterface<IAlignResidualCalculator>(
this);
42 return StatusCode::FAILURE;
50 return StatusCode::FAILURE;
57 return StatusCode::SUCCESS;
63 return StatusCode::SUCCESS;
69 bool useNewTrack = (track!=
nullptr);
76 bool useNewTrack = (track!=
nullptr);
77 const Track* newTrack = (useNewTrack) ? track : alignTrack;
84 const Track* track,
bool newTrack)
96 if (!track&&newTrack) {
ATH_MSG_ERROR(
"no track!");
return 0.; }
104 const TrackStateOnSurface* tsos =
105 (newTrack) ?
getMatchingTSOS(*atsos,track) :
dynamic_cast<const TrackStateOnSurface*
>(atsosp);
109 const MaterialEffectsBase* meb = tsos->materialEffectsOnTrack();
120 int imeasType=(**atsos).measType();
149 ATH_MSG_WARNING(
"When using unbiased residuals including scatterers doesn't make sense!");
157 nscatparam = (scatterer) ? 2 : 1;
159 for (
int iparam=0;iparam<nscatparam;iparam++) {
162 double residual(-999.);
173 ATH_MSG_DEBUG(
"residual:"<<residual<<
", errSq: "<<errSq<<
", err="<<std::sqrt(errSq));
189 dchi2 +=
res.residualNorm()*
res.residualNorm();
192 else if (!atsos->
rio() && !atsos->
crio()) {
200 double residual = .001*(E0-E1-energyLoss);
203 ATH_MSG_DEBUG(
"E0/E1/energyLoss: "<<E0<<
"/"<<E1<<
"/"<<energyLoss);
210 dchi2 +=
res.residualNorm()*
res.residualNorm();
217 if (atsos->
rio() || atsos->
crio()) {
220 for (
int iparam=0;iparam<nparams;iparam++) {
223 double residual(-999.);
226 (atsos->
rio()!=
nullptr || atsos->
crio()!=
nullptr) ) {
231 std::optional<ResidualPull> resPull = std::nullopt;
241 if (unbiasedTrackPars) {
242 trackPars = unbiasedTrackPars;
247 ATH_MSG_WARNING(
"Could not get unbiased track parameters, use normal parameters");
250 ATH_MSG_DEBUG(
"Calling ResidualPullCalculator for residual type "
259 residual = (resPull->residual())[iparam];
260 double pull=(resPull->pull())[iparam];
262 errSq = residual/pull;
269 ATH_MSG_DEBUG(
"residual:"<<residual<<
", errSq: "<<errSq<<
", err="<<std::sqrt(errSq));
282 dchi2 +=
res.residualNorm()*
res.residualNorm();
302 if (!
dynamic_cast<const CaloEnergy*
>(energyLoss)) {
314 if (atsos->
rio() || atsos->
crio()) {
339 double distance2(1.e27);
346 if (!itTsos->trackParameters()) {
ATH_MSG_WARNING(
"no track parameters!");
continue; }
347 const Amg::Vector3D newPosition=itTsos->trackParameters()->position();
348 ATH_MSG_DEBUG(
"origPos: "<<origPosition<<
", newPos: "<<newPosition);
349 double newdist2=(newPosition - origPosition).
mag2();
350 if (newdist2<distance2) {
357 if (!tsos)
return nullptr;
364 ATH_MSG_WARNING(
"TSOS already found with position "<<addPosition<<
"!");
Scalar mag2() const
mag2 method - forward to squaredNorm()
#define ATH_MSG_WARNING(x)
std::pair< std::vector< unsigned int >, bool > res
AlignTSOS is a TSOS with extra variables useful for alignment.
class extending the basic Trk::EnergyLoss to describe the measured or parameterised muon energy loss ...
DataModel_detail::iterator< DataVector > iterator
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
const TrackStateOnSurface * getMatchingTSOS(const AlignTSOS *atsos, const Track *track)
ToolHandle< IUpdator > m_updator
void accumulateScattering(const TrackStateOnSurface *tsos)
virtual StatusCode initialize() override
virtual double setResiduals(DataVector< AlignTSOS > *alignTSOSColl, const Track *track) override
sets residuals for AlignTSOS on AlignTrack and returns total chi2
double * m_chi2ForMeasType
ToolHandle< IResidualPullCalculator > m_pullCalculator
std::vector< const TrackStateOnSurface * > m_matchedTSOS
AlignResidualCalculator(const std::string &type, const std::string &name, const IInterface *parent)
virtual StatusCode finalize() override
BooleanProperty m_includeScatterers
double setResidualsOnATSOS(AlignTSOS *atsos, const TrackStateOnSurface *tsos)
virtual ~AlignResidualCalculator()
IntegerProperty m_resType
const RIO_OnTrack * rio() const
returns RIO_OnTrack or leading RIO of CompetingRIOsOnTrack (assigned by c'tor)
void setUnbiasedTrackPars(const TrackParameters *trkPars)
setter for unbiased track parameters
void addResidual(const Residual &residual)
pushes back vector of Residuals to alignTSOS residuals
const CompetingRIOsOnTrack * crio() const
returns CompetingRIOsOnTrack
void clearResiduals()
clears vector of residuals
TrackState::MeasurementType measType() const
returns measurement type enum
AlignTSOSCollection::const_iterator lastAtsos() const
returns iterator pointer to last element in collection
AlignTSOSCollection::const_iterator firstAtsos() const
retrieve iterator pointer to first element in collection
Base class for all CompetingRIOsOnTack implementations, extends the common MeasurementBase.
virtual const RIO_OnTrack & rioOnTrack(unsigned int) const =0
returns the RIO_OnTrack (also known as ROT) objects depending on the integer.
This class describes energy loss material effects in the ATLAS tracking EDM.
double sigmaDeltaE() const
returns the symmatric error
double deltaE() const
returns the
base class to integrate material effects on Trk::Track in a flexible way.
represents the full description of deflection and e-loss of a track in material.
const EnergyLoss * energyLoss() const
returns the energy loss object.
const ScatteringAngles * scatteringAngles() const
returns the MCS-angles object.
This class is the pure abstract base class for all fittable tracking measurements.
const LocalParameters & localParameters() const
Interface method to get the LocalParameters.
virtual const Amg::Vector3D & globalPosition() const =0
Interface method to get the global Position.
const Amg::MatrixX & localCovariance() const
Interface method to get the localError.
const Amg::Vector3D & position() const
Access method for the position.
double charge() const
Returns the charge.
double pT() const
Access method for transverse momentum.
Class to handle RIO On Tracks ROT) for InDet and Muons, it inherits from the common MeasurementBase.
Identifier identify() const
return the identifier -extends MeasurementBase
represents a deflection of the track caused through multiple scattering in material.
double sigmaDeltaPhi() const
returns the
double deltaPhi() const
returns the
double sigmaDeltaTheta() const
returns the
double deltaTheta() const
returns the
represents the track state (measurement, material, fit parameters and quality) at a surface.
const MeasurementBase * measurementOnTrack() const
returns MeasurementBase const overload
const TrackParameters * trackParameters() const
return ptr to trackparameters const overload
std::string dumpType() const
returns a string with the expanded type of the object (i.e.
@ Outlier
This TSoS contains an outlier, that is, it contains a MeasurementBase/RIO_OnTrack which was not used ...
const MaterialEffectsBase * materialEffectsOnTrack() const
return material effects const overload
double chi2(TH1 *h0, TH1 *h1)
Eigen::Matrix< double, 3, 1 > Vector3D
@ NumberOfMeasurementTypes
Ensure that the ATLAS eigen extensions are properly loaded.
ResidualPull::ResidualType ResidualPullType(AlignResidualType type)
DataVector< AlignTSOS > AlignTSOSCollection
ParamDefs
This file defines the parameter enums in the Trk namespace.
ParametersBase< TrackParametersDim, Charged > TrackParameters