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 ¶meters() 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
|