File indexing completed on 2024-04-06 11:56:12
0001 #ifndef Alignment_CommonAlignmentParametrization_CompositeAlignmentParameters_h
0002 #define Alignment_CommonAlignmentParametrization_CompositeAlignmentParameters_h
0003
0004 #include "Alignment/CommonAlignment/interface/AlignableDetOrUnitPtr.h"
0005 #include "Alignment/CommonAlignment/interface/AlignmentParametersData.h"
0006 #include "Alignment/CommonAlignment/interface/Utilities.h"
0007 #include "TrackingTools/TrajectoryState/interface/TrajectoryStateOnSurface.h"
0008
0009 #include <map>
0010 #include <vector>
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024 class AlignableDet;
0025 class Alignable;
0026
0027 class CompositeAlignmentParameters {
0028 public:
0029
0030 typedef align::Alignables Components;
0031
0032 typedef std::map<AlignableDetOrUnitPtr, Alignable *> AlignableDetToAlignableMap;
0033 typedef std::map<Alignable *, int> Aliposmap;
0034 typedef std::map<Alignable *, int> Alilenmap;
0035
0036 typedef AlignmentParametersData::DataContainer DataContainer;
0037
0038
0039
0040 CompositeAlignmentParameters(const AlgebraicVector &par, const AlgebraicSymMatrix &cov, const Components &comp);
0041
0042 CompositeAlignmentParameters(const AlgebraicVector &par,
0043 const AlgebraicSymMatrix &cov,
0044 const Components &comp,
0045 const AlignableDetToAlignableMap &alimap,
0046 const Aliposmap &aliposmap,
0047 const Alilenmap &alilenmap);
0048
0049 CompositeAlignmentParameters(const DataContainer &data,
0050 const Components &comp,
0051 const AlignableDetToAlignableMap &alimap,
0052 const Aliposmap &aliposmap,
0053 const Alilenmap &alilenmap);
0054
0055
0056 virtual ~CompositeAlignmentParameters();
0057
0058
0059 const AlgebraicVector ¶meters() const { return theData->parameters(); }
0060
0061
0062 const AlgebraicSymMatrix &covariance() const { return theData->covariance(); }
0063
0064
0065 CompositeAlignmentParameters *clone(const AlgebraicVector &par, const AlgebraicSymMatrix &cov) const;
0066
0067
0068 CompositeAlignmentParameters *clone(const AlgebraicVector &par,
0069 const AlgebraicSymMatrix &cov,
0070 const AlignableDetToAlignableMap &alimap,
0071 const Aliposmap &aliposmap,
0072 const Alilenmap &alilenmap) const;
0073
0074
0075 Components components() const;
0076
0077
0078 AlgebraicMatrix derivatives(const TrajectoryStateOnSurface &tsos, const AlignableDetOrUnitPtr &alidet) const;
0079
0080 AlgebraicMatrix selectedDerivatives(const TrajectoryStateOnSurface &tsos, const AlignableDetOrUnitPtr &alidet) const;
0081
0082 AlgebraicMatrix derivatives(const std::vector<TrajectoryStateOnSurface> &tsosvec,
0083 const std::vector<AlignableDet *> &alidetvec) const;
0084 AlgebraicMatrix derivatives(const std::vector<TrajectoryStateOnSurface> &tsosvec,
0085 const std::vector<AlignableDetOrUnitPtr> &alidetvec) const;
0086
0087 AlgebraicMatrix selectedDerivatives(const std::vector<TrajectoryStateOnSurface> &tsosvec,
0088 const std::vector<AlignableDet *> &alidetvec) const;
0089 AlgebraicMatrix selectedDerivatives(const std::vector<TrajectoryStateOnSurface> &tsosvec,
0090 const std::vector<AlignableDetOrUnitPtr> &alidetvec) const;
0091
0092
0093 AlgebraicVector correctionTerm(const std::vector<TrajectoryStateOnSurface> &tsosvec,
0094 const std::vector<AlignableDet *> &alidetvec) const;
0095 AlgebraicVector correctionTerm(const std::vector<TrajectoryStateOnSurface> &tsosvec,
0096 const std::vector<AlignableDetOrUnitPtr> &alidetvec) const;
0097
0098
0099 AlgebraicMatrix derivativesLegacy(const TrajectoryStateOnSurface &tsos, AlignableDet *alidet) const;
0100
0101
0102 AlgebraicMatrix selectedDerivativesLegacy(const TrajectoryStateOnSurface &tsos, AlignableDet *alidet) const;
0103
0104
0105 AlgebraicMatrix derivativesLegacy(const std::vector<TrajectoryStateOnSurface> &tsosvec,
0106 const std::vector<AlignableDet *> &alidetvec) const;
0107
0108
0109 AlgebraicMatrix selectedDerivativesLegacy(const std::vector<TrajectoryStateOnSurface> &tsosvec,
0110 const std::vector<AlignableDet *> &alidetvec) const;
0111
0112
0113 Alignable *alignableFromAlignableDet(const AlignableDetOrUnitPtr &adet) const;
0114
0115
0116 AlgebraicVector parameterSubset(const align::Alignables &) const;
0117
0118
0119 AlgebraicSymMatrix covarianceSubset(const align::Alignables &) const;
0120
0121
0122 AlgebraicMatrix covarianceSubset(const align::Alignables &, const align::Alignables &) const;
0123
0124 protected:
0125 DataContainer theData;
0126
0127 private:
0128
0129 bool extractPositionAndLength(const align::Alignables &alignables,
0130 std::vector<int> &posvec,
0131 std::vector<int> &lenvec,
0132 int &length) const;
0133
0134
0135 align::Alignables extractAlignables(const align::Alignables &) const;
0136
0137
0138
0139 void convert(const std::vector<AlignableDet *> &input, std::vector<AlignableDetOrUnitPtr> &output) const;
0140
0141
0142 Components theComponents;
0143
0144
0145 AlignableDetToAlignableMap theAlignableDetToAlignableMap;
0146
0147
0148 Aliposmap theAliposmap;
0149 Alilenmap theAlilenmap;
0150 };
0151
0152 #endif