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 3f7d09cb065525dffa6dcdbcf21cb1b1cc47a030..a9a93823e0c8163c206d243437b24e12bd0b5bf6 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..398acd37470b040aea9635e194eec9a3e1b25992 100644 --- a/Tracking/TrkFitter/TrkiPatFitter/src/MaterialAllocator.cxx +++ b/Tracking/TrkFitter/TrkiPatFitter/src/MaterialAllocator.cxx @@ -196,7 +196,7 @@ MaterialAllocator::finalize() } void -MaterialAllocator::addLeadingMaterial (std::list<FitMeasurement*>& measurements, +MaterialAllocator::addLeadingMaterial (std::vector<FitMeasurement*>& measurements, ParticleHypothesis particleHypothesis, FitParameters& fitParameters) const { @@ -228,7 +228,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 +262,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 +544,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 +567,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 +582,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 +650,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 +716,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 +753,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 +778,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 +893,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 +908,7 @@ MaterialAllocator::leadingSpectrometerTSOS (const TrackParameters& spectrometerP if (measurement) { - leadingMeasurements.push_front(measurement); + leadingMeasurements.insert(leadingMeasurements.begin(),measurement); } else { @@ -919,7 +918,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 +950,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 +962,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 +976,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 +1011,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 +1039,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 +1075,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 +1127,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); } @@ -1138,7 +1138,7 @@ MaterialAllocator::reallocateMaterial (std::list<FitMeasurement*>& measurements, //<<<<<< 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 +1154,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 +1317,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 +1333,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 +1709,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 +1722,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 +1823,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 +1938,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 +1955,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 +1965,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 +2081,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 +2223,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 +2249,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 +2263,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,7 +2298,7 @@ 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) { @@ -2308,14 +2308,14 @@ MaterialAllocator::materialAggregation (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); } 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 +2347,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 +2367,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 +2458,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 +2481,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 +2605,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 +2754,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 c0d374cee5f3fe8ac85ac9ccc8f5a2a2bb891fd4..85fbeb33a1ba4d3bc70caa931cc3b90e083dddc0 100755 --- a/Tracking/TrkFitter/TrkiPatFitter/src/iPatFitter.cxx +++ b/Tracking/TrkFitter/TrkiPatFitter/src/iPatFitter.cxx @@ -297,11 +297,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(); } @@ -358,7 +356,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, @@ -445,7 +443,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, @@ -493,7 +491,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) { @@ -521,7 +519,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()) { @@ -624,7 +622,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, @@ -644,7 +642,7 @@ 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 { @@ -741,7 +739,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 @@ -1107,29 +1105,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, @@ -1223,42 +1219,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 @@ -1330,11 +1324,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; @@ -1450,7 +1442,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..3c10e3ad2c39b62fcf86d6814e0c1a91cc927e32 100755 --- a/Tracking/TrkFitter/TrkiPatFitter/src/iPatGlobalFitter.cxx +++ b/Tracking/TrkFitter/TrkiPatFitter/src/iPatGlobalFitter.cxx @@ -53,7 +53,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 +68,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) { diff --git a/Tracking/TrkFitter/TrkiPatFitterUtils/TrkiPatFitterUtils/FitMatrices.h b/Tracking/TrkFitter/TrkiPatFitterUtils/TrkiPatFitterUtils/FitMatrices.h index bd024db0346a76d77445d7e54bf59026545c3a94..73f86236f8c1e07f02f3c21085cd20ab35366a3b 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 @@ -124,7 +124,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 b4b52baec1e4830ed4d7caec71855fce3569c783..dbbed2697aa27263f9b8e47a83274d1288e58c79 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" @@ -67,7 +67,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); @@ -75,7 +75,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); @@ -91,10 +91,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 8ad74b9db14cd88e4b3b6aafbbf09413eb75db68..a79d4c958d3c37f82bc91074c51f6b0af3d50d80 100755 --- a/Tracking/TrkFitter/TrkiPatFitterUtils/src/FitMatrices.cxx +++ b/Tracking/TrkFitter/TrkiPatFitterUtils/src/FitMatrices.cxx @@ -249,7 +249,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; @@ -398,8 +398,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; @@ -426,7 +426,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; diff --git a/Tracking/TrkFitter/TrkiPatFitterUtils/src/FitProcedure.cxx b/Tracking/TrkFitter/TrkiPatFitterUtils/src/FitProcedure.cxx index 0889587d7116a47b4146a21645d49165f84808fa..de7017d1df334e711b63f0d86bc8d0a306cd483d 100755 --- a/Tracking/TrkFitter/TrkiPatFitterUtils/src/FitProcedure.cxx +++ b/Tracking/TrkFitter/TrkiPatFitterUtils/src/FitProcedure.cxx @@ -116,7 +116,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) @@ -172,14 +172,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) { @@ -188,8 +186,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; } } @@ -200,6 +198,7 @@ FitProcedure::constructTrack (const std::list<FitMeasurement*>& measurements, trackParameters = parameters.trackParameters(*m_log, *fitMeasurement, withCovariance); + if (! trackParameters) { *m_log << MSG::WARNING @@ -218,8 +217,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; @@ -228,12 +227,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) @@ -260,77 +259,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); } } @@ -340,22 +339,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 = @@ -364,14 +363,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); } } @@ -408,7 +407,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) @@ -796,7 +795,7 @@ FitProcedure::setMinIterations (int 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; @@ -806,41 +805,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); } } @@ -934,16 +931,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) "; @@ -951,7 +946,7 @@ FitProcedure::calculateChiSq(std::list<FitMeasurement*>& measurements) } else { - (**m).print(*m_log); + m->print(*m_log); } } } @@ -1013,7 +1008,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; @@ -1022,7 +1017,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) { @@ -1035,7 +1030,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/MeasurementProcessor.cxx b/Tracking/TrkFitter/TrkiPatFitterUtils/src/MeasurementProcessor.cxx index 1a86db7ec527760589c3772a8784c33f115bd542..efd188738321e9cf80918575eb81e06bf5550bb4 100755 --- a/Tracking/TrkFitter/TrkiPatFitterUtils/src/MeasurementProcessor.cxx +++ b/Tracking/TrkFitter/TrkiPatFitterUtils/src/MeasurementProcessor.cxx @@ -30,7 +30,7 @@ namespace Trk{ 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 +47,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 +78,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 " @@ -185,65 +183,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 +346,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 +396,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 +405,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 +645,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,13 +659,13 @@ 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); } } } @@ -1076,7 +1068,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)