CompositeAlignmentParameters

Macros

Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152
#ifndef Alignment_CommonAlignmentParametrization_CompositeAlignmentParameters_h
#define Alignment_CommonAlignmentParametrization_CompositeAlignmentParameters_h

#include "Alignment/CommonAlignment/interface/AlignableDetOrUnitPtr.h"
#include "Alignment/CommonAlignment/interface/AlignmentParametersData.h"
#include "Alignment/CommonAlignment/interface/Utilities.h"
#include "TrackingTools/TrajectoryState/interface/TrajectoryStateOnSurface.h"

#include <map>
#include <vector>

/// \class CompositeAlignmentParameters
///
/// Class for 'concatenated' alignment parameters and associated
/// Quantities for a set of Alignables. Provided by AlignmentParameterStore.
/// It does not inherit from AligmentParameters since it does not need to be
/// attached to an Alignable, so it does not need to have implementations of the
/// apply(..) method. It neither needs AlignmentUservariables attached.
///
///  $Date: 2007/10/08 15:56:00 $
///  $Revision: 1.12 $
/// (last update by $Author: cklae $)

class AlignableDet;
class Alignable;

class CompositeAlignmentParameters {
public:
  /// vector of alignable components
  typedef align::Alignables Components;

  typedef std::map<AlignableDetOrUnitPtr, Alignable *> AlignableDetToAlignableMap;
  typedef std::map<Alignable *, int> Aliposmap;
  typedef std::map<Alignable *, int> Alilenmap;

  typedef AlignmentParametersData::DataContainer DataContainer;

  /// constructors

  CompositeAlignmentParameters(const AlgebraicVector &par, const AlgebraicSymMatrix &cov, const Components &comp);

  CompositeAlignmentParameters(const AlgebraicVector &par,
                               const AlgebraicSymMatrix &cov,
                               const Components &comp,
                               const AlignableDetToAlignableMap &alimap,
                               const Aliposmap &aliposmap,
                               const Alilenmap &alilenmap);

  CompositeAlignmentParameters(const DataContainer &data,
                               const Components &comp,
                               const AlignableDetToAlignableMap &alimap,
                               const Aliposmap &aliposmap,
                               const Alilenmap &alilenmap);

  /// destructor
  virtual ~CompositeAlignmentParameters();

  /// Get alignment parameters
  const AlgebraicVector &parameters() const { return theData->parameters(); }

  /// Get parameter covariance matrix
  const AlgebraicSymMatrix &covariance() const { return theData->covariance(); }

  /// Clone parameters
  CompositeAlignmentParameters *clone(const AlgebraicVector &par, const AlgebraicSymMatrix &cov) const;

  /// Clone parameters
  CompositeAlignmentParameters *clone(const AlgebraicVector &par,
                                      const AlgebraicSymMatrix &cov,
                                      const AlignableDetToAlignableMap &alimap,
                                      const Aliposmap &aliposmap,
                                      const Alilenmap &alilenmap) const;

  /// Get vector of alignable components
  Components components() const;

  /// Get derivatives
  AlgebraicMatrix derivatives(const TrajectoryStateOnSurface &tsos, const AlignableDetOrUnitPtr &alidet) const;
  /// Get derivatives for selected alignables
  AlgebraicMatrix selectedDerivatives(const TrajectoryStateOnSurface &tsos, const AlignableDetOrUnitPtr &alidet) const;
  /// for backward compatibility, use std::vector<AlignableDetOrUnitPtr>
  AlgebraicMatrix derivatives(const std::vector<TrajectoryStateOnSurface> &tsosvec,
                              const std::vector<AlignableDet *> &alidetvec) const;
  AlgebraicMatrix derivatives(const std::vector<TrajectoryStateOnSurface> &tsosvec,
                              const std::vector<AlignableDetOrUnitPtr> &alidetvec) const;
  /// for backward compatibility, use std::vector<AlignableDetOrUnitPtr>
  AlgebraicMatrix selectedDerivatives(const std::vector<TrajectoryStateOnSurface> &tsosvec,
                                      const std::vector<AlignableDet *> &alidetvec) const;
  AlgebraicMatrix selectedDerivatives(const std::vector<TrajectoryStateOnSurface> &tsosvec,
                                      const std::vector<AlignableDetOrUnitPtr> &alidetvec) const;

  /// for backward compatibility, use std::vector<AlignableDetOrUnitPtr>
  AlgebraicVector correctionTerm(const std::vector<TrajectoryStateOnSurface> &tsosvec,
                                 const std::vector<AlignableDet *> &alidetvec) const;
  AlgebraicVector correctionTerm(const std::vector<TrajectoryStateOnSurface> &tsosvec,
                                 const std::vector<AlignableDetOrUnitPtr> &alidetvec) const;
  /// deprecated due to 'AlignableDet*' interface (legacy code should not be
  /// needed anymore)
  AlgebraicMatrix derivativesLegacy(const TrajectoryStateOnSurface &tsos, AlignableDet *alidet) const;
  /// deprecated due to 'AlignableDet*' interface (legacy code should not be
  /// needed anymore)
  AlgebraicMatrix selectedDerivativesLegacy(const TrajectoryStateOnSurface &tsos, AlignableDet *alidet) const;
  /// deprecated due to 'AlignableDet*' interface (legacy code should not be
  /// needed anymore)
  AlgebraicMatrix derivativesLegacy(const std::vector<TrajectoryStateOnSurface> &tsosvec,
                                    const std::vector<AlignableDet *> &alidetvec) const;
  /// deprecated due to 'AlignableDet*' interface (legacy code should not be
  /// needed anymore)
  AlgebraicMatrix selectedDerivativesLegacy(const std::vector<TrajectoryStateOnSurface> &tsosvec,
                                            const std::vector<AlignableDet *> &alidetvec) const;

  /// Get relevant Alignable from AlignableDet
  Alignable *alignableFromAlignableDet(const AlignableDetOrUnitPtr &adet) const;

  /// Extract parameters for subset of alignables
  AlgebraicVector parameterSubset(const align::Alignables &) const;

  /// Extract covariance matrix for subset of alignables
  AlgebraicSymMatrix covarianceSubset(const align::Alignables &) const;

  /// Extract covariance matrix elements between two subsets of alignables
  AlgebraicMatrix covarianceSubset(const align::Alignables &, const align::Alignables &) const;

protected:
  DataContainer theData;

private:
  /// Extract position and length of parameters for a subset of Alignables.
  bool extractPositionAndLength(const align::Alignables &alignables,
                                std::vector<int> &posvec,
                                std::vector<int> &lenvec,
                                int &length) const;

  /// Return vector of alignables without multiple occurences.
  align::Alignables extractAlignables(const align::Alignables &) const;

  /// backward compatibility method to convert vectors from specific
  /// AlignableDet to more general AlignableDetOrUnitPtr
  void convert(const std::vector<AlignableDet *> &input, std::vector<AlignableDetOrUnitPtr> &output) const;

  /// Vector of alignable components
  Components theComponents;

  /// Relate Alignable's and AlignableDet's
  AlignableDetToAlignableMap theAlignableDetToAlignableMap;

  /// Maps to find parameters/covariance elements for given alignable
  Aliposmap theAliposmap;
  Alilenmap theAlilenmap;
};

#endif