00001 #ifndef Alignment_CommonAlignment_SurveyResidual_h 00002 #define Alignment_CommonAlignment_SurveyResidual_h 00003 00016 #include "Alignment/CommonAlignment/interface/StructureType.h" 00017 #include "Alignment/CommonAlignment/interface/Utilities.h" 00018 00019 class Alignable; 00020 class AlignableSurface; 00021 00022 class SurveyResidual 00023 { 00024 public: 00025 00030 SurveyResidual( 00031 const Alignable&, 00032 align::StructureType, // level at which residuals are found 00033 bool bias = false // true for biased residuals 00034 ); 00035 00039 inline bool valid() const; 00040 00043 AlgebraicVector sensorResidual() const; 00044 00047 align::LocalVectors pointsResidual() const; 00048 00050 AlgebraicSymMatrix inverseCovariance() const; 00051 00052 private: 00053 00056 void findSisters( 00057 const Alignable*, 00058 bool bias 00059 ); 00060 00062 void calculate( 00063 const Alignable& 00064 ); 00065 00066 // Cache some values for calculation 00067 00068 const AlignableSurface& theSurface; // current surface 00069 00070 const Alignable* theMother; // mother that matches the structure type 00071 // given in constructor 00072 00073 std::vector<const Alignable*> theSisters; // list of final daughters for 00074 // finding mother's position 00075 00076 align::GlobalVectors theNominalVs; // nominal points from mother's pos 00077 align::GlobalVectors theCurrentVs; // current points rotated to nominal surf 00078 00079 align::ErrorMatrix theInverseCovariance; 00080 }; 00081 00082 bool SurveyResidual::valid() const 00083 { 00084 return theMother != 0; 00085 } 00086 00087 #endif