Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-09-16 08:39:34

0001 // This file is part of the ACTS project.
0002 //
0003 // Copyright (C) 2016 CERN for the benefit of the ACTS project
0004 //
0005 // This Source Code Form is subject to the terms of the Mozilla Public
0006 // License, v. 2.0. If a copy of the MPL was not distributed with this
0007 // file, You can obtain one at https://mozilla.org/MPL/2.0/.
0008 
0009 #pragma once
0010 
0011 #include "Acts/MagneticField/MagneticFieldContext.hpp"
0012 #include "Acts/MagneticField/MagneticFieldProvider.hpp"
0013 #include "Acts/Propagator/EigenStepper.hpp"
0014 #include "Acts/Propagator/Propagator.hpp"
0015 #include "Acts/Utilities/Logger.hpp"
0016 #include "Acts/Utilities/Result.hpp"
0017 #include "Acts/Vertexing/HelicalTrackLinearizer.hpp"
0018 #include "Acts/Vertexing/TrackLinearizer.hpp"
0019 #include "Acts/Vertexing/Vertex.hpp"
0020 #include "Acts/Vertexing/VertexingOptions.hpp"
0021 
0022 namespace Acts {
0023 
0024 /// @class FullBilloirVertexFitter
0025 ///
0026 /// @brief Vertex fitter class implementing the Billoir vertex fitter
0027 ///
0028 /// This class implements the Billoir vertex fitter from Ref. (1). It is also
0029 /// useful to have a look at Ref. (2). The cross-covariance matrices are derived
0030 /// in Ref. (3). Note that the Billoir vertex fitter outputs one 4D vertex
0031 /// position and nTrack momenta at this very point.
0032 ///
0033 /// Ref. (1):
0034 /// Fast vertex fitting with a local parametrization of tracks.
0035 /// Author(s) Billoir, P ; Qian, S
0036 /// In: Nucl. Instrum. Methods Phys. Res., A 311 (1992) 139-150
0037 /// DOI 10.1016/0168-9002(92)90859-3
0038 ///
0039 /// Ref. (2):
0040 /// Pattern Recognition, Tracking and Vertex Reconstruction in Particle
0041 /// Detectors.
0042 /// Author(s) Fruehwirth, R ; Strandli, A
0043 ///
0044 /// Ref. (3):
0045 /// ACTS White Paper: Cross-Covariance Matrices in the Billoir Vertex Fit
0046 /// https://acts.readthedocs.io/en/latest/white_papers/billoir-covariances.html
0047 /// Author(s) Russo, F
0048 class FullBilloirVertexFitter {
0049  public:
0050   /// Configuration options for the Billoir vertex fitter.
0051   struct Config {
0052     /// Maximum number of iterations in fitter
0053     int maxIterations = 5;
0054 
0055     /// Function to extract parameters from InputTrack
0056     InputTrack::Extractor extractParameters;
0057 
0058     /// Track linearizer
0059     TrackLinearizer trackLinearizer;
0060   };
0061 
0062   /// @brief Constructor for user-defined InputTrack type
0063   ///
0064   /// @param cfg Configuration object
0065   /// @param logger Logging instance
0066   explicit FullBilloirVertexFitter(
0067       const Config& cfg,
0068       std::unique_ptr<const Logger> logger =
0069           getDefaultLogger("FullBilloirVertexFitter", Logging::INFO))
0070       : m_cfg(cfg), m_logger(std::move(logger)) {
0071     if (!m_cfg.extractParameters.connected()) {
0072       throw std::invalid_argument(
0073           "FullBilloirVertexFitter: "
0074           "No function to extract parameters "
0075           "provided.");
0076     }
0077 
0078     if (!m_cfg.trackLinearizer.connected()) {
0079       throw std::invalid_argument(
0080           "FullBilloirVertexFitter: "
0081           "No track linearizer provided.");
0082     }
0083   }
0084 
0085   /// @brief Fit method, fitting vertex for provided tracks with constraint
0086   ///
0087   /// @param paramVector Vector of track objects to fit vertex to
0088   /// @param vertexingOptions Vertexing options
0089   /// @param fieldCache The magnetic field cache
0090   ///
0091   /// @return Fitted vertex
0092   Result<Vertex> fit(const std::vector<InputTrack>& paramVector,
0093                      const VertexingOptions& vertexingOptions,
0094                      MagneticFieldProvider::Cache& fieldCache) const;
0095 
0096  private:
0097   /// Configuration object
0098   Config m_cfg;
0099 
0100   /// Logging instance
0101   std::unique_ptr<const Logger> m_logger;
0102 
0103   /// Private access to logging instance
0104   const Logger& logger() const { return *m_logger; }
0105 };
0106 
0107 }  // namespace Acts