CMS 3D CMS Logo

CompositeAlignmentDerivativesExtractor Class Reference

A helper class to extract derivatives from composite alignable objects. More...

#include <Alignment/CommonAlignmentParametrization/interface/CompositeAlignmentDerivativesExtractor.h>

List of all members.

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 AlgebraicVectorcorrectionTerm (void) const
const AlgebraicMatrixderivatives (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


Detailed Description

A helper class to extract derivatives from composite alignable objects.

Date
2007/10/08 15:55:59
Revision
1.8
(last update by
Author
cklae
)

Definition at line 19 of file CompositeAlignmentDerivativesExtractor.h.


Constructor & Destructor Documentation

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]

destructor

Definition at line 34 of file CompositeAlignmentDerivativesExtractor.h.

00034 {};


Member Function Documentation

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 }


Member Data Documentation

AlgebraicVector CompositeAlignmentDerivativesExtractor::theCorrectionTerm [private]

Definition at line 53 of file CompositeAlignmentDerivativesExtractor.h.

Referenced by correctionTerm(), extractCurrentAlignment(), extractWithMultipleHits(), and extractWithoutMultipleHits().

AlgebraicMatrix CompositeAlignmentDerivativesExtractor::theDerivatives [private]

Definition at line 52 of file CompositeAlignmentDerivativesExtractor.h.

Referenced by derivatives(), extractCurrentAlignment(), extractWithMultipleHits(), and extractWithoutMultipleHits().


The documentation for this class was generated from the following files:
Generated on Tue Jun 9 18:16:34 2009 for CMSSW by  doxygen 1.5.4