#include <G4ErrorMatrix.hh>
Definition at line 46 of file G4ErrorMatrix.hh.
G4ErrorMatrix::G4ErrorMatrix | ( | ) | [inline] |
Definition at line 80 of file G4ErrorMatrix.cc.
References error().
00081 : m(p*q), nrow(p), ncol(q) 00082 { 00083 size = nrow * ncol; 00084 00085 if (size > 0) 00086 { 00087 switch(init) 00088 { 00089 case 0: 00090 break; 00091 00092 case 1: 00093 { 00094 if ( ncol == nrow ) 00095 { 00096 G4ErrorMatrixIter a = m.begin(); 00097 G4ErrorMatrixIter b = m.end(); 00098 for( ; a<b; a+=(ncol+1)) *a = 1.0; 00099 } else { 00100 error("Invalid dimension in G4ErrorMatrix(G4int,G4int,1)."); 00101 } 00102 break; 00103 } 00104 default: 00105 error("G4ErrorMatrix: initialization must be either 0 or 1."); 00106 } 00107 } 00108 }
G4ErrorMatrix::G4ErrorMatrix | ( | const G4ErrorMatrix & | m1 | ) |
Definition at line 117 of file G4ErrorMatrix.cc.
References m.
00118 : m(mat1.size), nrow(mat1.nrow), ncol(mat1.ncol), size(mat1.size) 00119 { 00120 m = mat1.m; 00121 }
G4ErrorMatrix::G4ErrorMatrix | ( | const G4ErrorSymMatrix & | m1 | ) |
Definition at line 123 of file G4ErrorMatrix.cc.
References G4ErrorSymMatrix::m, and CLHEP::detail::n.
00124 : m(mat1.nrow*mat1.nrow), nrow(mat1.nrow), ncol(mat1.nrow) 00125 { 00126 size = nrow * ncol; 00127 00128 G4int n = ncol; 00129 G4ErrorMatrixConstIter sjk = mat1.m.begin(); 00130 G4ErrorMatrixIter m1j = m.begin(); 00131 G4ErrorMatrixIter mj = m.begin(); 00132 // j >= k 00133 for(G4int j=1;j<=nrow;j++) 00134 { 00135 G4ErrorMatrixIter mjk = mj; 00136 G4ErrorMatrixIter mkj = m1j; 00137 for(G4int k=1;k<=j;k++) 00138 { 00139 *(mjk++) = *sjk; 00140 if(j!=k) *mkj = *sjk; 00141 sjk++; 00142 mkj += n; 00143 } 00144 mj += n; 00145 m1j++; 00146 } 00147 }
G4ErrorMatrix::~G4ErrorMatrix | ( | ) | [virtual] |
G4ErrorMatrix G4ErrorMatrix::apply | ( | G4double(*)(G4double, G4int, G4int) | f | ) | const |
Definition at line 390 of file G4ErrorMatrix.cc.
References m, num_col(), and num_row().
00391 { 00392 G4ErrorMatrix mret(num_row(),num_col()); 00393 G4ErrorMatrixConstIter a = m.begin(); 00394 G4ErrorMatrixIter b = mret.m.begin(); 00395 for(G4int ir=1;ir<=num_row();ir++) 00396 { 00397 for(G4int ic=1;ic<=num_col();ic++) 00398 { 00399 *(b++) = (*f)(*(a++), ir, ic); 00400 } 00401 } 00402 return mret; 00403 }
G4double G4ErrorMatrix::determinant | ( | ) | const |
Definition at line 776 of file G4ErrorMatrix.cc.
References dfact_matrix(), and error().
00777 { 00778 static G4int max_array = 20; 00779 static G4int *ir = new G4int [max_array+1]; 00780 if(ncol != nrow) 00781 { error("G4ErrorMatrix::determinant: G4ErrorMatrix is not NxN"); } 00782 if (ncol > max_array) 00783 { 00784 delete [] ir; 00785 max_array = nrow; 00786 ir = new G4int [max_array+1]; 00787 } 00788 G4double det; 00789 G4ErrorMatrix mt(*this); 00790 G4int i = mt.dfact_matrix(det, ir); 00791 if(i==0) return det; 00792 return 0; 00793 }
void G4ErrorMatrix::error | ( | const char * | s | ) | [static] |
Definition at line 805 of file G4ErrorMatrix.cc.
References G4cerr, and G4endl.
Referenced by determinant(), G4ErrorMatrix(), G4ErrorSymMatrix::G4ErrorSymMatrix(), invert(), G4ErrorSymMatrix::sub(), and sub().
00806 { 00807 G4cerr << msg << G4endl; 00808 G4cerr << "---Exiting to System." << G4endl; 00809 abort(); 00810 }
G4ErrorMatrix G4ErrorMatrix::inverse | ( | G4int & | ierr | ) | const [inline] |
Definition at line 100 of file G4ErrorMatrix.icc.
References invert().
00101 { 00102 G4ErrorMatrix mTmp(*this); 00103 mTmp.invert(ierr); 00104 return mTmp; 00105 }
void G4ErrorMatrix::invert | ( | G4int & | ierr | ) | [virtual] |
Definition at line 645 of file G4ErrorMatrix.cc.
References error(), invertHaywood4(), invertHaywood5(), and invertHaywood6().
Referenced by inverse().
00646 { 00647 if(ncol != nrow) 00648 { error("G4ErrorMatrix::invert: G4ErrorMatrix is not NxN"); } 00649 00650 static G4int max_array = 20; 00651 static G4int *ir = new G4int [max_array+1]; 00652 00653 if (ncol > max_array) 00654 { 00655 delete [] ir; 00656 max_array = nrow; 00657 ir = new G4int [max_array+1]; 00658 } 00659 G4double t1, t2, t3; 00660 G4double det, temp, ss; 00661 G4int ifail; 00662 switch(nrow) 00663 { 00664 case 3: 00665 G4double c11,c12,c13,c21,c22,c23,c31,c32,c33; 00666 ifail = 0; 00667 c11 = (*(m.begin()+4)) * (*(m.begin()+8)) 00668 - (*(m.begin()+5)) * (*(m.begin()+7)); 00669 c12 = (*(m.begin()+5)) * (*(m.begin()+6)) 00670 - (*(m.begin()+3)) * (*(m.begin()+8)); 00671 c13 = (*(m.begin()+3)) * (*(m.begin()+7)) 00672 - (*(m.begin()+4)) * (*(m.begin()+6)); 00673 c21 = (*(m.begin()+7)) * (*(m.begin()+2)) 00674 - (*(m.begin()+8)) * (*(m.begin()+1)); 00675 c22 = (*(m.begin()+8)) * (*m.begin()) 00676 - (*(m.begin()+6)) * (*(m.begin()+2)); 00677 c23 = (*(m.begin()+6)) * (*(m.begin()+1)) 00678 - (*(m.begin()+7)) * (*m.begin()); 00679 c31 = (*(m.begin()+1)) * (*(m.begin()+5)) 00680 - (*(m.begin()+2)) * (*(m.begin()+4)); 00681 c32 = (*(m.begin()+2)) * (*(m.begin()+3)) 00682 - (*m.begin()) * (*(m.begin()+5)); 00683 c33 = (*m.begin()) * (*(m.begin()+4)) 00684 - (*(m.begin()+1)) * (*(m.begin()+3)); 00685 t1 = std::fabs(*m.begin()); 00686 t2 = std::fabs(*(m.begin()+3)); 00687 t3 = std::fabs(*(m.begin()+6)); 00688 if (t1 >= t2) 00689 { 00690 if (t3 >= t1) 00691 { 00692 temp = *(m.begin()+6); 00693 det = c23*c12-c22*c13; 00694 } 00695 else 00696 { 00697 temp = *(m.begin()); 00698 det = c22*c33-c23*c32; 00699 } 00700 } 00701 else if (t3 >= t2) 00702 { 00703 temp = *(m.begin()+6); 00704 det = c23*c12-c22*c13; 00705 } 00706 else 00707 { 00708 temp = *(m.begin()+3); 00709 det = c13*c32-c12*c33; 00710 } 00711 if (det==0) 00712 { 00713 ierr = 1; 00714 return; 00715 } 00716 { 00717 ss = temp/det; 00718 G4ErrorMatrixIter mq = m.begin(); 00719 *(mq++) = ss*c11; 00720 *(mq++) = ss*c21; 00721 *(mq++) = ss*c31; 00722 *(mq++) = ss*c12; 00723 *(mq++) = ss*c22; 00724 *(mq++) = ss*c32; 00725 *(mq++) = ss*c13; 00726 *(mq++) = ss*c23; 00727 *(mq) = ss*c33; 00728 } 00729 break; 00730 case 2: 00731 ifail = 0; 00732 det = (*m.begin())*(*(m.begin()+3)) - (*(m.begin()+1))*(*(m.begin()+2)); 00733 if (det==0) 00734 { 00735 ierr = 1; 00736 return; 00737 } 00738 ss = 1.0/det; 00739 temp = ss*(*(m.begin()+3)); 00740 *(m.begin()+1) *= -ss; 00741 *(m.begin()+2) *= -ss; 00742 *(m.begin()+3) = ss*(*m.begin()); 00743 *(m.begin()) = temp; 00744 break; 00745 case 1: 00746 ifail = 0; 00747 if ((*(m.begin()))==0) 00748 { 00749 ierr = 1; 00750 return; 00751 } 00752 *(m.begin()) = 1.0/(*(m.begin())); 00753 break; 00754 case 4: 00755 invertHaywood4(ierr); 00756 return; 00757 case 5: 00758 invertHaywood5(ierr); 00759 return; 00760 case 6: 00761 invertHaywood6(ierr); 00762 return; 00763 default: 00764 ifail = dfact_matrix(det, ir); 00765 if(ifail) { 00766 ierr = 1; 00767 return; 00768 } 00769 dfinv_matrix(ir); 00770 break; 00771 } 00772 ierr = 0; 00773 return; 00774 }
void G4ErrorMatrix::invertHaywood4 | ( | G4int & | ierr | ) | [protected, virtual] |
Definition at line 910 of file G4ErrorMatrix.cc.
References F00, F01, F02, F03, F10, F11, F12, F13, F20, F21, F22, F23, F30, F31, F32, and F33.
Referenced by invert().
00911 { 00912 ifail = 0; 00913 00914 // Find all NECESSARY 2x2 dets: (18 of them) 00915 00916 G4double Det2_12_01 = m[F10]*m[F21] - m[F11]*m[F20]; 00917 G4double Det2_12_02 = m[F10]*m[F22] - m[F12]*m[F20]; 00918 G4double Det2_12_03 = m[F10]*m[F23] - m[F13]*m[F20]; 00919 G4double Det2_12_13 = m[F11]*m[F23] - m[F13]*m[F21]; 00920 G4double Det2_12_23 = m[F12]*m[F23] - m[F13]*m[F22]; 00921 G4double Det2_12_12 = m[F11]*m[F22] - m[F12]*m[F21]; 00922 G4double Det2_13_01 = m[F10]*m[F31] - m[F11]*m[F30]; 00923 G4double Det2_13_02 = m[F10]*m[F32] - m[F12]*m[F30]; 00924 G4double Det2_13_03 = m[F10]*m[F33] - m[F13]*m[F30]; 00925 G4double Det2_13_12 = m[F11]*m[F32] - m[F12]*m[F31]; 00926 G4double Det2_13_13 = m[F11]*m[F33] - m[F13]*m[F31]; 00927 G4double Det2_13_23 = m[F12]*m[F33] - m[F13]*m[F32]; 00928 G4double Det2_23_01 = m[F20]*m[F31] - m[F21]*m[F30]; 00929 G4double Det2_23_02 = m[F20]*m[F32] - m[F22]*m[F30]; 00930 G4double Det2_23_03 = m[F20]*m[F33] - m[F23]*m[F30]; 00931 G4double Det2_23_12 = m[F21]*m[F32] - m[F22]*m[F31]; 00932 G4double Det2_23_13 = m[F21]*m[F33] - m[F23]*m[F31]; 00933 G4double Det2_23_23 = m[F22]*m[F33] - m[F23]*m[F32]; 00934 00935 // Find all NECESSARY 3x3 dets: (16 of them) 00936 00937 G4double Det3_012_012 = m[F00]*Det2_12_12 - m[F01]*Det2_12_02 00938 + m[F02]*Det2_12_01; 00939 G4double Det3_012_013 = m[F00]*Det2_12_13 - m[F01]*Det2_12_03 00940 + m[F03]*Det2_12_01; 00941 G4double Det3_012_023 = m[F00]*Det2_12_23 - m[F02]*Det2_12_03 00942 + m[F03]*Det2_12_02; 00943 G4double Det3_012_123 = m[F01]*Det2_12_23 - m[F02]*Det2_12_13 00944 + m[F03]*Det2_12_12; 00945 G4double Det3_013_012 = m[F00]*Det2_13_12 - m[F01]*Det2_13_02 00946 + m[F02]*Det2_13_01; 00947 G4double Det3_013_013 = m[F00]*Det2_13_13 - m[F01]*Det2_13_03 00948 + m[F03]*Det2_13_01; 00949 G4double Det3_013_023 = m[F00]*Det2_13_23 - m[F02]*Det2_13_03 00950 + m[F03]*Det2_13_02; 00951 G4double Det3_013_123 = m[F01]*Det2_13_23 - m[F02]*Det2_13_13 00952 + m[F03]*Det2_13_12; 00953 G4double Det3_023_012 = m[F00]*Det2_23_12 - m[F01]*Det2_23_02 00954 + m[F02]*Det2_23_01; 00955 G4double Det3_023_013 = m[F00]*Det2_23_13 - m[F01]*Det2_23_03 00956 + m[F03]*Det2_23_01; 00957 G4double Det3_023_023 = m[F00]*Det2_23_23 - m[F02]*Det2_23_03 00958 + m[F03]*Det2_23_02; 00959 G4double Det3_023_123 = m[F01]*Det2_23_23 - m[F02]*Det2_23_13 00960 + m[F03]*Det2_23_12; 00961 G4double Det3_123_012 = m[F10]*Det2_23_12 - m[F11]*Det2_23_02 00962 + m[F12]*Det2_23_01; 00963 G4double Det3_123_013 = m[F10]*Det2_23_13 - m[F11]*Det2_23_03 00964 + m[F13]*Det2_23_01; 00965 G4double Det3_123_023 = m[F10]*Det2_23_23 - m[F12]*Det2_23_03 00966 + m[F13]*Det2_23_02; 00967 G4double Det3_123_123 = m[F11]*Det2_23_23 - m[F12]*Det2_23_13 00968 + m[F13]*Det2_23_12; 00969 00970 // Find the 4x4 det: 00971 00972 G4double det = m[F00]*Det3_123_123 00973 - m[F01]*Det3_123_023 00974 + m[F02]*Det3_123_013 00975 - m[F03]*Det3_123_012; 00976 00977 if ( det == 0 ) 00978 { 00979 ifail = 1; 00980 return; 00981 } 00982 00983 G4double oneOverDet = 1.0/det; 00984 G4double mn1OverDet = - oneOverDet; 00985 00986 m[F00] = Det3_123_123 * oneOverDet; 00987 m[F01] = Det3_023_123 * mn1OverDet; 00988 m[F02] = Det3_013_123 * oneOverDet; 00989 m[F03] = Det3_012_123 * mn1OverDet; 00990 00991 m[F10] = Det3_123_023 * mn1OverDet; 00992 m[F11] = Det3_023_023 * oneOverDet; 00993 m[F12] = Det3_013_023 * mn1OverDet; 00994 m[F13] = Det3_012_023 * oneOverDet; 00995 00996 m[F20] = Det3_123_013 * oneOverDet; 00997 m[F21] = Det3_023_013 * mn1OverDet; 00998 m[F22] = Det3_013_013 * oneOverDet; 00999 m[F23] = Det3_012_013 * mn1OverDet; 01000 01001 m[F30] = Det3_123_012 * mn1OverDet; 01002 m[F31] = Det3_023_012 * oneOverDet; 01003 m[F32] = Det3_013_012 * mn1OverDet; 01004 m[F33] = Det3_012_012 * oneOverDet; 01005 01006 return; 01007 }
void G4ErrorMatrix::invertHaywood5 | ( | G4int & | ierr | ) | [protected, virtual] |
Definition at line 1009 of file G4ErrorMatrix.cc.
References M00, M01, M02, M03, M04, M10, M11, M12, M13, M14, M20, M21, M22, M23, M24, M30, M31, M32, M33, M34, M40, M41, M42, M43, and M44.
Referenced by invert().
01010 { 01011 ifail = 0; 01012 01013 // Find all NECESSARY 2x2 dets: (30 of them) 01014 01015 G4double Det2_23_01 = m[M20]*m[M31] - m[M21]*m[M30]; 01016 G4double Det2_23_02 = m[M20]*m[M32] - m[M22]*m[M30]; 01017 G4double Det2_23_03 = m[M20]*m[M33] - m[M23]*m[M30]; 01018 G4double Det2_23_04 = m[M20]*m[M34] - m[M24]*m[M30]; 01019 G4double Det2_23_12 = m[M21]*m[M32] - m[M22]*m[M31]; 01020 G4double Det2_23_13 = m[M21]*m[M33] - m[M23]*m[M31]; 01021 G4double Det2_23_14 = m[M21]*m[M34] - m[M24]*m[M31]; 01022 G4double Det2_23_23 = m[M22]*m[M33] - m[M23]*m[M32]; 01023 G4double Det2_23_24 = m[M22]*m[M34] - m[M24]*m[M32]; 01024 G4double Det2_23_34 = m[M23]*m[M34] - m[M24]*m[M33]; 01025 G4double Det2_24_01 = m[M20]*m[M41] - m[M21]*m[M40]; 01026 G4double Det2_24_02 = m[M20]*m[M42] - m[M22]*m[M40]; 01027 G4double Det2_24_03 = m[M20]*m[M43] - m[M23]*m[M40]; 01028 G4double Det2_24_04 = m[M20]*m[M44] - m[M24]*m[M40]; 01029 G4double Det2_24_12 = m[M21]*m[M42] - m[M22]*m[M41]; 01030 G4double Det2_24_13 = m[M21]*m[M43] - m[M23]*m[M41]; 01031 G4double Det2_24_14 = m[M21]*m[M44] - m[M24]*m[M41]; 01032 G4double Det2_24_23 = m[M22]*m[M43] - m[M23]*m[M42]; 01033 G4double Det2_24_24 = m[M22]*m[M44] - m[M24]*m[M42]; 01034 G4double Det2_24_34 = m[M23]*m[M44] - m[M24]*m[M43]; 01035 G4double Det2_34_01 = m[M30]*m[M41] - m[M31]*m[M40]; 01036 G4double Det2_34_02 = m[M30]*m[M42] - m[M32]*m[M40]; 01037 G4double Det2_34_03 = m[M30]*m[M43] - m[M33]*m[M40]; 01038 G4double Det2_34_04 = m[M30]*m[M44] - m[M34]*m[M40]; 01039 G4double Det2_34_12 = m[M31]*m[M42] - m[M32]*m[M41]; 01040 G4double Det2_34_13 = m[M31]*m[M43] - m[M33]*m[M41]; 01041 G4double Det2_34_14 = m[M31]*m[M44] - m[M34]*m[M41]; 01042 G4double Det2_34_23 = m[M32]*m[M43] - m[M33]*m[M42]; 01043 G4double Det2_34_24 = m[M32]*m[M44] - m[M34]*m[M42]; 01044 G4double Det2_34_34 = m[M33]*m[M44] - m[M34]*m[M43]; 01045 01046 // Find all NECESSARY 3x3 dets: (40 of them) 01047 01048 G4double Det3_123_012 = m[M10]*Det2_23_12 - m[M11]*Det2_23_02 01049 + m[M12]*Det2_23_01; 01050 G4double Det3_123_013 = m[M10]*Det2_23_13 - m[M11]*Det2_23_03 01051 + m[M13]*Det2_23_01; 01052 G4double Det3_123_014 = m[M10]*Det2_23_14 - m[M11]*Det2_23_04 01053 + m[M14]*Det2_23_01; 01054 G4double Det3_123_023 = m[M10]*Det2_23_23 - m[M12]*Det2_23_03 01055 + m[M13]*Det2_23_02; 01056 G4double Det3_123_024 = m[M10]*Det2_23_24 - m[M12]*Det2_23_04 01057 + m[M14]*Det2_23_02; 01058 G4double Det3_123_034 = m[M10]*Det2_23_34 - m[M13]*Det2_23_04 01059 + m[M14]*Det2_23_03; 01060 G4double Det3_123_123 = m[M11]*Det2_23_23 - m[M12]*Det2_23_13 01061 + m[M13]*Det2_23_12; 01062 G4double Det3_123_124 = m[M11]*Det2_23_24 - m[M12]*Det2_23_14 01063 + m[M14]*Det2_23_12; 01064 G4double Det3_123_134 = m[M11]*Det2_23_34 - m[M13]*Det2_23_14 01065 + m[M14]*Det2_23_13; 01066 G4double Det3_123_234 = m[M12]*Det2_23_34 - m[M13]*Det2_23_24 01067 + m[M14]*Det2_23_23; 01068 G4double Det3_124_012 = m[M10]*Det2_24_12 - m[M11]*Det2_24_02 01069 + m[M12]*Det2_24_01; 01070 G4double Det3_124_013 = m[M10]*Det2_24_13 - m[M11]*Det2_24_03 01071 + m[M13]*Det2_24_01; 01072 G4double Det3_124_014 = m[M10]*Det2_24_14 - m[M11]*Det2_24_04 01073 + m[M14]*Det2_24_01; 01074 G4double Det3_124_023 = m[M10]*Det2_24_23 - m[M12]*Det2_24_03 01075 + m[M13]*Det2_24_02; 01076 G4double Det3_124_024 = m[M10]*Det2_24_24 - m[M12]*Det2_24_04 01077 + m[M14]*Det2_24_02; 01078 G4double Det3_124_034 = m[M10]*Det2_24_34 - m[M13]*Det2_24_04 01079 + m[M14]*Det2_24_03; 01080 G4double Det3_124_123 = m[M11]*Det2_24_23 - m[M12]*Det2_24_13 01081 + m[M13]*Det2_24_12; 01082 G4double Det3_124_124 = m[M11]*Det2_24_24 - m[M12]*Det2_24_14 01083 + m[M14]*Det2_24_12; 01084 G4double Det3_124_134 = m[M11]*Det2_24_34 - m[M13]*Det2_24_14 01085 + m[M14]*Det2_24_13; 01086 G4double Det3_124_234 = m[M12]*Det2_24_34 - m[M13]*Det2_24_24 01087 + m[M14]*Det2_24_23; 01088 G4double Det3_134_012 = m[M10]*Det2_34_12 - m[M11]*Det2_34_02 01089 + m[M12]*Det2_34_01; 01090 G4double Det3_134_013 = m[M10]*Det2_34_13 - m[M11]*Det2_34_03 01091 + m[M13]*Det2_34_01; 01092 G4double Det3_134_014 = m[M10]*Det2_34_14 - m[M11]*Det2_34_04 01093 + m[M14]*Det2_34_01; 01094 G4double Det3_134_023 = m[M10]*Det2_34_23 - m[M12]*Det2_34_03 01095 + m[M13]*Det2_34_02; 01096 G4double Det3_134_024 = m[M10]*Det2_34_24 - m[M12]*Det2_34_04 01097 + m[M14]*Det2_34_02; 01098 G4double Det3_134_034 = m[M10]*Det2_34_34 - m[M13]*Det2_34_04 01099 + m[M14]*Det2_34_03; 01100 G4double Det3_134_123 = m[M11]*Det2_34_23 - m[M12]*Det2_34_13 01101 + m[M13]*Det2_34_12; 01102 G4double Det3_134_124 = m[M11]*Det2_34_24 - m[M12]*Det2_34_14 01103 + m[M14]*Det2_34_12; 01104 G4double Det3_134_134 = m[M11]*Det2_34_34 - m[M13]*Det2_34_14 01105 + m[M14]*Det2_34_13; 01106 G4double Det3_134_234 = m[M12]*Det2_34_34 - m[M13]*Det2_34_24 01107 + m[M14]*Det2_34_23; 01108 G4double Det3_234_012 = m[M20]*Det2_34_12 - m[M21]*Det2_34_02 01109 + m[M22]*Det2_34_01; 01110 G4double Det3_234_013 = m[M20]*Det2_34_13 - m[M21]*Det2_34_03 01111 + m[M23]*Det2_34_01; 01112 G4double Det3_234_014 = m[M20]*Det2_34_14 - m[M21]*Det2_34_04 01113 + m[M24]*Det2_34_01; 01114 G4double Det3_234_023 = m[M20]*Det2_34_23 - m[M22]*Det2_34_03 01115 + m[M23]*Det2_34_02; 01116 G4double Det3_234_024 = m[M20]*Det2_34_24 - m[M22]*Det2_34_04 01117 + m[M24]*Det2_34_02; 01118 G4double Det3_234_034 = m[M20]*Det2_34_34 - m[M23]*Det2_34_04 01119 + m[M24]*Det2_34_03; 01120 G4double Det3_234_123 = m[M21]*Det2_34_23 - m[M22]*Det2_34_13 01121 + m[M23]*Det2_34_12; 01122 G4double Det3_234_124 = m[M21]*Det2_34_24 - m[M22]*Det2_34_14 01123 + m[M24]*Det2_34_12; 01124 G4double Det3_234_134 = m[M21]*Det2_34_34 - m[M23]*Det2_34_14 01125 + m[M24]*Det2_34_13; 01126 G4double Det3_234_234 = m[M22]*Det2_34_34 - m[M23]*Det2_34_24 01127 + m[M24]*Det2_34_23; 01128 01129 // Find all NECESSARY 4x4 dets: (25 of them) 01130 01131 G4double Det4_0123_0123 = m[M00]*Det3_123_123 - m[M01]*Det3_123_023 01132 + m[M02]*Det3_123_013 - m[M03]*Det3_123_012; 01133 G4double Det4_0123_0124 = m[M00]*Det3_123_124 - m[M01]*Det3_123_024 01134 + m[M02]*Det3_123_014 - m[M04]*Det3_123_012; 01135 G4double Det4_0123_0134 = m[M00]*Det3_123_134 - m[M01]*Det3_123_034 01136 + m[M03]*Det3_123_014 - m[M04]*Det3_123_013; 01137 G4double Det4_0123_0234 = m[M00]*Det3_123_234 - m[M02]*Det3_123_034 01138 + m[M03]*Det3_123_024 - m[M04]*Det3_123_023; 01139 G4double Det4_0123_1234 = m[M01]*Det3_123_234 - m[M02]*Det3_123_134 01140 + m[M03]*Det3_123_124 - m[M04]*Det3_123_123; 01141 G4double Det4_0124_0123 = m[M00]*Det3_124_123 - m[M01]*Det3_124_023 01142 + m[M02]*Det3_124_013 - m[M03]*Det3_124_012; 01143 G4double Det4_0124_0124 = m[M00]*Det3_124_124 - m[M01]*Det3_124_024 01144 + m[M02]*Det3_124_014 - m[M04]*Det3_124_012; 01145 G4double Det4_0124_0134 = m[M00]*Det3_124_134 - m[M01]*Det3_124_034 01146 + m[M03]*Det3_124_014 - m[M04]*Det3_124_013; 01147 G4double Det4_0124_0234 = m[M00]*Det3_124_234 - m[M02]*Det3_124_034 01148 + m[M03]*Det3_124_024 - m[M04]*Det3_124_023; 01149 G4double Det4_0124_1234 = m[M01]*Det3_124_234 - m[M02]*Det3_124_134 01150 + m[M03]*Det3_124_124 - m[M04]*Det3_124_123; 01151 G4double Det4_0134_0123 = m[M00]*Det3_134_123 - m[M01]*Det3_134_023 01152 + m[M02]*Det3_134_013 - m[M03]*Det3_134_012; 01153 G4double Det4_0134_0124 = m[M00]*Det3_134_124 - m[M01]*Det3_134_024 01154 + m[M02]*Det3_134_014 - m[M04]*Det3_134_012; 01155 G4double Det4_0134_0134 = m[M00]*Det3_134_134 - m[M01]*Det3_134_034 01156 + m[M03]*Det3_134_014 - m[M04]*Det3_134_013; 01157 G4double Det4_0134_0234 = m[M00]*Det3_134_234 - m[M02]*Det3_134_034 01158 + m[M03]*Det3_134_024 - m[M04]*Det3_134_023; 01159 G4double Det4_0134_1234 = m[M01]*Det3_134_234 - m[M02]*Det3_134_134 01160 + m[M03]*Det3_134_124 - m[M04]*Det3_134_123; 01161 G4double Det4_0234_0123 = m[M00]*Det3_234_123 - m[M01]*Det3_234_023 01162 + m[M02]*Det3_234_013 - m[M03]*Det3_234_012; 01163 G4double Det4_0234_0124 = m[M00]*Det3_234_124 - m[M01]*Det3_234_024 01164 + m[M02]*Det3_234_014 - m[M04]*Det3_234_012; 01165 G4double Det4_0234_0134 = m[M00]*Det3_234_134 - m[M01]*Det3_234_034 01166 + m[M03]*Det3_234_014 - m[M04]*Det3_234_013; 01167 G4double Det4_0234_0234 = m[M00]*Det3_234_234 - m[M02]*Det3_234_034 01168 + m[M03]*Det3_234_024 - m[M04]*Det3_234_023; 01169 G4double Det4_0234_1234 = m[M01]*Det3_234_234 - m[M02]*Det3_234_134 01170 + m[M03]*Det3_234_124 - m[M04]*Det3_234_123; 01171 G4double Det4_1234_0123 = m[M10]*Det3_234_123 - m[M11]*Det3_234_023 01172 + m[M12]*Det3_234_013 - m[M13]*Det3_234_012; 01173 G4double Det4_1234_0124 = m[M10]*Det3_234_124 - m[M11]*Det3_234_024 01174 + m[M12]*Det3_234_014 - m[M14]*Det3_234_012; 01175 G4double Det4_1234_0134 = m[M10]*Det3_234_134 - m[M11]*Det3_234_034 01176 + m[M13]*Det3_234_014 - m[M14]*Det3_234_013; 01177 G4double Det4_1234_0234 = m[M10]*Det3_234_234 - m[M12]*Det3_234_034 01178 + m[M13]*Det3_234_024 - m[M14]*Det3_234_023; 01179 G4double Det4_1234_1234 = m[M11]*Det3_234_234 - m[M12]*Det3_234_134 01180 + m[M13]*Det3_234_124 - m[M14]*Det3_234_123; 01181 01182 // Find the 5x5 det: 01183 01184 G4double det = m[M00]*Det4_1234_1234 01185 - m[M01]*Det4_1234_0234 01186 + m[M02]*Det4_1234_0134 01187 - m[M03]*Det4_1234_0124 01188 + m[M04]*Det4_1234_0123; 01189 01190 if ( det == 0 ) 01191 { 01192 ifail = 1; 01193 return; 01194 } 01195 01196 G4double oneOverDet = 1.0/det; 01197 G4double mn1OverDet = - oneOverDet; 01198 01199 m[M00] = Det4_1234_1234 * oneOverDet; 01200 m[M01] = Det4_0234_1234 * mn1OverDet; 01201 m[M02] = Det4_0134_1234 * oneOverDet; 01202 m[M03] = Det4_0124_1234 * mn1OverDet; 01203 m[M04] = Det4_0123_1234 * oneOverDet; 01204 01205 m[M10] = Det4_1234_0234 * mn1OverDet; 01206 m[M11] = Det4_0234_0234 * oneOverDet; 01207 m[M12] = Det4_0134_0234 * mn1OverDet; 01208 m[M13] = Det4_0124_0234 * oneOverDet; 01209 m[M14] = Det4_0123_0234 * mn1OverDet; 01210 01211 m[M20] = Det4_1234_0134 * oneOverDet; 01212 m[M21] = Det4_0234_0134 * mn1OverDet; 01213 m[M22] = Det4_0134_0134 * oneOverDet; 01214 m[M23] = Det4_0124_0134 * mn1OverDet; 01215 m[M24] = Det4_0123_0134 * oneOverDet; 01216 01217 m[M30] = Det4_1234_0124 * mn1OverDet; 01218 m[M31] = Det4_0234_0124 * oneOverDet; 01219 m[M32] = Det4_0134_0124 * mn1OverDet; 01220 m[M33] = Det4_0124_0124 * oneOverDet; 01221 m[M34] = Det4_0123_0124 * mn1OverDet; 01222 01223 m[M40] = Det4_1234_0123 * oneOverDet; 01224 m[M41] = Det4_0234_0123 * mn1OverDet; 01225 m[M42] = Det4_0134_0123 * oneOverDet; 01226 m[M43] = Det4_0124_0123 * mn1OverDet; 01227 m[M44] = Det4_0123_0123 * oneOverDet; 01228 01229 return; 01230 }
void G4ErrorMatrix::invertHaywood6 | ( | G4int & | ierr | ) | [protected, virtual] |
Definition at line 1232 of file G4ErrorMatrix.cc.
References A00, A01, A02, A03, A04, A05, A10, A11, A12, A13, A14, A15, A20, A21, A22, A23, A24, A25, A30, A31, A32, A33, A34, A35, A40, A41, A42, A43, A44, A45, A50, A51, A52, A53, A54, and A55.
Referenced by invert().
01233 { 01234 ifail = 0; 01235 01236 // Find all NECESSARY 2x2 dets: (45 of them) 01237 01238 G4double Det2_34_01 = m[A30]*m[A41] - m[A31]*m[A40]; 01239 G4double Det2_34_02 = m[A30]*m[A42] - m[A32]*m[A40]; 01240 G4double Det2_34_03 = m[A30]*m[A43] - m[A33]*m[A40]; 01241 G4double Det2_34_04 = m[A30]*m[A44] - m[A34]*m[A40]; 01242 G4double Det2_34_05 = m[A30]*m[A45] - m[A35]*m[A40]; 01243 G4double Det2_34_12 = m[A31]*m[A42] - m[A32]*m[A41]; 01244 G4double Det2_34_13 = m[A31]*m[A43] - m[A33]*m[A41]; 01245 G4double Det2_34_14 = m[A31]*m[A44] - m[A34]*m[A41]; 01246 G4double Det2_34_15 = m[A31]*m[A45] - m[A35]*m[A41]; 01247 G4double Det2_34_23 = m[A32]*m[A43] - m[A33]*m[A42]; 01248 G4double Det2_34_24 = m[A32]*m[A44] - m[A34]*m[A42]; 01249 G4double Det2_34_25 = m[A32]*m[A45] - m[A35]*m[A42]; 01250 G4double Det2_34_34 = m[A33]*m[A44] - m[A34]*m[A43]; 01251 G4double Det2_34_35 = m[A33]*m[A45] - m[A35]*m[A43]; 01252 G4double Det2_34_45 = m[A34]*m[A45] - m[A35]*m[A44]; 01253 G4double Det2_35_01 = m[A30]*m[A51] - m[A31]*m[A50]; 01254 G4double Det2_35_02 = m[A30]*m[A52] - m[A32]*m[A50]; 01255 G4double Det2_35_03 = m[A30]*m[A53] - m[A33]*m[A50]; 01256 G4double Det2_35_04 = m[A30]*m[A54] - m[A34]*m[A50]; 01257 G4double Det2_35_05 = m[A30]*m[A55] - m[A35]*m[A50]; 01258 G4double Det2_35_12 = m[A31]*m[A52] - m[A32]*m[A51]; 01259 G4double Det2_35_13 = m[A31]*m[A53] - m[A33]*m[A51]; 01260 G4double Det2_35_14 = m[A31]*m[A54] - m[A34]*m[A51]; 01261 G4double Det2_35_15 = m[A31]*m[A55] - m[A35]*m[A51]; 01262 G4double Det2_35_23 = m[A32]*m[A53] - m[A33]*m[A52]; 01263 G4double Det2_35_24 = m[A32]*m[A54] - m[A34]*m[A52]; 01264 G4double Det2_35_25 = m[A32]*m[A55] - m[A35]*m[A52]; 01265 G4double Det2_35_34 = m[A33]*m[A54] - m[A34]*m[A53]; 01266 G4double Det2_35_35 = m[A33]*m[A55] - m[A35]*m[A53]; 01267 G4double Det2_35_45 = m[A34]*m[A55] - m[A35]*m[A54]; 01268 G4double Det2_45_01 = m[A40]*m[A51] - m[A41]*m[A50]; 01269 G4double Det2_45_02 = m[A40]*m[A52] - m[A42]*m[A50]; 01270 G4double Det2_45_03 = m[A40]*m[A53] - m[A43]*m[A50]; 01271 G4double Det2_45_04 = m[A40]*m[A54] - m[A44]*m[A50]; 01272 G4double Det2_45_05 = m[A40]*m[A55] - m[A45]*m[A50]; 01273 G4double Det2_45_12 = m[A41]*m[A52] - m[A42]*m[A51]; 01274 G4double Det2_45_13 = m[A41]*m[A53] - m[A43]*m[A51]; 01275 G4double Det2_45_14 = m[A41]*m[A54] - m[A44]*m[A51]; 01276 G4double Det2_45_15 = m[A41]*m[A55] - m[A45]*m[A51]; 01277 G4double Det2_45_23 = m[A42]*m[A53] - m[A43]*m[A52]; 01278 G4double Det2_45_24 = m[A42]*m[A54] - m[A44]*m[A52]; 01279 G4double Det2_45_25 = m[A42]*m[A55] - m[A45]*m[A52]; 01280 G4double Det2_45_34 = m[A43]*m[A54] - m[A44]*m[A53]; 01281 G4double Det2_45_35 = m[A43]*m[A55] - m[A45]*m[A53]; 01282 G4double Det2_45_45 = m[A44]*m[A55] - m[A45]*m[A54]; 01283 01284 // Find all NECESSARY 3x3 dets: (80 of them) 01285 01286 G4double Det3_234_012 = m[A20]*Det2_34_12 - m[A21]*Det2_34_02 01287 + m[A22]*Det2_34_01; 01288 G4double Det3_234_013 = m[A20]*Det2_34_13 - m[A21]*Det2_34_03 01289 + m[A23]*Det2_34_01; 01290 G4double Det3_234_014 = m[A20]*Det2_34_14 - m[A21]*Det2_34_04 01291 + m[A24]*Det2_34_01; 01292 G4double Det3_234_015 = m[A20]*Det2_34_15 - m[A21]*Det2_34_05 01293 + m[A25]*Det2_34_01; 01294 G4double Det3_234_023 = m[A20]*Det2_34_23 - m[A22]*Det2_34_03 01295 + m[A23]*Det2_34_02; 01296 G4double Det3_234_024 = m[A20]*Det2_34_24 - m[A22]*Det2_34_04 01297 + m[A24]*Det2_34_02; 01298 G4double Det3_234_025 = m[A20]*Det2_34_25 - m[A22]*Det2_34_05 01299 + m[A25]*Det2_34_02; 01300 G4double Det3_234_034 = m[A20]*Det2_34_34 - m[A23]*Det2_34_04 01301 + m[A24]*Det2_34_03; 01302 G4double Det3_234_035 = m[A20]*Det2_34_35 - m[A23]*Det2_34_05 01303 + m[A25]*Det2_34_03; 01304 G4double Det3_234_045 = m[A20]*Det2_34_45 - m[A24]*Det2_34_05 01305 + m[A25]*Det2_34_04; 01306 G4double Det3_234_123 = m[A21]*Det2_34_23 - m[A22]*Det2_34_13 01307 + m[A23]*Det2_34_12; 01308 G4double Det3_234_124 = m[A21]*Det2_34_24 - m[A22]*Det2_34_14 01309 + m[A24]*Det2_34_12; 01310 G4double Det3_234_125 = m[A21]*Det2_34_25 - m[A22]*Det2_34_15 01311 + m[A25]*Det2_34_12; 01312 G4double Det3_234_134 = m[A21]*Det2_34_34 - m[A23]*Det2_34_14 01313 + m[A24]*Det2_34_13; 01314 G4double Det3_234_135 = m[A21]*Det2_34_35 - m[A23]*Det2_34_15 01315 + m[A25]*Det2_34_13; 01316 G4double Det3_234_145 = m[A21]*Det2_34_45 - m[A24]*Det2_34_15 01317 + m[A25]*Det2_34_14; 01318 G4double Det3_234_234 = m[A22]*Det2_34_34 - m[A23]*Det2_34_24 01319 + m[A24]*Det2_34_23; 01320 G4double Det3_234_235 = m[A22]*Det2_34_35 - m[A23]*Det2_34_25 01321 + m[A25]*Det2_34_23; 01322 G4double Det3_234_245 = m[A22]*Det2_34_45 - m[A24]*Det2_34_25 01323 + m[A25]*Det2_34_24; 01324 G4double Det3_234_345 = m[A23]*Det2_34_45 - m[A24]*Det2_34_35 01325 + m[A25]*Det2_34_34; 01326 G4double Det3_235_012 = m[A20]*Det2_35_12 - m[A21]*Det2_35_02 01327 + m[A22]*Det2_35_01; 01328 G4double Det3_235_013 = m[A20]*Det2_35_13 - m[A21]*Det2_35_03 01329 + m[A23]*Det2_35_01; 01330 G4double Det3_235_014 = m[A20]*Det2_35_14 - m[A21]*Det2_35_04 01331 + m[A24]*Det2_35_01; 01332 G4double Det3_235_015 = m[A20]*Det2_35_15 - m[A21]*Det2_35_05 01333 + m[A25]*Det2_35_01; 01334 G4double Det3_235_023 = m[A20]*Det2_35_23 - m[A22]*Det2_35_03 01335 + m[A23]*Det2_35_02; 01336 G4double Det3_235_024 = m[A20]*Det2_35_24 - m[A22]*Det2_35_04 01337 + m[A24]*Det2_35_02; 01338 G4double Det3_235_025 = m[A20]*Det2_35_25 - m[A22]*Det2_35_05 01339 + m[A25]*Det2_35_02; 01340 G4double Det3_235_034 = m[A20]*Det2_35_34 - m[A23]*Det2_35_04 01341 + m[A24]*Det2_35_03; 01342 G4double Det3_235_035 = m[A20]*Det2_35_35 - m[A23]*Det2_35_05 01343 + m[A25]*Det2_35_03; 01344 G4double Det3_235_045 = m[A20]*Det2_35_45 - m[A24]*Det2_35_05 01345 + m[A25]*Det2_35_04; 01346 G4double Det3_235_123 = m[A21]*Det2_35_23 - m[A22]*Det2_35_13 01347 + m[A23]*Det2_35_12; 01348 G4double Det3_235_124 = m[A21]*Det2_35_24 - m[A22]*Det2_35_14 01349 + m[A24]*Det2_35_12; 01350 G4double Det3_235_125 = m[A21]*Det2_35_25 - m[A22]*Det2_35_15 01351 + m[A25]*Det2_35_12; 01352 G4double Det3_235_134 = m[A21]*Det2_35_34 - m[A23]*Det2_35_14 01353 + m[A24]*Det2_35_13; 01354 G4double Det3_235_135 = m[A21]*Det2_35_35 - m[A23]*Det2_35_15 01355 + m[A25]*Det2_35_13; 01356 G4double Det3_235_145 = m[A21]*Det2_35_45 - m[A24]*Det2_35_15 01357 + m[A25]*Det2_35_14; 01358 G4double Det3_235_234 = m[A22]*Det2_35_34 - m[A23]*Det2_35_24 01359 + m[A24]*Det2_35_23; 01360 G4double Det3_235_235 = m[A22]*Det2_35_35 - m[A23]*Det2_35_25 01361 + m[A25]*Det2_35_23; 01362 G4double Det3_235_245 = m[A22]*Det2_35_45 - m[A24]*Det2_35_25 01363 + m[A25]*Det2_35_24; 01364 G4double Det3_235_345 = m[A23]*Det2_35_45 - m[A24]*Det2_35_35 01365 + m[A25]*Det2_35_34; 01366 G4double Det3_245_012 = m[A20]*Det2_45_12 - m[A21]*Det2_45_02 01367 + m[A22]*Det2_45_01; 01368 G4double Det3_245_013 = m[A20]*Det2_45_13 - m[A21]*Det2_45_03 01369 + m[A23]*Det2_45_01; 01370 G4double Det3_245_014 = m[A20]*Det2_45_14 - m[A21]*Det2_45_04 01371 + m[A24]*Det2_45_01; 01372 G4double Det3_245_015 = m[A20]*Det2_45_15 - m[A21]*Det2_45_05 01373 + m[A25]*Det2_45_01; 01374 G4double Det3_245_023 = m[A20]*Det2_45_23 - m[A22]*Det2_45_03 01375 + m[A23]*Det2_45_02; 01376 G4double Det3_245_024 = m[A20]*Det2_45_24 - m[A22]*Det2_45_04 01377 + m[A24]*Det2_45_02; 01378 G4double Det3_245_025 = m[A20]*Det2_45_25 - m[A22]*Det2_45_05 01379 + m[A25]*Det2_45_02; 01380 G4double Det3_245_034 = m[A20]*Det2_45_34 - m[A23]*Det2_45_04 01381 + m[A24]*Det2_45_03; 01382 G4double Det3_245_035 = m[A20]*Det2_45_35 - m[A23]*Det2_45_05 01383 + m[A25]*Det2_45_03; 01384 G4double Det3_245_045 = m[A20]*Det2_45_45 - m[A24]*Det2_45_05 01385 + m[A25]*Det2_45_04; 01386 G4double Det3_245_123 = m[A21]*Det2_45_23 - m[A22]*Det2_45_13 01387 + m[A23]*Det2_45_12; 01388 G4double Det3_245_124 = m[A21]*Det2_45_24 - m[A22]*Det2_45_14 01389 + m[A24]*Det2_45_12; 01390 G4double Det3_245_125 = m[A21]*Det2_45_25 - m[A22]*Det2_45_15 01391 + m[A25]*Det2_45_12; 01392 G4double Det3_245_134 = m[A21]*Det2_45_34 - m[A23]*Det2_45_14 01393 + m[A24]*Det2_45_13; 01394 G4double Det3_245_135 = m[A21]*Det2_45_35 - m[A23]*Det2_45_15 01395 + m[A25]*Det2_45_13; 01396 G4double Det3_245_145 = m[A21]*Det2_45_45 - m[A24]*Det2_45_15 01397 + m[A25]*Det2_45_14; 01398 G4double Det3_245_234 = m[A22]*Det2_45_34 - m[A23]*Det2_45_24 01399 + m[A24]*Det2_45_23; 01400 G4double Det3_245_235 = m[A22]*Det2_45_35 - m[A23]*Det2_45_25 01401 + m[A25]*Det2_45_23; 01402 G4double Det3_245_245 = m[A22]*Det2_45_45 - m[A24]*Det2_45_25 01403 + m[A25]*Det2_45_24; 01404 G4double Det3_245_345 = m[A23]*Det2_45_45 - m[A24]*Det2_45_35 01405 + m[A25]*Det2_45_34; 01406 G4double Det3_345_012 = m[A30]*Det2_45_12 - m[A31]*Det2_45_02 01407 + m[A32]*Det2_45_01; 01408 G4double Det3_345_013 = m[A30]*Det2_45_13 - m[A31]*Det2_45_03 01409 + m[A33]*Det2_45_01; 01410 G4double Det3_345_014 = m[A30]*Det2_45_14 - m[A31]*Det2_45_04 01411 + m[A34]*Det2_45_01; 01412 G4double Det3_345_015 = m[A30]*Det2_45_15 - m[A31]*Det2_45_05 01413 + m[A35]*Det2_45_01; 01414 G4double Det3_345_023 = m[A30]*Det2_45_23 - m[A32]*Det2_45_03 01415 + m[A33]*Det2_45_02; 01416 G4double Det3_345_024 = m[A30]*Det2_45_24 - m[A32]*Det2_45_04 01417 + m[A34]*Det2_45_02; 01418 G4double Det3_345_025 = m[A30]*Det2_45_25 - m[A32]*Det2_45_05 01419 + m[A35]*Det2_45_02; 01420 G4double Det3_345_034 = m[A30]*Det2_45_34 - m[A33]*Det2_45_04 01421 + m[A34]*Det2_45_03; 01422 G4double Det3_345_035 = m[A30]*Det2_45_35 - m[A33]*Det2_45_05 01423 + m[A35]*Det2_45_03; 01424 G4double Det3_345_045 = m[A30]*Det2_45_45 - m[A34]*Det2_45_05 01425 + m[A35]*Det2_45_04; 01426 G4double Det3_345_123 = m[A31]*Det2_45_23 - m[A32]*Det2_45_13 01427 + m[A33]*Det2_45_12; 01428 G4double Det3_345_124 = m[A31]*Det2_45_24 - m[A32]*Det2_45_14 01429 + m[A34]*Det2_45_12; 01430 G4double Det3_345_125 = m[A31]*Det2_45_25 - m[A32]*Det2_45_15 01431 + m[A35]*Det2_45_12; 01432 G4double Det3_345_134 = m[A31]*Det2_45_34 - m[A33]*Det2_45_14 01433 + m[A34]*Det2_45_13; 01434 G4double Det3_345_135 = m[A31]*Det2_45_35 - m[A33]*Det2_45_15 01435 + m[A35]*Det2_45_13; 01436 G4double Det3_345_145 = m[A31]*Det2_45_45 - m[A34]*Det2_45_15 01437 + m[A35]*Det2_45_14; 01438 G4double Det3_345_234 = m[A32]*Det2_45_34 - m[A33]*Det2_45_24 01439 + m[A34]*Det2_45_23; 01440 G4double Det3_345_235 = m[A32]*Det2_45_35 - m[A33]*Det2_45_25 01441 + m[A35]*Det2_45_23; 01442 G4double Det3_345_245 = m[A32]*Det2_45_45 - m[A34]*Det2_45_25 01443 + m[A35]*Det2_45_24; 01444 G4double Det3_345_345 = m[A33]*Det2_45_45 - m[A34]*Det2_45_35 01445 + m[A35]*Det2_45_34; 01446 01447 // Find all NECESSARY 4x4 dets: (75 of them) 01448 01449 G4double Det4_1234_0123 = m[A10]*Det3_234_123 - m[A11]*Det3_234_023 01450 + m[A12]*Det3_234_013 - m[A13]*Det3_234_012; 01451 G4double Det4_1234_0124 = m[A10]*Det3_234_124 - m[A11]*Det3_234_024 01452 + m[A12]*Det3_234_014 - m[A14]*Det3_234_012; 01453 G4double Det4_1234_0125 = m[A10]*Det3_234_125 - m[A11]*Det3_234_025 01454 + m[A12]*Det3_234_015 - m[A15]*Det3_234_012; 01455 G4double Det4_1234_0134 = m[A10]*Det3_234_134 - m[A11]*Det3_234_034 01456 + m[A13]*Det3_234_014 - m[A14]*Det3_234_013; 01457 G4double Det4_1234_0135 = m[A10]*Det3_234_135 - m[A11]*Det3_234_035 01458 + m[A13]*Det3_234_015 - m[A15]*Det3_234_013; 01459 G4double Det4_1234_0145 = m[A10]*Det3_234_145 - m[A11]*Det3_234_045 01460 + m[A14]*Det3_234_015 - m[A15]*Det3_234_014; 01461 G4double Det4_1234_0234 = m[A10]*Det3_234_234 - m[A12]*Det3_234_034 01462 + m[A13]*Det3_234_024 - m[A14]*Det3_234_023; 01463 G4double Det4_1234_0235 = m[A10]*Det3_234_235 - m[A12]*Det3_234_035 01464 + m[A13]*Det3_234_025 - m[A15]*Det3_234_023; 01465 G4double Det4_1234_0245 = m[A10]*Det3_234_245 - m[A12]*Det3_234_045 01466 + m[A14]*Det3_234_025 - m[A15]*Det3_234_024; 01467 G4double Det4_1234_0345 = m[A10]*Det3_234_345 - m[A13]*Det3_234_045 01468 + m[A14]*Det3_234_035 - m[A15]*Det3_234_034; 01469 G4double Det4_1234_1234 = m[A11]*Det3_234_234 - m[A12]*Det3_234_134 01470 + m[A13]*Det3_234_124 - m[A14]*Det3_234_123; 01471 G4double Det4_1234_1235 = m[A11]*Det3_234_235 - m[A12]*Det3_234_135 01472 + m[A13]*Det3_234_125 - m[A15]*Det3_234_123; 01473 G4double Det4_1234_1245 = m[A11]*Det3_234_245 - m[A12]*Det3_234_145 01474 + m[A14]*Det3_234_125 - m[A15]*Det3_234_124; 01475 G4double Det4_1234_1345 = m[A11]*Det3_234_345 - m[A13]*Det3_234_145 01476 + m[A14]*Det3_234_135 - m[A15]*Det3_234_134; 01477 G4double Det4_1234_2345 = m[A12]*Det3_234_345 - m[A13]*Det3_234_245 01478 + m[A14]*Det3_234_235 - m[A15]*Det3_234_234; 01479 G4double Det4_1235_0123 = m[A10]*Det3_235_123 - m[A11]*Det3_235_023 01480 + m[A12]*Det3_235_013 - m[A13]*Det3_235_012; 01481 G4double Det4_1235_0124 = m[A10]*Det3_235_124 - m[A11]*Det3_235_024 01482 + m[A12]*Det3_235_014 - m[A14]*Det3_235_012; 01483 G4double Det4_1235_0125 = m[A10]*Det3_235_125 - m[A11]*Det3_235_025 01484 + m[A12]*Det3_235_015 - m[A15]*Det3_235_012; 01485 G4double Det4_1235_0134 = m[A10]*Det3_235_134 - m[A11]*Det3_235_034 01486 + m[A13]*Det3_235_014 - m[A14]*Det3_235_013; 01487 G4double Det4_1235_0135 = m[A10]*Det3_235_135 - m[A11]*Det3_235_035 01488 + m[A13]*Det3_235_015 - m[A15]*Det3_235_013; 01489 G4double Det4_1235_0145 = m[A10]*Det3_235_145 - m[A11]*Det3_235_045 01490 + m[A14]*Det3_235_015 - m[A15]*Det3_235_014; 01491 G4double Det4_1235_0234 = m[A10]*Det3_235_234 - m[A12]*Det3_235_034 01492 + m[A13]*Det3_235_024 - m[A14]*Det3_235_023; 01493 G4double Det4_1235_0235 = m[A10]*Det3_235_235 - m[A12]*Det3_235_035 01494 + m[A13]*Det3_235_025 - m[A15]*Det3_235_023; 01495 G4double Det4_1235_0245 = m[A10]*Det3_235_245 - m[A12]*Det3_235_045 01496 + m[A14]*Det3_235_025 - m[A15]*Det3_235_024; 01497 G4double Det4_1235_0345 = m[A10]*Det3_235_345 - m[A13]*Det3_235_045 01498 + m[A14]*Det3_235_035 - m[A15]*Det3_235_034; 01499 G4double Det4_1235_1234 = m[A11]*Det3_235_234 - m[A12]*Det3_235_134 01500 + m[A13]*Det3_235_124 - m[A14]*Det3_235_123; 01501 G4double Det4_1235_1235 = m[A11]*Det3_235_235 - m[A12]*Det3_235_135 01502 + m[A13]*Det3_235_125 - m[A15]*Det3_235_123; 01503 G4double Det4_1235_1245 = m[A11]*Det3_235_245 - m[A12]*Det3_235_145 01504 + m[A14]*Det3_235_125 - m[A15]*Det3_235_124; 01505 G4double Det4_1235_1345 = m[A11]*Det3_235_345 - m[A13]*Det3_235_145 01506 + m[A14]*Det3_235_135 - m[A15]*Det3_235_134; 01507 G4double Det4_1235_2345 = m[A12]*Det3_235_345 - m[A13]*Det3_235_245 01508 + m[A14]*Det3_235_235 - m[A15]*Det3_235_234; 01509 G4double Det4_1245_0123 = m[A10]*Det3_245_123 - m[A11]*Det3_245_023 01510 + m[A12]*Det3_245_013 - m[A13]*Det3_245_012; 01511 G4double Det4_1245_0124 = m[A10]*Det3_245_124 - m[A11]*Det3_245_024 01512 + m[A12]*Det3_245_014 - m[A14]*Det3_245_012; 01513 G4double Det4_1245_0125 = m[A10]*Det3_245_125 - m[A11]*Det3_245_025 01514 + m[A12]*Det3_245_015 - m[A15]*Det3_245_012; 01515 G4double Det4_1245_0134 = m[A10]*Det3_245_134 - m[A11]*Det3_245_034 01516 + m[A13]*Det3_245_014 - m[A14]*Det3_245_013; 01517 G4double Det4_1245_0135 = m[A10]*Det3_245_135 - m[A11]*Det3_245_035 01518 + m[A13]*Det3_245_015 - m[A15]*Det3_245_013; 01519 G4double Det4_1245_0145 = m[A10]*Det3_245_145 - m[A11]*Det3_245_045 01520 + m[A14]*Det3_245_015 - m[A15]*Det3_245_014; 01521 G4double Det4_1245_0234 = m[A10]*Det3_245_234 - m[A12]*Det3_245_034 01522 + m[A13]*Det3_245_024 - m[A14]*Det3_245_023; 01523 G4double Det4_1245_0235 = m[A10]*Det3_245_235 - m[A12]*Det3_245_035 01524 + m[A13]*Det3_245_025 - m[A15]*Det3_245_023; 01525 G4double Det4_1245_0245 = m[A10]*Det3_245_245 - m[A12]*Det3_245_045 01526 + m[A14]*Det3_245_025 - m[A15]*Det3_245_024; 01527 G4double Det4_1245_0345 = m[A10]*Det3_245_345 - m[A13]*Det3_245_045 01528 + m[A14]*Det3_245_035 - m[A15]*Det3_245_034; 01529 G4double Det4_1245_1234 = m[A11]*Det3_245_234 - m[A12]*Det3_245_134 01530 + m[A13]*Det3_245_124 - m[A14]*Det3_245_123; 01531 G4double Det4_1245_1235 = m[A11]*Det3_245_235 - m[A12]*Det3_245_135 01532 + m[A13]*Det3_245_125 - m[A15]*Det3_245_123; 01533 G4double Det4_1245_1245 = m[A11]*Det3_245_245 - m[A12]*Det3_245_145 01534 + m[A14]*Det3_245_125 - m[A15]*Det3_245_124; 01535 G4double Det4_1245_1345 = m[A11]*Det3_245_345 - m[A13]*Det3_245_145 01536 + m[A14]*Det3_245_135 - m[A15]*Det3_245_134; 01537 G4double Det4_1245_2345 = m[A12]*Det3_245_345 - m[A13]*Det3_245_245 01538 + m[A14]*Det3_245_235 - m[A15]*Det3_245_234; 01539 G4double Det4_1345_0123 = m[A10]*Det3_345_123 - m[A11]*Det3_345_023 01540 + m[A12]*Det3_345_013 - m[A13]*Det3_345_012; 01541 G4double Det4_1345_0124 = m[A10]*Det3_345_124 - m[A11]*Det3_345_024 01542 + m[A12]*Det3_345_014 - m[A14]*Det3_345_012; 01543 G4double Det4_1345_0125 = m[A10]*Det3_345_125 - m[A11]*Det3_345_025 01544 + m[A12]*Det3_345_015 - m[A15]*Det3_345_012; 01545 G4double Det4_1345_0134 = m[A10]*Det3_345_134 - m[A11]*Det3_345_034 01546 + m[A13]*Det3_345_014 - m[A14]*Det3_345_013; 01547 G4double Det4_1345_0135 = m[A10]*Det3_345_135 - m[A11]*Det3_345_035 01548 + m[A13]*Det3_345_015 - m[A15]*Det3_345_013; 01549 G4double Det4_1345_0145 = m[A10]*Det3_345_145 - m[A11]*Det3_345_045 01550 + m[A14]*Det3_345_015 - m[A15]*Det3_345_014; 01551 G4double Det4_1345_0234 = m[A10]*Det3_345_234 - m[A12]*Det3_345_034 01552 + m[A13]*Det3_345_024 - m[A14]*Det3_345_023; 01553 G4double Det4_1345_0235 = m[A10]*Det3_345_235 - m[A12]*Det3_345_035 01554 + m[A13]*Det3_345_025 - m[A15]*Det3_345_023; 01555 G4double Det4_1345_0245 = m[A10]*Det3_345_245 - m[A12]*Det3_345_045 01556 + m[A14]*Det3_345_025 - m[A15]*Det3_345_024; 01557 G4double Det4_1345_0345 = m[A10]*Det3_345_345 - m[A13]*Det3_345_045 01558 + m[A14]*Det3_345_035 - m[A15]*Det3_345_034; 01559 G4double Det4_1345_1234 = m[A11]*Det3_345_234 - m[A12]*Det3_345_134 01560 + m[A13]*Det3_345_124 - m[A14]*Det3_345_123; 01561 G4double Det4_1345_1235 = m[A11]*Det3_345_235 - m[A12]*Det3_345_135 01562 + m[A13]*Det3_345_125 - m[A15]*Det3_345_123; 01563 G4double Det4_1345_1245 = m[A11]*Det3_345_245 - m[A12]*Det3_345_145 01564 + m[A14]*Det3_345_125 - m[A15]*Det3_345_124; 01565 G4double Det4_1345_1345 = m[A11]*Det3_345_345 - m[A13]*Det3_345_145 01566 + m[A14]*Det3_345_135 - m[A15]*Det3_345_134; 01567 G4double Det4_1345_2345 = m[A12]*Det3_345_345 - m[A13]*Det3_345_245 01568 + m[A14]*Det3_345_235 - m[A15]*Det3_345_234; 01569 G4double Det4_2345_0123 = m[A20]*Det3_345_123 - m[A21]*Det3_345_023 01570 + m[A22]*Det3_345_013 - m[A23]*Det3_345_012; 01571 G4double Det4_2345_0124 = m[A20]*Det3_345_124 - m[A21]*Det3_345_024 01572 + m[A22]*Det3_345_014 - m[A24]*Det3_345_012; 01573 G4double Det4_2345_0125 = m[A20]*Det3_345_125 - m[A21]*Det3_345_025 01574 + m[A22]*Det3_345_015 - m[A25]*Det3_345_012; 01575 G4double Det4_2345_0134 = m[A20]*Det3_345_134 - m[A21]*Det3_345_034 01576 + m[A23]*Det3_345_014 - m[A24]*Det3_345_013; 01577 G4double Det4_2345_0135 = m[A20]*Det3_345_135 - m[A21]*Det3_345_035 01578 + m[A23]*Det3_345_015 - m[A25]*Det3_345_013; 01579 G4double Det4_2345_0145 = m[A20]*Det3_345_145 - m[A21]*Det3_345_045 01580 + m[A24]*Det3_345_015 - m[A25]*Det3_345_014; 01581 G4double Det4_2345_0234 = m[A20]*Det3_345_234 - m[A22]*Det3_345_034 01582 + m[A23]*Det3_345_024 - m[A24]*Det3_345_023; 01583 G4double Det4_2345_0235 = m[A20]*Det3_345_235 - m[A22]*Det3_345_035 01584 + m[A23]*Det3_345_025 - m[A25]*Det3_345_023; 01585 G4double Det4_2345_0245 = m[A20]*Det3_345_245 - m[A22]*Det3_345_045 01586 + m[A24]*Det3_345_025 - m[A25]*Det3_345_024; 01587 G4double Det4_2345_0345 = m[A20]*Det3_345_345 - m[A23]*Det3_345_045 01588 + m[A24]*Det3_345_035 - m[A25]*Det3_345_034; 01589 G4double Det4_2345_1234 = m[A21]*Det3_345_234 - m[A22]*Det3_345_134 01590 + m[A23]*Det3_345_124 - m[A24]*Det3_345_123; 01591 G4double Det4_2345_1235 = m[A21]*Det3_345_235 - m[A22]*Det3_345_135 01592 + m[A23]*Det3_345_125 - m[A25]*Det3_345_123; 01593 G4double Det4_2345_1245 = m[A21]*Det3_345_245 - m[A22]*Det3_345_145 01594 + m[A24]*Det3_345_125 - m[A25]*Det3_345_124; 01595 G4double Det4_2345_1345 = m[A21]*Det3_345_345 - m[A23]*Det3_345_145 01596 + m[A24]*Det3_345_135 - m[A25]*Det3_345_134; 01597 G4double Det4_2345_2345 = m[A22]*Det3_345_345 - m[A23]*Det3_345_245 01598 + m[A24]*Det3_345_235 - m[A25]*Det3_345_234; 01599 01600 // Find all NECESSARY 5x5 dets: (36 of them) 01601 01602 G4double Det5_01234_01234 = m[A00]*Det4_1234_1234 - m[A01]*Det4_1234_0234 01603 + m[A02]*Det4_1234_0134 - m[A03]*Det4_1234_0124 + m[A04]*Det4_1234_0123; 01604 G4double Det5_01234_01235 = m[A00]*Det4_1234_1235 - m[A01]*Det4_1234_0235 01605 + m[A02]*Det4_1234_0135 - m[A03]*Det4_1234_0125 + m[A05]*Det4_1234_0123; 01606 G4double Det5_01234_01245 = m[A00]*Det4_1234_1245 - m[A01]*Det4_1234_0245 01607 + m[A02]*Det4_1234_0145 - m[A04]*Det4_1234_0125 + m[A05]*Det4_1234_0124; 01608 G4double Det5_01234_01345 = m[A00]*Det4_1234_1345 - m[A01]*Det4_1234_0345 01609 + m[A03]*Det4_1234_0145 - m[A04]*Det4_1234_0135 + m[A05]*Det4_1234_0134; 01610 G4double Det5_01234_02345 = m[A00]*Det4_1234_2345 - m[A02]*Det4_1234_0345 01611 + m[A03]*Det4_1234_0245 - m[A04]*Det4_1234_0235 + m[A05]*Det4_1234_0234; 01612 G4double Det5_01234_12345 = m[A01]*Det4_1234_2345 - m[A02]*Det4_1234_1345 01613 + m[A03]*Det4_1234_1245 - m[A04]*Det4_1234_1235 + m[A05]*Det4_1234_1234; 01614 G4double Det5_01235_01234 = m[A00]*Det4_1235_1234 - m[A01]*Det4_1235_0234 01615 + m[A02]*Det4_1235_0134 - m[A03]*Det4_1235_0124 + m[A04]*Det4_1235_0123; 01616 G4double Det5_01235_01235 = m[A00]*Det4_1235_1235 - m[A01]*Det4_1235_0235 01617 + m[A02]*Det4_1235_0135 - m[A03]*Det4_1235_0125 + m[A05]*Det4_1235_0123; 01618 G4double Det5_01235_01245 = m[A00]*Det4_1235_1245 - m[A01]*Det4_1235_0245 01619 + m[A02]*Det4_1235_0145 - m[A04]*Det4_1235_0125 + m[A05]*Det4_1235_0124; 01620 G4double Det5_01235_01345 = m[A00]*Det4_1235_1345 - m[A01]*Det4_1235_0345 01621 + m[A03]*Det4_1235_0145 - m[A04]*Det4_1235_0135 + m[A05]*Det4_1235_0134; 01622 G4double Det5_01235_02345 = m[A00]*Det4_1235_2345 - m[A02]*Det4_1235_0345 01623 + m[A03]*Det4_1235_0245 - m[A04]*Det4_1235_0235 + m[A05]*Det4_1235_0234; 01624 G4double Det5_01235_12345 = m[A01]*Det4_1235_2345 - m[A02]*Det4_1235_1345 01625 + m[A03]*Det4_1235_1245 - m[A04]*Det4_1235_1235 + m[A05]*Det4_1235_1234; 01626 G4double Det5_01245_01234 = m[A00]*Det4_1245_1234 - m[A01]*Det4_1245_0234 01627 + m[A02]*Det4_1245_0134 - m[A03]*Det4_1245_0124 + m[A04]*Det4_1245_0123; 01628 G4double Det5_01245_01235 = m[A00]*Det4_1245_1235 - m[A01]*Det4_1245_0235 01629 + m[A02]*Det4_1245_0135 - m[A03]*Det4_1245_0125 + m[A05]*Det4_1245_0123; 01630 G4double Det5_01245_01245 = m[A00]*Det4_1245_1245 - m[A01]*Det4_1245_0245 01631 + m[A02]*Det4_1245_0145 - m[A04]*Det4_1245_0125 + m[A05]*Det4_1245_0124; 01632 G4double Det5_01245_01345 = m[A00]*Det4_1245_1345 - m[A01]*Det4_1245_0345 01633 + m[A03]*Det4_1245_0145 - m[A04]*Det4_1245_0135 + m[A05]*Det4_1245_0134; 01634 G4double Det5_01245_02345 = m[A00]*Det4_1245_2345 - m[A02]*Det4_1245_0345 01635 + m[A03]*Det4_1245_0245 - m[A04]*Det4_1245_0235 + m[A05]*Det4_1245_0234; 01636 G4double Det5_01245_12345 = m[A01]*Det4_1245_2345 - m[A02]*Det4_1245_1345 01637 + m[A03]*Det4_1245_1245 - m[A04]*Det4_1245_1235 + m[A05]*Det4_1245_1234; 01638 G4double Det5_01345_01234 = m[A00]*Det4_1345_1234 - m[A01]*Det4_1345_0234 01639 + m[A02]*Det4_1345_0134 - m[A03]*Det4_1345_0124 + m[A04]*Det4_1345_0123; 01640 G4double Det5_01345_01235 = m[A00]*Det4_1345_1235 - m[A01]*Det4_1345_0235 01641 + m[A02]*Det4_1345_0135 - m[A03]*Det4_1345_0125 + m[A05]*Det4_1345_0123; 01642 G4double Det5_01345_01245 = m[A00]*Det4_1345_1245 - m[A01]*Det4_1345_0245 01643 + m[A02]*Det4_1345_0145 - m[A04]*Det4_1345_0125 + m[A05]*Det4_1345_0124; 01644 G4double Det5_01345_01345 = m[A00]*Det4_1345_1345 - m[A01]*Det4_1345_0345 01645 + m[A03]*Det4_1345_0145 - m[A04]*Det4_1345_0135 + m[A05]*Det4_1345_0134; 01646 G4double Det5_01345_02345 = m[A00]*Det4_1345_2345 - m[A02]*Det4_1345_0345 01647 + m[A03]*Det4_1345_0245 - m[A04]*Det4_1345_0235 + m[A05]*Det4_1345_0234; 01648 G4double Det5_01345_12345 = m[A01]*Det4_1345_2345 - m[A02]*Det4_1345_1345 01649 + m[A03]*Det4_1345_1245 - m[A04]*Det4_1345_1235 + m[A05]*Det4_1345_1234; // 01650 G4double Det5_02345_01234 = m[A00]*Det4_2345_1234 - m[A01]*Det4_2345_0234 01651 + m[A02]*Det4_2345_0134 - m[A03]*Det4_2345_0124 + m[A04]*Det4_2345_0123; 01652 G4double Det5_02345_01235 = m[A00]*Det4_2345_1235 - m[A01]*Det4_2345_0235 01653 + m[A02]*Det4_2345_0135 - m[A03]*Det4_2345_0125 + m[A05]*Det4_2345_0123; 01654 G4double Det5_02345_01245 = m[A00]*Det4_2345_1245 - m[A01]*Det4_2345_0245 01655 + m[A02]*Det4_2345_0145 - m[A04]*Det4_2345_0125 + m[A05]*Det4_2345_0124; 01656 G4double Det5_02345_01345 = m[A00]*Det4_2345_1345 - m[A01]*Det4_2345_0345 01657 + m[A03]*Det4_2345_0145 - m[A04]*Det4_2345_0135 + m[A05]*Det4_2345_0134; 01658 G4double Det5_02345_02345 = m[A00]*Det4_2345_2345 - m[A02]*Det4_2345_0345 01659 + m[A03]*Det4_2345_0245 - m[A04]*Det4_2345_0235 + m[A05]*Det4_2345_0234; 01660 G4double Det5_02345_12345 = m[A01]*Det4_2345_2345 - m[A02]*Det4_2345_1345 01661 + m[A03]*Det4_2345_1245 - m[A04]*Det4_2345_1235 + m[A05]*Det4_2345_1234; 01662 G4double Det5_12345_01234 = m[A10]*Det4_2345_1234 - m[A11]*Det4_2345_0234 01663 + m[A12]*Det4_2345_0134 - m[A13]*Det4_2345_0124 + m[A14]*Det4_2345_0123; 01664 G4double Det5_12345_01235 = m[A10]*Det4_2345_1235 - m[A11]*Det4_2345_0235 01665 + m[A12]*Det4_2345_0135 - m[A13]*Det4_2345_0125 + m[A15]*Det4_2345_0123; 01666 G4double Det5_12345_01245 = m[A10]*Det4_2345_1245 - m[A11]*Det4_2345_0245 01667 + m[A12]*Det4_2345_0145 - m[A14]*Det4_2345_0125 + m[A15]*Det4_2345_0124; 01668 G4double Det5_12345_01345 = m[A10]*Det4_2345_1345 - m[A11]*Det4_2345_0345 01669 + m[A13]*Det4_2345_0145 - m[A14]*Det4_2345_0135 + m[A15]*Det4_2345_0134; 01670 G4double Det5_12345_02345 = m[A10]*Det4_2345_2345 - m[A12]*Det4_2345_0345 01671 + m[A13]*Det4_2345_0245 - m[A14]*Det4_2345_0235 + m[A15]*Det4_2345_0234; 01672 G4double Det5_12345_12345 = m[A11]*Det4_2345_2345 - m[A12]*Det4_2345_1345 01673 + m[A13]*Det4_2345_1245 - m[A14]*Det4_2345_1235 + m[A15]*Det4_2345_1234; 01674 01675 // Find the determinant 01676 01677 G4double det = m[A00]*Det5_12345_12345 01678 - m[A01]*Det5_12345_02345 01679 + m[A02]*Det5_12345_01345 01680 - m[A03]*Det5_12345_01245 01681 + m[A04]*Det5_12345_01235 01682 - m[A05]*Det5_12345_01234; 01683 01684 if ( det == 0 ) 01685 { 01686 ifail = 1; 01687 return; 01688 } 01689 01690 G4double oneOverDet = 1.0/det; 01691 G4double mn1OverDet = - oneOverDet; 01692 01693 m[A00] = Det5_12345_12345*oneOverDet; 01694 m[A01] = Det5_02345_12345*mn1OverDet; 01695 m[A02] = Det5_01345_12345*oneOverDet; 01696 m[A03] = Det5_01245_12345*mn1OverDet; 01697 m[A04] = Det5_01235_12345*oneOverDet; 01698 m[A05] = Det5_01234_12345*mn1OverDet; 01699 01700 m[A10] = Det5_12345_02345*mn1OverDet; 01701 m[A11] = Det5_02345_02345*oneOverDet; 01702 m[A12] = Det5_01345_02345*mn1OverDet; 01703 m[A13] = Det5_01245_02345*oneOverDet; 01704 m[A14] = Det5_01235_02345*mn1OverDet; 01705 m[A15] = Det5_01234_02345*oneOverDet; 01706 01707 m[A20] = Det5_12345_01345*oneOverDet; 01708 m[A21] = Det5_02345_01345*mn1OverDet; 01709 m[A22] = Det5_01345_01345*oneOverDet; 01710 m[A23] = Det5_01245_01345*mn1OverDet; 01711 m[A24] = Det5_01235_01345*oneOverDet; 01712 m[A25] = Det5_01234_01345*mn1OverDet; 01713 01714 m[A30] = Det5_12345_01245*mn1OverDet; 01715 m[A31] = Det5_02345_01245*oneOverDet; 01716 m[A32] = Det5_01345_01245*mn1OverDet; 01717 m[A33] = Det5_01245_01245*oneOverDet; 01718 m[A34] = Det5_01235_01245*mn1OverDet; 01719 m[A35] = Det5_01234_01245*oneOverDet; 01720 01721 m[A40] = Det5_12345_01235*oneOverDet; 01722 m[A41] = Det5_02345_01235*mn1OverDet; 01723 m[A42] = Det5_01345_01235*oneOverDet; 01724 m[A43] = Det5_01245_01235*mn1OverDet; 01725 m[A44] = Det5_01235_01235*oneOverDet; 01726 m[A45] = Det5_01234_01235*mn1OverDet; 01727 01728 m[A50] = Det5_12345_01234*mn1OverDet; 01729 m[A51] = Det5_02345_01234*oneOverDet; 01730 m[A52] = Det5_01345_01234*mn1OverDet; 01731 m[A53] = Det5_01245_01234*oneOverDet; 01732 m[A54] = Det5_01235_01234*mn1OverDet; 01733 m[A55] = Det5_01234_01234*oneOverDet; 01734 01735 return; 01736 }
G4int G4ErrorMatrix::num_col | ( | ) | const [inline, virtual] |
Definition at line 42 of file G4ErrorMatrix.icc.
Referenced by apply(), dsum(), operator *(), operator+(), operator+=(), operator-(), operator-=(), operator<<(), G4ErrorSymMatrix::similarity(), G4ErrorSymMatrix::similarityT(), and sub().
G4int G4ErrorMatrix::num_row | ( | ) | const [inline, virtual] |
Definition at line 37 of file G4ErrorMatrix.icc.
Referenced by apply(), dsum(), operator *(), operator+(), operator+=(), operator-(), operator-=(), operator<<(), operator=(), G4ErrorSymMatrix::similarity(), and sub().
G4int G4ErrorMatrix::num_size | ( | ) | const [inline, protected, virtual] |
G4ErrorMatrix & G4ErrorMatrix::operator *= | ( | G4double | t | ) |
Definition at line 326 of file G4ErrorMatrix.cc.
References SIMPLE_UOP.
00327 { 00328 SIMPLE_UOP(*=) 00329 return (*this); 00330 }
G4ErrorMatrix & G4ErrorMatrix::operator+= | ( | const G4ErrorSymMatrix & | m2 | ) |
Definition at line 402 of file G4ErrorSymMatrix.cc.
References CHK_DIM_2, G4ErrorSymMatrix::m, CLHEP::detail::n, G4ErrorSymMatrix::num_col(), num_col(), G4ErrorSymMatrix::num_row(), and num_row().
00403 { 00404 CHK_DIM_2(num_row(),mat2.num_row(),num_col(),mat2.num_col(),+=); 00405 G4int n = num_col(); 00406 G4ErrorMatrixConstIter sjk = mat2.m.begin(); 00407 G4ErrorMatrixIter m1j = m.begin(); 00408 G4ErrorMatrixIter mj = m.begin(); 00409 // j >= k 00410 for(G4int j=1;j<=num_row();j++) 00411 { 00412 G4ErrorMatrixIter mjk = mj; 00413 G4ErrorMatrixIter mkj = m1j; 00414 for(G4int k=1;k<=j;k++) 00415 { 00416 *(mjk++) += *sjk; 00417 if(j!=k) *mkj += *sjk; 00418 sjk++; 00419 mkj += n; 00420 } 00421 mj += n; 00422 m1j++; 00423 } 00424 return (*this); 00425 }
G4ErrorMatrix & G4ErrorMatrix::operator+= | ( | const G4ErrorMatrix & | m2 | ) |
Definition at line 306 of file G4ErrorMatrix.cc.
References CHK_DIM_2, num_col(), num_row(), and SIMPLE_BOP.
00307 { 00308 CHK_DIM_2(num_row(),mat2.num_row(),num_col(),mat2.num_col(),+=); 00309 SIMPLE_BOP(+=) 00310 return (*this); 00311 }
G4ErrorMatrix G4ErrorMatrix::operator- | ( | ) | const |
Definition at line 215 of file G4ErrorMatrix.cc.
References m.
00216 { 00217 G4ErrorMatrix mat2(nrow, ncol); 00218 G4ErrorMatrixConstIter a=m.begin(); 00219 G4ErrorMatrixIter b=mat2.m.begin(); 00220 G4ErrorMatrixConstIter e=m.end(); 00221 for(;a<e; a++, b++) (*b) = -(*a); 00222 return mat2; 00223 }
G4ErrorMatrix & G4ErrorMatrix::operator-= | ( | const G4ErrorSymMatrix & | m2 | ) |
Definition at line 434 of file G4ErrorSymMatrix.cc.
References CHK_DIM_2, G4ErrorSymMatrix::m, CLHEP::detail::n, G4ErrorSymMatrix::num_col(), num_col(), G4ErrorSymMatrix::num_row(), and num_row().
00435 { 00436 CHK_DIM_2(num_row(),mat2.num_row(),num_col(),mat2.num_col(),-=); 00437 G4int n = num_col(); 00438 G4ErrorMatrixConstIter sjk = mat2.m.begin(); 00439 G4ErrorMatrixIter m1j = m.begin(); 00440 G4ErrorMatrixIter mj = m.begin(); 00441 // j >= k 00442 for(G4int j=1;j<=num_row();j++) 00443 { 00444 G4ErrorMatrixIter mjk = mj; 00445 G4ErrorMatrixIter mkj = m1j; 00446 for(G4int k=1;k<=j;k++) 00447 { 00448 *(mjk++) -= *sjk; 00449 if(j!=k) *mkj -= *sjk; 00450 sjk++; 00451 mkj += n; 00452 } 00453 mj += n; 00454 m1j++; 00455 } 00456 return (*this); 00457 }
G4ErrorMatrix & G4ErrorMatrix::operator-= | ( | const G4ErrorMatrix & | m2 | ) |
Definition at line 313 of file G4ErrorMatrix.cc.
References CHK_DIM_2, num_col(), num_row(), and SIMPLE_BOP.
00314 { 00315 CHK_DIM_2(num_row(),mat2.num_row(),num_col(),mat2.num_col(),-=); 00316 SIMPLE_BOP(-=) 00317 return (*this); 00318 }
G4ErrorMatrix & G4ErrorMatrix::operator/= | ( | G4double | t | ) |
Definition at line 320 of file G4ErrorMatrix.cc.
References SIMPLE_UOP.
00321 { 00322 SIMPLE_UOP(/=) 00323 return (*this); 00324 }
G4ErrorMatrix & G4ErrorMatrix::operator= | ( | const G4ErrorSymMatrix & | m2 | ) |
Definition at line 478 of file G4ErrorSymMatrix.cc.
References G4ErrorSymMatrix::m, CLHEP::detail::n, G4ErrorSymMatrix::nrow, and num_row().
00479 { 00480 if(mat1.nrow*mat1.nrow != size) 00481 { 00482 size = mat1.nrow * mat1.nrow; 00483 m.resize(size); 00484 } 00485 nrow = mat1.nrow; 00486 ncol = mat1.nrow; 00487 G4int n = ncol; 00488 G4ErrorMatrixConstIter sjk = mat1.m.begin(); 00489 G4ErrorMatrixIter m1j = m.begin(); 00490 G4ErrorMatrixIter mj = m.begin(); 00491 // j >= k 00492 for(G4int j=1;j<=num_row();j++) 00493 { 00494 G4ErrorMatrixIter mjk = mj; 00495 G4ErrorMatrixIter mkj = m1j; 00496 for(G4int k=1;k<=j;k++) 00497 { 00498 *(mjk++) = *sjk; 00499 if(j!=k) *mkj = *sjk; 00500 sjk++; 00501 mkj += n; 00502 } 00503 mj += n; 00504 m1j++; 00505 } 00506 return (*this); 00507 }
G4ErrorMatrix & G4ErrorMatrix::operator= | ( | const G4ErrorMatrix & | m2 | ) |
Definition at line 332 of file G4ErrorMatrix.cc.
00333 { 00334 if (&mat1 == this) { return *this; } 00335 00336 if(mat1.nrow*mat1.ncol != size) //??fixme?? mat1.size != size 00337 { 00338 size = mat1.nrow * mat1.ncol; 00339 m.resize(size); //??fixme?? if (size < mat1.size) m.resize(mat1.size); 00340 } 00341 nrow = mat1.nrow; 00342 ncol = mat1.ncol; 00343 m = mat1.m; 00344 return (*this); 00345 }
const G4ErrorMatrix::G4ErrorMatrix_row_const G4ErrorMatrix::operator[] | ( | G4int | ) | const [inline] |
Definition at line 69 of file G4ErrorMatrix.icc.
00070 { 00071 G4ErrorMatrix_row_const b(*this,r); 00072 return b; 00073 }
G4ErrorMatrix::G4ErrorMatrix_row G4ErrorMatrix::operator[] | ( | G4int | ) | [inline] |
Definition at line 62 of file G4ErrorMatrix.icc.
00063 { 00064 G4ErrorMatrix_row b(*this,r); 00065 return b; 00066 }
void G4ErrorMatrix::sub | ( | G4int | row, | |
G4int | col, | |||
const G4ErrorMatrix & | m1 | |||
) |
Definition at line 177 of file G4ErrorMatrix.cc.
References error(), m, num_col(), and num_row().
00178 { 00179 if(row <1 || row+mat1.num_row()-1 > num_row() || 00180 col <1 || col+mat1.num_col()-1 > num_col() ) 00181 { error("G4ErrorMatrix::sub: Index out of range"); } 00182 G4ErrorMatrixConstIter a = mat1.m.begin(); 00183 G4int nc = num_col(); 00184 G4ErrorMatrixIter b1 = m.begin() + (row - 1) * nc + col - 1; 00185 00186 for(G4int irow=1; irow<=mat1.num_row(); irow++) 00187 { 00188 G4ErrorMatrixIter brc = b1; 00189 for(G4int icol=1; icol<=mat1.num_col(); icol++) 00190 { 00191 *(brc++) = *(a++); 00192 } 00193 b1 += nc; 00194 } 00195 }
G4ErrorMatrix G4ErrorMatrix::sub | ( | G4int | min_row, | |
G4int | max_row, | |||
G4int | min_col, | |||
G4int | max_col | |||
) | const |
Definition at line 155 of file G4ErrorMatrix.cc.
References error(), m, num_col(), and num_row().
Referenced by dsum().
00157 { 00158 G4ErrorMatrix mret(max_row-min_row+1,max_col-min_col+1); 00159 if(max_row > num_row() || max_col >num_col()) 00160 { error("G4ErrorMatrix::sub: Index out of range"); } 00161 G4ErrorMatrixIter a = mret.m.begin(); 00162 G4int nc = num_col(); 00163 G4ErrorMatrixConstIter b1 = m.begin() + (min_row - 1) * nc + min_col - 1; 00164 00165 for(G4int irow=1; irow<=mret.num_row(); irow++) 00166 { 00167 G4ErrorMatrixConstIter brc = b1; 00168 for(G4int icol=1; icol<=mret.num_col(); icol++) 00169 { 00170 *(a++) = *(brc++); 00171 } 00172 b1 += nc; 00173 } 00174 return mret; 00175 }
G4ErrorMatrix G4ErrorMatrix::T | ( | ) | const |
Definition at line 374 of file G4ErrorMatrix.cc.
References m.
Referenced by G4ErrorFreeTrajState::PropagateError().
00375 { 00376 G4ErrorMatrix mret(ncol,nrow); 00377 G4ErrorMatrixConstIter pl = m.end(); 00378 G4ErrorMatrixConstIter pme = m.begin(); 00379 G4ErrorMatrixIter pt = mret.m.begin(); 00380 G4ErrorMatrixIter ptl = mret.m.end(); 00381 for (; pme < pl; pme++, pt+=nrow) 00382 { 00383 if (pt >= ptl) { pt -= (size-1); } 00384 (*pt) = (*pme); 00385 } 00386 return mret; 00387 }
G4double G4ErrorMatrix::trace | ( | ) | const |
Definition at line 795 of file G4ErrorMatrix.cc.
00796 { 00797 G4double t = 0.0; 00798 for (G4ErrorMatrixConstIter d = m.begin(); d < m.end(); d += (ncol+1) ) 00799 { 00800 t += *d; 00801 } 00802 return t; 00803 }
void back_solve | ( | const G4ErrorMatrix & | R, | |
G4ErrorMatrix * | b | |||
) | [friend] |
void col_givens | ( | G4ErrorMatrix * | A, | |
G4double | c, | |||
G4double | s, | |||
G4int | k1, | |||
G4int | k2, | |||
G4int | rowmin, | |||
G4int | rowmax | |||
) | [friend] |
void col_house | ( | G4ErrorMatrix * | , | |
const G4ErrorMatrix & | , | |||
G4double | , | |||
G4int | , | |||
G4int | , | |||
G4int | , | |||
G4int | ||||
) | [friend] |
friend class G4ErrorMatrix_row [friend] |
Definition at line 174 of file G4ErrorMatrix.hh.
friend class G4ErrorMatrix_row_const [friend] |
Definition at line 175 of file G4ErrorMatrix.hh.
friend class G4ErrorSymMatrix [friend] |
Definition at line 176 of file G4ErrorMatrix.hh.
void house_with_update | ( | G4ErrorMatrix * | a, | |
G4ErrorMatrix * | v, | |||
G4int | row, | |||
G4int | col | |||
) | [friend] |
void house_with_update | ( | G4ErrorMatrix * | a, | |
G4int | row, | |||
G4int | col | |||
) | [friend] |
void house_with_update2 | ( | G4ErrorSymMatrix * | a, | |
G4ErrorMatrix * | v, | |||
G4int | row, | |||
G4int | col | |||
) | [friend] |
G4ErrorMatrix operator * | ( | const G4ErrorSymMatrix & | m1, | |
const G4ErrorSymMatrix & | m2 | |||
) | [friend] |
Definition at line 354 of file G4ErrorSymMatrix.cc.
00355 { 00356 G4ErrorMatrix mret(mat1.num_row(),mat1.num_row()); 00357 CHK_DIM_1(mat1.num_col(),mat2.num_row(),*); 00358 G4int step1,stept1,step2,stept2; 00359 G4ErrorMatrixConstIter snp1,sp1,snp2,sp2; 00360 G4double temp; 00361 G4ErrorMatrixIter mr = mret.m.begin(); 00362 for(step1=1,snp1=mat1.m.begin();step1<=mat1.num_row();snp1+=step1++) 00363 { 00364 for(step2=1,snp2=mat2.m.begin();step2<=mat2.num_row();) 00365 { 00366 sp1=snp1; 00367 sp2=snp2; 00368 snp2+=step2; 00369 temp=0; 00370 if(step1<step2) 00371 { 00372 while(sp1<snp1+step1) 00373 { temp+=(*(sp1++))*(*(sp2++)); } 00374 sp1+=step1-1; 00375 for(stept1=step1+1;stept1!=step2+1;sp1+=stept1++) 00376 { temp+=(*sp1)*(*(sp2++)); } 00377 sp2+=step2-1; 00378 for(stept2=++step2;stept2<=mat2.num_row();sp1+=stept1++,sp2+=stept2++) 00379 { temp+=(*sp1)*(*sp2); } 00380 } 00381 else 00382 { 00383 while(sp2<snp2) 00384 { temp+=(*(sp1++))*(*(sp2++)); } 00385 sp2+=step2-1; 00386 for(stept2=++step2;stept2!=step1+1;sp2+=stept2++) 00387 { temp+=(*(sp1++))*(*sp2); } 00388 sp1+=step1-1; 00389 for(stept1=step1+1;stept1<=mat1.num_row();sp1+=stept1++,sp2+=stept2++) 00390 { temp+=(*sp1)*(*sp2); } 00391 } 00392 *(mr++)=temp; 00393 } 00394 } 00395 return mret; 00396 }
G4ErrorMatrix operator * | ( | const G4ErrorSymMatrix & | m1, | |
const G4ErrorMatrix & | m2 | |||
) | [friend] |
Definition at line 321 of file G4ErrorSymMatrix.cc.
00322 { 00323 G4ErrorMatrix mret(mat1.num_row(),mat2.num_col()); 00324 CHK_DIM_1(mat1.num_col(),mat2.num_row(),*); 00325 G4int step,stept; 00326 G4ErrorMatrixConstIter mit1,mit2,sp,snp; 00327 G4double temp; 00328 G4ErrorMatrixIter mir=mret.m.begin(); 00329 for(step=1,snp=mat1.m.begin();step<=mat1.num_row();snp+=step++) 00330 { 00331 for(mit1=mat2.m.begin();mit1<mat2.m.begin()+mat2.num_col();mit1++) 00332 { 00333 mit2=mit1; 00334 sp=snp; 00335 temp=0; 00336 while(sp<snp+step) 00337 { 00338 temp+=*mit2*(*(sp++)); 00339 mit2+=mat2.num_col(); 00340 } 00341 sp+=step-1; 00342 for(stept=step+1;stept<=mat1.num_row();stept++) 00343 { 00344 temp+=*mit2*(*sp); 00345 mit2+=mat2.num_col(); 00346 sp+=stept; 00347 } 00348 *(mir++)=temp; 00349 } 00350 } 00351 return mret; 00352 }
G4ErrorMatrix operator * | ( | const G4ErrorMatrix & | m1, | |
const G4ErrorSymMatrix & | m2 | |||
) | [friend] |
Definition at line 287 of file G4ErrorSymMatrix.cc.
00288 { 00289 G4ErrorMatrix mret(mat1.num_row(),mat2.num_col()); 00290 CHK_DIM_1(mat1.num_col(),mat2.num_row(),*); 00291 G4ErrorMatrixConstIter mit1, mit2, sp,snp; //mit2=0 00292 G4double temp; 00293 G4ErrorMatrixIter mir=mret.m.begin(); 00294 for(mit1=mat1.m.begin(); 00295 mit1<mat1.m.begin()+mat1.num_row()*mat1.num_col(); 00296 mit1 = mit2) 00297 { 00298 snp=mat2.m.begin(); 00299 for(int step=1;step<=mat2.num_row();++step) 00300 { 00301 mit2=mit1; 00302 sp=snp; 00303 snp+=step; 00304 temp=0; 00305 while(sp<snp) 00306 temp+=*(sp++)*(*(mit2++)); 00307 if( step<mat2.num_row() ) { // only if we aren't on the last row 00308 sp+=step-1; 00309 for(int stept=step+1;stept<=mat2.num_row();stept++) 00310 { 00311 temp+=*sp*(*(mit2++)); 00312 if(stept<mat2.num_row()) sp+=stept; 00313 } 00314 } // if(step 00315 *(mir++)=temp; 00316 } // for(step 00317 } // for(mit1 00318 return mret; 00319 }
G4ErrorMatrix operator * | ( | const G4ErrorMatrix & | m1, | |
const G4ErrorMatrix & | m2 | |||
) | [friend] |
Definition at line 272 of file G4ErrorMatrix.cc.
00273 { 00274 // initialize matrix to 0.0 00275 G4ErrorMatrix mret(mat1.nrow,mat2.ncol,0); 00276 CHK_DIM_1(mat1.ncol,mat2.nrow,*); 00277 00278 G4int m1cols = mat1.ncol; 00279 G4int m2cols = mat2.ncol; 00280 00281 for (G4int i=0; i<mat1.nrow; i++) 00282 { 00283 for (G4int j=0; j<m1cols; j++) 00284 { 00285 G4double temp = mat1.m[i*m1cols+j]; 00286 G4ErrorMatrixIter pt = mret.m.begin() + i*m2cols; 00287 00288 // Loop over k (the column index in matrix mat2) 00289 G4ErrorMatrixConstIter pb = mat2.m.begin() + m2cols*j; 00290 const G4ErrorMatrixConstIter pblast = pb + m2cols; 00291 while (pb < pblast) 00292 { 00293 (*pt) += temp * (*pb); 00294 pb++; 00295 pt++; 00296 } 00297 } 00298 } 00299 return mret; 00300 }
G4ErrorMatrix operator+ | ( | const G4ErrorMatrix & | m1, | |
const G4ErrorMatrix & | m2 | |||
) | [friend] |
Definition at line 225 of file G4ErrorMatrix.cc.
00226 { 00227 G4ErrorMatrix mret(mat1.nrow, mat1.ncol); 00228 CHK_DIM_2(mat1.num_row(),mat2.num_row(), mat1.num_col(),mat2.num_col(),+); 00229 SIMPLE_TOP(+) 00230 return mret; 00231 }
G4ErrorMatrix operator- | ( | const G4ErrorMatrix & | m1, | |
const G4ErrorMatrix & | m2 | |||
) | [friend] |
Definition at line 237 of file G4ErrorMatrix.cc.
00238 { 00239 G4ErrorMatrix mret(mat1.num_row(), mat1.num_col()); 00240 CHK_DIM_2(mat1.num_row(),mat2.num_row(), 00241 mat1.num_col(),mat2.num_col(),-); 00242 SIMPLE_TOP(-) 00243 return mret; 00244 }
G4ErrorMatrix qr_solve | ( | G4ErrorMatrix * | , | |
const G4ErrorMatrix & | b | |||
) | [friend] |
void row_givens | ( | G4ErrorMatrix * | A, | |
G4double | c, | |||
G4double | s, | |||
G4int | k1, | |||
G4int | k2, | |||
G4int | colmin, | |||
G4int | colmax | |||
) | [friend] |
void row_house | ( | G4ErrorMatrix * | , | |
const G4ErrorMatrix & | , | |||
G4double | , | |||
G4int | , | |||
G4int | , | |||
G4int | , | |||
G4int | ||||
) | [friend] |
void tridiagonal | ( | G4ErrorSymMatrix * | a, | |
G4ErrorMatrix * | hsm | |||
) | [friend] |