#include <Alignment/CommonAlignmentParametrization/interface/CompositeAlignmentDerivativesExtractor.h>
Public Member Functions | |
CompositeAlignmentDerivativesExtractor (const std::vector< Alignable * > &alignables, const std::vector< AlignableDetOrUnitPtr > &alignableDets, const std::vector< TrajectoryStateOnSurface > &tsos) | |
constructor | |
CompositeAlignmentDerivativesExtractor (const std::vector< Alignable * > &alignables, const std::vector< AlignableDet * > &alignableDets, const std::vector< TrajectoryStateOnSurface > &tsos) | |
deprecated constructor for backward compatibility (use mor general AlignableDetOrUnitPtr) | |
const AlgebraicVector & | correctionTerm (void) const |
const AlgebraicMatrix & | derivatives (void) const |
~CompositeAlignmentDerivativesExtractor (void) | |
destructor | |
Private Member Functions | |
void | extractCurrentAlignment (const std::vector< Alignable * > &alignables, const std::vector< AlignableDetOrUnitPtr > &alignableDets, const std::vector< TrajectoryStateOnSurface > &tsos) |
void | extractWithMultipleHits (const std::vector< AlgebraicVector > &subCorrectionTerm, const std::vector< AlgebraicMatrix > &subDerivatives, const std::vector< Alignable * > &alignables) |
void | extractWithoutMultipleHits (const std::vector< AlgebraicVector > &subCorrectionTerm, const std::vector< AlgebraicMatrix > &subDerivatives) |
Private Attributes | |
AlgebraicVector | theCorrectionTerm |
AlgebraicMatrix | theDerivatives |
Definition at line 19 of file CompositeAlignmentDerivativesExtractor.h.
CompositeAlignmentDerivativesExtractor::CompositeAlignmentDerivativesExtractor | ( | const std::vector< Alignable * > & | alignables, | |
const std::vector< AlignableDet * > & | alignableDets, | |||
const std::vector< TrajectoryStateOnSurface > & | tsos | |||
) |
deprecated constructor for backward compatibility (use mor general AlignableDetOrUnitPtr)
Definition at line 12 of file CompositeAlignmentDerivativesExtractor.cc.
References extractCurrentAlignment(), and it.
00015 { 00016 std::vector<AlignableDetOrUnitPtr> detOrUnits; 00017 detOrUnits.reserve(alignableDets.size()); 00018 00019 std::vector<AlignableDet*>::const_iterator it, itEnd; 00020 for (it = alignableDets.begin(), itEnd = alignableDets.end(); it != itEnd; ++it) 00021 detOrUnits.push_back(AlignableDetOrUnitPtr(*it)); 00022 00023 extractCurrentAlignment( alignables, detOrUnits, tsos ); 00024 }
CompositeAlignmentDerivativesExtractor::CompositeAlignmentDerivativesExtractor | ( | const std::vector< Alignable * > & | alignables, | |
const std::vector< AlignableDetOrUnitPtr > & | alignableDets, | |||
const std::vector< TrajectoryStateOnSurface > & | tsos | |||
) |
constructor
Definition at line 28 of file CompositeAlignmentDerivativesExtractor.cc.
References extractCurrentAlignment().
00031 { 00032 extractCurrentAlignment( alignables, alignableDets, tsos ); 00033 }
CompositeAlignmentDerivativesExtractor::~CompositeAlignmentDerivativesExtractor | ( | void | ) | [inline] |
const AlgebraicVector& CompositeAlignmentDerivativesExtractor::correctionTerm | ( | void | ) | const [inline] |
Definition at line 37 of file CompositeAlignmentDerivativesExtractor.h.
References theCorrectionTerm.
Referenced by CompositeAlignmentParameters::correctionTerm().
00037 { return theCorrectionTerm; }
const AlgebraicMatrix& CompositeAlignmentDerivativesExtractor::derivatives | ( | void | ) | const [inline] |
Definition at line 36 of file CompositeAlignmentDerivativesExtractor.h.
References theDerivatives.
Referenced by CompositeAlignmentParameters::derivatives().
00036 { return theDerivatives; }
void CompositeAlignmentDerivativesExtractor::extractCurrentAlignment | ( | const std::vector< Alignable * > & | alignables, | |
const std::vector< AlignableDetOrUnitPtr > & | alignableDets, | |||
const std::vector< TrajectoryStateOnSurface > & | tsos | |||
) | [private] |
Definition at line 38 of file CompositeAlignmentDerivativesExtractor.cc.
References count, extractWithMultipleHits(), extractWithoutMultipleHits(), theCorrectionTerm, and theDerivatives.
Referenced by CompositeAlignmentDerivativesExtractor().
00041 { 00042 00043 // sanity check 00044 if ( alignables.size() != alignableDets.size() ) 00045 { 00046 edm::LogError("CompositeAlignmentDerivativesExtractor") 00047 << "Inconsistent length of arguments: alignables=" << alignables.size() 00048 << ", alignableDets=" << alignableDets.size(); 00049 return; 00050 } 00051 00052 if ( alignables.size() != tsos.size() ) 00053 { 00054 edm::LogError("CompositeAlignmentDerivativesExtractor") 00055 << "Inconsistent length of arguments: alignables=" << alignables.size() 00056 << ", tsos=" << tsos.size(); 00057 return; 00058 } 00059 00060 std::vector< Alignable* >::const_iterator itAlignable = alignables.begin(); 00061 std::vector< AlignableDetOrUnitPtr >::const_iterator itAlignableDet = alignableDets.begin(); 00062 std::vector< TrajectoryStateOnSurface >::const_iterator itTsos = tsos.begin(); 00063 00064 int nRow = 0; 00065 int nCollumn = 0; 00066 unsigned int nAlignables = 0; 00067 00068 std::vector< AlgebraicMatrix > subDerivatives; 00069 std::vector< AlgebraicVector > subCorrectionTerm; 00070 00071 00072 // get the individual derivatives and correction term and determine the dimension 00073 while ( itAlignable != alignables.end() ) 00074 { 00075 // Get the current estimate on the alignment parameters 00076 AlgebraicVector subAlignmentParameters = 00077 ( *itAlignable )->alignmentParameters()->selectedParameters(); 00078 00079 // Get the derivatives or the local coordinates w.r.t. the corresponding alignment parameters 00080 AlgebraicMatrix subAlignmentDerivatives = 00081 ( *itAlignable )->alignmentParameters()->selectedDerivatives( *itTsos, *itAlignableDet ); 00082 00083 subDerivatives.push_back( subAlignmentDerivatives.T() ); 00084 subCorrectionTerm.push_back( subAlignmentDerivatives.T()*subAlignmentParameters ); 00085 00086 nRow += 2; 00087 // check if it is the first occurrence of this Alignable 00088 if ( count( alignables.begin(), itAlignable, *itAlignable ) == 0 ) 00089 { 00090 // matrix is transposed -> num_row() instead of num_col() 00091 nCollumn += subAlignmentDerivatives.num_row(); 00092 nAlignables++; 00093 } 00094 00095 itAlignable++; 00096 itAlignableDet++; 00097 itTsos++; 00098 } 00099 00100 // construct derivatives and correction term with the right dimension 00101 theDerivatives = AlgebraicMatrix( nRow, nCollumn, 0 ); 00102 theCorrectionTerm = AlgebraicVector( nRow, 0 ); 00103 00104 if ( alignables.size() == nAlignables ) 00105 // One hit per alignable 00106 extractWithoutMultipleHits( subCorrectionTerm, subDerivatives ); 00107 else 00108 // At least one alignable has two hits 00109 extractWithMultipleHits( subCorrectionTerm, subDerivatives, alignables ); 00110 00111 return; 00112 00113 }
void CompositeAlignmentDerivativesExtractor::extractWithMultipleHits | ( | const std::vector< AlgebraicVector > & | subCorrectionTerm, | |
const std::vector< AlgebraicMatrix > & | subDerivatives, | |||
const std::vector< Alignable * > & | alignables | |||
) | [private] |
Definition at line 146 of file CompositeAlignmentDerivativesExtractor.cc.
References count, find(), theCorrectionTerm, and theDerivatives.
Referenced by extractCurrentAlignment().
00149 { 00150 00151 std::vector< AlgebraicVector >::const_iterator itSubCorrectionTerm = subCorrectionTerm.begin(); 00152 std::vector< AlgebraicMatrix >::const_iterator itSubDerivatives = subDerivatives.begin(); 00153 std::vector< Alignable* >::const_iterator itAlignables = alignables.begin(); 00154 std::vector< Alignable* >::const_iterator itPosition; 00155 std::vector< Alignable* >::const_iterator itLastPosition; 00156 00157 int iRow = 1; 00158 00159 // Fill in the individual terms 00160 while ( itAlignables != alignables.end() ) 00161 { 00162 theCorrectionTerm.sub( iRow, *itSubCorrectionTerm ); 00163 00164 int iCollumn = 1; 00165 int iAlignable = 0; 00166 00167 itLastPosition = find( alignables.begin(), itAlignables, *itAlignables ); 00168 00169 for ( itPosition = alignables.begin(); itPosition != itLastPosition; itPosition++ ) 00170 { 00171 if ( count( alignables.begin(), itPosition, *itPosition ) == 0 ) 00172 iCollumn += subDerivatives[iAlignable].num_col(); 00173 iAlignable++; 00174 } 00175 00176 theDerivatives.sub( iRow, iCollumn, *itSubDerivatives ); 00177 00178 iRow += 2; 00179 00180 itAlignables++; 00181 itSubCorrectionTerm++; 00182 itSubDerivatives++; 00183 } 00184 00185 return; 00186 }
void CompositeAlignmentDerivativesExtractor::extractWithoutMultipleHits | ( | const std::vector< AlgebraicVector > & | subCorrectionTerm, | |
const std::vector< AlgebraicMatrix > & | subDerivatives | |||
) | [private] |
Definition at line 118 of file CompositeAlignmentDerivativesExtractor.cc.
References theCorrectionTerm, and theDerivatives.
Referenced by extractCurrentAlignment().
00120 { 00121 std::vector< AlgebraicVector >::const_iterator itSubCorrectionTerm = subCorrectionTerm.begin(); 00122 std::vector< AlgebraicMatrix >::const_iterator itSubDerivatives = subDerivatives.begin(); 00123 00124 int iRow = 1; 00125 int iCollumn = 1; 00126 00127 // Fill in the individual terms 00128 while ( itSubCorrectionTerm != subCorrectionTerm.end() ) 00129 { 00130 theCorrectionTerm.sub( iRow, *itSubCorrectionTerm ); 00131 theDerivatives.sub( iRow, iCollumn, *itSubDerivatives ); 00132 00133 iRow += 2; 00134 iCollumn += ( *itSubDerivatives ).num_col(); 00135 00136 itSubCorrectionTerm++; 00137 itSubDerivatives++; 00138 } 00139 00140 return; 00141 }
Definition at line 53 of file CompositeAlignmentDerivativesExtractor.h.
Referenced by correctionTerm(), extractCurrentAlignment(), extractWithMultipleHits(), and extractWithoutMultipleHits().
Definition at line 52 of file CompositeAlignmentDerivativesExtractor.h.
Referenced by derivatives(), extractCurrentAlignment(), extractWithMultipleHits(), and extractWithoutMultipleHits().