CLHEP VERSION Reference Documentation
   
CLHEP Home Page     CLHEP Documentation     CLHEP Bug Reports

MatrixInvert.cc

Go to the documentation of this file.
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

Generated on 15 Nov 2012 for CLHEP by  doxygen 1.4.7