84 for (
const std::unique_ptr<GXFTrackState> & i : rhs.
m_states) {
85 m_states.emplace_back(std::make_unique<GXFTrackState>(*i));
89 for (auto & state : m_states) {
90 conditionalSetCalorimeterEnergyLossState(state.get());
123 for (
const std::unique_ptr<GXFTrackState> & i : rhs.
m_states) {
124 m_states.push_back(std::make_unique<GXFTrackState>(*i));
149 constexpr double perpThreshold = 1400;
150 constexpr double zThreshold = 3700;
160 (par->position().perp() > perpThreshold || std::abs(par->position().z()) > zThreshold)
181 double *
errors = state->measurementErrors();
183 for (
int i = 0; i < 5; i++) {
216 m_states.push_back(std::move(state));
230 if (meff->
deltaE() == 0) {
244 m_states.push_back(std::move(state));
251 int previousbrems = 0;
253 for (
int i = 0; i <
index; i++) {
254 if ((
m_states[i]->materialEffects() !=
nullptr)
255 &&
m_states[i]->materialEffects()->sigmaDeltaE() > 0) {
268 m_states.push_back(std::move(state));
287 for (
const auto & state :
m_states) {
288 if (state->trackParameters() !=
nullptr) {
289 const double inprod =
m_refpar->momentum().dot(state->position() -
m_refpar->position());
296 state->associatedSurface().straightLineDistanceEstimate(
m_refpar->position(),
m_refpar->momentum().unit());
300 distance = distsol.
first();
303 std::abs(distsol.
first()) < std::abs(distsol.
second()) ?
323 if (meff->
deltaE() == 0) {
359 for (
int i = 0; i < 5; i++) {
385 if (
error>1 && oldError<1) {
521 && ((
m_prefit == 0) || (*state).materialEffects()->deltaE() == 0)) {
522 const double scatphi = (*state).materialEffects()->deltaPhi();
523 const double scattheta = (*state).materialEffects()->deltaTheta();
525 const double sigmascatphi = (*state).materialEffects()->sigmaDeltaPhi();
526 const double sigmascattheta = (*state).materialEffects()->sigmaDeltaTheta();
528 emplace_back(sigmascatphi, sigmascattheta);
535 std::vector < std::pair < double, double >>&
550 double > >&scatteringangles) {
555 && ((
m_prefit == 0) || (*state).materialEffects()->deltaE() == 0)) {
556 const double scatphi = scatteringangles[scatno].first;
557 const double scattheta = scatteringangles[scatno].second;
558 (*state).materialEffects()->setScatteringAngles(scatphi, scattheta);
570 if (((*state).materialEffects() !=
nullptr)
571 && (*state).materialEffects()->sigmaDeltaE() > 0) {
572 (*state).materialEffects()->setdelta_p(
m_brems[bremno]);
587 if (
m_res.size() == 0) {
634 std::vector < std::pair < const Layer *, const Layer *>>&
643 for (std::unique_ptr<GXFTrackState> & hit :
trackStates()) {
644 if (hit->measurement() !=
nullptr) {
645 if (firstmeasstate ==
nullptr) {
646 firstmeasstate = hit.get();
648 lastmeasstate = hit.get();
652 if (firstmeasstate ==
nullptr) {
653 throw std::logic_error(
"no first measurement.");
656 return std::make_pair(firstmeasstate, lastmeasstate);
669 (hit->materialEffects() !=
nullptr) &&
670 hit->materialEffects()->isKink()
680 for (std::unique_ptr<GXFTrackState> & hit :
trackStates()) {
681 hit->setTrackCovariance(
nullptr);
686 return std::make_unique<const FitQuality>(
chi2(),
nDOF());
Access to distance solutions.
double second() const
Distance to second intersection solution along direction (for a cylinder surface)
int numberOfSolutions() const
Number of intersection solutions.
double first() const
Distance to first intersection solution along direction.
class that is similar to MaterialEffectsOnTrack, but has 'set' methods for more flexibility during tr...
double sigmaDeltaE() const
double sigmaDeltaPhi() const
double sigmaDeltaTheta() const
const TrackParameters * trackParameters(void) const
GXFMaterialEffects * materialEffects()
std::vector< std::unique_ptr< GXFTrackState > > m_states
The vector of track states, i.e.
int numberOfOutliers() const
int m_nupstreamscatterers
void resetCovariances(void)
std::vector< double > & brems()
void setNumberOfScatterers(int)
int numberOfSiliconHits() const
std::vector< std::pair< const Layer *, const Layer * > > & upstreamMaterialLayers()
std::unique_ptr< const FitQuality > quality(void) const
int m_nupstreamcaloscatterers
int numberOfFitParameters() const
int numberOfTRTPrecHits() const
GXFTrackState * m_caloelossstate
void resetReferenceParameters()
Amg::MatrixX & weightedResidualDerivatives()
std::vector< std::pair< const Layer *, const Layer * > > m_upstreammat
const std::vector< std::unique_ptr< GXFTrackState > > & trackStates() const
Amg::MatrixX m_weightresderiv
int numberOfTRTTubeHits() const
void conditionalSetCalorimeterEnergyLossState(GXFTrackState *)
int numberOfTRTHits() const
int numberOfUpstreamBrems() const
double totalEnergyLoss() const
std::unique_ptr< const TrackParameters > m_refpar
int numberOfUpstreamScatterers() const
int numberOfUpstreamStates() const
MagneticFieldProperties m_fieldprop
void setNumberOfPerigeeParameters(int)
const TrackParameters * referenceParameters()
void setNumberOfBrems(int)
std::vector< std::pair< double, double > > & scatteringSigmas()
std::vector< std::pair< double, double > > m_scatteringangles
std::pair< GXFTrackState *, GXFTrackState * > findFirstLastMeasurement(void)
void addMaterialState(std::unique_ptr< GXFTrackState >, int index=-1)
GXFTrackState * caloElossState()
int numberOfScatterers() const
bool addMeasurementState(std::unique_ptr< GXFTrackState >, int index=-1)
std::vector< std::pair< double, double > > & scatteringAngles()
void addBasicState(std::unique_ptr< GXFTrackState >, int index=-1)
Amg::VectorX & residuals()
void setBrems(std::vector< double > &)
std::vector< std::pair< double, double > > m_scatteringsigmas
int numberOfPerigeeParameters() const
int numberOfBrems() const
std::vector< double > m_brems
void setOutlier(int, bool isoutlier=true)
void updateTRTHitCount(int index, float oldError)
void setScatteringAngles(std::vector< std::pair< double, double > > &)
int numberOfPseudoMeasurements() const
void setReferenceParameters(std::unique_ptr< const TrackParameters >)
int parameterKey() const
Identifier key for matrix expansion/reduction.
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 Surface & associatedSurface() const =0
Interface method to get the associated Surface.
@ Measurement
This is a measurement, and will at least contain a Trk::MeasurementBase.
@ Outlier
This TSoS contains an outlier, that is, it contains a MeasurementBase/RIO_OnTrack which was not used ...
@ Scatterer
This represents a scattering point on the track, and so will contain TrackParameters and MaterialEffe...
double chi2(TH1 *h0, TH1 *h1)
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic > MatrixX
Dynamic Matrix - dynamic allocation.
Eigen::Matrix< double, Eigen::Dynamic, 1 > VectorX
Dynamic Vector - dynamic allocation.
Ensure that the ATLAS eigen extensions are properly loaded.
ParametersBase< TrackParametersDim, Charged > TrackParameters