|
||||
File indexing completed on 2024-04-06 11:56:12
0001 #ifndef Alignment_CommonAlignmentParametrization_ParametersToParametersDerivatives_h 0002 #define Alignment_CommonAlignmentParametrization_ParametersToParametersDerivatives_h 0003 0004 /// \class ParametersToParametersDerivatives 0005 /// 0006 /// Class for getting the jacobian d_mother/d_component for various kinds 0007 /// of alignment parametrisations, i.e. the derivatives expressing the influence 0008 /// of the parameters of the 'component' on the parameters of its 'mother'. 0009 /// This is needed e.g. to formulate constraints to remove the additional 0010 /// degrees of freedom introduced if larger structures and their components 0011 /// are aligned simultaneously. 0012 /// The jacobian matrix is 0013 /// 0014 /// / dp1_l/dp1_i dp1_l/dp2_i ... dp1_l/dpn_i | 0015 /// | dp2_l/dp1_i dp2_l/dp2_i ... dp2_l/dpn_i | 0016 /// | . . . | 0017 /// | . . . | 0018 /// | . . . | 0019 /// \ dpm_l/dpm_i dpm_l/dpm_i ... dpm_l/dpn_i / 0020 /// 0021 /// where 0022 /// p1_l, p2_l, ..., pn_l are the n parameters of the composite 'mother' object 0023 /// and 0024 /// p1_i, p2_i, ..., pm_i are the m parameters of its component. 0025 /// 0026 /// Note that not all combinations of parameters are supported: 0027 /// Please check method isOK() before accessing the derivatives via 0028 /// operator(unsigned int indParMother, unsigned int indParComp). 0029 /// 0030 /// Currently these parameters are supported: 0031 /// - mother: rigid body parameters, 0032 /// - component: rigid body, bowed surface or two bowed surfaces parameters. 0033 /// 0034 /// $Date: 2010/12/09 19:53:42 $ 0035 /// $Revision: 1.1 $ 0036 /// (last update by $Author: flucke $) 0037 0038 #include "DataFormats/Math/interface/AlgebraicROOTObjects.h" 0039 #include "TMatrixD.h" 0040 0041 class Alignable; 0042 0043 class ParametersToParametersDerivatives { 0044 public: 0045 ParametersToParametersDerivatives(const Alignable &component, const Alignable &mother); 0046 0047 /// Indicate whether able to provide the derivatives. 0048 bool isOK() const { return isOK_; } 0049 0050 /// Return the derivative DeltaParam(mother)/DeltaParam(component). 0051 /// Indices start with 0 - but check isOK() first! 0052 /// See class description about matrix. 0053 double operator()(unsigned int indParMother, unsigned int indParComp) const; 0054 0055 // Not this - would make the internals public: 0056 // const TMatrixD& matrix() const { return derivatives_;} 0057 0058 private: 0059 /// init by choosing the correct detailed init method depending on parameter 0060 /// types 0061 bool init(const Alignable &component, int typeComponent, const Alignable &mother, int typeMother); 0062 /// init for component and mother both with RigidBody parameters 0063 bool initRigidRigid(const Alignable &component, const Alignable &mother); 0064 /// init for component with BowedSurface and mother with RigidBody parameters 0065 bool initBowedRigid(const Alignable &component, const Alignable &mother); 0066 /// init for component with TwoBowedSurfaces and mother with RigidBody 0067 /// parameters 0068 bool init2BowedRigid(const Alignable &component, const Alignable &mother); 0069 0070 typedef ROOT::Math::SMatrix<double, 6, 9, ROOT::Math::MatRepStd<double, 6, 9>> AlgebraicMatrix69; 0071 /// from d(rigid_mother)/d(rigid_component) to 0072 /// d(rigid_mother)/d(bowed_component) for bad input (length or width zero), 0073 /// set object to invalid: isOK_ = false 0074 AlgebraicMatrix69 dRigid_dBowed(const AlgebraicMatrix66 &dRigidM2dRigidC, double halfWidth, double halfLength); 0075 0076 /// data members 0077 bool isOK_; /// can we provide the desired? 0078 TMatrixD derivatives_; /// matrix of derivatives 0079 }; 0080 0081 #endif
[ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
This page was automatically generated by the 2.2.1 LXR engine. The LXR team |