CLHEP 2.0.4.7 Reference Documentation
CLHEP Home Page CLHEP Documentation CLHEP Bug Reports |
00001 // -*- C++ -*- 00002 // 00003 // This file is a part of the CLHEP - a Class Library for High Energy Physics. 00004 // 00005 // This software written by Mark Fischler and Steven Haywood 00006 // 00007 00008 #ifdef GNUPRAGMA 00009 #pragma implementation 00010 #endif 00011 00012 #include <string.h> 00013 00014 #include "CLHEP/Matrix/defs.h" 00015 #include "CLHEP/Matrix/Matrix.h" 00016 00017 namespace CLHEP { 00018 00019 // Aij are indices for a 6x6 matrix. 00020 // Mij are indices for a 5x5 matrix. 00021 // Fij are indices for a 4x4 matrix. 00022 00023 #define A00 0 00024 #define A01 1 00025 #define A02 2 00026 #define A03 3 00027 #define A04 4 00028 #define A05 5 00029 00030 #define A10 6 00031 #define A11 7 00032 #define A12 8 00033 #define A13 9 00034 #define A14 10 00035 #define A15 11 00036 00037 #define A20 12 00038 #define A21 13 00039 #define A22 14 00040 #define A23 15 00041 #define A24 16 00042 #define A25 17 00043 00044 #define A30 18 00045 #define A31 19 00046 #define A32 20 00047 #define A33 21 00048 #define A34 22 00049 #define A35 23 00050 00051 #define A40 24 00052 #define A41 25 00053 #define A42 26 00054 #define A43 27 00055 #define A44 28 00056 #define A45 29 00057 00058 #define A50 30 00059 #define A51 31 00060 #define A52 32 00061 #define A53 33 00062 #define A54 34 00063 #define A55 35 00064 00065 #define M00 0 00066 #define M01 1 00067 #define M02 2 00068 #define M03 3 00069 #define M04 4 00070 00071 #define M10 5 00072 #define M11 6 00073 #define M12 7 00074 #define M13 8 00075 #define M14 9 00076 00077 #define M20 10 00078 #define M21 11 00079 #define M22 12 00080 #define M23 13 00081 #define M24 14 00082 00083 #define M30 15 00084 #define M31 16 00085 #define M32 17 00086 #define M33 18 00087 #define M34 19 00088 00089 #define M40 20 00090 #define M41 21 00091 #define M42 22 00092 #define M43 23 00093 #define M44 24 00094 00095 #define F00 0 00096 #define F01 1 00097 #define F02 2 00098 #define F03 3 00099 00100 #define F10 4 00101 #define F11 5 00102 #define F12 6 00103 #define F13 7 00104 00105 #define F20 8 00106 #define F21 9 00107 #define F22 10 00108 #define F23 11 00109 00110 #define F30 12 00111 #define F31 13 00112 #define F32 14 00113 #define F33 15 00114 00115 00116 void HepMatrix::invertHaywood4 (int & ifail) { 00117 00118 ifail = 0; 00119 00120 // Find all NECESSARY 2x2 dets: (18 of them) 00121 00122 double Det2_12_01 = m[F10]*m[F21] - m[F11]*m[F20]; 00123 double Det2_12_02 = m[F10]*m[F22] - m[F12]*m[F20]; 00124 double Det2_12_03 = m[F10]*m[F23] - m[F13]*m[F20]; // 00125 double Det2_12_13 = m[F11]*m[F23] - m[F13]*m[F21]; // 00126 double Det2_12_23 = m[F12]*m[F23] - m[F13]*m[F22]; // 00127 double Det2_12_12 = m[F11]*m[F22] - m[F12]*m[F21]; 00128 double Det2_13_01 = m[F10]*m[F31] - m[F11]*m[F30]; 00129 double Det2_13_02 = m[F10]*m[F32] - m[F12]*m[F30]; 00130 double Det2_13_03 = m[F10]*m[F33] - m[F13]*m[F30]; 00131 double Det2_13_12 = m[F11]*m[F32] - m[F12]*m[F31]; 00132 double Det2_13_13 = m[F11]*m[F33] - m[F13]*m[F31]; 00133 double Det2_13_23 = m[F12]*m[F33] - m[F13]*m[F32]; // 00134 double Det2_23_01 = m[F20]*m[F31] - m[F21]*m[F30]; 00135 double Det2_23_02 = m[F20]*m[F32] - m[F22]*m[F30]; 00136 double Det2_23_03 = m[F20]*m[F33] - m[F23]*m[F30]; 00137 double Det2_23_12 = m[F21]*m[F32] - m[F22]*m[F31]; 00138 double Det2_23_13 = m[F21]*m[F33] - m[F23]*m[F31]; 00139 double Det2_23_23 = m[F22]*m[F33] - m[F23]*m[F32]; 00140 00141 // Find all NECESSARY 3x3 dets: (16 of them) 00142 00143 double Det3_012_012 = m[F00]*Det2_12_12 - m[F01]*Det2_12_02 00144 + m[F02]*Det2_12_01; 00145 double Det3_012_013 = m[F00]*Det2_12_13 - m[F01]*Det2_12_03 00146 + m[F03]*Det2_12_01; // 00147 double Det3_012_023 = m[F00]*Det2_12_23 - m[F02]*Det2_12_03 00148 + m[F03]*Det2_12_02; // 00149 double Det3_012_123 = m[F01]*Det2_12_23 - m[F02]*Det2_12_13 00150 + m[F03]*Det2_12_12; // 00151 double Det3_013_012 = m[F00]*Det2_13_12 - m[F01]*Det2_13_02 00152 + m[F02]*Det2_13_01; 00153 double Det3_013_013 = m[F00]*Det2_13_13 - m[F01]*Det2_13_03 00154 + m[F03]*Det2_13_01; 00155 double Det3_013_023 = m[F00]*Det2_13_23 - m[F02]*Det2_13_03 00156 + m[F03]*Det2_13_02; // 00157 double Det3_013_123 = m[F01]*Det2_13_23 - m[F02]*Det2_13_13 00158 + m[F03]*Det2_13_12; // 00159 double Det3_023_012 = m[F00]*Det2_23_12 - m[F01]*Det2_23_02 00160 + m[F02]*Det2_23_01; 00161 double Det3_023_013 = m[F00]*Det2_23_13 - m[F01]*Det2_23_03 00162 + m[F03]*Det2_23_01; 00163 double Det3_023_023 = m[F00]*Det2_23_23 - m[F02]*Det2_23_03 00164 + m[F03]*Det2_23_02; 00165 double Det3_023_123 = m[F01]*Det2_23_23 - m[F02]*Det2_23_13 00166 + m[F03]*Det2_23_12; // 00167 double Det3_123_012 = m[F10]*Det2_23_12 - m[F11]*Det2_23_02 00168 + m[F12]*Det2_23_01; 00169 double Det3_123_013 = m[F10]*Det2_23_13 - m[F11]*Det2_23_03 00170 + m[F13]*Det2_23_01; 00171 double Det3_123_023 = m[F10]*Det2_23_23 - m[F12]*Det2_23_03 00172 + m[F13]*Det2_23_02; 00173 double Det3_123_123 = m[F11]*Det2_23_23 - m[F12]*Det2_23_13 00174 + m[F13]*Det2_23_12; 00175 00176 // Find the 4x4 det: 00177 00178 double det = m[F00]*Det3_123_123 00179 - m[F01]*Det3_123_023 00180 + m[F02]*Det3_123_013 00181 - m[F03]*Det3_123_012; 00182 00183 if ( det == 0 ) { 00184 #ifdef SINGULAR_DIAGNOSTICS 00185 std::cerr << "Kramer's rule inversion of a singular 4x4 matrix: " 00186 << *this << "\n"; 00187 #endif 00188 ifail = 1; 00189 return; 00190 } 00191 00192 double oneOverDet = 1.0/det; 00193 double mn1OverDet = - oneOverDet; 00194 00195 m[F00] = Det3_123_123 * oneOverDet; 00196 m[F01] = Det3_023_123 * mn1OverDet; 00197 m[F02] = Det3_013_123 * oneOverDet; 00198 m[F03] = Det3_012_123 * mn1OverDet; 00199 00200 m[F10] = Det3_123_023 * mn1OverDet; 00201 m[F11] = Det3_023_023 * oneOverDet; 00202 m[F12] = Det3_013_023 * mn1OverDet; 00203 m[F13] = Det3_012_023 * oneOverDet; 00204 00205 m[F20] = Det3_123_013 * oneOverDet; 00206 m[F21] = Det3_023_013 * mn1OverDet; 00207 m[F22] = Det3_013_013 * oneOverDet; 00208 m[F23] = Det3_012_013 * mn1OverDet; 00209 00210 m[F30] = Det3_123_012 * mn1OverDet; 00211 m[F31] = Det3_023_012 * oneOverDet; 00212 m[F32] = Det3_013_012 * mn1OverDet; 00213 m[F33] = Det3_012_012 * oneOverDet; 00214 00215 return; 00216 } 00217 00218 00219 00220 void HepMatrix::invertHaywood5 (int & ifail) { 00221 00222 ifail = 0; 00223 00224 // Find all NECESSARY 2x2 dets: (30 of them) 00225 00226 double Det2_23_01 = m[M20]*m[M31] - m[M21]*m[M30]; 00227 double Det2_23_02 = m[M20]*m[M32] - m[M22]*m[M30]; 00228 double Det2_23_03 = m[M20]*m[M33] - m[M23]*m[M30]; 00229 double Det2_23_04 = m[M20]*m[M34] - m[M24]*m[M30]; 00230 double Det2_23_12 = m[M21]*m[M32] - m[M22]*m[M31]; // 00231 double Det2_23_13 = m[M21]*m[M33] - m[M23]*m[M31]; 00232 double Det2_23_14 = m[M21]*m[M34] - m[M24]*m[M31]; // 00233 double Det2_23_23 = m[M22]*m[M33] - m[M23]*m[M32]; 00234 double Det2_23_24 = m[M22]*m[M34] - m[M24]*m[M32]; // 00235 double Det2_23_34 = m[M23]*m[M34] - m[M24]*m[M33]; // 00236 double Det2_24_01 = m[M20]*m[M41] - m[M21]*m[M40]; 00237 double Det2_24_02 = m[M20]*m[M42] - m[M22]*m[M40]; 00238 double Det2_24_03 = m[M20]*m[M43] - m[M23]*m[M40]; 00239 double Det2_24_04 = m[M20]*m[M44] - m[M24]*m[M40]; 00240 double Det2_24_12 = m[M21]*m[M42] - m[M22]*m[M41]; 00241 double Det2_24_13 = m[M21]*m[M43] - m[M23]*m[M41]; 00242 double Det2_24_14 = m[M21]*m[M44] - m[M24]*m[M41]; 00243 double Det2_24_23 = m[M22]*m[M43] - m[M23]*m[M42]; 00244 double Det2_24_24 = m[M22]*m[M44] - m[M24]*m[M42]; 00245 double Det2_24_34 = m[M23]*m[M44] - m[M24]*m[M43]; // 00246 double Det2_34_01 = m[M30]*m[M41] - m[M31]*m[M40]; 00247 double Det2_34_02 = m[M30]*m[M42] - m[M32]*m[M40]; 00248 double Det2_34_03 = m[M30]*m[M43] - m[M33]*m[M40]; 00249 double Det2_34_04 = m[M30]*m[M44] - m[M34]*m[M40]; 00250 double Det2_34_12 = m[M31]*m[M42] - m[M32]*m[M41]; 00251 double Det2_34_13 = m[M31]*m[M43] - m[M33]*m[M41]; 00252 double Det2_34_14 = m[M31]*m[M44] - m[M34]*m[M41]; 00253 double Det2_34_23 = m[M32]*m[M43] - m[M33]*m[M42]; 00254 double Det2_34_24 = m[M32]*m[M44] - m[M34]*m[M42]; 00255 double Det2_34_34 = m[M33]*m[M44] - m[M34]*m[M43]; 00256 00257 // Find all NECESSARY 3x3 dets: (40 of them) 00258 00259 double Det3_123_012 = m[M10]*Det2_23_12 - m[M11]*Det2_23_02 00260 + m[M12]*Det2_23_01; 00261 double Det3_123_013 = m[M10]*Det2_23_13 - m[M11]*Det2_23_03 00262 + m[M13]*Det2_23_01; 00263 double Det3_123_014 = m[M10]*Det2_23_14 - m[M11]*Det2_23_04 00264 + m[M14]*Det2_23_01; // 00265 double Det3_123_023 = m[M10]*Det2_23_23 - m[M12]*Det2_23_03 00266 + m[M13]*Det2_23_02; 00267 double Det3_123_024 = m[M10]*Det2_23_24 - m[M12]*Det2_23_04 00268 + m[M14]*Det2_23_02; // 00269 double Det3_123_034 = m[M10]*Det2_23_34 - m[M13]*Det2_23_04 00270 + m[M14]*Det2_23_03; // 00271 double Det3_123_123 = m[M11]*Det2_23_23 - m[M12]*Det2_23_13 00272 + m[M13]*Det2_23_12; 00273 double Det3_123_124 = m[M11]*Det2_23_24 - m[M12]*Det2_23_14 00274 + m[M14]*Det2_23_12; // 00275 double Det3_123_134 = m[M11]*Det2_23_34 - m[M13]*Det2_23_14 00276 + m[M14]*Det2_23_13; // 00277 double Det3_123_234 = m[M12]*Det2_23_34 - m[M13]*Det2_23_24 00278 + m[M14]*Det2_23_23; // 00279 double Det3_124_012 = m[M10]*Det2_24_12 - m[M11]*Det2_24_02 00280 + m[M12]*Det2_24_01; 00281 double Det3_124_013 = m[M10]*Det2_24_13 - m[M11]*Det2_24_03 00282 + m[M13]*Det2_24_01; 00283 double Det3_124_014 = m[M10]*Det2_24_14 - m[M11]*Det2_24_04 00284 + m[M14]*Det2_24_01; 00285 double Det3_124_023 = m[M10]*Det2_24_23 - m[M12]*Det2_24_03 00286 + m[M13]*Det2_24_02; 00287 double Det3_124_024 = m[M10]*Det2_24_24 - m[M12]*Det2_24_04 00288 + m[M14]*Det2_24_02; 00289 double Det3_124_034 = m[M10]*Det2_24_34 - m[M13]*Det2_24_04 00290 + m[M14]*Det2_24_03; // 00291 double Det3_124_123 = m[M11]*Det2_24_23 - m[M12]*Det2_24_13 00292 + m[M13]*Det2_24_12; 00293 double Det3_124_124 = m[M11]*Det2_24_24 - m[M12]*Det2_24_14 00294 + m[M14]*Det2_24_12; 00295 double Det3_124_134 = m[M11]*Det2_24_34 - m[M13]*Det2_24_14 00296 + m[M14]*Det2_24_13; // 00297 double Det3_124_234 = m[M12]*Det2_24_34 - m[M13]*Det2_24_24 00298 + m[M14]*Det2_24_23; // 00299 double Det3_134_012 = m[M10]*Det2_34_12 - m[M11]*Det2_34_02 00300 + m[M12]*Det2_34_01; 00301 double Det3_134_013 = m[M10]*Det2_34_13 - m[M11]*Det2_34_03 00302 + m[M13]*Det2_34_01; 00303 double Det3_134_014 = m[M10]*Det2_34_14 - m[M11]*Det2_34_04 00304 + m[M14]*Det2_34_01; 00305 double Det3_134_023 = m[M10]*Det2_34_23 - m[M12]*Det2_34_03 00306 + m[M13]*Det2_34_02; 00307 double Det3_134_024 = m[M10]*Det2_34_24 - m[M12]*Det2_34_04 00308 + m[M14]*Det2_34_02; 00309 double Det3_134_034 = m[M10]*Det2_34_34 - m[M13]*Det2_34_04 00310 + m[M14]*Det2_34_03; 00311 double Det3_134_123 = m[M11]*Det2_34_23 - m[M12]*Det2_34_13 00312 + m[M13]*Det2_34_12; 00313 double Det3_134_124 = m[M11]*Det2_34_24 - m[M12]*Det2_34_14 00314 + m[M14]*Det2_34_12; 00315 double Det3_134_134 = m[M11]*Det2_34_34 - m[M13]*Det2_34_14 00316 + m[M14]*Det2_34_13; 00317 double Det3_134_234 = m[M12]*Det2_34_34 - m[M13]*Det2_34_24 00318 + m[M14]*Det2_34_23; // 00319 double Det3_234_012 = m[M20]*Det2_34_12 - m[M21]*Det2_34_02 00320 + m[M22]*Det2_34_01; 00321 double Det3_234_013 = m[M20]*Det2_34_13 - m[M21]*Det2_34_03 00322 + m[M23]*Det2_34_01; 00323 double Det3_234_014 = m[M20]*Det2_34_14 - m[M21]*Det2_34_04 00324 + m[M24]*Det2_34_01; 00325 double Det3_234_023 = m[M20]*Det2_34_23 - m[M22]*Det2_34_03 00326 + m[M23]*Det2_34_02; 00327 double Det3_234_024 = m[M20]*Det2_34_24 - m[M22]*Det2_34_04 00328 + m[M24]*Det2_34_02; 00329 double Det3_234_034 = m[M20]*Det2_34_34 - m[M23]*Det2_34_04 00330 + m[M24]*Det2_34_03; 00331 double Det3_234_123 = m[M21]*Det2_34_23 - m[M22]*Det2_34_13 00332 + m[M23]*Det2_34_12; 00333 double Det3_234_124 = m[M21]*Det2_34_24 - m[M22]*Det2_34_14 00334 + m[M24]*Det2_34_12; 00335 double Det3_234_134 = m[M21]*Det2_34_34 - m[M23]*Det2_34_14 00336 + m[M24]*Det2_34_13; 00337 double Det3_234_234 = m[M22]*Det2_34_34 - m[M23]*Det2_34_24 00338 + m[M24]*Det2_34_23; 00339 00340 // Find all NECESSARY 4x4 dets: (25 of them) 00341 00342 double Det4_0123_0123 = m[M00]*Det3_123_123 - m[M01]*Det3_123_023 00343 + m[M02]*Det3_123_013 - m[M03]*Det3_123_012; 00344 double Det4_0123_0124 = m[M00]*Det3_123_124 - m[M01]*Det3_123_024 00345 + m[M02]*Det3_123_014 - m[M04]*Det3_123_012; // 00346 double Det4_0123_0134 = m[M00]*Det3_123_134 - m[M01]*Det3_123_034 00347 + m[M03]*Det3_123_014 - m[M04]*Det3_123_013; // 00348 double Det4_0123_0234 = m[M00]*Det3_123_234 - m[M02]*Det3_123_034 00349 + m[M03]*Det3_123_024 - m[M04]*Det3_123_023; // 00350 double Det4_0123_1234 = m[M01]*Det3_123_234 - m[M02]*Det3_123_134 00351 + m[M03]*Det3_123_124 - m[M04]*Det3_123_123; // 00352 double Det4_0124_0123 = m[M00]*Det3_124_123 - m[M01]*Det3_124_023 00353 + m[M02]*Det3_124_013 - m[M03]*Det3_124_012; 00354 double Det4_0124_0124 = m[M00]*Det3_124_124 - m[M01]*Det3_124_024 00355 + m[M02]*Det3_124_014 - m[M04]*Det3_124_012; 00356 double Det4_0124_0134 = m[M00]*Det3_124_134 - m[M01]*Det3_124_034 00357 + m[M03]*Det3_124_014 - m[M04]*Det3_124_013; // 00358 double Det4_0124_0234 = m[M00]*Det3_124_234 - m[M02]*Det3_124_034 00359 + m[M03]*Det3_124_024 - m[M04]*Det3_124_023; // 00360 double Det4_0124_1234 = m[M01]*Det3_124_234 - m[M02]*Det3_124_134 00361 + m[M03]*Det3_124_124 - m[M04]*Det3_124_123; // 00362 double Det4_0134_0123 = m[M00]*Det3_134_123 - m[M01]*Det3_134_023 00363 + m[M02]*Det3_134_013 - m[M03]*Det3_134_012; 00364 double Det4_0134_0124 = m[M00]*Det3_134_124 - m[M01]*Det3_134_024 00365 + m[M02]*Det3_134_014 - m[M04]*Det3_134_012; 00366 double Det4_0134_0134 = m[M00]*Det3_134_134 - m[M01]*Det3_134_034 00367 + m[M03]*Det3_134_014 - m[M04]*Det3_134_013; 00368 double Det4_0134_0234 = m[M00]*Det3_134_234 - m[M02]*Det3_134_034 00369 + m[M03]*Det3_134_024 - m[M04]*Det3_134_023; // 00370 double Det4_0134_1234 = m[M01]*Det3_134_234 - m[M02]*Det3_134_134 00371 + m[M03]*Det3_134_124 - m[M04]*Det3_134_123; // 00372 double Det4_0234_0123 = m[M00]*Det3_234_123 - m[M01]*Det3_234_023 00373 + m[M02]*Det3_234_013 - m[M03]*Det3_234_012; 00374 double Det4_0234_0124 = m[M00]*Det3_234_124 - m[M01]*Det3_234_024 00375 + m[M02]*Det3_234_014 - m[M04]*Det3_234_012; 00376 double Det4_0234_0134 = m[M00]*Det3_234_134 - m[M01]*Det3_234_034 00377 + m[M03]*Det3_234_014 - m[M04]*Det3_234_013; 00378 double Det4_0234_0234 = m[M00]*Det3_234_234 - m[M02]*Det3_234_034 00379 + m[M03]*Det3_234_024 - m[M04]*Det3_234_023; 00380 double Det4_0234_1234 = m[M01]*Det3_234_234 - m[M02]*Det3_234_134 00381 + m[M03]*Det3_234_124 - m[M04]*Det3_234_123; // 00382 double Det4_1234_0123 = m[M10]*Det3_234_123 - m[M11]*Det3_234_023 00383 + m[M12]*Det3_234_013 - m[M13]*Det3_234_012; 00384 double Det4_1234_0124 = m[M10]*Det3_234_124 - m[M11]*Det3_234_024 00385 + m[M12]*Det3_234_014 - m[M14]*Det3_234_012; 00386 double Det4_1234_0134 = m[M10]*Det3_234_134 - m[M11]*Det3_234_034 00387 + m[M13]*Det3_234_014 - m[M14]*Det3_234_013; 00388 double Det4_1234_0234 = m[M10]*Det3_234_234 - m[M12]*Det3_234_034 00389 + m[M13]*Det3_234_024 - m[M14]*Det3_234_023; 00390 double Det4_1234_1234 = m[M11]*Det3_234_234 - m[M12]*Det3_234_134 00391 + m[M13]*Det3_234_124 - m[M14]*Det3_234_123; 00392 00393 // Find the 5x5 det: 00394 00395 double det = m[M00]*Det4_1234_1234 00396 - m[M01]*Det4_1234_0234 00397 + m[M02]*Det4_1234_0134 00398 - m[M03]*Det4_1234_0124 00399 + m[M04]*Det4_1234_0123; 00400 00401 if ( det == 0 ) { 00402 #ifdef SINGULAR_DIAGNOSTICS 00403 std::cerr << "Kramer's rule inversion of a singular 5x5 matrix: " 00404 << *this << "\n"; 00405 #endif 00406 ifail = 1; 00407 return; 00408 } 00409 00410 double oneOverDet = 1.0/det; 00411 double mn1OverDet = - oneOverDet; 00412 00413 m[M00] = Det4_1234_1234 * oneOverDet; 00414 m[M01] = Det4_0234_1234 * mn1OverDet; 00415 m[M02] = Det4_0134_1234 * oneOverDet; 00416 m[M03] = Det4_0124_1234 * mn1OverDet; 00417 m[M04] = Det4_0123_1234 * oneOverDet; 00418 00419 m[M10] = Det4_1234_0234 * mn1OverDet; 00420 m[M11] = Det4_0234_0234 * oneOverDet; 00421 m[M12] = Det4_0134_0234 * mn1OverDet; 00422 m[M13] = Det4_0124_0234 * oneOverDet; 00423 m[M14] = Det4_0123_0234 * mn1OverDet; 00424 00425 m[M20] = Det4_1234_0134 * oneOverDet; 00426 m[M21] = Det4_0234_0134 * mn1OverDet; 00427 m[M22] = Det4_0134_0134 * oneOverDet; 00428 m[M23] = Det4_0124_0134 * mn1OverDet; 00429 m[M24] = Det4_0123_0134 * oneOverDet; 00430 00431 m[M30] = Det4_1234_0124 * mn1OverDet; 00432 m[M31] = Det4_0234_0124 * oneOverDet; 00433 m[M32] = Det4_0134_0124 * mn1OverDet; 00434 m[M33] = Det4_0124_0124 * oneOverDet; 00435 m[M34] = Det4_0123_0124 * mn1OverDet; 00436 00437 m[M40] = Det4_1234_0123 * oneOverDet; 00438 m[M41] = Det4_0234_0123 * mn1OverDet; 00439 m[M42] = Det4_0134_0123 * oneOverDet; 00440 m[M43] = Det4_0124_0123 * mn1OverDet; 00441 m[M44] = Det4_0123_0123 * oneOverDet; 00442 00443 return; 00444 } 00445 00446 void HepMatrix::invertHaywood6 (int & ifail) { 00447 00448 ifail = 0; 00449 00450 // Find all NECESSARY 2x2 dets: (45 of them) 00451 00452 double Det2_34_01 = m[A30]*m[A41] - m[A31]*m[A40]; 00453 double Det2_34_02 = m[A30]*m[A42] - m[A32]*m[A40]; 00454 double Det2_34_03 = m[A30]*m[A43] - m[A33]*m[A40]; 00455 double Det2_34_04 = m[A30]*m[A44] - m[A34]*m[A40]; 00456 double Det2_34_05 = m[A30]*m[A45] - m[A35]*m[A40]; // 00457 double Det2_34_12 = m[A31]*m[A42] - m[A32]*m[A41]; 00458 double Det2_34_13 = m[A31]*m[A43] - m[A33]*m[A41]; 00459 double Det2_34_14 = m[A31]*m[A44] - m[A34]*m[A41]; 00460 double Det2_34_15 = m[A31]*m[A45] - m[A35]*m[A41]; // 00461 double Det2_34_23 = m[A32]*m[A43] - m[A33]*m[A42]; 00462 double Det2_34_24 = m[A32]*m[A44] - m[A34]*m[A42]; 00463 double Det2_34_25 = m[A32]*m[A45] - m[A35]*m[A42]; // 00464 double Det2_34_34 = m[A33]*m[A44] - m[A34]*m[A43]; 00465 double Det2_34_35 = m[A33]*m[A45] - m[A35]*m[A43]; // 00466 double Det2_34_45 = m[A34]*m[A45] - m[A35]*m[A44]; // 00467 double Det2_35_01 = m[A30]*m[A51] - m[A31]*m[A50]; 00468 double Det2_35_02 = m[A30]*m[A52] - m[A32]*m[A50]; 00469 double Det2_35_03 = m[A30]*m[A53] - m[A33]*m[A50]; 00470 double Det2_35_04 = m[A30]*m[A54] - m[A34]*m[A50]; 00471 double Det2_35_05 = m[A30]*m[A55] - m[A35]*m[A50]; 00472 double Det2_35_12 = m[A31]*m[A52] - m[A32]*m[A51]; 00473 double Det2_35_13 = m[A31]*m[A53] - m[A33]*m[A51]; 00474 double Det2_35_14 = m[A31]*m[A54] - m[A34]*m[A51]; 00475 double Det2_35_15 = m[A31]*m[A55] - m[A35]*m[A51]; 00476 double Det2_35_23 = m[A32]*m[A53] - m[A33]*m[A52]; 00477 double Det2_35_24 = m[A32]*m[A54] - m[A34]*m[A52]; 00478 double Det2_35_25 = m[A32]*m[A55] - m[A35]*m[A52]; 00479 double Det2_35_34 = m[A33]*m[A54] - m[A34]*m[A53]; 00480 double Det2_35_35 = m[A33]*m[A55] - m[A35]*m[A53]; 00481 double Det2_35_45 = m[A34]*m[A55] - m[A35]*m[A54]; // 00482 double Det2_45_01 = m[A40]*m[A51] - m[A41]*m[A50]; 00483 double Det2_45_02 = m[A40]*m[A52] - m[A42]*m[A50]; 00484 double Det2_45_03 = m[A40]*m[A53] - m[A43]*m[A50]; 00485 double Det2_45_04 = m[A40]*m[A54] - m[A44]*m[A50]; 00486 double Det2_45_05 = m[A40]*m[A55] - m[A45]*m[A50]; 00487 double Det2_45_12 = m[A41]*m[A52] - m[A42]*m[A51]; 00488 double Det2_45_13 = m[A41]*m[A53] - m[A43]*m[A51]; 00489 double Det2_45_14 = m[A41]*m[A54] - m[A44]*m[A51]; 00490 double Det2_45_15 = m[A41]*m[A55] - m[A45]*m[A51]; 00491 double Det2_45_23 = m[A42]*m[A53] - m[A43]*m[A52]; 00492 double Det2_45_24 = m[A42]*m[A54] - m[A44]*m[A52]; 00493 double Det2_45_25 = m[A42]*m[A55] - m[A45]*m[A52]; 00494 double Det2_45_34 = m[A43]*m[A54] - m[A44]*m[A53]; 00495 double Det2_45_35 = m[A43]*m[A55] - m[A45]*m[A53]; 00496 double Det2_45_45 = m[A44]*m[A55] - m[A45]*m[A54]; 00497 00498 // Find all NECESSARY 3x3 dets: (80 of them) 00499 00500 double Det3_234_012 = m[A20]*Det2_34_12 - m[A21]*Det2_34_02 00501 + m[A22]*Det2_34_01; 00502 double Det3_234_013 = m[A20]*Det2_34_13 - m[A21]*Det2_34_03 00503 + m[A23]*Det2_34_01; 00504 double Det3_234_014 = m[A20]*Det2_34_14 - m[A21]*Det2_34_04 00505 + m[A24]*Det2_34_01; 00506 double Det3_234_015 = m[A20]*Det2_34_15 - m[A21]*Det2_34_05 00507 + m[A25]*Det2_34_01; // 00508 double Det3_234_023 = m[A20]*Det2_34_23 - m[A22]*Det2_34_03 00509 + m[A23]*Det2_34_02; 00510 double Det3_234_024 = m[A20]*Det2_34_24 - m[A22]*Det2_34_04 00511 + m[A24]*Det2_34_02; 00512 double Det3_234_025 = m[A20]*Det2_34_25 - m[A22]*Det2_34_05 00513 + m[A25]*Det2_34_02; // 00514 double Det3_234_034 = m[A20]*Det2_34_34 - m[A23]*Det2_34_04 00515 + m[A24]*Det2_34_03; 00516 double Det3_234_035 = m[A20]*Det2_34_35 - m[A23]*Det2_34_05 00517 + m[A25]*Det2_34_03; // 00518 double Det3_234_045 = m[A20]*Det2_34_45 - m[A24]*Det2_34_05 00519 + m[A25]*Det2_34_04; // 00520 double Det3_234_123 = m[A21]*Det2_34_23 - m[A22]*Det2_34_13 00521 + m[A23]*Det2_34_12; 00522 double Det3_234_124 = m[A21]*Det2_34_24 - m[A22]*Det2_34_14 00523 + m[A24]*Det2_34_12; 00524 double Det3_234_125 = m[A21]*Det2_34_25 - m[A22]*Det2_34_15 00525 + m[A25]*Det2_34_12; // 00526 double Det3_234_134 = m[A21]*Det2_34_34 - m[A23]*Det2_34_14 00527 + m[A24]*Det2_34_13; 00528 double Det3_234_135 = m[A21]*Det2_34_35 - m[A23]*Det2_34_15 00529 + m[A25]*Det2_34_13; // 00530 double Det3_234_145 = m[A21]*Det2_34_45 - m[A24]*Det2_34_15 00531 + m[A25]*Det2_34_14; // 00532 double Det3_234_234 = m[A22]*Det2_34_34 - m[A23]*Det2_34_24 00533 + m[A24]*Det2_34_23; 00534 double Det3_234_235 = m[A22]*Det2_34_35 - m[A23]*Det2_34_25 00535 + m[A25]*Det2_34_23; // 00536 double Det3_234_245 = m[A22]*Det2_34_45 - m[A24]*Det2_34_25 00537 + m[A25]*Det2_34_24; // 00538 double Det3_234_345 = m[A23]*Det2_34_45 - m[A24]*Det2_34_35 00539 + m[A25]*Det2_34_34; // 00540 double Det3_235_012 = m[A20]*Det2_35_12 - m[A21]*Det2_35_02 00541 + m[A22]*Det2_35_01; 00542 double Det3_235_013 = m[A20]*Det2_35_13 - m[A21]*Det2_35_03 00543 + m[A23]*Det2_35_01; 00544 double Det3_235_014 = m[A20]*Det2_35_14 - m[A21]*Det2_35_04 00545 + m[A24]*Det2_35_01; 00546 double Det3_235_015 = m[A20]*Det2_35_15 - m[A21]*Det2_35_05 00547 + m[A25]*Det2_35_01; 00548 double Det3_235_023 = m[A20]*Det2_35_23 - m[A22]*Det2_35_03 00549 + m[A23]*Det2_35_02; 00550 double Det3_235_024 = m[A20]*Det2_35_24 - m[A22]*Det2_35_04 00551 + m[A24]*Det2_35_02; 00552 double Det3_235_025 = m[A20]*Det2_35_25 - m[A22]*Det2_35_05 00553 + m[A25]*Det2_35_02; 00554 double Det3_235_034 = m[A20]*Det2_35_34 - m[A23]*Det2_35_04 00555 + m[A24]*Det2_35_03; 00556 double Det3_235_035 = m[A20]*Det2_35_35 - m[A23]*Det2_35_05 00557 + m[A25]*Det2_35_03; 00558 double Det3_235_045 = m[A20]*Det2_35_45 - m[A24]*Det2_35_05 00559 + m[A25]*Det2_35_04; // 00560 double Det3_235_123 = m[A21]*Det2_35_23 - m[A22]*Det2_35_13 00561 + m[A23]*Det2_35_12; 00562 double Det3_235_124 = m[A21]*Det2_35_24 - m[A22]*Det2_35_14 00563 + m[A24]*Det2_35_12; 00564 double Det3_235_125 = m[A21]*Det2_35_25 - m[A22]*Det2_35_15 00565 + m[A25]*Det2_35_12; 00566 double Det3_235_134 = m[A21]*Det2_35_34 - m[A23]*Det2_35_14 00567 + m[A24]*Det2_35_13; 00568 double Det3_235_135 = m[A21]*Det2_35_35 - m[A23]*Det2_35_15 00569 + m[A25]*Det2_35_13; 00570 double Det3_235_145 = m[A21]*Det2_35_45 - m[A24]*Det2_35_15 00571 + m[A25]*Det2_35_14; // 00572 double Det3_235_234 = m[A22]*Det2_35_34 - m[A23]*Det2_35_24 00573 + m[A24]*Det2_35_23; 00574 double Det3_235_235 = m[A22]*Det2_35_35 - m[A23]*Det2_35_25 00575 + m[A25]*Det2_35_23; 00576 double Det3_235_245 = m[A22]*Det2_35_45 - m[A24]*Det2_35_25 00577 + m[A25]*Det2_35_24; // 00578 double Det3_235_345 = m[A23]*Det2_35_45 - m[A24]*Det2_35_35 00579 + m[A25]*Det2_35_34; // 00580 double Det3_245_012 = m[A20]*Det2_45_12 - m[A21]*Det2_45_02 00581 + m[A22]*Det2_45_01; 00582 double Det3_245_013 = m[A20]*Det2_45_13 - m[A21]*Det2_45_03 00583 + m[A23]*Det2_45_01; 00584 double Det3_245_014 = m[A20]*Det2_45_14 - m[A21]*Det2_45_04 00585 + m[A24]*Det2_45_01; 00586 double Det3_245_015 = m[A20]*Det2_45_15 - m[A21]*Det2_45_05 00587 + m[A25]*Det2_45_01; 00588 double Det3_245_023 = m[A20]*Det2_45_23 - m[A22]*Det2_45_03 00589 + m[A23]*Det2_45_02; 00590 double Det3_245_024 = m[A20]*Det2_45_24 - m[A22]*Det2_45_04 00591 + m[A24]*Det2_45_02; 00592 double Det3_245_025 = m[A20]*Det2_45_25 - m[A22]*Det2_45_05 00593 + m[A25]*Det2_45_02; 00594 double Det3_245_034 = m[A20]*Det2_45_34 - m[A23]*Det2_45_04 00595 + m[A24]*Det2_45_03; 00596 double Det3_245_035 = m[A20]*Det2_45_35 - m[A23]*Det2_45_05 00597 + m[A25]*Det2_45_03; 00598 double Det3_245_045 = m[A20]*Det2_45_45 - m[A24]*Det2_45_05 00599 + m[A25]*Det2_45_04; 00600 double Det3_245_123 = m[A21]*Det2_45_23 - m[A22]*Det2_45_13 00601 + m[A23]*Det2_45_12; 00602 double Det3_245_124 = m[A21]*Det2_45_24 - m[A22]*Det2_45_14 00603 + m[A24]*Det2_45_12; 00604 double Det3_245_125 = m[A21]*Det2_45_25 - m[A22]*Det2_45_15 00605 + m[A25]*Det2_45_12; 00606 double Det3_245_134 = m[A21]*Det2_45_34 - m[A23]*Det2_45_14 00607 + m[A24]*Det2_45_13; 00608 double Det3_245_135 = m[A21]*Det2_45_35 - m[A23]*Det2_45_15 00609 + m[A25]*Det2_45_13; 00610 double Det3_245_145 = m[A21]*Det2_45_45 - m[A24]*Det2_45_15 00611 + m[A25]*Det2_45_14; 00612 double Det3_245_234 = m[A22]*Det2_45_34 - m[A23]*Det2_45_24 00613 + m[A24]*Det2_45_23; 00614 double Det3_245_235 = m[A22]*Det2_45_35 - m[A23]*Det2_45_25 00615 + m[A25]*Det2_45_23; 00616 double Det3_245_245 = m[A22]*Det2_45_45 - m[A24]*Det2_45_25 00617 + m[A25]*Det2_45_24; 00618 double Det3_245_345 = m[A23]*Det2_45_45 - m[A24]*Det2_45_35 00619 + m[A25]*Det2_45_34; // 00620 double Det3_345_012 = m[A30]*Det2_45_12 - m[A31]*Det2_45_02 00621 + m[A32]*Det2_45_01; 00622 double Det3_345_013 = m[A30]*Det2_45_13 - m[A31]*Det2_45_03 00623 + m[A33]*Det2_45_01; 00624 double Det3_345_014 = m[A30]*Det2_45_14 - m[A31]*Det2_45_04 00625 + m[A34]*Det2_45_01; 00626 double Det3_345_015 = m[A30]*Det2_45_15 - m[A31]*Det2_45_05 00627 + m[A35]*Det2_45_01; 00628 double Det3_345_023 = m[A30]*Det2_45_23 - m[A32]*Det2_45_03 00629 + m[A33]*Det2_45_02; 00630 double Det3_345_024 = m[A30]*Det2_45_24 - m[A32]*Det2_45_04 00631 + m[A34]*Det2_45_02; 00632 double Det3_345_025 = m[A30]*Det2_45_25 - m[A32]*Det2_45_05 00633 + m[A35]*Det2_45_02; 00634 double Det3_345_034 = m[A30]*Det2_45_34 - m[A33]*Det2_45_04 00635 + m[A34]*Det2_45_03; 00636 double Det3_345_035 = m[A30]*Det2_45_35 - m[A33]*Det2_45_05 00637 + m[A35]*Det2_45_03; 00638 double Det3_345_045 = m[A30]*Det2_45_45 - m[A34]*Det2_45_05 00639 + m[A35]*Det2_45_04; 00640 double Det3_345_123 = m[A31]*Det2_45_23 - m[A32]*Det2_45_13 00641 + m[A33]*Det2_45_12; 00642 double Det3_345_124 = m[A31]*Det2_45_24 - m[A32]*Det2_45_14 00643 + m[A34]*Det2_45_12; 00644 double Det3_345_125 = m[A31]*Det2_45_25 - m[A32]*Det2_45_15 00645 + m[A35]*Det2_45_12; 00646 double Det3_345_134 = m[A31]*Det2_45_34 - m[A33]*Det2_45_14 00647 + m[A34]*Det2_45_13; 00648 double Det3_345_135 = m[A31]*Det2_45_35 - m[A33]*Det2_45_15 00649 + m[A35]*Det2_45_13; 00650 double Det3_345_145 = m[A31]*Det2_45_45 - m[A34]*Det2_45_15 00651 + m[A35]*Det2_45_14; 00652 double Det3_345_234 = m[A32]*Det2_45_34 - m[A33]*Det2_45_24 00653 + m[A34]*Det2_45_23; 00654 double Det3_345_235 = m[A32]*Det2_45_35 - m[A33]*Det2_45_25 00655 + m[A35]*Det2_45_23; 00656 double Det3_345_245 = m[A32]*Det2_45_45 - m[A34]*Det2_45_25 00657 + m[A35]*Det2_45_24; 00658 double Det3_345_345 = m[A33]*Det2_45_45 - m[A34]*Det2_45_35 00659 + m[A35]*Det2_45_34; 00660 00661 // Find all NECESSARY 4x4 dets: (75 of them) 00662 00663 double Det4_1234_0123 = m[A10]*Det3_234_123 - m[A11]*Det3_234_023 00664 + m[A12]*Det3_234_013 - m[A13]*Det3_234_012; 00665 double Det4_1234_0124 = m[A10]*Det3_234_124 - m[A11]*Det3_234_024 00666 + m[A12]*Det3_234_014 - m[A14]*Det3_234_012; 00667 double Det4_1234_0125 = m[A10]*Det3_234_125 - m[A11]*Det3_234_025 00668 + m[A12]*Det3_234_015 - m[A15]*Det3_234_012; // 00669 double Det4_1234_0134 = m[A10]*Det3_234_134 - m[A11]*Det3_234_034 00670 + m[A13]*Det3_234_014 - m[A14]*Det3_234_013; 00671 double Det4_1234_0135 = m[A10]*Det3_234_135 - m[A11]*Det3_234_035 00672 + m[A13]*Det3_234_015 - m[A15]*Det3_234_013; // 00673 double Det4_1234_0145 = m[A10]*Det3_234_145 - m[A11]*Det3_234_045 00674 + m[A14]*Det3_234_015 - m[A15]*Det3_234_014; // 00675 double Det4_1234_0234 = m[A10]*Det3_234_234 - m[A12]*Det3_234_034 00676 + m[A13]*Det3_234_024 - m[A14]*Det3_234_023; 00677 double Det4_1234_0235 = m[A10]*Det3_234_235 - m[A12]*Det3_234_035 00678 + m[A13]*Det3_234_025 - m[A15]*Det3_234_023; // 00679 double Det4_1234_0245 = m[A10]*Det3_234_245 - m[A12]*Det3_234_045 00680 + m[A14]*Det3_234_025 - m[A15]*Det3_234_024; // 00681 double Det4_1234_0345 = m[A10]*Det3_234_345 - m[A13]*Det3_234_045 00682 + m[A14]*Det3_234_035 - m[A15]*Det3_234_034; // 00683 double Det4_1234_1234 = m[A11]*Det3_234_234 - m[A12]*Det3_234_134 00684 + m[A13]*Det3_234_124 - m[A14]*Det3_234_123; 00685 double Det4_1234_1235 = m[A11]*Det3_234_235 - m[A12]*Det3_234_135 00686 + m[A13]*Det3_234_125 - m[A15]*Det3_234_123; // 00687 double Det4_1234_1245 = m[A11]*Det3_234_245 - m[A12]*Det3_234_145 00688 + m[A14]*Det3_234_125 - m[A15]*Det3_234_124; // 00689 double Det4_1234_1345 = m[A11]*Det3_234_345 - m[A13]*Det3_234_145 00690 + m[A14]*Det3_234_135 - m[A15]*Det3_234_134; // 00691 double Det4_1234_2345 = m[A12]*Det3_234_345 - m[A13]*Det3_234_245 00692 + m[A14]*Det3_234_235 - m[A15]*Det3_234_234; // 00693 double Det4_1235_0123 = m[A10]*Det3_235_123 - m[A11]*Det3_235_023 00694 + m[A12]*Det3_235_013 - m[A13]*Det3_235_012; 00695 double Det4_1235_0124 = m[A10]*Det3_235_124 - m[A11]*Det3_235_024 00696 + m[A12]*Det3_235_014 - m[A14]*Det3_235_012; 00697 double Det4_1235_0125 = m[A10]*Det3_235_125 - m[A11]*Det3_235_025 00698 + m[A12]*Det3_235_015 - m[A15]*Det3_235_012; 00699 double Det4_1235_0134 = m[A10]*Det3_235_134 - m[A11]*Det3_235_034 00700 + m[A13]*Det3_235_014 - m[A14]*Det3_235_013; 00701 double Det4_1235_0135 = m[A10]*Det3_235_135 - m[A11]*Det3_235_035 00702 + m[A13]*Det3_235_015 - m[A15]*Det3_235_013; 00703 double Det4_1235_0145 = m[A10]*Det3_235_145 - m[A11]*Det3_235_045 00704 + m[A14]*Det3_235_015 - m[A15]*Det3_235_014; // 00705 double Det4_1235_0234 = m[A10]*Det3_235_234 - m[A12]*Det3_235_034 00706 + m[A13]*Det3_235_024 - m[A14]*Det3_235_023; 00707 double Det4_1235_0235 = m[A10]*Det3_235_235 - m[A12]*Det3_235_035 00708 + m[A13]*Det3_235_025 - m[A15]*Det3_235_023; 00709 double Det4_1235_0245 = m[A10]*Det3_235_245 - m[A12]*Det3_235_045 00710 + m[A14]*Det3_235_025 - m[A15]*Det3_235_024; // 00711 double Det4_1235_0345 = m[A10]*Det3_235_345 - m[A13]*Det3_235_045 00712 + m[A14]*Det3_235_035 - m[A15]*Det3_235_034; // 00713 double Det4_1235_1234 = m[A11]*Det3_235_234 - m[A12]*Det3_235_134 00714 + m[A13]*Det3_235_124 - m[A14]*Det3_235_123; 00715 double Det4_1235_1235 = m[A11]*Det3_235_235 - m[A12]*Det3_235_135 00716 + m[A13]*Det3_235_125 - m[A15]*Det3_235_123; 00717 double Det4_1235_1245 = m[A11]*Det3_235_245 - m[A12]*Det3_235_145 00718 + m[A14]*Det3_235_125 - m[A15]*Det3_235_124; // 00719 double Det4_1235_1345 = m[A11]*Det3_235_345 - m[A13]*Det3_235_145 00720 + m[A14]*Det3_235_135 - m[A15]*Det3_235_134; // 00721 double Det4_1235_2345 = m[A12]*Det3_235_345 - m[A13]*Det3_235_245 00722 + m[A14]*Det3_235_235 - m[A15]*Det3_235_234; // 00723 double Det4_1245_0123 = m[A10]*Det3_245_123 - m[A11]*Det3_245_023 00724 + m[A12]*Det3_245_013 - m[A13]*Det3_245_012; 00725 double Det4_1245_0124 = m[A10]*Det3_245_124 - m[A11]*Det3_245_024 00726 + m[A12]*Det3_245_014 - m[A14]*Det3_245_012; 00727 double Det4_1245_0125 = m[A10]*Det3_245_125 - m[A11]*Det3_245_025 00728 + m[A12]*Det3_245_015 - m[A15]*Det3_245_012; 00729 double Det4_1245_0134 = m[A10]*Det3_245_134 - m[A11]*Det3_245_034 00730 + m[A13]*Det3_245_014 - m[A14]*Det3_245_013; 00731 double Det4_1245_0135 = m[A10]*Det3_245_135 - m[A11]*Det3_245_035 00732 + m[A13]*Det3_245_015 - m[A15]*Det3_245_013; 00733 double Det4_1245_0145 = m[A10]*Det3_245_145 - m[A11]*Det3_245_045 00734 + m[A14]*Det3_245_015 - m[A15]*Det3_245_014; 00735 double Det4_1245_0234 = m[A10]*Det3_245_234 - m[A12]*Det3_245_034 00736 + m[A13]*Det3_245_024 - m[A14]*Det3_245_023; 00737 double Det4_1245_0235 = m[A10]*Det3_245_235 - m[A12]*Det3_245_035 00738 + m[A13]*Det3_245_025 - m[A15]*Det3_245_023; 00739 double Det4_1245_0245 = m[A10]*Det3_245_245 - m[A12]*Det3_245_045 00740 + m[A14]*Det3_245_025 - m[A15]*Det3_245_024; 00741 double Det4_1245_0345 = m[A10]*Det3_245_345 - m[A13]*Det3_245_045 00742 + m[A14]*Det3_245_035 - m[A15]*Det3_245_034; // 00743 double Det4_1245_1234 = m[A11]*Det3_245_234 - m[A12]*Det3_245_134 00744 + m[A13]*Det3_245_124 - m[A14]*Det3_245_123; 00745 double Det4_1245_1235 = m[A11]*Det3_245_235 - m[A12]*Det3_245_135 00746 + m[A13]*Det3_245_125 - m[A15]*Det3_245_123; 00747 double Det4_1245_1245 = m[A11]*Det3_245_245 - m[A12]*Det3_245_145 00748 + m[A14]*Det3_245_125 - m[A15]*Det3_245_124; 00749 double Det4_1245_1345 = m[A11]*Det3_245_345 - m[A13]*Det3_245_145 00750 + m[A14]*Det3_245_135 - m[A15]*Det3_245_134; // 00751 double Det4_1245_2345 = m[A12]*Det3_245_345 - m[A13]*Det3_245_245 00752 + m[A14]*Det3_245_235 - m[A15]*Det3_245_234; // 00753 double Det4_1345_0123 = m[A10]*Det3_345_123 - m[A11]*Det3_345_023 00754 + m[A12]*Det3_345_013 - m[A13]*Det3_345_012; 00755 double Det4_1345_0124 = m[A10]*Det3_345_124 - m[A11]*Det3_345_024 00756 + m[A12]*Det3_345_014 - m[A14]*Det3_345_012; 00757 double Det4_1345_0125 = m[A10]*Det3_345_125 - m[A11]*Det3_345_025 00758 + m[A12]*Det3_345_015 - m[A15]*Det3_345_012; 00759 double Det4_1345_0134 = m[A10]*Det3_345_134 - m[A11]*Det3_345_034 00760 + m[A13]*Det3_345_014 - m[A14]*Det3_345_013; 00761 double Det4_1345_0135 = m[A10]*Det3_345_135 - m[A11]*Det3_345_035 00762 + m[A13]*Det3_345_015 - m[A15]*Det3_345_013; 00763 double Det4_1345_0145 = m[A10]*Det3_345_145 - m[A11]*Det3_345_045 00764 + m[A14]*Det3_345_015 - m[A15]*Det3_345_014; 00765 double Det4_1345_0234 = m[A10]*Det3_345_234 - m[A12]*Det3_345_034 00766 + m[A13]*Det3_345_024 - m[A14]*Det3_345_023; 00767 double Det4_1345_0235 = m[A10]*Det3_345_235 - m[A12]*Det3_345_035 00768 + m[A13]*Det3_345_025 - m[A15]*Det3_345_023; 00769 double Det4_1345_0245 = m[A10]*Det3_345_245 - m[A12]*Det3_345_045 00770 + m[A14]*Det3_345_025 - m[A15]*Det3_345_024; 00771 double Det4_1345_0345 = m[A10]*Det3_345_345 - m[A13]*Det3_345_045 00772 + m[A14]*Det3_345_035 - m[A15]*Det3_345_034; 00773 double Det4_1345_1234 = m[A11]*Det3_345_234 - m[A12]*Det3_345_134 00774 + m[A13]*Det3_345_124 - m[A14]*Det3_345_123; 00775 double Det4_1345_1235 = m[A11]*Det3_345_235 - m[A12]*Det3_345_135 00776 + m[A13]*Det3_345_125 - m[A15]*Det3_345_123; 00777 double Det4_1345_1245 = m[A11]*Det3_345_245 - m[A12]*Det3_345_145 00778 + m[A14]*Det3_345_125 - m[A15]*Det3_345_124; 00779 double Det4_1345_1345 = m[A11]*Det3_345_345 - m[A13]*Det3_345_145 00780 + m[A14]*Det3_345_135 - m[A15]*Det3_345_134; 00781 double Det4_1345_2345 = m[A12]*Det3_345_345 - m[A13]*Det3_345_245 00782 + m[A14]*Det3_345_235 - m[A15]*Det3_345_234; // 00783 double Det4_2345_0123 = m[A20]*Det3_345_123 - m[A21]*Det3_345_023 00784 + m[A22]*Det3_345_013 - m[A23]*Det3_345_012; 00785 double Det4_2345_0124 = m[A20]*Det3_345_124 - m[A21]*Det3_345_024 00786 + m[A22]*Det3_345_014 - m[A24]*Det3_345_012; 00787 double Det4_2345_0125 = m[A20]*Det3_345_125 - m[A21]*Det3_345_025 00788 + m[A22]*Det3_345_015 - m[A25]*Det3_345_012; 00789 double Det4_2345_0134 = m[A20]*Det3_345_134 - m[A21]*Det3_345_034 00790 + m[A23]*Det3_345_014 - m[A24]*Det3_345_013; 00791 double Det4_2345_0135 = m[A20]*Det3_345_135 - m[A21]*Det3_345_035 00792 + m[A23]*Det3_345_015 - m[A25]*Det3_345_013; 00793 double Det4_2345_0145 = m[A20]*Det3_345_145 - m[A21]*Det3_345_045 00794 + m[A24]*Det3_345_015 - m[A25]*Det3_345_014; 00795 double Det4_2345_0234 = m[A20]*Det3_345_234 - m[A22]*Det3_345_034 00796 + m[A23]*Det3_345_024 - m[A24]*Det3_345_023; 00797 double Det4_2345_0235 = m[A20]*Det3_345_235 - m[A22]*Det3_345_035 00798 + m[A23]*Det3_345_025 - m[A25]*Det3_345_023; 00799 double Det4_2345_0245 = m[A20]*Det3_345_245 - m[A22]*Det3_345_045 00800 + m[A24]*Det3_345_025 - m[A25]*Det3_345_024; 00801 double Det4_2345_0345 = m[A20]*Det3_345_345 - m[A23]*Det3_345_045 00802 + m[A24]*Det3_345_035 - m[A25]*Det3_345_034; 00803 double Det4_2345_1234 = m[A21]*Det3_345_234 - m[A22]*Det3_345_134 00804 + m[A23]*Det3_345_124 - m[A24]*Det3_345_123; 00805 double Det4_2345_1235 = m[A21]*Det3_345_235 - m[A22]*Det3_345_135 00806 + m[A23]*Det3_345_125 - m[A25]*Det3_345_123; 00807 double Det4_2345_1245 = m[A21]*Det3_345_245 - m[A22]*Det3_345_145 00808 + m[A24]*Det3_345_125 - m[A25]*Det3_345_124; 00809 double Det4_2345_1345 = m[A21]*Det3_345_345 - m[A23]*Det3_345_145 00810 + m[A24]*Det3_345_135 - m[A25]*Det3_345_134; 00811 double Det4_2345_2345 = m[A22]*Det3_345_345 - m[A23]*Det3_345_245 00812 + m[A24]*Det3_345_235 - m[A25]*Det3_345_234; 00813 00814 // Find all NECESSARY 5x5 dets: (36 of them) 00815 00816 double Det5_01234_01234 = m[A00]*Det4_1234_1234 - m[A01]*Det4_1234_0234 00817 + m[A02]*Det4_1234_0134 - m[A03]*Det4_1234_0124 + m[A04]*Det4_1234_0123; 00818 double Det5_01234_01235 = m[A00]*Det4_1234_1235 - m[A01]*Det4_1234_0235 00819 + m[A02]*Det4_1234_0135 - m[A03]*Det4_1234_0125 + m[A05]*Det4_1234_0123; // 00820 double Det5_01234_01245 = m[A00]*Det4_1234_1245 - m[A01]*Det4_1234_0245 00821 + m[A02]*Det4_1234_0145 - m[A04]*Det4_1234_0125 + m[A05]*Det4_1234_0124; // 00822 double Det5_01234_01345 = m[A00]*Det4_1234_1345 - m[A01]*Det4_1234_0345 00823 + m[A03]*Det4_1234_0145 - m[A04]*Det4_1234_0135 + m[A05]*Det4_1234_0134; // 00824 double Det5_01234_02345 = m[A00]*Det4_1234_2345 - m[A02]*Det4_1234_0345 00825 + m[A03]*Det4_1234_0245 - m[A04]*Det4_1234_0235 + m[A05]*Det4_1234_0234; // 00826 double Det5_01234_12345 = m[A01]*Det4_1234_2345 - m[A02]*Det4_1234_1345 00827 + m[A03]*Det4_1234_1245 - m[A04]*Det4_1234_1235 + m[A05]*Det4_1234_1234; // 00828 double Det5_01235_01234 = m[A00]*Det4_1235_1234 - m[A01]*Det4_1235_0234 00829 + m[A02]*Det4_1235_0134 - m[A03]*Det4_1235_0124 + m[A04]*Det4_1235_0123; 00830 double Det5_01235_01235 = m[A00]*Det4_1235_1235 - m[A01]*Det4_1235_0235 00831 + m[A02]*Det4_1235_0135 - m[A03]*Det4_1235_0125 + m[A05]*Det4_1235_0123; 00832 double Det5_01235_01245 = m[A00]*Det4_1235_1245 - m[A01]*Det4_1235_0245 00833 + m[A02]*Det4_1235_0145 - m[A04]*Det4_1235_0125 + m[A05]*Det4_1235_0124; // 00834 double Det5_01235_01345 = m[A00]*Det4_1235_1345 - m[A01]*Det4_1235_0345 00835 + m[A03]*Det4_1235_0145 - m[A04]*Det4_1235_0135 + m[A05]*Det4_1235_0134; // 00836 double Det5_01235_02345 = m[A00]*Det4_1235_2345 - m[A02]*Det4_1235_0345 00837 + m[A03]*Det4_1235_0245 - m[A04]*Det4_1235_0235 + m[A05]*Det4_1235_0234; // 00838 double Det5_01235_12345 = m[A01]*Det4_1235_2345 - m[A02]*Det4_1235_1345 00839 + m[A03]*Det4_1235_1245 - m[A04]*Det4_1235_1235 + m[A05]*Det4_1235_1234; // 00840 double Det5_01245_01234 = m[A00]*Det4_1245_1234 - m[A01]*Det4_1245_0234 00841 + m[A02]*Det4_1245_0134 - m[A03]*Det4_1245_0124 + m[A04]*Det4_1245_0123; 00842 double Det5_01245_01235 = m[A00]*Det4_1245_1235 - m[A01]*Det4_1245_0235 00843 + m[A02]*Det4_1245_0135 - m[A03]*Det4_1245_0125 + m[A05]*Det4_1245_0123; 00844 double Det5_01245_01245 = m[A00]*Det4_1245_1245 - m[A01]*Det4_1245_0245 00845 + m[A02]*Det4_1245_0145 - m[A04]*Det4_1245_0125 + m[A05]*Det4_1245_0124; 00846 double Det5_01245_01345 = m[A00]*Det4_1245_1345 - m[A01]*Det4_1245_0345 00847 + m[A03]*Det4_1245_0145 - m[A04]*Det4_1245_0135 + m[A05]*Det4_1245_0134; // 00848 double Det5_01245_02345 = m[A00]*Det4_1245_2345 - m[A02]*Det4_1245_0345 00849 + m[A03]*Det4_1245_0245 - m[A04]*Det4_1245_0235 + m[A05]*Det4_1245_0234; // 00850 double Det5_01245_12345 = m[A01]*Det4_1245_2345 - m[A02]*Det4_1245_1345 00851 + m[A03]*Det4_1245_1245 - m[A04]*Det4_1245_1235 + m[A05]*Det4_1245_1234; // 00852 double Det5_01345_01234 = m[A00]*Det4_1345_1234 - m[A01]*Det4_1345_0234 00853 + m[A02]*Det4_1345_0134 - m[A03]*Det4_1345_0124 + m[A04]*Det4_1345_0123; 00854 double Det5_01345_01235 = m[A00]*Det4_1345_1235 - m[A01]*Det4_1345_0235 00855 + m[A02]*Det4_1345_0135 - m[A03]*Det4_1345_0125 + m[A05]*Det4_1345_0123; 00856 double Det5_01345_01245 = m[A00]*Det4_1345_1245 - m[A01]*Det4_1345_0245 00857 + m[A02]*Det4_1345_0145 - m[A04]*Det4_1345_0125 + m[A05]*Det4_1345_0124; 00858 double Det5_01345_01345 = m[A00]*Det4_1345_1345 - m[A01]*Det4_1345_0345 00859 + m[A03]*Det4_1345_0145 - m[A04]*Det4_1345_0135 + m[A05]*Det4_1345_0134; 00860 double Det5_01345_02345 = m[A00]*Det4_1345_2345 - m[A02]*Det4_1345_0345 00861 + m[A03]*Det4_1345_0245 - m[A04]*Det4_1345_0235 + m[A05]*Det4_1345_0234; // 00862 double Det5_01345_12345 = m[A01]*Det4_1345_2345 - m[A02]*Det4_1345_1345 00863 + m[A03]*Det4_1345_1245 - m[A04]*Det4_1345_1235 + m[A05]*Det4_1345_1234; // 00864 double Det5_02345_01234 = m[A00]*Det4_2345_1234 - m[A01]*Det4_2345_0234 00865 + m[A02]*Det4_2345_0134 - m[A03]*Det4_2345_0124 + m[A04]*Det4_2345_0123; 00866 double Det5_02345_01235 = m[A00]*Det4_2345_1235 - m[A01]*Det4_2345_0235 00867 + m[A02]*Det4_2345_0135 - m[A03]*Det4_2345_0125 + m[A05]*Det4_2345_0123; 00868 double Det5_02345_01245 = m[A00]*Det4_2345_1245 - m[A01]*Det4_2345_0245 00869 + m[A02]*Det4_2345_0145 - m[A04]*Det4_2345_0125 + m[A05]*Det4_2345_0124; 00870 double Det5_02345_01345 = m[A00]*Det4_2345_1345 - m[A01]*Det4_2345_0345 00871 + m[A03]*Det4_2345_0145 - m[A04]*Det4_2345_0135 + m[A05]*Det4_2345_0134; 00872 double Det5_02345_02345 = m[A00]*Det4_2345_2345 - m[A02]*Det4_2345_0345 00873 + m[A03]*Det4_2345_0245 - m[A04]*Det4_2345_0235 + m[A05]*Det4_2345_0234; 00874 double Det5_02345_12345 = m[A01]*Det4_2345_2345 - m[A02]*Det4_2345_1345 00875 + m[A03]*Det4_2345_1245 - m[A04]*Det4_2345_1235 + m[A05]*Det4_2345_1234; // 00876 double Det5_12345_01234 = m[A10]*Det4_2345_1234 - m[A11]*Det4_2345_0234 00877 + m[A12]*Det4_2345_0134 - m[A13]*Det4_2345_0124 + m[A14]*Det4_2345_0123; 00878 double Det5_12345_01235 = m[A10]*Det4_2345_1235 - m[A11]*Det4_2345_0235 00879 + m[A12]*Det4_2345_0135 - m[A13]*Det4_2345_0125 + m[A15]*Det4_2345_0123; 00880 double Det5_12345_01245 = m[A10]*Det4_2345_1245 - m[A11]*Det4_2345_0245 00881 + m[A12]*Det4_2345_0145 - m[A14]*Det4_2345_0125 + m[A15]*Det4_2345_0124; 00882 double Det5_12345_01345 = m[A10]*Det4_2345_1345 - m[A11]*Det4_2345_0345 00883 + m[A13]*Det4_2345_0145 - m[A14]*Det4_2345_0135 + m[A15]*Det4_2345_0134; 00884 double Det5_12345_02345 = m[A10]*Det4_2345_2345 - m[A12]*Det4_2345_0345 00885 + m[A13]*Det4_2345_0245 - m[A14]*Det4_2345_0235 + m[A15]*Det4_2345_0234; 00886 double Det5_12345_12345 = m[A11]*Det4_2345_2345 - m[A12]*Det4_2345_1345 00887 + m[A13]*Det4_2345_1245 - m[A14]*Det4_2345_1235 + m[A15]*Det4_2345_1234; 00888 00889 // Find the determinant 00890 00891 double det = m[A00]*Det5_12345_12345 00892 - m[A01]*Det5_12345_02345 00893 + m[A02]*Det5_12345_01345 00894 - m[A03]*Det5_12345_01245 00895 + m[A04]*Det5_12345_01235 00896 - m[A05]*Det5_12345_01234; 00897 00898 if ( det == 0 ) { 00899 #ifdef SINGULAR_DIAGNOSTICS 00900 std::cerr << "Kramer's rule inversion of a singular 6x6 matrix: " 00901 << *this << "\n"; 00902 #endif 00903 ifail = 1; 00904 return; 00905 } 00906 00907 double oneOverDet = 1.0/det; 00908 double mn1OverDet = - oneOverDet; 00909 00910 m[A00] = Det5_12345_12345*oneOverDet; 00911 m[A01] = Det5_02345_12345*mn1OverDet; 00912 m[A02] = Det5_01345_12345*oneOverDet; 00913 m[A03] = Det5_01245_12345*mn1OverDet; 00914 m[A04] = Det5_01235_12345*oneOverDet; 00915 m[A05] = Det5_01234_12345*mn1OverDet; 00916 00917 m[A10] = Det5_12345_02345*mn1OverDet; 00918 m[A11] = Det5_02345_02345*oneOverDet; 00919 m[A12] = Det5_01345_02345*mn1OverDet; 00920 m[A13] = Det5_01245_02345*oneOverDet; 00921 m[A14] = Det5_01235_02345*mn1OverDet; 00922 m[A15] = Det5_01234_02345*oneOverDet; 00923 00924 m[A20] = Det5_12345_01345*oneOverDet; 00925 m[A21] = Det5_02345_01345*mn1OverDet; 00926 m[A22] = Det5_01345_01345*oneOverDet; 00927 m[A23] = Det5_01245_01345*mn1OverDet; 00928 m[A24] = Det5_01235_01345*oneOverDet; 00929 m[A25] = Det5_01234_01345*mn1OverDet; 00930 00931 m[A30] = Det5_12345_01245*mn1OverDet; 00932 m[A31] = Det5_02345_01245*oneOverDet; 00933 m[A32] = Det5_01345_01245*mn1OverDet; 00934 m[A33] = Det5_01245_01245*oneOverDet; 00935 m[A34] = Det5_01235_01245*mn1OverDet; 00936 m[A35] = Det5_01234_01245*oneOverDet; 00937 00938 m[A40] = Det5_12345_01235*oneOverDet; 00939 m[A41] = Det5_02345_01235*mn1OverDet; 00940 m[A42] = Det5_01345_01235*oneOverDet; 00941 m[A43] = Det5_01245_01235*mn1OverDet; 00942 m[A44] = Det5_01235_01235*oneOverDet; 00943 m[A45] = Det5_01234_01235*mn1OverDet; 00944 00945 m[A50] = Det5_12345_01234*mn1OverDet; 00946 m[A51] = Det5_02345_01234*oneOverDet; 00947 m[A52] = Det5_01345_01234*mn1OverDet; 00948 m[A53] = Det5_01245_01234*oneOverDet; 00949 m[A54] = Det5_01235_01234*mn1OverDet; 00950 m[A55] = Det5_01234_01234*oneOverDet; 00951 00952 return; 00953 } 00954 00955 00956 } // namespace CLHEP