diff --git a/Reconstruction/iPat/iPatTrackFitter/iPatTrackFitter/TrackFitter.h b/Reconstruction/iPat/iPatTrackFitter/iPatTrackFitter/TrackFitter.h index c2b6a5826c5661ba439e40e7966955413bbdad69..1fb85a42188bd17480ba0b9a497b446ec7ee463f 100755 --- a/Reconstruction/iPat/iPatTrackFitter/iPatTrackFitter/TrackFitter.h +++ b/Reconstruction/iPat/iPatTrackFitter/iPatTrackFitter/TrackFitter.h @@ -13,7 +13,7 @@ //<<<<<< INCLUDES >>>>>> -#include <list> +#include <vector> #include "AthenaBaseComps/AthAlgTool.h" #include "GaudiKernel/ToolHandle.h" #include "GaudiKernel/ServiceHandle.h" @@ -120,7 +120,7 @@ protected: Trk::FitProcedureQuality* m_fitProcedureQuality; int m_hit_pt3; ToolHandle<Trk::IMaterialAllocator> m_materialAllocator; - std::list<Trk::FitMeasurement*> m_measurements; + std::vector<Trk::FitMeasurement*> m_measurements; Trk::FitParameters* m_parameters; int m_planarHits; ToolHandle<Trk::IIntersector> m_rungeKuttaIntersector; diff --git a/Reconstruction/iPat/iPatTrackFitter/src/TrackFitter.cxx b/Reconstruction/iPat/iPatTrackFitter/src/TrackFitter.cxx index b2f222412bafa97dc05c7bbd0ca150d03c3895ff..e2d86f21212594cbdc8941181d3b491d1647cbe9 100755 --- a/Reconstruction/iPat/iPatTrackFitter/src/TrackFitter.cxx +++ b/Reconstruction/iPat/iPatTrackFitter/src/TrackFitter.cxx @@ -75,11 +75,9 @@ TrackFitter::~TrackFitter (void) void TrackFitter::clearMeasurements (void) { - for (std::list<Trk::FitMeasurement*>::iterator m = m_measurements.begin(); - m != m_measurements.end(); - ++m) + for (auto m : m_measurements) { - delete *m; + delete m; } m_measurements.clear(); } @@ -266,7 +264,7 @@ TrackFitter::fitProcedure (TrackStatus status, // fail fit if there's a missing surface m_fitCode = 0; - for (std::list<Trk::FitMeasurement*>::const_iterator m = m_measurements.begin(); + for (std::vector<Trk::FitMeasurement*>::const_iterator m = m_measurements.begin(); m != m_measurements.end(); ++m) { @@ -383,7 +381,7 @@ TrackFitter::createScatterers (void) const int param = 5; double qOverP = 0.; int scatter = 0; - for (std::list<Trk::FitMeasurement*>::const_iterator m = m_measurements.begin(); + for (std::vector<Trk::FitMeasurement*>::const_iterator m = m_measurements.begin(); m != m_measurements.end(); ++m) { @@ -453,7 +451,7 @@ void TrackFitter::setResiduals (void) const { // set residual from FitMeasurement into corresponding HitOnTrack - for (std::list<Trk::FitMeasurement*>::const_iterator m = m_measurements.begin(); + for (std::vector<Trk::FitMeasurement*>::const_iterator m = m_measurements.begin(); m != m_measurements.end(); ++m) { diff --git a/Tracking/TrkFitter/TrkiPatFitter/TrkiPatFitter/MaterialAllocator.h b/Tracking/TrkFitter/TrkiPatFitter/TrkiPatFitter/MaterialAllocator.h index d1731a083cb632a2707c26496422335e5e6330e1..4302f0ca55daba6884a79d3d487f542a07802cb7 100755 --- a/Tracking/TrkFitter/TrkiPatFitter/TrkiPatFitter/MaterialAllocator.h +++ b/Tracking/TrkFitter/TrkiPatFitter/TrkiPatFitter/MaterialAllocator.h @@ -56,30 +56,30 @@ public: StatusCode finalize(); // add leading material effects to track - void addLeadingMaterial (std::list<FitMeasurement*>& measurements, + void addLeadingMaterial (std::vector<FitMeasurement*>& measurements, ParticleHypothesis particleHypothesis, FitParameters& fitParameters) const; // allocate material - void allocateMaterial (std::list<FitMeasurement*>& measurements, + void allocateMaterial (std::vector<FitMeasurement*>& measurements, ParticleHypothesis particleHypothesis, const FitParameters& fitParameters, const TrackParameters& startParameters) const; // initialize scattering (needs to know X0 integral) - void initializeScattering (std::list<FitMeasurement*>& measurements) const; + void initializeScattering (std::vector<FitMeasurement*>& measurements) const; // material TSOS between spectrometer entrance surface and parameters given in spectrometer */ std::vector<const TrackStateOnSurface*>* leadingSpectrometerTSOS( const TrackParameters& spectrometerParameters) const; // order measurements by distance from startPosition - void orderMeasurements(std::list<FitMeasurement*>& measurements, + void orderMeasurements(std::vector<FitMeasurement*>& measurements, Amg::Vector3D startDirection, Amg::Vector3D startPosition) const; // has material been reallocated? - bool reallocateMaterial (std::list<FitMeasurement*>& measurements, + bool reallocateMaterial (std::vector<FitMeasurement*>& measurements, const FitParameters& fitParameters) const; // clear temporary TSOS @@ -87,7 +87,7 @@ public: private: // add material delimiters to control aggregation - void addSpectrometerDelimiters (std::list<FitMeasurement*>& measurements) const; + void addSpectrometerDelimiters (std::vector<FitMeasurement*>& measurements) const; // memory management void deleteMaterial (const std::vector<const TrackStateOnSurface*>* material) const; @@ -102,17 +102,17 @@ private: ParticleHypothesis particleHypothesis) const; // allocate material in inner detector - void indetMaterial (std::list<FitMeasurement*>& measurements, + void indetMaterial (std::vector<FitMeasurement*>& measurements, ParticleHypothesis particleHypothesis, const TrackParameters& startParameters) const; // material aggregation std::pair<FitMeasurement*,FitMeasurement*> materialAggregation ( const std::vector<const TrackStateOnSurface*>& material, - std::list<FitMeasurement*>& measurements, + std::vector<FitMeasurement*>& measurements, double particleMass) const; - void materialAggregation (std::list<FitMeasurement*>& measurements, + void materialAggregation (std::vector<FitMeasurement*>& measurements, double particleMass) const; // material measurement corresponding to TrackStateOnSurface @@ -121,10 +121,10 @@ private: double particleMass) const; // VERBOSE print of measurements - void printMeasurements(std::list<FitMeasurement*>& measurements) const; + void printMeasurements(std::vector<FitMeasurement*>& measurements) const; // allocate material in spectrometer - void spectrometerMaterial (std::list<FitMeasurement*>& measurements, + void spectrometerMaterial (std::vector<FitMeasurement*>& measurements, ParticleHypothesis particleHypothesis, const FitParameters& fitParameters, const TrackParameters& startParameters) const; diff --git a/Tracking/TrkFitter/TrkiPatFitter/TrkiPatFitter/iPatFitter.h b/Tracking/TrkFitter/TrkiPatFitter/TrkiPatFitter/iPatFitter.h index 6f6bfa7bc181bb041b011248d338d2b5f4f39f37..f32cc9339356b15a7f5937bc9fa80413bc750ac1 100755 --- a/Tracking/TrkFitter/TrkiPatFitter/TrkiPatFitter/iPatFitter.h +++ b/Tracking/TrkFitter/TrkiPatFitter/TrkiPatFitter/iPatFitter.h @@ -14,7 +14,7 @@ //<<<<<< INCLUDES >>>>>> -#include <list> +#include <vector> #include "AthenaBaseComps/AthAlgTool.h" #include "GaudiKernel/ServiceHandle.h" #include "GaudiKernel/ToolHandle.h" @@ -111,26 +111,26 @@ protected: // keep state information from the last fit for access through global interface mutable int m_iterations; - mutable std::list<FitMeasurement*>* m_measurements; + mutable std::vector<FitMeasurement*>* m_measurements; mutable FitParameters* m_parameters; private: // add MeasurementSet - void addMeasurements (std::list<FitMeasurement*>& measurements, + void addMeasurements (std::vector<FitMeasurement*>& measurements, const MeasurementSet& measurementSet, const FitParameters& parameters) const; // add TrackStateOnSurfaces (true means material already allocated on trackTSOS) - bool addMeasurements (std::list<FitMeasurement*>& measurements, + bool addMeasurements (std::vector<FitMeasurement*>& measurements, const FitParameters& parameters, ParticleHypothesis particleHypothesis, const DataVector<const TrackStateOnSurface>& trackTSOS) const; // initialize measurement list (= re-use in case of global fit) - std::list<FitMeasurement*>*& measurementList (void) const; + std::vector<FitMeasurement*>*& measurementList (void) const; // perform fit - Track* performFit(std::list<FitMeasurement*>* measurements, + Track* performFit(std::vector<FitMeasurement*>* measurements, FitParameters* parameters, const ParticleHypothesis particleHypothesis, const TrackInfo& trackInfo, diff --git a/Tracking/TrkFitter/TrkiPatFitter/src/MaterialAllocator.cxx b/Tracking/TrkFitter/TrkiPatFitter/src/MaterialAllocator.cxx index 02c9c897e198cfc92d16cadf57262e57e3212894..81bd2e175ef7d8cfaf21d08705961734dd046d3e 100644 --- a/Tracking/TrkFitter/TrkiPatFitter/src/MaterialAllocator.cxx +++ b/Tracking/TrkFitter/TrkiPatFitter/src/MaterialAllocator.cxx @@ -7,8 +7,6 @@ and fit quality. ***************************************************************************/ -//<<<<<< INCLUDES >>>>>> - #include <cmath> #include <iomanip> #include "GaudiKernel/SystemOfUnits.h" @@ -38,8 +36,6 @@ namespace Trk { -//<<<<<< CLASS STRUCTURE INITIALIZATION >>>>>> - MaterialAllocator::MaterialAllocator (const std::string& type, const std::string& name, const IInterface* parent) @@ -91,8 +87,6 @@ MaterialAllocator::MaterialAllocator (const std::string& type, MaterialAllocator::~MaterialAllocator (void) {} -//<<<<<< PUBLIC MEMBER FUNCTION DEFINITIONS >>>>>> - StatusCode MaterialAllocator::initialize() { @@ -196,7 +190,7 @@ MaterialAllocator::finalize() } void -MaterialAllocator::addLeadingMaterial (std::list<FitMeasurement*>& measurements, +MaterialAllocator::addLeadingMaterial (std::vector<FitMeasurement*>& measurements, ParticleHypothesis particleHypothesis, FitParameters& fitParameters) const { @@ -228,7 +222,7 @@ MaterialAllocator::addLeadingMaterial (std::list<FitMeasurement*>& measurements, const TrackSurfaceIntersection* intersection = 0; int leadingScatterers = 0; Trk::FitMeasurement* leadingScatterer = 0; - for (std::list<Trk::FitMeasurement*>::const_iterator m = measurements.begin(); + for (std::vector<Trk::FitMeasurement*>::const_iterator m = measurements.begin(); m != measurements.end(); ++m) { @@ -262,7 +256,7 @@ MaterialAllocator::addLeadingMaterial (std::list<FitMeasurement*>& measurements, Trk::FitMeasurement* leadingOutlier = 0; std::vector<Trk::FitMeasurement*> leadingOutliers; const Surface* surface = 0; - for (std::list<Trk::FitMeasurement*>::const_iterator m = measurements.begin(); + for (std::vector<Trk::FitMeasurement*>::const_iterator m = measurements.begin(); m != measurements.end(); ++m) { @@ -544,9 +538,8 @@ MaterialAllocator::addLeadingMaterial (std::list<FitMeasurement*>& measurements, ++l) { leadingOutlier = leadingOutliers.back(); - measurements.remove(*l); + measurements.erase(std::remove(measurements.begin(), measurements.end(), *l), measurements.end()); } - leadingMeas = new FitMeasurement((**r).materialEffectsOnTrack()->thicknessInX0(), -eLoss, ParticleMasses().mass[particleHypothesis], @@ -568,7 +561,7 @@ MaterialAllocator::addLeadingMaterial (std::list<FitMeasurement*>& measurements, && leadingOutlier->intersection(FittedTrajectory).position().perp() > radius) { leadingOutliers.pop_back(); - measurements.push_front(leadingOutlier); + measurements.insert(measurements.begin(), leadingOutlier); if (leadingOutliers.size()) { @@ -583,7 +576,7 @@ MaterialAllocator::addLeadingMaterial (std::list<FitMeasurement*>& measurements, ATH_MSG_DEBUG(" push_front(leadingMeas) "); - measurements.push_front(leadingMeas); + measurements.insert(measurements.begin(), leadingMeas); // update momentum for energy loss if (materialEffects) @@ -651,7 +644,7 @@ MaterialAllocator::addLeadingMaterial (std::list<FitMeasurement*>& measurements, double leadingScattering = 0.; double previousScattering = 0.; double leadingX0Integral = 0.; - std::list<Trk::FitMeasurement*>::reverse_iterator m = measurements.rbegin(); + std::vector<Trk::FitMeasurement*>::reverse_iterator m = measurements.rbegin(); while (*m != leadingScatterer) ++m; for ( ; m != measurements.rend(); ++m) { @@ -717,7 +710,7 @@ MaterialAllocator::addLeadingMaterial (std::list<FitMeasurement*>& measurements, } void -MaterialAllocator::allocateMaterial (std::list<FitMeasurement*>& measurements, +MaterialAllocator::allocateMaterial (std::vector<FitMeasurement*>& measurements, ParticleHypothesis particleHypothesis, const FitParameters& fitParameters, const TrackParameters& startParameters) const @@ -754,13 +747,13 @@ MaterialAllocator::clear(void) } void -MaterialAllocator::initializeScattering (std::list<FitMeasurement*>& measurements) const +MaterialAllocator::initializeScattering (std::vector<FitMeasurement*>& measurements) const { // loop over scatterers to include log term corresponding to integral thickness bool integrate = false; double previousScattering = 0.; double X0Integral = 0.; - std::list<Trk::FitMeasurement*>::iterator m = measurements.begin(); + std::vector<Trk::FitMeasurement*>::iterator m = measurements.begin(); // start integration after any leading material while (! (**m).isPositionMeasurement() || (**m).isOutlier()) ++m; @@ -779,7 +772,7 @@ MaterialAllocator::initializeScattering (std::list<FitMeasurement*>& measurement if (integrate) { // reset if measurement closely following - std::list<Trk::FitMeasurement*>::iterator next = m; + std::vector<Trk::FitMeasurement*>::iterator next = m; if (++next != measurements.end() && ! (**next).hitOnTrack() && (**next).isPositionMeasurement() @@ -894,7 +887,7 @@ MaterialAllocator::leadingSpectrometerTSOS (const TrackParameters& spectrometerP return 0; } - std::list<FitMeasurement*> leadingMeasurements; + std::vector<FitMeasurement*> leadingMeasurements; std::vector<const TrackStateOnSurface*>* leadingTSOS = new std::vector<const TrackStateOnSurface*>; leadingTSOS->reserve(extrapolatedTSOS->size()); double outgoingEnergy = spectrometerParameters.momentum().mag(); @@ -909,7 +902,7 @@ MaterialAllocator::leadingSpectrometerTSOS (const TrackParameters& spectrometerP if (measurement) { - leadingMeasurements.push_front(measurement); + leadingMeasurements.insert(leadingMeasurements.begin(),measurement); } else { @@ -919,7 +912,7 @@ MaterialAllocator::leadingSpectrometerTSOS (const TrackParameters& spectrometerP // convert back to TSOS - std::list<FitMeasurement*>::iterator m = leadingMeasurements.begin(); + std::vector<FitMeasurement*>::iterator m = leadingMeasurements.begin(); for ( ; m != leadingMeasurements.end(); ++m) leadingTSOS->push_back(new TrackStateOnSurface(0, 0, @@ -951,7 +944,7 @@ MaterialAllocator::leadingSpectrometerTSOS (const TrackParameters& spectrometerP } void -MaterialAllocator::orderMeasurements(std::list<FitMeasurement*>& measurements, +MaterialAllocator::orderMeasurements(std::vector<FitMeasurement*>& measurements, Amg::Vector3D startDirection, Amg::Vector3D startPosition) const { @@ -963,7 +956,7 @@ MaterialAllocator::orderMeasurements(std::list<FitMeasurement*>& measurements, double previousDistance = -m_orderingTolerance; std::vector< std::pair<double, FitMeasurement*> > measurementOrder; std::vector< std::pair<double, FitMeasurement*> > originalOrder; - for (std::list<FitMeasurement*>::const_iterator m = measurements.begin(); + for (std::vector<FitMeasurement*>::const_iterator m = measurements.begin(); m != measurements.end(); ++m) { @@ -977,7 +970,8 @@ MaterialAllocator::orderMeasurements(std::list<FitMeasurement*>& measurements, std::sort(measurementOrder.begin(), measurementOrder.end(), compareByDistance()); std::vector< std::pair<double, FitMeasurement*> >::const_iterator orig = originalOrder.begin(); bool shouldReorder = false; - if (m_allowReordering) measurements.erase(measurements.begin(),measurements.end()); + if (m_allowReordering) + measurements.erase(measurements.begin(),measurements.end()); for (std::vector< std::pair<double, FitMeasurement*> >::const_iterator order = measurementOrder.begin(); @@ -1011,13 +1005,13 @@ MaterialAllocator::orderMeasurements(std::list<FitMeasurement*>& measurements, } bool -MaterialAllocator::reallocateMaterial (std::list<FitMeasurement*>& measurements, +MaterialAllocator::reallocateMaterial (std::vector<FitMeasurement*>& measurements, const FitParameters& parameters) const { ATH_MSG_DEBUG( " reallocateSpectrometerMaterial " ); int n = 0; - for (std::list<Trk::FitMeasurement*>::iterator m = measurements.begin(); + for (std::vector<Trk::FitMeasurement*>::iterator m = measurements.begin(); m != measurements.end(); ++m) { @@ -1039,7 +1033,7 @@ MaterialAllocator::reallocateMaterial (std::list<FitMeasurement*>& measurements, double qOverP = 0; ATH_MSG_INFO( "qOverP " << qOverP ); - std::list<Trk::FitMeasurement*>::iterator m = measurements.begin(); + std::vector<Trk::FitMeasurement*>::iterator m = measurements.begin(); for ( ; m != measurements.end(); ++m) { if (m_calorimeterVolume->inside((**m).position())) @@ -1075,7 +1069,7 @@ MaterialAllocator::reallocateMaterial (std::list<FitMeasurement*>& measurements, parameterVector[Trk::loc2],parameterVector[Trk::phi], parameterVector[Trk::theta],parameterVector[Trk::qOverP],0); - for (std::list<Trk::FitMeasurement*>::reverse_iterator r = measurements.rbegin(); + for (std::vector<Trk::FitMeasurement*>::reverse_iterator r = measurements.rbegin(); r != measurements.rend(); ++r) { @@ -1127,7 +1121,7 @@ MaterialAllocator::reallocateMaterial (std::list<FitMeasurement*>& measurements, { if (! (**m).isMaterialDelimiter()) continue; delete *m; - std::list<Trk::FitMeasurement*>::iterator n = m; + std::vector<Trk::FitMeasurement*>::iterator n = m; --m; measurements.erase(n); } @@ -1135,10 +1129,8 @@ MaterialAllocator::reallocateMaterial (std::list<FitMeasurement*>& measurements, return true; } -//<<<<<< PRIVATE MEMBER FUNCTION DEFINITIONS >>>>>> - void -MaterialAllocator::addSpectrometerDelimiters (std::list<FitMeasurement*>& measurements) const +MaterialAllocator::addSpectrometerDelimiters (std::vector<FitMeasurement*>& measurements) const { // insert delimiters representing station limits for later material aggregation // preBreak: put delimiter upstream of measurement @@ -1154,7 +1146,7 @@ MaterialAllocator::addSpectrometerDelimiters (std::list<FitMeasurement*>& measur Amg::Vector3D referencePosition; double referencePhi = 0.; int index = 1; - for (std::list<FitMeasurement*>::iterator m = measurements.begin(); + for (std::vector<FitMeasurement*>::iterator m = measurements.begin(); m != measurements.end(); ++m, ++index) { @@ -1317,7 +1309,7 @@ MaterialAllocator::extrapolatedMaterial (const ToolHandle<IExtrapolator>& extrap } void -MaterialAllocator::indetMaterial (std::list<FitMeasurement*>& measurements, +MaterialAllocator::indetMaterial (std::vector<FitMeasurement*>& measurements, ParticleHypothesis particleHypothesis, const TrackParameters& startParameters) const { @@ -1333,7 +1325,7 @@ MaterialAllocator::indetMaterial (std::list<FitMeasurement*>& measurements, Amg::Vector3D startPosition = startParameters.position(); const TrackParameters* parameters = &startParameters; - std::list<Trk::FitMeasurement*>::iterator m = measurements.begin(); + std::vector<Trk::FitMeasurement*>::iterator m = measurements.begin(); if ((**m).isVertex()) ++m; for ( ; m != measurements.end(); ++m) { @@ -1709,7 +1701,7 @@ MaterialAllocator::indetMaterial (std::list<FitMeasurement*>& measurements, std::pair<FitMeasurement*,FitMeasurement*> MaterialAllocator::materialAggregation (const std::vector<const TrackStateOnSurface*>& material, - std::list<FitMeasurement*>& /*measurements*/, + std::vector<FitMeasurement*>& /*measurements*/, double /*particleMass*/) const { // aggregation possible in indet and MS. Frequent occurrence in MS @@ -1722,7 +1714,7 @@ MaterialAllocator::materialAggregation (const std::vector<const TrackStateOnSurf int adjacentScatterers = 0; - std::list<FitMeasurement*> aggregateScatterers; + std::vector<FitMeasurement*> aggregateScatterers; bool haveAggregation = false; // bool makeAggregation = false; // double maxDistance = 0.; @@ -1823,7 +1815,7 @@ MaterialAllocator::materialAggregation (const std::vector<const TrackStateOnSurf // double previousDistance = 0.; // haveAggregation = true; -// for (std::list<Trk::FitMeasurement*>::reverse_iterator s = start; +// for (std::vector<Trk::FitMeasurement*>::reverse_iterator s = start; // s != measurements.rend(); // ++s) // { @@ -1938,7 +1930,7 @@ MaterialAllocator::materialAggregation (const std::vector<const TrackStateOnSurf } void -MaterialAllocator::materialAggregation (std::list<FitMeasurement*>& measurements, +MaterialAllocator::materialAggregation (std::vector<FitMeasurement*>& measurements, double particleMass) const { // Aggregate when at least 2 scatterers exist between delimiter pair. @@ -1955,7 +1947,7 @@ MaterialAllocator::materialAggregation (std::list<FitMeasurement*>& measurements Amg::Vector3D referenceDirection = measurements.back()->intersection(FittedTrajectory).direction(); int adjacentScatterers = 0; - std::list<FitMeasurement*> aggregateScatterers; + std::vector<FitMeasurement*> aggregateScatterers; bool haveAggregation = false; bool makeAggregation = false; double maxDistance = 0.; @@ -1965,9 +1957,9 @@ MaterialAllocator::materialAggregation (std::list<FitMeasurement*>& measurements double totalDistanceSq = 0.; double totalEnergyDeposit = 0.; double totalThickness = 0.; - std::list<FitMeasurement*>::reverse_iterator start; - std::list<FitMeasurement*>::reverse_iterator previous = measurements.rbegin(); - for (std::list<FitMeasurement*>::reverse_iterator m = measurements.rbegin(); + std::vector<FitMeasurement*>::reverse_iterator start; + std::vector<FitMeasurement*>::reverse_iterator previous = measurements.rbegin(); + for (std::vector<FitMeasurement*>::reverse_iterator m = measurements.rbegin(); m != measurements.rend(); ++m) { @@ -2081,7 +2073,7 @@ MaterialAllocator::materialAggregation (std::list<FitMeasurement*>& measurements double previousDistance = 0.; haveAggregation = true; - for (std::list<Trk::FitMeasurement*>::reverse_iterator s = start; + for (std::vector<Trk::FitMeasurement*>::reverse_iterator s = start; s != measurements.rend(); ++s) { @@ -2223,11 +2215,11 @@ MaterialAllocator::materialAggregation (std::list<FitMeasurement*>& measurements { referencePosition = measurements.back()->intersection(FittedTrajectory).position(); referenceDirection = (referencePosition - measurements.front()->intersection(FittedTrajectory).position()).unit(); - std::list<Trk::FitMeasurement*>::reverse_iterator s = aggregateScatterers.rbegin(); + std::vector<Trk::FitMeasurement*>::reverse_iterator s = aggregateScatterers.rbegin(); Amg::Vector3D scattererPosition = (**s).intersection(FittedTrajectory).position(); double scattererDistance = std::abs(referenceDirection.dot(scattererPosition - referencePosition)); - for (std::list<Trk::FitMeasurement*>::iterator m = measurements.begin(); + for (std::vector<Trk::FitMeasurement*>::iterator m = measurements.begin(); m != measurements.end(); ++m) { @@ -2249,7 +2241,7 @@ MaterialAllocator::materialAggregation (std::list<FitMeasurement*>& measurements // delete the scatterer if it has been aggregated if ((**m).isOutlier()) delete *m; // in any case it must be removed from the list to avoid double counting - std::list<Trk::FitMeasurement*>::iterator n = m; + std::vector<Trk::FitMeasurement*>::iterator n = m; --m; measurements.erase(n); } @@ -2263,7 +2255,7 @@ MaterialAllocator::materialAggregation (std::list<FitMeasurement*>& measurements int n = 0; Amg::Vector3D startPosition = measurements.front()->intersection(FittedTrajectory).position(); Amg::Vector3D startDirection = measurements.front()->intersection(FittedTrajectory).direction(); - for (std::list<Trk::FitMeasurement*>::const_iterator m = measurements.begin(); + for (std::vector<Trk::FitMeasurement*>::const_iterator m = measurements.begin(); m != measurements.end(); ++m) { @@ -2298,24 +2290,18 @@ MaterialAllocator::materialAggregation (std::list<FitMeasurement*>& measurements // loops to erase material delimiters and set energy gain when appropriate bool energyGain = false; - for (std::list<Trk::FitMeasurement*>::iterator m = measurements.begin(); + for (std::vector<Trk::FitMeasurement*>::iterator m = measurements.begin(); m != measurements.end(); ++m) { if ((**m).materialEffects() && (**m).numberDoF() && (**m).energyLoss() < 0.) energyGain = true; - -// if (! (**m).isMaterialDelimiter()) continue; -// delete *m; -// std::list<Trk::FitMeasurement*>::iterator n = m; -// --m; -// measurements.erase(n); } if (energyGain) { - for (std::list<Trk::FitMeasurement*>::iterator m = measurements.begin(); + for (std::vector<Trk::FitMeasurement*>::iterator m = measurements.begin(); m != measurements.end(); ++m) { @@ -2347,13 +2333,13 @@ MaterialAllocator::measurementFromTSOS (const TrackStateOnSurface& tsos, } void -MaterialAllocator::printMeasurements(std::list<FitMeasurement*>& measurements) const +MaterialAllocator::printMeasurements(std::vector<FitMeasurement*>& measurements) const { ATH_MSG_VERBOSE( "measurements and material: distance X0 deltaE E pT" << " R phi Z DoF phi theta" ); if (! measurements.size()) return; - std::list<Trk::FitMeasurement*>::iterator m = measurements.begin(); + std::vector<Trk::FitMeasurement*>::iterator m = measurements.begin(); while (m != measurements.end() && ! (**m).isPositionMeasurement()) ++m; if (m == measurements.end()) m = measurements.begin(); @@ -2367,7 +2353,7 @@ MaterialAllocator::printMeasurements(std::list<FitMeasurement*>& measurements) c double leadingELoss = 0.; double sumELoss = 0.; int n = 0; - for (std::list<Trk::FitMeasurement*>::iterator m = measurements.begin(); + for (std::vector<Trk::FitMeasurement*>::iterator m = measurements.begin(); m != measurements.end(); ++m) { @@ -2458,7 +2444,7 @@ MaterialAllocator::printMeasurements(std::list<FitMeasurement*>& measurements) c } void -MaterialAllocator::spectrometerMaterial (std::list<FitMeasurement*>& measurements, +MaterialAllocator::spectrometerMaterial (std::vector<FitMeasurement*>& measurements, ParticleHypothesis particleHypothesis, const FitParameters& fitParameters, const TrackParameters& startParameters) const @@ -2481,7 +2467,7 @@ MaterialAllocator::spectrometerMaterial (std::list<FitMeasurement*>& measurement double minDistanceMS = 0.; double minRDistanceMS = 0.; double minZDistanceMS = 0.; - std::list<Trk::FitMeasurement*>::iterator m = measurements.begin(); + std::vector<Trk::FitMeasurement*>::iterator m = measurements.begin(); for ( ; m != measurements.end(); ++m) { Amg::Vector3D position = (**m).intersection(FittedTrajectory).position(); @@ -2605,7 +2591,7 @@ MaterialAllocator::spectrometerMaterial (std::list<FitMeasurement*>& measurement entranceIntersection = new TrackSurfaceIntersection(entranceParameters->position(), entranceParameters->momentum().unit(), 0.); - std::list<Trk::FitMeasurement*>::iterator e = measurements.begin(); + std::vector<Trk::FitMeasurement*>::iterator e = measurements.begin(); FitMeasurement* entranceDelimiter = new FitMeasurement(*entranceIntersection, 0.); for (m = measurements.begin(); m != measurements.end(); ++m) { @@ -2754,7 +2740,7 @@ MaterialAllocator::spectrometerMaterial (std::list<FitMeasurement*>& measurement std::vector<FitMeasurement*> material; double particleMass = ParticleMasses().mass[particleHypothesis]; material.reserve(spectrometerMaterial->size()); - std::list<FitMeasurement*>::iterator m = measurements.begin(); + std::vector<FitMeasurement*>::iterator m = measurements.begin(); for ( ; s != spectrometerMaterial->rend(); ) { const TrackStateOnSurface& tsos = **s; diff --git a/Tracking/TrkFitter/TrkiPatFitter/src/iPatFitter.cxx b/Tracking/TrkFitter/TrkiPatFitter/src/iPatFitter.cxx index a03e671edaa05e1d14e2399d0801d01082f9f96e..bea7a21ba60ed6e6f25748598a65079818de2d45 100755 --- a/Tracking/TrkFitter/TrkiPatFitter/src/iPatFitter.cxx +++ b/Tracking/TrkFitter/TrkiPatFitter/src/iPatFitter.cxx @@ -7,8 +7,6 @@ and fit quality. ***************************************************************************/ -//<<<<<< INCLUDES >>>>>> - #include <cmath> #include <iomanip> #include "EventPrimitives/EventPrimitives.h" @@ -48,8 +46,6 @@ namespace Trk { -//<<<<<< CLASS STRUCTURE INITIALIZATION >>>>>> - iPatFitter::iPatFitter (const std::string& type, const std::string& name, const IInterface* parent) @@ -120,8 +116,6 @@ iPatFitter::iPatFitter (const std::string& type, iPatFitter::~iPatFitter (void) {} -//<<<<<< PUBLIC MEMBER FUNCTION DEFINITIONS >>>>>> - StatusCode iPatFitter::initialize() { @@ -293,11 +287,9 @@ iPatFitter::finalize() // delete all objects owned by class if (m_globalFit && m_measurements) { - for (std::list<Trk::FitMeasurement*>::iterator m = m_measurements->begin(); - m != m_measurements->end(); - ++m) + for (auto m : *m_measurements) { - delete *m; + delete m; } m_measurements->clear(); } @@ -354,7 +346,7 @@ iPatFitter::fit (const Track& track, return 0; } - std::list<FitMeasurement*>* measurements = measurementList(); + std::vector<FitMeasurement*>* measurements = measurementList(); bool haveMaterial = addMeasurements(*measurements, *m_parameters, particleHypothesis, @@ -441,7 +433,7 @@ iPatFitter::fit (const Track& track, m_parameters = new FitParameters(*perigee); // set up the measurements (and material) - std::list<FitMeasurement*>* measurements = measurementList(); + std::vector<FitMeasurement*>* measurements = measurementList(); if (addMeasurements(*measurements,*m_parameters,particleHypothesis,*track.trackStateOnSurfaces())) m_messageHelper->printWarning(8); // FIX needed: material may get double counted addMeasurements(*measurements, @@ -489,7 +481,7 @@ iPatFitter::fit (const MeasurementSet& measurementSet, m_parameters = new FitParameters(*perigee); // set up the measurements (and material) - std::list<FitMeasurement*>* measurements = measurementList(); + std::vector<FitMeasurement*>* measurements = measurementList(); addMeasurements(*measurements,measurementSet,*m_parameters); if (particleHypothesis != Trk::nonInteracting) { @@ -517,7 +509,7 @@ iPatFitter::fit (const Track& indetTrack, // indet (full refit to measurements or use measured perigee) bool haveMaterial = true; - std::list<FitMeasurement*>* measurements = measurementList(); + std::vector<FitMeasurement*>* measurements = measurementList(); delete m_parameters; if (indetTrack.perigeeParameters()) { @@ -620,7 +612,7 @@ iPatFitter::fit (const Track& indetTrack, m_messageHelper->printWarning(14); return 0; } - measurements->push_front(new FitMeasurement(*indetPerigee)); + measurements->insert(measurements->begin(), new FitMeasurement(*indetPerigee)); FitParameters measuredParameters(*indetPerigee); Trk::Track* fittedTrack = performFit(measurements, &measuredParameters, @@ -637,10 +629,8 @@ iPatFitter::fit (const Track& indetTrack, } } -//<<<<<< PRIVATE MEMBER FUNCTION DEFINITIONS >>>>>> - void -iPatFitter::addMeasurements (std::list<FitMeasurement*>& measurements, +iPatFitter::addMeasurements (std::vector<FitMeasurement*>& measurements, const MeasurementSet& measurementSet, const FitParameters& parameters) const { @@ -737,7 +727,7 @@ iPatFitter::addMeasurements (std::list<FitMeasurement*>& measurements, } bool -iPatFitter::addMeasurements (std::list<FitMeasurement*>& measurements, +iPatFitter::addMeasurements (std::vector<FitMeasurement*>& measurements, const FitParameters& parameters, ParticleHypothesis particleHypothesis, const DataVector<const TrackStateOnSurface>& trackStateOnSurfaces) const @@ -1103,29 +1093,27 @@ iPatFitter::addMeasurements (std::list<FitMeasurement*>& measurements, return haveMaterial; } -std::list<FitMeasurement*>*& +std::vector<FitMeasurement*>*& iPatFitter::measurementList (void) const { if (m_globalFit && m_measurements) { - for (std::list<Trk::FitMeasurement*>::iterator m = m_measurements->begin(); - m != m_measurements->end(); - ++m) + for (auto m : *m_measurements) { - delete *m; + delete m; } m_measurements->clear(); } else { - m_measurements = new std::list<FitMeasurement*>; + m_measurements = new std::vector<FitMeasurement*>; } return m_measurements; } Track* -iPatFitter::performFit(std::list<FitMeasurement*>* measurements, +iPatFitter::performFit(std::vector<FitMeasurement*>* measurements, FitParameters* parameters, const ParticleHypothesis particleHypothesis, const TrackInfo& trackInfo, @@ -1219,42 +1207,40 @@ iPatFitter::performFit(std::list<FitMeasurement*>* measurements, int spect = 0; double spectX0 = 0.; double spectEloss = 0.; - for (std::list<FitMeasurement*>::const_iterator m = measurements->begin(); - m != measurements->end(); - ++m) + for (auto m : *measurements) { - if ((**m).isEnergyDeposit()) + if (m->isEnergyDeposit()) { ++calo; - caloEloss += (**m).energyLoss(); + caloEloss += m->energyLoss(); } - else if (! (**m).isScatterer()) + else if (! m->isScatterer()) { continue; } - if (m_indetVolume->inside((**m).position())) + if (m_indetVolume->inside(m->position())) { ++indet; - indetX0 += (**m).materialEffects()->thicknessInX0(); - indetEloss += (**m).energyLoss(); + indetX0 += m->materialEffects()->thicknessInX0(); + indetEloss += m->energyLoss(); // conflicting energy deposit sign for inDet material - if ((**m).energyLoss()*indetEloss < 0.) m_messageHelper->printWarning(21); + if (m->energyLoss()*indetEloss < 0.) m_messageHelper->printWarning(21); continue; } else if (m_calorimeterVolume->inside( - (**m).intersection(FittedTrajectory).position())) + m->intersection(FittedTrajectory).position())) { ++calo; - caloX0 += (**m).materialEffects()->thicknessInX0(); + caloX0 += m->materialEffects()->thicknessInX0(); continue; } ++spect; - spectX0 += (**m).materialEffects()->thicknessInX0(); - spectEloss += (**m).energyLoss(); + spectX0 += m->materialEffects()->thicknessInX0(); + spectEloss += m->energyLoss(); // conflicting energy deposit sign for spectrometer material - if ((**m).energyLoss()*spectEloss < 0.) m_messageHelper->printWarning(22); + if (m->energyLoss()*spectEloss < 0.) m_messageHelper->printWarning(22); } // WARN in case of bug #56297 @@ -1326,11 +1312,9 @@ iPatFitter::performFit(std::list<FitMeasurement*>* measurements, // clean up and return if (! m_globalFit || ! fittedTrack) { - for (std::list<Trk::FitMeasurement*>::iterator m = measurements->begin(); - m != measurements->end(); - ++m) + for (auto m: *m_measurements) { - delete *m; + delete m; } measurements->clear(); delete measurements; @@ -1446,7 +1430,7 @@ iPatFitter::refit(const Track& track, return; } - std::list<FitMeasurement*>* measurements = measurementList(); + std::vector<FitMeasurement*>* measurements = measurementList(); bool haveMaterial = addMeasurements(*measurements, *m_parameters, particleHypothesis, diff --git a/Tracking/TrkFitter/TrkiPatFitter/src/iPatGlobalFitter.cxx b/Tracking/TrkFitter/TrkiPatFitter/src/iPatGlobalFitter.cxx index b2d80f3de0ec238b2985e59d4a591d58209e6383..ece214fac7f5330f467991ebf0f3c3a19a9d1838 100755 --- a/Tracking/TrkFitter/TrkiPatFitter/src/iPatGlobalFitter.cxx +++ b/Tracking/TrkFitter/TrkiPatFitter/src/iPatGlobalFitter.cxx @@ -9,7 +9,6 @@ // (c) ATLAS Detector software /////////////////////////////////////////////////////////////////// -//<<<<<< INCLUDES >>>>>> #include "GaudiKernel/SystemOfUnits.h" #include "TrkiPatFitterUtils/ExtrapolationType.h" @@ -21,8 +20,6 @@ namespace Trk { -//<<<<<< CLASS STRUCTURE INITIALIZATION >>>>>> - iPatGlobalFitter::iPatGlobalFitter (const std::string& type, const std::string& name, const IInterface* parent) @@ -40,8 +37,6 @@ iPatGlobalFitter::~iPatGlobalFitter (void) delete m_derivativeMatrix; } -//<<<<<< PUBLIC MEMBER FUNCTION DEFINITIONS >>>>>> - Amg::MatrixX* iPatGlobalFitter::DerivMatrix() const { @@ -53,7 +48,7 @@ iPatGlobalFitter::DerivMatrix() const int numberParameters = 5; if (m_allParameters) numberParameters = m_parameters->numberParameters(); int rows = 0; - for (std::list<FitMeasurement*>::iterator m = m_measurements->begin(); + for (std::vector<FitMeasurement*>::iterator m = m_measurements->begin(); m != m_measurements->end(); ++m) { @@ -68,7 +63,7 @@ iPatGlobalFitter::DerivMatrix() const m_derivativeMatrix = new Amg::MatrixX(rows,numberParameters); int row = 0; - for (std::list<FitMeasurement*>::iterator m = m_measurements->begin(); + for (std::vector<FitMeasurement*>::iterator m = m_measurements->begin(); m != m_measurements->end(); ++m) { @@ -118,7 +113,6 @@ int iPatGlobalFitter::iterationsOfLastFit() const { return m_iterations; } -//<<<<<< PRIVATE MEMBER FUNCTION DEFINITIONS >>>>>> void iPatGlobalFitter::setMinIterations(int minIterations) diff --git a/Tracking/TrkFitter/TrkiPatFitterUtils/TrkiPatFitterUtils/FitMatrices.h b/Tracking/TrkFitter/TrkiPatFitterUtils/TrkiPatFitterUtils/FitMatrices.h index 6cf8f21c160dfe0b6cab7183b170eb5d52067cda..2205bc52de7d2f2bb57aeb7f4f8bf2f568b4fe85 100755 --- a/Tracking/TrkFitter/TrkiPatFitterUtils/TrkiPatFitterUtils/FitMatrices.h +++ b/Tracking/TrkFitter/TrkiPatFitterUtils/TrkiPatFitterUtils/FitMatrices.h @@ -92,7 +92,7 @@ namespace Trk void releaseMemory (void); // initialize matrices - set appropriate dimensions for a given set of measurements - int setDimensions (std::list<FitMeasurement*>& measurements, + int setDimensions (std::vector<FitMeasurement*>& measurements, FitParameters* parameters); // solve matrix equations for parameters change @@ -120,7 +120,7 @@ namespace Trk double m_largePhiWeight; std::vector<int> m_lastRowForParameter; bool m_matrixFromCLHEP; - std::list<FitMeasurement*>* m_measurements; + std::vector<FitMeasurement*>* m_measurements; int m_numberDoF; int m_numberDriftCircles; int m_numberPerigee; diff --git a/Tracking/TrkFitter/TrkiPatFitterUtils/TrkiPatFitterUtils/FitProcedure.h b/Tracking/TrkFitter/TrkiPatFitterUtils/TrkiPatFitterUtils/FitProcedure.h index cd7ed4cdb9b3d877ce0c9bc6f55c6d56073460eb..60c80d4bf5a996a4e3f24ba9732ef4152a33e6eb 100755 --- a/Tracking/TrkFitter/TrkiPatFitterUtils/TrkiPatFitterUtils/FitProcedure.h +++ b/Tracking/TrkFitter/TrkiPatFitterUtils/TrkiPatFitterUtils/FitProcedure.h @@ -17,11 +17,11 @@ ////////////////////////////////////////////////////////////////////////////// #ifndef TRKIPATFITTERUTILS_FITPROCEDURE_H -# define TRKIPATFITTERUTILS_FITPROCEDURE_H +#define TRKIPATFITTERUTILS_FITPROCEDURE_H //<<<<<< INCLUDES >>>>>> -#include <list> +#include <vector> #include "DataModel/DataVector.h" #include "GaudiKernel/ToolHandle.h" #include "TrkEventPrimitives/ParticleHypothesis.h" @@ -66,7 +66,7 @@ public: void clear (void); // retrieve result - Track* constructTrack (const std::list<FitMeasurement*>& measurements, + Track* constructTrack (const std::vector<FitMeasurement*>& measurements, const FitParameters& parameters, const TrackInfo& trackInfo, const DataVector<const TrackStateOnSurface>* leadingTSOS = 0); @@ -74,7 +74,7 @@ public: // perform fit procedure const FitProcedureQuality& execute (bool asymmetricCaloEnergy, MsgStream& log, - std::list<FitMeasurement*>& measurements, + std::vector<FitMeasurement*>& measurements, FitParameters*& parameters, const FitQuality* perigeeQuality = 0, bool for_iPatTrack = false); @@ -90,10 +90,10 @@ private: FitProcedure (const FitProcedure&); FitProcedure &operator= (const FitProcedure&); - void calculateChiSq(std::list<FitMeasurement*>& measurements); - ToolHandle<IIntersector>& chooseIntersector(std::list<FitMeasurement*>& measurements, + void calculateChiSq(std::vector<FitMeasurement*>& measurements); + ToolHandle<IIntersector>& chooseIntersector(std::vector<FitMeasurement*>& measurements, const FitParameters& parameters) const; - void reportQuality(const std::list<FitMeasurement*>& measurements, + void reportQuality(const std::vector<FitMeasurement*>& measurements, const FitParameters& parameters) const; double m_chRatio1; diff --git a/Tracking/TrkFitter/TrkiPatFitterUtils/TrkiPatFitterUtils/IMaterialAllocator.h b/Tracking/TrkFitter/TrkiPatFitterUtils/TrkiPatFitterUtils/IMaterialAllocator.h index d721939774f10d131c9483559292de5d91edb208..6c9b65c79efc132cebaa58cbedb8d19d9f29a3ee 100755 --- a/Tracking/TrkFitter/TrkiPatFitterUtils/TrkiPatFitterUtils/IMaterialAllocator.h +++ b/Tracking/TrkFitter/TrkiPatFitterUtils/TrkiPatFitterUtils/IMaterialAllocator.h @@ -13,7 +13,6 @@ #ifndef TRKIPATFITTERUTILS_IMATERIALALLOCATOR_H #define TRKIPATFITTERUTILS_IMATERIALALLOCATOR_H -#include <list> #include <vector> #include "GaudiKernel/IAlgTool.h" #include "TrkEventPrimitives/ParticleHypothesis.h" @@ -48,12 +47,12 @@ public: static const InterfaceID& interfaceID() { return IID_IMaterialAllocator; } /**IMaterialAllocator interface: add leading material effects to fit measurements and parameters */ - virtual void addLeadingMaterial (std::list<FitMeasurement*>& measurements, - ParticleHypothesis particleHypothesis, - FitParameters& fitParameters) const = 0; + virtual void addLeadingMaterial (std::vector<FitMeasurement*>& measurements, + ParticleHypothesis particleHypothesis, + FitParameters& fitParameters) const = 0; /**IMaterialAllocator interface: allocate material */ - virtual void allocateMaterial (std::list<FitMeasurement*>& measurements, + virtual void allocateMaterial (std::vector<FitMeasurement*>& measurements, ParticleHypothesis particleHypothesis, const FitParameters& fitParameters, const TrackParameters& startParameters) const = 0; @@ -62,7 +61,7 @@ public: virtual void clear (void) = 0; /**IMaterialAllocator interface: initialize scattering (needs to know X0 integral) */ - virtual void initializeScattering (std::list<FitMeasurement*>& measurements) const = 0; + virtual void initializeScattering (std::vector<FitMeasurement*>& measurements) const = 0; /**IMaterialAllocator interface: material TSOS between spectrometer entrance surface and parameters given in spectrometer */ @@ -70,13 +69,13 @@ public: const TrackParameters& spectrometerParameters) const = 0; /**IMaterialAllocator interface: clear temporary TSOS*/ - virtual void orderMeasurements (std::list<FitMeasurement*>& measurements, - Amg::Vector3D startDirection, - Amg::Vector3D startPosition) const = 0; + virtual void orderMeasurements (std::vector<FitMeasurement*>& measurements, + Amg::Vector3D startDirection, + Amg::Vector3D startPosition) const = 0; /**IMaterialAllocator interface: has material been reallocated? */ - virtual bool reallocateMaterial (std::list<FitMeasurement*>& measurements, - const FitParameters& fitParameters) const = 0; + virtual bool reallocateMaterial (std::vector<FitMeasurement*>& measurements, + const FitParameters& fitParameters) const = 0; }; diff --git a/Tracking/TrkFitter/TrkiPatFitterUtils/TrkiPatFitterUtils/MeasurementProcessor.h b/Tracking/TrkFitter/TrkiPatFitterUtils/TrkiPatFitterUtils/MeasurementProcessor.h index d27845fc4d196e045a011898c2fd424cc1364ae5..c904066cab6aa2e7fa12a8be7d50f4c2710f7ce6 100755 --- a/Tracking/TrkFitter/TrkiPatFitterUtils/TrkiPatFitterUtils/MeasurementProcessor.h +++ b/Tracking/TrkFitter/TrkiPatFitterUtils/TrkiPatFitterUtils/MeasurementProcessor.h @@ -34,7 +34,7 @@ public: MeasurementProcessor (bool asymmetricCaloEnergy, Amg::MatrixX& derivativeMatrix, ToolHandle<IIntersector>& intersector, - std::list<FitMeasurement*>& measurements, + std::vector<FitMeasurement*>& measurements, FitParameters* parameters, ToolHandle<IIntersector>& rungeKuttaIntersector, const ToolHandle<IPropagator>& stepPropagator, @@ -71,7 +71,7 @@ private: ToolHandle<IIntersector>& m_intersector; double m_largeDeltaD0; double m_largeDeltaPhi0; - std::list<FitMeasurement*>& m_measurements; + std::vector<FitMeasurement*>& m_measurements; //double m_minDistanceForAngle; bool m_numericDerivatives; FitParameters* m_parameters; diff --git a/Tracking/TrkFitter/TrkiPatFitterUtils/src/FitMatrices.cxx b/Tracking/TrkFitter/TrkiPatFitterUtils/src/FitMatrices.cxx index cc5e2ff27bc71b6601b9357e31eab8ab714b4774..524d13f92f32b7f28af1aea4ccee1374dd865258 100755 --- a/Tracking/TrkFitter/TrkiPatFitterUtils/src/FitMatrices.cxx +++ b/Tracking/TrkFitter/TrkiPatFitterUtils/src/FitMatrices.cxx @@ -23,8 +23,6 @@ // (c) ATLAS tracking software ////////////////////////////////////////////////////////////////////////////// -//<<<<<< INCLUDES >>>>>> - #include <iomanip> #include <iostream> #include "GaudiKernel/MsgStream.h" @@ -35,8 +33,6 @@ #include "TrkiPatFitterUtils/FitMeasurement.h" #include "TrkiPatFitterUtils/FitParameters.h" -//<<<<<< CLASS STRUCTURE INITIALIZATION >>>>>> - namespace Trk{ FitMatrices::FitMatrices(bool constrainedAlignmentEffects) @@ -72,8 +68,6 @@ FitMatrices::~FitMatrices(void) delete m_weightedDifference; } -//<<<<<< PUBLIC MEMBER FUNCTION DEFINITIONS >>>>>> - void FitMatrices::checkPointers (MsgStream& log) const { @@ -230,7 +224,7 @@ FitMatrices::printDerivativeMatrix (void) int firstCol = 0; int lastCol = 0; if (! m_measurements) return; - std::list<FitMeasurement*>::iterator m = m_measurements->begin(); + std::vector<FitMeasurement*>::iterator m = m_measurements->begin(); std::vector<FitMeasurement*> alignmentfm; FitMeasurement* fm = *m; bool singleRow = true; @@ -379,8 +373,8 @@ FitMatrices::releaseMemory (void) } int -FitMatrices::setDimensions (std::list<FitMeasurement*>& measurements, - FitParameters* parameters) +FitMatrices::setDimensions (std::vector<FitMeasurement*>& measurements, + FitParameters* parameters) { // keep pointer for debug purposes m_measurements = &measurements; @@ -407,7 +401,7 @@ FitMatrices::setDimensions (std::list<FitMeasurement*>& measurements, // keep first row with measurements up to each number of parameters m_firstRowForParameter = std::vector<int>(numberParameters,-1); - std::list<FitMeasurement*>::iterator m = measurements.begin(); + std::vector<FitMeasurement*>::iterator m = measurements.begin(); if ((**m).isVertex()) { haveVertex = true; @@ -733,7 +727,6 @@ FitMatrices::usePerigee (const FitMeasurement& measurement) } -//<<<<<< PRIVATE MEMBER FUNCTION DEFINITIONS >>>>>> void FitMatrices::addPerigeeMeasurement (void) diff --git a/Tracking/TrkFitter/TrkiPatFitterUtils/src/FitMeasurement.cxx b/Tracking/TrkFitter/TrkiPatFitterUtils/src/FitMeasurement.cxx index 09268e3008ea4110674ea3680a03d0440b956ae0..a005b63d24d5a70017d63a31a8437b646469fe13 100755 --- a/Tracking/TrkFitter/TrkiPatFitterUtils/src/FitMeasurement.cxx +++ b/Tracking/TrkFitter/TrkiPatFitterUtils/src/FitMeasurement.cxx @@ -8,8 +8,6 @@ i.e. position, surface, weights, intersection, derivatives, residual etc ***************************************************************************/ -//<<<<<< INCLUDES >>>>>> - #include <cmath> #include <iomanip> #include <iostream> @@ -38,8 +36,6 @@ namespace Trk{ -//<<<<<< CLASS STRUCTURE INITIALIZATION >>>>>> - // MeasurementBase FitMeasurement::FitMeasurement (int hitIndex, HitOnTrack* hitOnTrack, @@ -1017,8 +1013,6 @@ FitMeasurement::~FitMeasurement (void) if (m_materialEffects && m_materialEffectsOwner) delete m_materialEffects; } -//<<<<<< MEMBER FUNCTION DEFINITIONS >>>>>> - void FitMeasurement::intersection (ExtrapolationType type, const TrackSurfaceIntersection* value) diff --git a/Tracking/TrkFitter/TrkiPatFitterUtils/src/FitParameters.cxx b/Tracking/TrkFitter/TrkiPatFitterUtils/src/FitParameters.cxx index a976bcc6b195864280347417eb15748c2f4d296f..79ed4fb95a09d17e1ef28839eb96a2f313f6bcfd 100755 --- a/Tracking/TrkFitter/TrkiPatFitterUtils/src/FitParameters.cxx +++ b/Tracking/TrkFitter/TrkiPatFitterUtils/src/FitParameters.cxx @@ -6,8 +6,6 @@ local parameter values used during fitter ***************************************************************************/ -//<<<<<< INCLUDES >>>>>> - #include <cmath> #include <iomanip> #include <iostream> @@ -24,8 +22,6 @@ namespace Trk{ -//<<<<<< CLASS STRUCTURE INITIALIZATION >>>>>> - FitParameters::FitParameters (const Perigee& perigee) : m_cosPhi1 (0.), m_cosTheta1 (0.), @@ -159,8 +155,6 @@ FitParameters::~FitParameters (void) delete m_differences; } -//<<<<<< MEMBER FUNCTION DEFINITIONS >>>>>> - void FitParameters::addAlignment (bool constrained, double angle, double offset) { diff --git a/Tracking/TrkFitter/TrkiPatFitterUtils/src/FitProcedure.cxx b/Tracking/TrkFitter/TrkiPatFitterUtils/src/FitProcedure.cxx index e895e66daaec16f425377d9fac06d8f322f9d0fc..1b0902b2826610f22e0bf2cfe820ca35c51219f6 100755 --- a/Tracking/TrkFitter/TrkiPatFitterUtils/src/FitProcedure.cxx +++ b/Tracking/TrkFitter/TrkiPatFitterUtils/src/FitProcedure.cxx @@ -43,9 +43,6 @@ namespace Trk{ -//<<<<<< CLASS STRUCTURE INITIALIZATION >>>>>> - - // constructor FitProcedure::FitProcedure (bool constrainedAlignmentEffects, bool extendedDebug, @@ -105,8 +102,6 @@ FitProcedure::~FitProcedure (void) delete m_fitQuality; } -//<<<<<< PUBLIC MEMBER FUNCTION DEFINITIONS >>>>>> - void FitProcedure::clear (void) { @@ -114,7 +109,7 @@ FitProcedure::clear (void) } Track* -FitProcedure::constructTrack (const std::list<FitMeasurement*>& measurements, +FitProcedure::constructTrack (const std::vector<FitMeasurement*>& measurements, const FitParameters& parameters, const TrackInfo& trackInfo, const DataVector<const TrackStateOnSurface>* leadingTSOS) @@ -170,14 +165,12 @@ FitProcedure::constructTrack (const std::list<FitMeasurement*>& measurements, } // then append the fitted TSOS - for (std::list<FitMeasurement*>::const_iterator m = measurements.begin(); - m != measurements.end(); - ++m) + for (auto m : measurements) { - if ((**m).isMaterialDelimiter()) continue; + if (m->isMaterialDelimiter()) continue; // push back previous TSOS when fresh surface reached - if ((**m).surface() != surface || alignmentEffects || (**m).alignmentEffects()) + if (m->surface() != surface || alignmentEffects || m->alignmentEffects()) { if (surface) { @@ -186,8 +179,8 @@ FitProcedure::constructTrack (const std::list<FitMeasurement*>& measurements, if (m_debug) { *m_log << MSG::DEBUG << " skip empty TSOS# " << tsos + 1; - if ((**m).materialEffects()) *m_log << " with material"; - (**m).print(*m_log); + if (m->materialEffects()) *m_log << " with material"; + m->print(*m_log); *m_log << endmsg; } } @@ -198,6 +191,7 @@ FitProcedure::constructTrack (const std::list<FitMeasurement*>& measurements, trackParameters = parameters.trackParameters(*m_log, *fitMeasurement, withCovariance); + if (! trackParameters) { *m_log << MSG::WARNING @@ -216,8 +210,8 @@ FitProcedure::constructTrack (const std::list<FitMeasurement*>& measurements, ++tsos; } } - fitMeasurement = *m; - surface = (**m).surface(); + fitMeasurement = m; + surface = m->surface(); measurementBase = 0; fitQoS = 0; materialEffects = 0; @@ -226,12 +220,12 @@ FitProcedure::constructTrack (const std::list<FitMeasurement*>& measurements, } else { - fitMeasurement = *m; + fitMeasurement = m; if (m_verbose) *m_log << MSG::VERBOSE << " tsos# " << tsos << " shared surface" << endmsg; } // it's a measurement - if ((**m).measurementBase()) + if (m->measurementBase()) { // create an extra TSOS if there is already a measurement on this surface // (dirty fix for pseudoMeasurements) @@ -258,77 +252,77 @@ FitProcedure::constructTrack (const std::list<FitMeasurement*>& measurements, typePattern, alignmentEffects)); ++tsos; - fitMeasurement = *m; + fitMeasurement = m; fitQoS = 0; materialEffects = 0; typePattern = defaultPattern; alignmentEffects = 0; } - measurementBase = (**m).measurementBase()->clone(); + measurementBase = m->measurementBase()->clone(); typePattern.set(TrackStateOnSurface::Measurement); - if ((**m).isOutlier()) typePattern.set(TrackStateOnSurface::Outlier); + if (m->isOutlier()) typePattern.set(TrackStateOnSurface::Outlier); } // it's a CaloDeposit or Scatterer (scatterers may be fitted or not fitted) - if ((**m).materialEffects()) + if (m->materialEffects()) { // update momentum to account for energy loss delete materialEffects; - if ((**m).isEnergyDeposit()) + if (m->isEnergyDeposit()) { - materialEffects = (**m).materialEffects()->clone(); + materialEffects = m->materialEffects()->clone(); typePattern.set(TrackStateOnSurface::CaloDeposit); } - else if ((**m).isScatterer()) + else if (m->isScatterer()) { // set materialPattern as the scattering parameters are fitted std::bitset<MaterialEffectsBase::NumberOfMaterialEffectsTypes> typeMaterial; typeMaterial.set(MaterialEffectsBase::FittedMaterialEffects); const MaterialEffectsOnTrack* meot = - dynamic_cast<const MaterialEffectsOnTrack*>((**m).materialEffects()); + dynamic_cast<const MaterialEffectsOnTrack*>(m->materialEffects()); if (meot && meot->energyLoss()) // standard scatterer { const EnergyLoss* energyLoss = meot->energyLoss()->clone(); typeMaterial.set(Trk::MaterialEffectsBase::EnergyLossEffects); - if ((**m).numberDoF()) // fitted scatterer + if (m->numberDoF()) // fitted scatterer { materialEffects = - new MaterialEffectsOnTrack((**m).materialEffects()->thicknessInX0(), - parameters.scatteringAngles(**m,scatter), + new MaterialEffectsOnTrack(m->materialEffects()->thicknessInX0(), + parameters.scatteringAngles(*m,scatter), energyLoss, - (**m).materialEffects()->associatedSurface(), + m->materialEffects()->associatedSurface(), typeMaterial); ++scatter; } else // unfitted (leading material) { materialEffects = - new MaterialEffectsOnTrack((**m).materialEffects()->thicknessInX0(), - parameters.scatteringAngles(**m), + new MaterialEffectsOnTrack(m->materialEffects()->thicknessInX0(), + parameters.scatteringAngles(*m), energyLoss, - (**m).materialEffects()->associatedSurface(), + m->materialEffects()->associatedSurface(), typeMaterial); } } else // no meot for special calo scattering centres { - if ((**m).numberDoF()) // fitted scatterer + if (m->numberDoF()) // fitted scatterer { materialEffects = - new MaterialEffectsOnTrack((**m).materialEffects()->thicknessInX0(), - parameters.scatteringAngles(**m,scatter), - (**m).materialEffects()->associatedSurface(), + new MaterialEffectsOnTrack(m->materialEffects()->thicknessInX0(), + parameters.scatteringAngles(*m,scatter), + m->materialEffects()->associatedSurface(), typeMaterial); ++scatter; } else // unfitted (leading material) { materialEffects = - new MaterialEffectsOnTrack((**m).materialEffects()->thicknessInX0(), - parameters.scatteringAngles(**m), - (**m).materialEffects()->associatedSurface(), + new MaterialEffectsOnTrack(m->materialEffects()->thicknessInX0(), + parameters.scatteringAngles(*m), + m->materialEffects()->associatedSurface(), typeMaterial); } } @@ -338,22 +332,22 @@ FitProcedure::constructTrack (const std::list<FitMeasurement*>& measurements, else { *m_log << MSG::WARNING <<" deprecated TrackStateOnSurface::InertMaterial" << endmsg; - materialEffects = (**m).materialEffects()->clone(); + materialEffects = m->materialEffects()->clone(); typePattern.set(TrackStateOnSurface::InertMaterial); } } // additional perigee (e.g. at MS entrance) - if ((**m).isPerigee()) + if (m->isPerigee()) { typePattern.set(TrackStateOnSurface::Perigee); } // or alignment effects - else if ((**m).alignmentEffects()) + else if (m->alignmentEffects()) { - const AlignmentEffectsOnTrack& AEOT = *(**m).alignmentEffects(); - unsigned align = (**m).alignmentParameter() - 1; + const AlignmentEffectsOnTrack& AEOT = *m->alignmentEffects(); + unsigned align = m->alignmentParameter() - 1; *m_log << MSG::VERBOSE <<" Fitprocedure AEOT input deltaTranslation " << AEOT.deltaTranslation() << " deltaAngle " << AEOT.deltaAngle() << " output Trans " << parameters.alignmentOffset(align) << " deltaAngle " << parameters.alignmentAngle(align) << endmsg; alignmentEffects = @@ -362,14 +356,14 @@ FitProcedure::constructTrack (const std::list<FitMeasurement*>& measurements, parameters.alignmentAngle(align), AEOT.sigmaDeltaAngle(), AEOT.vectorOfAffectedTSOS(), - (**m).surface()); + m->surface()); typePattern.set(TrackStateOnSurface::Alignment); } // passive types: hole for now - else if ((**m).isPassive()) + else if (m->isPassive()) { - if ((**m).type() == hole) typePattern.set(TrackStateOnSurface::Hole); + if (m->type() == hole) typePattern.set(TrackStateOnSurface::Hole); } } @@ -406,7 +400,7 @@ FitProcedure::constructTrack (const std::list<FitMeasurement*>& measurements, const FitProcedureQuality& FitProcedure::execute(bool asymmetricCaloEnergy, MsgStream& log, - std::list<FitMeasurement*>& measurements, + std::vector<FitMeasurement*>& measurements, FitParameters*& parameters, const FitQuality* perigeeQuality, bool for_iPatTrack) @@ -791,10 +785,8 @@ FitProcedure::setMinIterations (int minIter) if (m_minIter > m_maxIter) m_maxIter = m_minIter; } -//<<<<<< PRIVATE MEMBER FUNCTION DEFINITIONS >>>>>> - void -FitProcedure::calculateChiSq(std::list<FitMeasurement*>& measurements) +FitProcedure::calculateChiSq(std::vector<FitMeasurement*>& measurements) { // convergence criterion const double dChisqConv = 0.025; @@ -804,41 +796,39 @@ FitProcedure::calculateChiSq(std::list<FitMeasurement*>& measurements) m_chiSq = 0.; double driftResidual= 0.; double DSqMax = 0.; - for (std::list<FitMeasurement*>::iterator m = measurements.begin(); - m != measurements.end(); - ++m) + for (auto m : measurements) { - if (! (**m).numberDoF()) continue; - // if ((**m).isPerigee()) + if (! m->numberDoF()) continue; + // if (m->isPerigee()) // { // m_chiSq += m_fitMatrices->perigeeChiSquared(); // continue; // } - double residual = (**m).residual(); + double residual = m->residual(); double DiffSq = residual*residual; m_chiSq += DiffSq; - if ((**m).isPositionMeasurement()) + if (m->isPositionMeasurement()) { - if ((**m).isDrift()) driftResidual += residual; + if (m->isDrift()) driftResidual += residual; if (DiffSq > DSqMax) { DSqMax = DiffSq; - m_worstMeasurement = (**m).hitIndex() + 1; + m_worstMeasurement = m->hitIndex() + 1; m_chiSqWorst = std::min(999.,DSqMax); } } - if ((**m).is2Dimensional()) + if (m->is2Dimensional()) { - residual = (**m).residual2(); + residual = m->residual2(); DiffSq = residual*residual; m_chiSq += DiffSq; - if ((**m).isPositionMeasurement()) + if (m->isPositionMeasurement()) { if (DiffSq > DSqMax) { DSqMax = DiffSq; - m_worstMeasurement = (**m).hitIndex() + 1; + m_worstMeasurement = m->hitIndex() + 1; m_chiSqWorst = std::min(999.,DSqMax); } } @@ -932,16 +922,14 @@ FitProcedure::calculateChiSq(std::list<FitMeasurement*>& measurements) (**measurements.begin()).printHeading(*m_log); int n = 0; - for (std::list<FitMeasurement*>::iterator m = measurements.begin(); - m != measurements.end(); - ++m) + for (auto m : measurements) { *m_log << std::setiosflags(std::ios::fixed) << std::setw(3) << ++n; - if ((**m).isPerigee()) + if (m->isPerigee()) { *m_log << " perigee "; - // if ((**m).numberDoF()) + // if (m->numberDoF()) // *m_log << std::setw(14) << std::setprecision(3) // << m_fitMatrices->perigeeChiSquared() // << " (chi2 for 5 degF) "; @@ -949,7 +937,7 @@ FitProcedure::calculateChiSq(std::list<FitMeasurement*>& measurements) } else { - (**m).print(*m_log); + m->print(*m_log); } } } @@ -1011,7 +999,7 @@ FitProcedure::calculateChiSq(std::list<FitMeasurement*>& measurements) } ToolHandle<IIntersector>& -FitProcedure::chooseIntersector (std::list<FitMeasurement*>& measurements, +FitProcedure::chooseIntersector (std::vector<FitMeasurement*>& measurements, const FitParameters& parameters) const { if (m_lineFit) return m_straightLineIntersector; @@ -1020,7 +1008,7 @@ FitProcedure::chooseIntersector (std::list<FitMeasurement*>& measurements, // ToolHandle<IIntersector>& intersector = m_rungeKuttaIntersector; // solenoidal intersector must start close to origin with last measurement inside valid region - for (std::list<FitMeasurement*>::reverse_iterator m = measurements.rbegin(); + for (std::vector<FitMeasurement*>::reverse_iterator m = measurements.rbegin(); m != measurements.rend(); ++m) { @@ -1033,7 +1021,7 @@ FitProcedure::chooseIntersector (std::list<FitMeasurement*>& measurements, } void -FitProcedure::reportQuality(const std::list<FitMeasurement*>& measurements, +FitProcedure::reportQuality(const std::vector<FitMeasurement*>& measurements, const FitParameters& parameters) const { if (! m_fitQuality) return; diff --git a/Tracking/TrkFitter/TrkiPatFitterUtils/src/FitProcedureQuality.cxx b/Tracking/TrkFitter/TrkiPatFitterUtils/src/FitProcedureQuality.cxx index b57b4d10e65d7aabdea11995beb302a757fd1bd3..62446159f915d4db016e057cb078acfce7caa1da 100755 --- a/Tracking/TrkFitter/TrkiPatFitterUtils/src/FitProcedureQuality.cxx +++ b/Tracking/TrkFitter/TrkiPatFitterUtils/src/FitProcedureQuality.cxx @@ -6,15 +6,11 @@ quality variables produced during fit procedure ***************************************************************************/ -//<<<<<< INCLUDES >>>>>> - #include <iostream> #include <iomanip> #include "GaudiKernel/MsgStream.h" #include "TrkiPatFitterUtils/FitProcedureQuality.h" -//<<<<<< CLASS STRUCTURE INITIALIZATION >>>>>> - namespace Trk{ void diff --git a/Tracking/TrkFitter/TrkiPatFitterUtils/src/MeasurementProcessor.cxx b/Tracking/TrkFitter/TrkiPatFitterUtils/src/MeasurementProcessor.cxx index 1a86db7ec527760589c3772a8784c33f115bd542..bd48e5140849b7f68d42145d695376d2921701ff 100755 --- a/Tracking/TrkFitter/TrkiPatFitterUtils/src/MeasurementProcessor.cxx +++ b/Tracking/TrkFitter/TrkiPatFitterUtils/src/MeasurementProcessor.cxx @@ -23,14 +23,11 @@ namespace Trk{ -//<<<<<< CLASS STRUCTURE INITIALIZATION >>>>>> - - // constructor MeasurementProcessor::MeasurementProcessor (bool asymmetricCaloEnergy, Amg::MatrixX& /*derivativeMatrix*/, ToolHandle<IIntersector>& intersector, - std::list<FitMeasurement*>& measurements, + std::vector<FitMeasurement*>& measurements, FitParameters* parameters, ToolHandle<IIntersector>& rungeKuttaIntersector, const ToolHandle<IPropagator>& stepPropagator, @@ -47,8 +44,8 @@ MeasurementProcessor::MeasurementProcessor (bool asymmetricCaloEnergy, m_intersector (intersector), m_largeDeltaD0 (50.*Gaudi::Units::mm), m_largeDeltaPhi0 (0.05), - m_measurements (measurements), //m_minDistanceForAngle (2.*Gaudi::Units::mm), + m_measurements (measurements), m_numericDerivatives (false), m_parameters (parameters), m_phiInstability (false), @@ -78,27 +75,25 @@ MeasurementProcessor::MeasurementProcessor (bool asymmetricCaloEnergy, if(m_useStepPropagator==2) m_stepField = Trk::MagneticFieldProperties(Trk::FastField); - for (std::list<FitMeasurement*>::iterator m = m_measurements.begin(); - m != m_measurements.end(); - ++m) + for (auto m : m_measurements) { - if (! (**m).numberDoF()) continue; - if ((**m).isAlignment()) m_alignments.push_back(*m); - // if ((**m).isDrift()) haveDrift = true; - if ((**m).isPositionMeasurement()) ++numberPositionMeas; - // if ((**m).isPseudo()) ++numberPseudo; - if ((**m).isScatterer()) m_scatterers.push_back(*m); + if (! m->numberDoF()) continue; + if (m->isAlignment()) m_alignments.push_back(m); + // if (m->isDrift()) haveDrift = true; + if (m->isPositionMeasurement()) ++numberPositionMeas; + // if (m->isPseudo()) ++numberPseudo; + if (m->isScatterer()) m_scatterers.push_back(m); // cache some variables when we fit calo energy deposit - if (! (**m).isEnergyDeposit() || ! m_parameters->fitMomentum()) continue; - m_caloEnergyMeasurement = *m; + if (! m->isEnergyDeposit() || ! m_parameters->fitMomentum()) continue; + m_caloEnergyMeasurement = m; if (numberPositionMeas < 5) { m_asymmetricCaloEnergy = false; m_caloEnergyMeasurement->setSigmaSymmetric(); } m_qOverPbeforeCalo = m_parameters->qOverP(); - m_qOverPafterCalo = (**m).qOverP(); + m_qOverPafterCalo = m->qOverP(); if (m_qOverPbeforeCalo*m_qOverPafterCalo < 0.) m_qOverPafterCalo = m_qOverPbeforeCalo; m_parameters->qOverP1(m_qOverPafterCalo); // std::cout << numberPositionMeas << " calo energy deposit " @@ -126,8 +121,6 @@ MeasurementProcessor::~MeasurementProcessor (void) delete m_vertexIntersect; } -//<<<<<< MEMBER PUBLIC FUNCTION DEFINITIONS >>>>>> - bool MeasurementProcessor::calculateDerivatives(void) { @@ -185,65 +178,63 @@ MeasurementProcessor::calculateDerivatives(void) } // loop over measurements to compute derivatives: - for (std::list<FitMeasurement*>::iterator m = m_measurements.begin(); - m != m_measurements.end(); - ++m) + for (auto m : m_measurements) { // strip detector types - if ((**m).isCluster()) + if (m->isCluster()) { - clusterDerivatives((**m).numberDoF(), **m); + clusterDerivatives(m->numberDoF(), *m); } - else if ((**m).isDrift() || (**m).isPerigee() || (**m).isPseudo()) // else drift circles + else if (m->isDrift() || m->isPerigee() || m->isPseudo()) // else drift circles { - const TrackSurfaceIntersection& intersection = (**m).intersection(FittedTrajectory); + const TrackSurfaceIntersection& intersection = m->intersection(FittedTrajectory); Amg::Vector3D* driftDirection = - new Amg::Vector3D((**m).sensorDirection().cross(intersection.direction())); + new Amg::Vector3D(m->sensorDirection().cross(intersection.direction())); *driftDirection = driftDirection->unit(); - (**m).minimizationDirection(driftDirection); - driftDerivatives((**m).numberDoF(), **m); + m->minimizationDirection(driftDirection); + driftDerivatives(m->numberDoF(), *m); } - else if ((**m).isVertex()) + else if (m->isVertex()) { - const TrackSurfaceIntersection& intersection = (**m).intersection(FittedTrajectory); + const TrackSurfaceIntersection& intersection = m->intersection(FittedTrajectory); Amg::Vector3D* minimizationDirection = - new Amg::Vector3D((**m).sensorDirection().cross(intersection.direction())); + new Amg::Vector3D(m->sensorDirection().cross(intersection.direction())); *minimizationDirection = minimizationDirection->unit(); - (**m).minimizationDirection(minimizationDirection); - (**m).derivative(D0,(**m).weight()*(m_cosPhi0*(**m).minimizationDirection().y() - - m_sinPhi0*(**m).minimizationDirection().x())); - if ((**m).is2Dimensional()) - (**m).derivative2(Z0,(**m).weight2()*(**m).sensorDirection().z()); + m->minimizationDirection(minimizationDirection); + m->derivative(D0,m->weight()*(m_cosPhi0*m->minimizationDirection().y() - + m_sinPhi0*m->minimizationDirection().x())); + if (m->is2Dimensional()) + m->derivative2(Z0,m->weight2()*m->sensorDirection().z()); } - else if (! (**m).numberDoF()) + else if (! m->numberDoF()) { continue; } - else if ((**m).isScatterer()) + else if (m->isScatterer()) { - unsigned param = (**m).lastParameter() - 2; - (**m).derivative(param,(**m).weight() * - (**m).intersection(FittedTrajectory).direction().perp()); - (**m).derivative2(++param,(**m).weight()); + unsigned param = m->lastParameter() - 2; + m->derivative(param,m->weight() * + m->intersection(FittedTrajectory).direction().perp()); + m->derivative2(++param,m->weight()); } - else if ((**m).isAlignment()) + else if (m->isAlignment()) { // std::cout << " set alignment derivatives: " - // << " alignmentParameter " << (**m).alignmentParameter() - // << " firstParameter " << (**m).firstParameter() - // << " lastParameter " << (**m).lastParameter() + // << " alignmentParameter " << m->alignmentParameter() + // << " firstParameter " << m->firstParameter() + // << " lastParameter " << m->lastParameter() // << std::endl; - unsigned param = (**m).firstParameter(); - (**m).derivative(param,(**m).weight()); - (**m).derivative2(++param,(**m).weight2()); + unsigned param = m->firstParameter(); + m->derivative(param,m->weight()); + m->derivative2(++param,m->weight2()); } - else if ((**m).isEnergyDeposit()) + else if (m->isEnergyDeposit()) { double E0 = 1./std::abs(m_qOverPbeforeCalo); double E1 = 1./std::abs(m_qOverPafterCalo); - double weight = (**m).weight(); - (**m).derivative(QOverP0, weight*E0/(m_qOverPbeforeCalo*Gaudi::Units::TeV)); - (**m).derivative(QOverP1,-weight*E1/(m_qOverPafterCalo*Gaudi::Units::TeV)); + double weight = m->weight(); + m->derivative(QOverP0, weight*E0/(m_qOverPbeforeCalo*Gaudi::Units::TeV)); + m->derivative(QOverP1,-weight*E1/(m_qOverPafterCalo*Gaudi::Units::TeV)); } else { @@ -350,47 +341,45 @@ MeasurementProcessor::calculateResiduals(void) { int nAlign = 0; int nScat = 0; - for (std::list<FitMeasurement*>::iterator m = m_measurements.begin(); - m != m_measurements.end(); - ++m) + for (auto m : m_measurements) { - if (! (**m).numberDoF()) continue; + if (! (*m).numberDoF()) continue; // special measurements to constrain additional parameters - if (! (**m).isPositionMeasurement()) + if (! m->isPositionMeasurement()) { - if ((**m).isScatterer()) // scattering centres + if (m->isScatterer()) // scattering centres { - double phiResidual = -(**m).weight()*m_parameters->scattererPhi(nScat) * - (**m).intersection(FittedTrajectory).direction().perp(); - (**m).residual(phiResidual); - double thetaResidual = -(**m).weight()*m_parameters->scattererTheta(nScat); - (**m).residual2(thetaResidual); + double phiResidual = -m->weight()*m_parameters->scattererPhi(nScat) * + m->intersection(FittedTrajectory).direction().perp(); + m->residual(phiResidual); + double thetaResidual = -m->weight()*m_parameters->scattererTheta(nScat); + (*m).residual2(thetaResidual); ++nScat; } - else if ((**m).isAlignment()) // alignment uncertainties + else if ((*m).isAlignment()) // alignment uncertainties { - (**m).residual(-(**m).weight() * (m_parameters->alignmentAngle(nAlign) - + (*m).residual(-m->weight() * (m_parameters->alignmentAngle(nAlign) - m_parameters->alignmentAngleConstraint(nAlign))); - (**m).residual2(-(**m).weight2() * (m_parameters->alignmentOffset(nAlign) - + (*m).residual2(-m->weight2() * (m_parameters->alignmentOffset(nAlign) - m_parameters->alignmentOffsetConstraint(nAlign))); ++nAlign; } - else if ((**m).isEnergyDeposit()) + else if (m->isEnergyDeposit()) { // Add the energy loss as a measurement double E0 = 1./std::abs(m_qOverPbeforeCalo); double E1 = 1./std::abs(m_qOverPafterCalo); - double residual = (**m).weight()*(E0 - E1 - (**m).energyLoss()); - (**m).residual(residual); + double residual = m->weight()*(E0 - E1 - m->energyLoss()); + m->residual(residual); // std::cout << std::setiosflags(std::ios::fixed) // << " calo residual " << std::setw(8) << std::setprecision(2) - // << (**m).residual() + // << m->residual() // << " (in GeV):" << std::setw(8) << std::setprecision(3) - // << (E0 - E1 - (**m).energyLoss())/Gaudi::Units::GeV + // << (E0 - E1 - m->energyLoss())/Gaudi::Units::GeV // << std::endl; - // const TrackSurfaceIntersection& intersection = (**m).intersection(FittedTrajectory); + // const TrackSurfaceIntersection& intersection = m->intersection(FittedTrajectory); // double fittedLoss = (std::abs(E0/Gaudi::Units::GeV) - std::abs(E1/Gaudi::Units::GeV)) * intersection.direction().perp(); // std::cout << std::setiosflags(std::ios::fixed) // << " pT" @@ -402,7 +391,7 @@ MeasurementProcessor::calculateResiduals(void) // << std::setw(8) << std::setprecision(1) << intersection.position().z() // << " pT loss: measured " // << std::setw(9) << std::setprecision(3) - // << (**m).energyLoss()*intersection.direction().perp()/Gaudi::Units::GeV + // << m->energyLoss()*intersection.direction().perp()/Gaudi::Units::GeV // << " fitted " // << std::setw(9) << std::setprecision(3) << fittedLoss // << std::endl; @@ -411,111 +400,111 @@ MeasurementProcessor::calculateResiduals(void) } // position measurements - const TrackSurfaceIntersection& intersection = (**m).intersection(FittedTrajectory); - const Amg::Vector3D& minimizationDirection = (**m).minimizationDirection(); - Amg::Vector3D offset = (**m).position() - intersection.position(); - if ((**m).isCluster()) // strip detector types + const TrackSurfaceIntersection& intersection = m->intersection(FittedTrajectory); + const Amg::Vector3D& minimizationDirection = m->minimizationDirection(); + Amg::Vector3D offset = m->position() - intersection.position(); + if (m->isCluster()) // strip detector types { - double residual = (**m).weight() * minimizationDirection.dot(offset); - if ((**m).alignmentParameter()) + double residual = m->weight() * minimizationDirection.dot(offset); + if (m->alignmentParameter()) { // propagate to residual using derivatives - unsigned param = (**m).alignmentParameter() - 1; + unsigned param = m->alignmentParameter() - 1; unsigned deriv = m_parameters->numberParameters() - 2*m_parameters->numberAlignments() + 2*param; - residual -= m_parameters->alignmentAngle(param) * (**m).derivative(deriv) + - m_parameters->alignmentOffset(param) * (**m).derivative(deriv+1); + residual -= m_parameters->alignmentAngle(param) * m->derivative(deriv) + + m_parameters->alignmentOffset(param) * m->derivative(deriv+1); - // FitMeasurement* fm = m_alignments[(**m).alignmentParameter()-1]; - // std::cout << " cluster resid: measurement.alignmentParameter " << (**m).alignmentParameter() + // FitMeasurement* fm = m_alignments[m->alignmentParameter()-1]; + // std::cout << " cluster resid: measurement.alignmentParameter " << m->alignmentParameter() // << " at z " << fm->surface()->center().z() // << " param " << param // << " minimizationDirection.z() " << minimizationDirection.z() // << " angle " // << m_parameters->alignmentAngle(param) // << " angle resid " - // << m_parameters->alignmentAngle(param)*(**m).derivative(deriv) + // << m_parameters->alignmentAngle(param)*m->derivative(deriv) // << " offset " // << m_parameters->alignmentOffset(param) // << " offset resid" - // << m_parameters->alignmentOffset(param)*(**m).derivative(deriv+1) + // << m_parameters->alignmentOffset(param)*m->derivative(deriv+1) // << " residual " << residual // << std::endl; - if ((**m).alignmentParameter2()) + if (m->alignmentParameter2()) { // propagate to residual using derivatives - param = (**m).alignmentParameter2() - 1; + param = m->alignmentParameter2() - 1; deriv = m_parameters->numberParameters() - 2*m_parameters->numberAlignments() + 2*param; - residual -= m_parameters->alignmentAngle(param) * (**m).derivative(deriv) + - m_parameters->alignmentOffset(param) * (**m).derivative(deriv+1); + residual -= m_parameters->alignmentAngle(param) * m->derivative(deriv) + + m_parameters->alignmentOffset(param) * m->derivative(deriv+1); } } - (**m).residual(residual); - if (! (**m).is2Dimensional()) continue; - double residual2 = (**m).weight2()*(**m).sensorDirection().dot(offset); - (**m).residual2(residual2); + m->residual(residual); + if (! m->is2Dimensional()) continue; + double residual2 = m->weight2()*m->sensorDirection().dot(offset); + m->residual2(residual2); } - else if ((**m).isDrift() || (**m).isPerigee()) // else drift circles (perigee is similar) + else if (m->isDrift() || m->isPerigee()) // else drift circles (perigee is similar) { - double residual = (**m).weight() * - (minimizationDirection.dot(offset) + (**m).signedDriftDistance()); - if ((**m).alignmentParameter()) + double residual = m->weight() * + (minimizationDirection.dot(offset) + m->signedDriftDistance()); + if (m->alignmentParameter()) { // propagate to residual using derivatives - unsigned param = (**m).alignmentParameter() - 1; + unsigned param = m->alignmentParameter() - 1; int deriv = m_parameters->numberParameters() - 2*m_parameters->numberAlignments() + 2*param; - residual -= m_parameters->alignmentAngle(param) * (**m).derivative(deriv) + - m_parameters->alignmentOffset(param) * (**m).derivative(deriv+1); + residual -= m_parameters->alignmentAngle(param) * m->derivative(deriv) + + m_parameters->alignmentOffset(param) * m->derivative(deriv+1); if (deriv != m_parameters->firstAlignmentParameter()) // std::cout << " firstAlignmentParameter " << m_parameters->firstAlignmentParameter() + 2*param // << " deriv " << deriv << std::endl; // FitMeasurement* fm = m_alignments[param]; - // std::cout << " drift resid: measurement.alignmentParameter " << (**m).alignmentParameter() + // std::cout << " drift resid: measurement.alignmentParameter " << m->alignmentParameter() // << " at z " << fm->surface()->center().z() // << " param " << param // << " driftDirection.z() " << minimizationDirection.z() // << " angle " // << m_parameters->alignmentAngle(param) // << " angle resid " - // << m_parameters->alignmentAngle(param)*(**m).derivative(deriv) + // << m_parameters->alignmentAngle(param)*m->derivative(deriv) // << " offset " // << m_parameters->alignmentOffset(param) // << " offset resid" - // << m_parameters->alignmentOffset(param)*(**m).derivative(deriv+1) + // << m_parameters->alignmentOffset(param)*m->derivative(deriv+1) // << " residual " << residual // << std::endl; - if ((**m).alignmentParameter2()) + if (m->alignmentParameter2()) { // propagate to residual using derivatives - param = (**m).alignmentParameter2() - 1; + param = m->alignmentParameter2() - 1; deriv = m_parameters->numberParameters() - 2*m_parameters->numberAlignments() + 2*param; - residual -= m_parameters->alignmentAngle(param) * (**m).derivative(deriv) + - m_parameters->alignmentOffset(param) * (**m).derivative(deriv+1); + residual -= m_parameters->alignmentAngle(param) * m->derivative(deriv) + + m_parameters->alignmentOffset(param) * m->derivative(deriv+1); } } - (**m).residual(residual); - // std::cout << " residual " << residual*(**m).sigma() - // << " drift distance " << (**m).signedDriftDistance() << std::endl; + m->residual(residual); + // std::cout << " residual " << residual*m->sigma() + // << " drift distance " << m->signedDriftDistance() << std::endl; } - else if ((**m).isPseudo()) // else pseudo measurement + else if (m->isPseudo()) // else pseudo measurement { - double residual = (**m).weight() * minimizationDirection.dot(offset); - (**m).residual(residual); - if (! (**m).is2Dimensional()) continue; - double residual2 = (**m).weight2() * (**m).sensorDirection().dot(offset); - (**m).residual2(residual2); + double residual = m->weight() * minimizationDirection.dot(offset); + m->residual(residual); + if (! m->is2Dimensional()) continue; + double residual2 = m->weight2() * m->sensorDirection().dot(offset); + m->residual2(residual2); } - else if ((**m).isVertex()) + else if (m->isVertex()) { - double residual = (**m).weight() * (minimizationDirection.x()*offset.x() + + double residual = m->weight() * (minimizationDirection.x()*offset.x() + minimizationDirection.y()*offset.y()) / minimizationDirection.perp() ; - (**m).residual(residual); - if (! (**m).is2Dimensional()) continue; - double residual2= (**m).weight2() * (**m).sensorDirection().dot(offset); - (**m).residual2(residual2); + m->residual(residual); + if (! m->is2Dimensional()) continue; + double residual2= m->weight2() * m->sensorDirection().dot(offset); + m->residual2(residual2); } } } @@ -651,14 +640,12 @@ MeasurementProcessor::propagationDerivatives(void) { // compute additional derivatives when needed for covariance propagation. // loop over measurements: - for (std::list<FitMeasurement*>::iterator m = m_measurements.begin(); - m != m_measurements.end(); - ++m) + for (auto m : m_measurements) { // compute the D0 and Z0 derivs that don't already exist - if (! (**m).isPositionMeasurement() || (**m).numberDoF() > 1) continue; + if (! m->isPositionMeasurement() || m->numberDoF() > 1) continue; int derivativeFlag; - if ((**m).numberDoF()) + if (m->numberDoF()) { derivativeFlag = 0; } @@ -667,19 +654,17 @@ MeasurementProcessor::propagationDerivatives(void) derivativeFlag = 2; } - if ((**m).isCluster()) + if (m->isCluster()) { - clusterDerivatives(derivativeFlag, **m); + clusterDerivatives(derivativeFlag, *m); } - else if ((**m).isDrift() || (**m).isPerigee() || (**m).isPseudo()) + else if (m->isDrift() || m->isPerigee() || m->isPseudo()) { - driftDerivatives(derivativeFlag, **m); + driftDerivatives(derivativeFlag, *m); } } } -//<<<<<< MEMBER PRIVATE FUNCTION DEFINITIONS >>>>>> - void MeasurementProcessor::clusterDerivatives(int derivativeFlag, const FitMeasurement& measurement) { @@ -1076,7 +1061,7 @@ MeasurementProcessor::extrapolateToMeasurements(ExtrapolationType type) const Surface* surface = 0; // careful: use RungeKutta for extrapolation to vertex measurement - std::list<FitMeasurement*>::iterator m = m_measurements.begin(); + std::vector<FitMeasurement*>::iterator m = m_measurements.begin(); if ((**m).isVertex()) { if (m_useStepPropagator==99)