![]() |
|
|||
File indexing completed on 2024-04-06 12:31:17
0001 // 0002 // 0003 // File: hitfit/matutil.h 0004 // Purpose: Define matrix types for the hitfit package, and supply a few 0005 // additional operations. 0006 // Created: Jul, 2000, sss, based on run 1 mass analysis code. 0007 // 0008 // This file defines the types `Matrix', `Column_Vector', `Row_Vector', 0009 // and `Diagonal_Matrix', to be used in hitfit code. These are based 0010 // on the corresponding CLHEP matrix classes (except that we need 0011 // to create our own row vector class, since CLHEP doesn't have that 0012 // concept). We also provide a handful of operations that are missing 0013 // in CLHEP. 0014 // 0015 // CMSSW File : interface/matutil.h 0016 // Original Author : Scott Stuart Snyder <snyder@bnl.gov> for D0 0017 // Imported to CMSSW by Haryo Sumowidagdo <Suharyo.Sumowidagdo@cern.ch> 0018 // 0019 0020 /** 0021 @file matutil.h 0022 0023 @brief Define matrix types for the HitFit package, and supply a few 0024 additional operations. 0025 0026 This file defines the type <i>Matrix</i>, <i>Column_Vector</i>, 0027 <i>Row_Vector</i>, and <i>Diagonal_Matrix</i>, to be used in HitFit code. 0028 These are based on the corresponding CLHEP matrix classes (except that 0029 HitFit uses its own row vector class, since CLHEP doesn't have that concept). 0030 Also provided are a handful of operations that are missing in CLHEP. 0031 0032 @author Scott Stuart Snyder <snyder@bnl.gov> 0033 0034 @par Creation date: 0035 July 2000. 0036 0037 @par Modification History: 0038 Apr 2009: Haryo Sumowidagdo <Suharyo.Sumowidagdo@cern.ch>: 0039 Imported to CMSSW.<br> 0040 Nov 2009: Haryo Sumowidagdo <Suharyo.Sumowidagdo@cern.ch>: 0041 Added doxygen tags for automatic generation of documentation. 0042 0043 @par Terms of Usage: 0044 With consent for the original author (Scott Snyder). 0045 0046 */ 0047 0048 #ifndef HITFIT_MATUTIL_H 0049 #define HITFIT_MATUTIL_H 0050 0051 // We want bounds checking. 0052 #define MATRIX_BOUND_CHECK 0053 0054 //#include "CLHEP/config/CLHEP.h" 0055 #include "CLHEP/Matrix/Matrix.h" 0056 #include "CLHEP/Matrix/Vector.h" 0057 #include "CLHEP/Matrix/DiagMatrix.h" 0058 0059 namespace hitfit { 0060 0061 // We use these CLHEP classes as-is. 0062 typedef CLHEP::HepMatrix Matrix; 0063 typedef CLHEP::HepVector Column_Vector; 0064 typedef CLHEP::HepDiagMatrix Diagonal_Matrix; 0065 0066 // CLHEP doesn't have a row-vector class, so make our own. 0067 // This is only a simple wrapper around Matrix that tries to constrain 0068 // the shape to a row vector. It will raise an assertion if you try 0069 // to assign to it something that isn't a row vector. 0070 /** 0071 @class Row_Vector 0072 0073 @brief Row-vector class. CLHEP doesn't have a row-vector class, 0074 so HitFit uses its own. This is only a simple wrapper around Matrix 0075 that tries to constrain the shape to a row vector. It will raise 0076 an assertion if you try to assign to it something that isn't a row 0077 vector. 0078 */ 0079 class Row_Vector : public Matrix 0080 // 0081 // Purpose: Simple Row_Vector wrapper for CLHEP matrix class. 0082 // 0083 { 0084 public: 0085 // Constructor. Gives an uninitialized 1 x cols matrix. 0086 /** 0087 @brief Constructor, instantiate an unitialized 0088 \f$1 \times \mathrm{cols}\f$ matrix. 0089 0090 @param cols The number of columns (the length of the vector). 0091 */ 0092 explicit Row_Vector(int cols); 0093 0094 // Constructor. Gives a 1 x cols matrix, initialized to zero. 0095 // The INIT argument is just a dummy; give it a value of 0. 0096 /** 0097 @brief Constructor, instantiate an unitialized 0098 \f$1 \times \mathrm{cols}\f$ matrix, and initialized it to zero. 0099 0100 @param cols The number of columns (the length of the vector). 0101 0102 @param init A dummy argument, should always be zero. 0103 */ 0104 explicit Row_Vector(int cols, int init); 0105 0106 // Copy constructor. Will raise an assertion if M doesn't have 0107 // exactly one row. 0108 /** 0109 @brief Copy constructor, will raise an assertion if <i>m</i> 0110 doesn't have exactly one row. 0111 0112 @param m The matrix to copy, must have exactly one row. 0113 */ 0114 Row_Vector(const Matrix& m); 0115 0116 // Element access. 0117 // ** Note that the indexing starts from (1). ** 0118 /** 0119 @brief Direct element access, indexing starts from 1. 0120 0121 @param col The column to access. 0122 */ 0123 const double& operator()(int col) const; 0124 0125 /** 0126 @brief Direct element access, indexing starts from 1. 0127 0128 @param col The column to access. 0129 */ 0130 double& operator()(int col); 0131 0132 // Element access. 0133 // ** Note that the indexing starts from (1,1). ** 0134 /** 0135 @brief Direct element access, indexing starts from (1,1). 0136 0137 @param row The row to access. 0138 0139 @param col The column to access. 0140 */ 0141 const double& operator()(int row, int col) const override; 0142 0143 /** 0144 @brief Direct element access, indexing starts from (1,1). 0145 0146 @param row The row to access. 0147 0148 @param col The column to access. 0149 */ 0150 double& operator()(int row, int col) override; 0151 0152 // Assignment. Will raise an assertion if M doesn't have 0153 // exactly one row. 0154 /** 0155 @brief Assignment operator, will raise an assertion if <i>m</i> 0156 doesn't have exactly one row. 0157 0158 @param m The matrix to copy, must have exactly one row. 0159 */ 0160 Row_Vector& operator=(const Matrix& m); 0161 }; 0162 0163 // Additional operations. 0164 0165 // Reset all elements of a matrix to 0. 0166 /** 0167 @brief Helper function: Reset all elements of a matrix to 0. 0168 0169 @param m The matrix to reset. 0170 */ 0171 void clear(CLHEP::HepGenMatrix& m); 0172 0173 // Check that M has dimensions 1x1. If so, return the single element 0174 // as a scalar. Otherwise, raise an assertion failure. 0175 /** 0176 @brief Return the \f$1 \times 1\f$ matrix as a scalar. 0177 Raise an assertion if the matris is not \f$1 \times 1\f$. 0178 0179 @param m The matrix to convert, must be \f$1 \times 1\f$. 0180 */ 0181 double scalar(const CLHEP::HepGenMatrix& m); 0182 0183 } // namespace hitfit 0184 0185 #endif // not HITFIT_MATUTIL_H
[ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
This page was automatically generated by the 2.2.1 LXR engine. The LXR team |
![]() ![]() |