Geant4 10.7.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4ErrorMatrix Class Reference

#include <G4ErrorMatrix.hh>

Classes

class  G4ErrorMatrix_row
 
class  G4ErrorMatrix_row_const
 

Public Member Functions

 G4ErrorMatrix ()
 
 G4ErrorMatrix (G4int p, G4int q)
 
 G4ErrorMatrix (G4int p, G4int q, G4int i)
 
 G4ErrorMatrix (const G4ErrorMatrix &m1)
 
 G4ErrorMatrix (G4ErrorMatrix &&)=default
 
 G4ErrorMatrix (const G4ErrorSymMatrix &m1)
 
virtual ~G4ErrorMatrix ()
 
virtual G4int num_row () const
 
virtual G4int num_col () const
 
virtual const G4doubleoperator() (G4int row, G4int col) const
 
virtual G4doubleoperator() (G4int row, G4int col)
 
G4ErrorMatrixoperator*= (G4double t)
 
G4ErrorMatrixoperator/= (G4double t)
 
G4ErrorMatrixoperator+= (const G4ErrorMatrix &m2)
 
G4ErrorMatrixoperator+= (const G4ErrorSymMatrix &m2)
 
G4ErrorMatrixoperator-= (const G4ErrorMatrix &m2)
 
G4ErrorMatrixoperator-= (const G4ErrorSymMatrix &m2)
 
G4ErrorMatrixoperator= (const G4ErrorMatrix &m2)
 
G4ErrorMatrixoperator= (const G4ErrorSymMatrix &m2)
 
G4ErrorMatrixoperator= (G4ErrorMatrix &&)=default
 
G4ErrorMatrix operator- () const
 
G4ErrorMatrix apply (G4double(*f)(G4double, G4int, G4int)) const
 
G4ErrorMatrix T () const
 
G4ErrorMatrix sub (G4int min_row, G4int max_row, G4int min_col, G4int max_col) const
 
void sub (G4int row, G4int col, const G4ErrorMatrix &m1)
 
G4ErrorMatrix inverse (G4int &ierr) const
 
virtual void invert (G4int &ierr)
 
G4double determinant () const
 
G4double trace () const
 
G4ErrorMatrix_row operator[] (G4int)
 
const G4ErrorMatrix_row_const operator[] (G4int) const
 

Static Public Member Functions

static void error (const char *s)
 

Protected Member Functions

virtual G4int num_size () const
 
virtual void invertHaywood4 (G4int &ierr)
 
virtual void invertHaywood5 (G4int &ierr)
 
virtual void invertHaywood6 (G4int &ierr)
 

Friends

class G4ErrorMatrix_row
 
class G4ErrorMatrix_row_const
 
class G4ErrorSymMatrix
 
G4ErrorMatrix operator+ (const G4ErrorMatrix &m1, const G4ErrorMatrix &m2)
 
G4ErrorMatrix operator- (const G4ErrorMatrix &m1, const G4ErrorMatrix &m2)
 
G4ErrorMatrix operator* (const G4ErrorMatrix &m1, const G4ErrorMatrix &m2)
 
G4ErrorMatrix operator* (const G4ErrorMatrix &m1, const G4ErrorSymMatrix &m2)
 
G4ErrorMatrix operator* (const G4ErrorSymMatrix &m1, const G4ErrorMatrix &m2)
 
G4ErrorMatrix operator* (const G4ErrorSymMatrix &m1, const G4ErrorSymMatrix &m2)
 
G4ErrorMatrix qr_solve (G4ErrorMatrix *, const G4ErrorMatrix &b)
 
void tridiagonal (G4ErrorSymMatrix *a, G4ErrorMatrix *hsm)
 
void row_house (G4ErrorMatrix *, const G4ErrorMatrix &, G4double, G4int, G4int, G4int, G4int)
 
void back_solve (const G4ErrorMatrix &R, G4ErrorMatrix *b)
 
void col_givens (G4ErrorMatrix *A, G4double c, G4double s, G4int k1, G4int k2, G4int rowmin, G4int rowmax)
 
void row_givens (G4ErrorMatrix *A, G4double c, G4double s, G4int k1, G4int k2, G4int colmin, G4int colmax)
 
void col_house (G4ErrorMatrix *, const G4ErrorMatrix &, G4double, G4int, G4int, G4int, G4int)
 
void house_with_update (G4ErrorMatrix *a, G4int row, G4int col)
 
void house_with_update (G4ErrorMatrix *a, G4ErrorMatrix *v, G4int row, G4int col)
 
void house_with_update2 (G4ErrorSymMatrix *a, G4ErrorMatrix *v, G4int row, G4int col)
 

Detailed Description

Definition at line 46 of file G4ErrorMatrix.hh.

Constructor & Destructor Documentation

◆ G4ErrorMatrix() [1/6]

G4ErrorMatrix::G4ErrorMatrix ( )

◆ G4ErrorMatrix() [2/6]

G4ErrorMatrix::G4ErrorMatrix ( G4int  p,
G4int  q 
)

Definition at line 73 of file G4ErrorMatrix.cc.

74 : m(p*q), nrow(p), ncol(q)
75{
76 size = nrow * ncol;
77}

◆ G4ErrorMatrix() [3/6]

G4ErrorMatrix::G4ErrorMatrix ( G4int  p,
G4int  q,
G4int  i 
)

Definition at line 79 of file G4ErrorMatrix.cc.

80 : m(p*q), nrow(p), ncol(q)
81{
82 size = nrow * ncol;
83
84 if (size > 0)
85 {
86 switch(init)
87 {
88 case 0:
89 break;
90
91 case 1:
92 {
93 if ( ncol == nrow )
94 {
95 G4ErrorMatrixIter a = m.begin();
96 G4ErrorMatrixIter b = m.end();
97 for( ; a<b; a+=(ncol+1)) *a = 1.0;
98 } else {
99 error("Invalid dimension in G4ErrorMatrix(G4int,G4int,1).");
100 }
101 break;
102 }
103 default:
104 error("G4ErrorMatrix: initialization must be either 0 or 1.");
105 }
106 }
107}
std::vector< G4double >::iterator G4ErrorMatrixIter
static void error(const char *s)

◆ G4ErrorMatrix() [4/6]

G4ErrorMatrix::G4ErrorMatrix ( const G4ErrorMatrix m1)

Definition at line 116 of file G4ErrorMatrix.cc.

117 : m(mat1.size), nrow(mat1.nrow), ncol(mat1.ncol), size(mat1.size)
118{
119 m = mat1.m;
120}

◆ G4ErrorMatrix() [5/6]

G4ErrorMatrix::G4ErrorMatrix ( G4ErrorMatrix &&  )
default

◆ G4ErrorMatrix() [6/6]

G4ErrorMatrix::G4ErrorMatrix ( const G4ErrorSymMatrix m1)

Definition at line 122 of file G4ErrorMatrix.cc.

123 : m(mat1.nrow*mat1.nrow), nrow(mat1.nrow), ncol(mat1.nrow)
124{
125 size = nrow * ncol;
126
127 G4int n = ncol;
128 G4ErrorMatrixConstIter sjk = mat1.m.begin();
129 G4ErrorMatrixIter m1j = m.begin();
130 G4ErrorMatrixIter mj = m.begin();
131 // j >= k
132 for(G4int j=1;j<=nrow;j++)
133 {
134 G4ErrorMatrixIter mjk = mj;
135 G4ErrorMatrixIter mkj = m1j;
136 for(G4int k=1;k<=j;k++)
137 {
138 *(mjk++) = *sjk;
139 if(j!=k) *mkj = *sjk;
140 sjk++;
141 mkj += n;
142 }
143 mj += n;
144 m1j++;
145 }
146}
std::vector< G4double >::const_iterator G4ErrorMatrixConstIter
int G4int
Definition: G4Types.hh:85

◆ ~G4ErrorMatrix()

G4ErrorMatrix::~G4ErrorMatrix ( )
virtual

Definition at line 112 of file G4ErrorMatrix.cc.

113{
114}

Member Function Documentation

◆ apply()

G4ErrorMatrix G4ErrorMatrix::apply ( G4double(*)(G4double, G4int, G4int f) const

Definition at line 389 of file G4ErrorMatrix.cc.

390{
391 G4ErrorMatrix mret(num_row(),num_col());
392 G4ErrorMatrixConstIter a = m.begin();
393 G4ErrorMatrixIter b = mret.m.begin();
394 for(G4int ir=1;ir<=num_row();ir++)
395 {
396 for(G4int ic=1;ic<=num_col();ic++)
397 {
398 *(b++) = (*f)(*(a++), ir, ic);
399 }
400 }
401 return mret;
402}
virtual G4int num_col() const
virtual G4int num_row() const

◆ determinant()

G4double G4ErrorMatrix::determinant ( ) const

Definition at line 775 of file G4ErrorMatrix.cc.

776{
777 static G4ThreadLocal G4int max_array = 20;
778 static G4ThreadLocal G4int *ir = 0 ; if (!ir) ir= new G4int [max_array+1];
779 if(ncol != nrow)
780 { error("G4ErrorMatrix::determinant: G4ErrorMatrix is not NxN"); }
781 if (ncol > max_array)
782 {
783 delete [] ir;
784 max_array = nrow;
785 ir = new G4int [max_array+1];
786 }
787 G4double det;
788 G4ErrorMatrix mt(*this);
789 G4int i = mt.dfact_matrix(det, ir);
790 if(i==0) return det;
791 return 0;
792}
double G4double
Definition: G4Types.hh:83
#define G4ThreadLocal
Definition: tls.hh:77

◆ error()

void G4ErrorMatrix::error ( const char *  s)
static

Definition at line 804 of file G4ErrorMatrix.cc.

805{
806 std::ostringstream message;
807 message << msg;
808 G4Exception("G4ErrorMatrix::error()", "GEANT4e-Error",
809 FatalException, message, "Exiting to System.");
810}
@ FatalException
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
Definition: G4Exception.cc:35

Referenced by determinant(), G4ErrorMatrix(), G4ErrorSymMatrix::G4ErrorSymMatrix(), invert(), num_size(), G4ErrorSymMatrix::sub(), and sub().

◆ inverse()

G4ErrorMatrix G4ErrorMatrix::inverse ( G4int ierr) const
inline

◆ invert()

void G4ErrorMatrix::invert ( G4int ierr)
virtual

Definition at line 644 of file G4ErrorMatrix.cc.

645{
646 if(ncol != nrow)
647 { error("G4ErrorMatrix::invert: G4ErrorMatrix is not NxN"); }
648
649 static G4ThreadLocal G4int max_array = 20;
650 static G4ThreadLocal G4int *ir = 0 ; if (!ir) ir= new G4int [max_array+1];
651
652 if (ncol > max_array)
653 {
654 delete [] ir;
655 max_array = nrow;
656 ir = new G4int [max_array+1];
657 }
658 G4double t1, t2, t3;
659 G4double det, temp, ss;
660 G4int ifail;
661 switch(nrow)
662 {
663 case 3:
664 G4double c11,c12,c13,c21,c22,c23,c31,c32,c33;
665 ifail = 0;
666 c11 = (*(m.begin()+4)) * (*(m.begin()+8))
667 - (*(m.begin()+5)) * (*(m.begin()+7));
668 c12 = (*(m.begin()+5)) * (*(m.begin()+6))
669 - (*(m.begin()+3)) * (*(m.begin()+8));
670 c13 = (*(m.begin()+3)) * (*(m.begin()+7))
671 - (*(m.begin()+4)) * (*(m.begin()+6));
672 c21 = (*(m.begin()+7)) * (*(m.begin()+2))
673 - (*(m.begin()+8)) * (*(m.begin()+1));
674 c22 = (*(m.begin()+8)) * (*m.begin())
675 - (*(m.begin()+6)) * (*(m.begin()+2));
676 c23 = (*(m.begin()+6)) * (*(m.begin()+1))
677 - (*(m.begin()+7)) * (*m.begin());
678 c31 = (*(m.begin()+1)) * (*(m.begin()+5))
679 - (*(m.begin()+2)) * (*(m.begin()+4));
680 c32 = (*(m.begin()+2)) * (*(m.begin()+3))
681 - (*m.begin()) * (*(m.begin()+5));
682 c33 = (*m.begin()) * (*(m.begin()+4))
683 - (*(m.begin()+1)) * (*(m.begin()+3));
684 t1 = std::fabs(*m.begin());
685 t2 = std::fabs(*(m.begin()+3));
686 t3 = std::fabs(*(m.begin()+6));
687 if (t1 >= t2)
688 {
689 if (t3 >= t1)
690 {
691 temp = *(m.begin()+6);
692 det = c23*c12-c22*c13;
693 }
694 else
695 {
696 temp = *(m.begin());
697 det = c22*c33-c23*c32;
698 }
699 }
700 else if (t3 >= t2)
701 {
702 temp = *(m.begin()+6);
703 det = c23*c12-c22*c13;
704 }
705 else
706 {
707 temp = *(m.begin()+3);
708 det = c13*c32-c12*c33;
709 }
710 if (det==0)
711 {
712 ierr = 1;
713 return;
714 }
715 {
716 ss = temp/det;
717 G4ErrorMatrixIter mq = m.begin();
718 *(mq++) = ss*c11;
719 *(mq++) = ss*c21;
720 *(mq++) = ss*c31;
721 *(mq++) = ss*c12;
722 *(mq++) = ss*c22;
723 *(mq++) = ss*c32;
724 *(mq++) = ss*c13;
725 *(mq++) = ss*c23;
726 *(mq) = ss*c33;
727 }
728 break;
729 case 2:
730 ifail = 0;
731 det = (*m.begin())*(*(m.begin()+3)) - (*(m.begin()+1))*(*(m.begin()+2));
732 if (det==0)
733 {
734 ierr = 1;
735 return;
736 }
737 ss = 1.0/det;
738 temp = ss*(*(m.begin()+3));
739 *(m.begin()+1) *= -ss;
740 *(m.begin()+2) *= -ss;
741 *(m.begin()+3) = ss*(*m.begin());
742 *(m.begin()) = temp;
743 break;
744 case 1:
745 ifail = 0;
746 if ((*(m.begin()))==0)
747 {
748 ierr = 1;
749 return;
750 }
751 *(m.begin()) = 1.0/(*(m.begin()));
752 break;
753 case 4:
754 invertHaywood4(ierr);
755 return;
756 case 5:
757 invertHaywood5(ierr);
758 return;
759 case 6:
760 invertHaywood6(ierr);
761 return;
762 default:
763 ifail = dfact_matrix(det, ir);
764 if(ifail) {
765 ierr = 1;
766 return;
767 }
768 dfinv_matrix(ir);
769 break;
770 }
771 ierr = 0;
772 return;
773}
virtual void invertHaywood4(G4int &ierr)
virtual void invertHaywood5(G4int &ierr)
virtual void invertHaywood6(G4int &ierr)

◆ invertHaywood4()

void G4ErrorMatrix::invertHaywood4 ( G4int ierr)
protectedvirtual

Definition at line 910 of file G4ErrorMatrix.cc.

911{
912 ifail = 0;
913
914 // Find all NECESSARY 2x2 dets: (18 of them)
915
916 G4double Det2_12_01 = m[F10]*m[F21] - m[F11]*m[F20];
917 G4double Det2_12_02 = m[F10]*m[F22] - m[F12]*m[F20];
918 G4double Det2_12_03 = m[F10]*m[F23] - m[F13]*m[F20];
919 G4double Det2_12_13 = m[F11]*m[F23] - m[F13]*m[F21];
920 G4double Det2_12_23 = m[F12]*m[F23] - m[F13]*m[F22];
921 G4double Det2_12_12 = m[F11]*m[F22] - m[F12]*m[F21];
922 G4double Det2_13_01 = m[F10]*m[F31] - m[F11]*m[F30];
923 G4double Det2_13_02 = m[F10]*m[F32] - m[F12]*m[F30];
924 G4double Det2_13_03 = m[F10]*m[F33] - m[F13]*m[F30];
925 G4double Det2_13_12 = m[F11]*m[F32] - m[F12]*m[F31];
926 G4double Det2_13_13 = m[F11]*m[F33] - m[F13]*m[F31];
927 G4double Det2_13_23 = m[F12]*m[F33] - m[F13]*m[F32];
928 G4double Det2_23_01 = m[F20]*m[F31] - m[F21]*m[F30];
929 G4double Det2_23_02 = m[F20]*m[F32] - m[F22]*m[F30];
930 G4double Det2_23_03 = m[F20]*m[F33] - m[F23]*m[F30];
931 G4double Det2_23_12 = m[F21]*m[F32] - m[F22]*m[F31];
932 G4double Det2_23_13 = m[F21]*m[F33] - m[F23]*m[F31];
933 G4double Det2_23_23 = m[F22]*m[F33] - m[F23]*m[F32];
934
935 // Find all NECESSARY 3x3 dets: (16 of them)
936
937 G4double Det3_012_012 = m[F00]*Det2_12_12 - m[F01]*Det2_12_02
938 + m[F02]*Det2_12_01;
939 G4double Det3_012_013 = m[F00]*Det2_12_13 - m[F01]*Det2_12_03
940 + m[F03]*Det2_12_01;
941 G4double Det3_012_023 = m[F00]*Det2_12_23 - m[F02]*Det2_12_03
942 + m[F03]*Det2_12_02;
943 G4double Det3_012_123 = m[F01]*Det2_12_23 - m[F02]*Det2_12_13
944 + m[F03]*Det2_12_12;
945 G4double Det3_013_012 = m[F00]*Det2_13_12 - m[F01]*Det2_13_02
946 + m[F02]*Det2_13_01;
947 G4double Det3_013_013 = m[F00]*Det2_13_13 - m[F01]*Det2_13_03
948 + m[F03]*Det2_13_01;
949 G4double Det3_013_023 = m[F00]*Det2_13_23 - m[F02]*Det2_13_03
950 + m[F03]*Det2_13_02;
951 G4double Det3_013_123 = m[F01]*Det2_13_23 - m[F02]*Det2_13_13
952 + m[F03]*Det2_13_12;
953 G4double Det3_023_012 = m[F00]*Det2_23_12 - m[F01]*Det2_23_02
954 + m[F02]*Det2_23_01;
955 G4double Det3_023_013 = m[F00]*Det2_23_13 - m[F01]*Det2_23_03
956 + m[F03]*Det2_23_01;
957 G4double Det3_023_023 = m[F00]*Det2_23_23 - m[F02]*Det2_23_03
958 + m[F03]*Det2_23_02;
959 G4double Det3_023_123 = m[F01]*Det2_23_23 - m[F02]*Det2_23_13
960 + m[F03]*Det2_23_12;
961 G4double Det3_123_012 = m[F10]*Det2_23_12 - m[F11]*Det2_23_02
962 + m[F12]*Det2_23_01;
963 G4double Det3_123_013 = m[F10]*Det2_23_13 - m[F11]*Det2_23_03
964 + m[F13]*Det2_23_01;
965 G4double Det3_123_023 = m[F10]*Det2_23_23 - m[F12]*Det2_23_03
966 + m[F13]*Det2_23_02;
967 G4double Det3_123_123 = m[F11]*Det2_23_23 - m[F12]*Det2_23_13
968 + m[F13]*Det2_23_12;
969
970 // Find the 4x4 det:
971
972 G4double det = m[F00]*Det3_123_123
973 - m[F01]*Det3_123_023
974 + m[F02]*Det3_123_013
975 - m[F03]*Det3_123_012;
976
977 if ( det == 0 )
978 {
979 ifail = 1;
980 return;
981 }
982
983 G4double oneOverDet = 1.0/det;
984 G4double mn1OverDet = - oneOverDet;
985
986 m[F00] = Det3_123_123 * oneOverDet;
987 m[F01] = Det3_023_123 * mn1OverDet;
988 m[F02] = Det3_013_123 * oneOverDet;
989 m[F03] = Det3_012_123 * mn1OverDet;
990
991 m[F10] = Det3_123_023 * mn1OverDet;
992 m[F11] = Det3_023_023 * oneOverDet;
993 m[F12] = Det3_013_023 * mn1OverDet;
994 m[F13] = Det3_012_023 * oneOverDet;
995
996 m[F20] = Det3_123_013 * oneOverDet;
997 m[F21] = Det3_023_013 * mn1OverDet;
998 m[F22] = Det3_013_013 * oneOverDet;
999 m[F23] = Det3_012_013 * mn1OverDet;
1000
1001 m[F30] = Det3_123_012 * mn1OverDet;
1002 m[F31] = Det3_023_012 * oneOverDet;
1003 m[F32] = Det3_013_012 * mn1OverDet;
1004 m[F33] = Det3_012_012 * oneOverDet;
1005
1006 return;
1007}
#define F01
#define F22
#define F00
#define F02
#define F31
#define F32
#define F21
#define F03
#define F30
#define F11
#define F10
#define F33
#define F20
#define F12
#define F23
#define F13

Referenced by invert().

◆ invertHaywood5()

void G4ErrorMatrix::invertHaywood5 ( G4int ierr)
protectedvirtual

Definition at line 1009 of file G4ErrorMatrix.cc.

1010{
1011 ifail = 0;
1012
1013 // Find all NECESSARY 2x2 dets: (30 of them)
1014
1015 G4double Det2_23_01 = m[M20]*m[M31] - m[M21]*m[M30];
1016 G4double Det2_23_02 = m[M20]*m[M32] - m[M22]*m[M30];
1017 G4double Det2_23_03 = m[M20]*m[M33] - m[M23]*m[M30];
1018 G4double Det2_23_04 = m[M20]*m[M34] - m[M24]*m[M30];
1019 G4double Det2_23_12 = m[M21]*m[M32] - m[M22]*m[M31];
1020 G4double Det2_23_13 = m[M21]*m[M33] - m[M23]*m[M31];
1021 G4double Det2_23_14 = m[M21]*m[M34] - m[M24]*m[M31];
1022 G4double Det2_23_23 = m[M22]*m[M33] - m[M23]*m[M32];
1023 G4double Det2_23_24 = m[M22]*m[M34] - m[M24]*m[M32];
1024 G4double Det2_23_34 = m[M23]*m[M34] - m[M24]*m[M33];
1025 G4double Det2_24_01 = m[M20]*m[M41] - m[M21]*m[M40];
1026 G4double Det2_24_02 = m[M20]*m[M42] - m[M22]*m[M40];
1027 G4double Det2_24_03 = m[M20]*m[M43] - m[M23]*m[M40];
1028 G4double Det2_24_04 = m[M20]*m[M44] - m[M24]*m[M40];
1029 G4double Det2_24_12 = m[M21]*m[M42] - m[M22]*m[M41];
1030 G4double Det2_24_13 = m[M21]*m[M43] - m[M23]*m[M41];
1031 G4double Det2_24_14 = m[M21]*m[M44] - m[M24]*m[M41];
1032 G4double Det2_24_23 = m[M22]*m[M43] - m[M23]*m[M42];
1033 G4double Det2_24_24 = m[M22]*m[M44] - m[M24]*m[M42];
1034 G4double Det2_24_34 = m[M23]*m[M44] - m[M24]*m[M43];
1035 G4double Det2_34_01 = m[M30]*m[M41] - m[M31]*m[M40];
1036 G4double Det2_34_02 = m[M30]*m[M42] - m[M32]*m[M40];
1037 G4double Det2_34_03 = m[M30]*m[M43] - m[M33]*m[M40];
1038 G4double Det2_34_04 = m[M30]*m[M44] - m[M34]*m[M40];
1039 G4double Det2_34_12 = m[M31]*m[M42] - m[M32]*m[M41];
1040 G4double Det2_34_13 = m[M31]*m[M43] - m[M33]*m[M41];
1041 G4double Det2_34_14 = m[M31]*m[M44] - m[M34]*m[M41];
1042 G4double Det2_34_23 = m[M32]*m[M43] - m[M33]*m[M42];
1043 G4double Det2_34_24 = m[M32]*m[M44] - m[M34]*m[M42];
1044 G4double Det2_34_34 = m[M33]*m[M44] - m[M34]*m[M43];
1045
1046 // Find all NECESSARY 3x3 dets: (40 of them)
1047
1048 G4double Det3_123_012 = m[M10]*Det2_23_12 - m[M11]*Det2_23_02
1049 + m[M12]*Det2_23_01;
1050 G4double Det3_123_013 = m[M10]*Det2_23_13 - m[M11]*Det2_23_03
1051 + m[M13]*Det2_23_01;
1052 G4double Det3_123_014 = m[M10]*Det2_23_14 - m[M11]*Det2_23_04
1053 + m[M14]*Det2_23_01;
1054 G4double Det3_123_023 = m[M10]*Det2_23_23 - m[M12]*Det2_23_03
1055 + m[M13]*Det2_23_02;
1056 G4double Det3_123_024 = m[M10]*Det2_23_24 - m[M12]*Det2_23_04
1057 + m[M14]*Det2_23_02;
1058 G4double Det3_123_034 = m[M10]*Det2_23_34 - m[M13]*Det2_23_04
1059 + m[M14]*Det2_23_03;
1060 G4double Det3_123_123 = m[M11]*Det2_23_23 - m[M12]*Det2_23_13
1061 + m[M13]*Det2_23_12;
1062 G4double Det3_123_124 = m[M11]*Det2_23_24 - m[M12]*Det2_23_14
1063 + m[M14]*Det2_23_12;
1064 G4double Det3_123_134 = m[M11]*Det2_23_34 - m[M13]*Det2_23_14
1065 + m[M14]*Det2_23_13;
1066 G4double Det3_123_234 = m[M12]*Det2_23_34 - m[M13]*Det2_23_24
1067 + m[M14]*Det2_23_23;
1068 G4double Det3_124_012 = m[M10]*Det2_24_12 - m[M11]*Det2_24_02
1069 + m[M12]*Det2_24_01;
1070 G4double Det3_124_013 = m[M10]*Det2_24_13 - m[M11]*Det2_24_03
1071 + m[M13]*Det2_24_01;
1072 G4double Det3_124_014 = m[M10]*Det2_24_14 - m[M11]*Det2_24_04
1073 + m[M14]*Det2_24_01;
1074 G4double Det3_124_023 = m[M10]*Det2_24_23 - m[M12]*Det2_24_03
1075 + m[M13]*Det2_24_02;
1076 G4double Det3_124_024 = m[M10]*Det2_24_24 - m[M12]*Det2_24_04
1077 + m[M14]*Det2_24_02;
1078 G4double Det3_124_034 = m[M10]*Det2_24_34 - m[M13]*Det2_24_04
1079 + m[M14]*Det2_24_03;
1080 G4double Det3_124_123 = m[M11]*Det2_24_23 - m[M12]*Det2_24_13
1081 + m[M13]*Det2_24_12;
1082 G4double Det3_124_124 = m[M11]*Det2_24_24 - m[M12]*Det2_24_14
1083 + m[M14]*Det2_24_12;
1084 G4double Det3_124_134 = m[M11]*Det2_24_34 - m[M13]*Det2_24_14
1085 + m[M14]*Det2_24_13;
1086 G4double Det3_124_234 = m[M12]*Det2_24_34 - m[M13]*Det2_24_24
1087 + m[M14]*Det2_24_23;
1088 G4double Det3_134_012 = m[M10]*Det2_34_12 - m[M11]*Det2_34_02
1089 + m[M12]*Det2_34_01;
1090 G4double Det3_134_013 = m[M10]*Det2_34_13 - m[M11]*Det2_34_03
1091 + m[M13]*Det2_34_01;
1092 G4double Det3_134_014 = m[M10]*Det2_34_14 - m[M11]*Det2_34_04
1093 + m[M14]*Det2_34_01;
1094 G4double Det3_134_023 = m[M10]*Det2_34_23 - m[M12]*Det2_34_03
1095 + m[M13]*Det2_34_02;
1096 G4double Det3_134_024 = m[M10]*Det2_34_24 - m[M12]*Det2_34_04
1097 + m[M14]*Det2_34_02;
1098 G4double Det3_134_034 = m[M10]*Det2_34_34 - m[M13]*Det2_34_04
1099 + m[M14]*Det2_34_03;
1100 G4double Det3_134_123 = m[M11]*Det2_34_23 - m[M12]*Det2_34_13
1101 + m[M13]*Det2_34_12;
1102 G4double Det3_134_124 = m[M11]*Det2_34_24 - m[M12]*Det2_34_14
1103 + m[M14]*Det2_34_12;
1104 G4double Det3_134_134 = m[M11]*Det2_34_34 - m[M13]*Det2_34_14
1105 + m[M14]*Det2_34_13;
1106 G4double Det3_134_234 = m[M12]*Det2_34_34 - m[M13]*Det2_34_24
1107 + m[M14]*Det2_34_23;
1108 G4double Det3_234_012 = m[M20]*Det2_34_12 - m[M21]*Det2_34_02
1109 + m[M22]*Det2_34_01;
1110 G4double Det3_234_013 = m[M20]*Det2_34_13 - m[M21]*Det2_34_03
1111 + m[M23]*Det2_34_01;
1112 G4double Det3_234_014 = m[M20]*Det2_34_14 - m[M21]*Det2_34_04
1113 + m[M24]*Det2_34_01;
1114 G4double Det3_234_023 = m[M20]*Det2_34_23 - m[M22]*Det2_34_03
1115 + m[M23]*Det2_34_02;
1116 G4double Det3_234_024 = m[M20]*Det2_34_24 - m[M22]*Det2_34_04
1117 + m[M24]*Det2_34_02;
1118 G4double Det3_234_034 = m[M20]*Det2_34_34 - m[M23]*Det2_34_04
1119 + m[M24]*Det2_34_03;
1120 G4double Det3_234_123 = m[M21]*Det2_34_23 - m[M22]*Det2_34_13
1121 + m[M23]*Det2_34_12;
1122 G4double Det3_234_124 = m[M21]*Det2_34_24 - m[M22]*Det2_34_14
1123 + m[M24]*Det2_34_12;
1124 G4double Det3_234_134 = m[M21]*Det2_34_34 - m[M23]*Det2_34_14
1125 + m[M24]*Det2_34_13;
1126 G4double Det3_234_234 = m[M22]*Det2_34_34 - m[M23]*Det2_34_24
1127 + m[M24]*Det2_34_23;
1128
1129 // Find all NECESSARY 4x4 dets: (25 of them)
1130
1131 G4double Det4_0123_0123 = m[M00]*Det3_123_123 - m[M01]*Det3_123_023
1132 + m[M02]*Det3_123_013 - m[M03]*Det3_123_012;
1133 G4double Det4_0123_0124 = m[M00]*Det3_123_124 - m[M01]*Det3_123_024
1134 + m[M02]*Det3_123_014 - m[M04]*Det3_123_012;
1135 G4double Det4_0123_0134 = m[M00]*Det3_123_134 - m[M01]*Det3_123_034
1136 + m[M03]*Det3_123_014 - m[M04]*Det3_123_013;
1137 G4double Det4_0123_0234 = m[M00]*Det3_123_234 - m[M02]*Det3_123_034
1138 + m[M03]*Det3_123_024 - m[M04]*Det3_123_023;
1139 G4double Det4_0123_1234 = m[M01]*Det3_123_234 - m[M02]*Det3_123_134
1140 + m[M03]*Det3_123_124 - m[M04]*Det3_123_123;
1141 G4double Det4_0124_0123 = m[M00]*Det3_124_123 - m[M01]*Det3_124_023
1142 + m[M02]*Det3_124_013 - m[M03]*Det3_124_012;
1143 G4double Det4_0124_0124 = m[M00]*Det3_124_124 - m[M01]*Det3_124_024
1144 + m[M02]*Det3_124_014 - m[M04]*Det3_124_012;
1145 G4double Det4_0124_0134 = m[M00]*Det3_124_134 - m[M01]*Det3_124_034
1146 + m[M03]*Det3_124_014 - m[M04]*Det3_124_013;
1147 G4double Det4_0124_0234 = m[M00]*Det3_124_234 - m[M02]*Det3_124_034
1148 + m[M03]*Det3_124_024 - m[M04]*Det3_124_023;
1149 G4double Det4_0124_1234 = m[M01]*Det3_124_234 - m[M02]*Det3_124_134
1150 + m[M03]*Det3_124_124 - m[M04]*Det3_124_123;
1151 G4double Det4_0134_0123 = m[M00]*Det3_134_123 - m[M01]*Det3_134_023
1152 + m[M02]*Det3_134_013 - m[M03]*Det3_134_012;
1153 G4double Det4_0134_0124 = m[M00]*Det3_134_124 - m[M01]*Det3_134_024
1154 + m[M02]*Det3_134_014 - m[M04]*Det3_134_012;
1155 G4double Det4_0134_0134 = m[M00]*Det3_134_134 - m[M01]*Det3_134_034
1156 + m[M03]*Det3_134_014 - m[M04]*Det3_134_013;
1157 G4double Det4_0134_0234 = m[M00]*Det3_134_234 - m[M02]*Det3_134_034
1158 + m[M03]*Det3_134_024 - m[M04]*Det3_134_023;
1159 G4double Det4_0134_1234 = m[M01]*Det3_134_234 - m[M02]*Det3_134_134
1160 + m[M03]*Det3_134_124 - m[M04]*Det3_134_123;
1161 G4double Det4_0234_0123 = m[M00]*Det3_234_123 - m[M01]*Det3_234_023
1162 + m[M02]*Det3_234_013 - m[M03]*Det3_234_012;
1163 G4double Det4_0234_0124 = m[M00]*Det3_234_124 - m[M01]*Det3_234_024
1164 + m[M02]*Det3_234_014 - m[M04]*Det3_234_012;
1165 G4double Det4_0234_0134 = m[M00]*Det3_234_134 - m[M01]*Det3_234_034
1166 + m[M03]*Det3_234_014 - m[M04]*Det3_234_013;
1167 G4double Det4_0234_0234 = m[M00]*Det3_234_234 - m[M02]*Det3_234_034
1168 + m[M03]*Det3_234_024 - m[M04]*Det3_234_023;
1169 G4double Det4_0234_1234 = m[M01]*Det3_234_234 - m[M02]*Det3_234_134
1170 + m[M03]*Det3_234_124 - m[M04]*Det3_234_123;
1171 G4double Det4_1234_0123 = m[M10]*Det3_234_123 - m[M11]*Det3_234_023
1172 + m[M12]*Det3_234_013 - m[M13]*Det3_234_012;
1173 G4double Det4_1234_0124 = m[M10]*Det3_234_124 - m[M11]*Det3_234_024
1174 + m[M12]*Det3_234_014 - m[M14]*Det3_234_012;
1175 G4double Det4_1234_0134 = m[M10]*Det3_234_134 - m[M11]*Det3_234_034
1176 + m[M13]*Det3_234_014 - m[M14]*Det3_234_013;
1177 G4double Det4_1234_0234 = m[M10]*Det3_234_234 - m[M12]*Det3_234_034
1178 + m[M13]*Det3_234_024 - m[M14]*Det3_234_023;
1179 G4double Det4_1234_1234 = m[M11]*Det3_234_234 - m[M12]*Det3_234_134
1180 + m[M13]*Det3_234_124 - m[M14]*Det3_234_123;
1181
1182 // Find the 5x5 det:
1183
1184 G4double det = m[M00]*Det4_1234_1234
1185 - m[M01]*Det4_1234_0234
1186 + m[M02]*Det4_1234_0134
1187 - m[M03]*Det4_1234_0124
1188 + m[M04]*Det4_1234_0123;
1189
1190 if ( det == 0 )
1191 {
1192 ifail = 1;
1193 return;
1194 }
1195
1196 G4double oneOverDet = 1.0/det;
1197 G4double mn1OverDet = - oneOverDet;
1198
1199 m[M00] = Det4_1234_1234 * oneOverDet;
1200 m[M01] = Det4_0234_1234 * mn1OverDet;
1201 m[M02] = Det4_0134_1234 * oneOverDet;
1202 m[M03] = Det4_0124_1234 * mn1OverDet;
1203 m[M04] = Det4_0123_1234 * oneOverDet;
1204
1205 m[M10] = Det4_1234_0234 * mn1OverDet;
1206 m[M11] = Det4_0234_0234 * oneOverDet;
1207 m[M12] = Det4_0134_0234 * mn1OverDet;
1208 m[M13] = Det4_0124_0234 * oneOverDet;
1209 m[M14] = Det4_0123_0234 * mn1OverDet;
1210
1211 m[M20] = Det4_1234_0134 * oneOverDet;
1212 m[M21] = Det4_0234_0134 * mn1OverDet;
1213 m[M22] = Det4_0134_0134 * oneOverDet;
1214 m[M23] = Det4_0124_0134 * mn1OverDet;
1215 m[M24] = Det4_0123_0134 * oneOverDet;
1216
1217 m[M30] = Det4_1234_0124 * mn1OverDet;
1218 m[M31] = Det4_0234_0124 * oneOverDet;
1219 m[M32] = Det4_0134_0124 * mn1OverDet;
1220 m[M33] = Det4_0124_0124 * oneOverDet;
1221 m[M34] = Det4_0123_0124 * mn1OverDet;
1222
1223 m[M40] = Det4_1234_0123 * oneOverDet;
1224 m[M41] = Det4_0234_0123 * mn1OverDet;
1225 m[M42] = Det4_0134_0123 * oneOverDet;
1226 m[M43] = Det4_0124_0123 * mn1OverDet;
1227 m[M44] = Det4_0123_0123 * oneOverDet;
1228
1229 return;
1230}
#define M00
#define M34
#define M03
#define M10
#define M41
#define M20
#define M42
#define M13
#define M33
#define M04
#define M23
#define M11
#define M44
#define M31
#define M02
#define M21
#define M01
#define M24
#define M12
#define M22
#define M43
#define M14
#define M30
#define M40
#define M32

Referenced by invert().

◆ invertHaywood6()

void G4ErrorMatrix::invertHaywood6 ( G4int ierr)
protectedvirtual

Definition at line 1232 of file G4ErrorMatrix.cc.

1233{
1234 ifail = 0;
1235
1236 // Find all NECESSARY 2x2 dets: (45 of them)
1237
1238 G4double Det2_34_01 = m[A30]*m[A41] - m[A31]*m[A40];
1239 G4double Det2_34_02 = m[A30]*m[A42] - m[A32]*m[A40];
1240 G4double Det2_34_03 = m[A30]*m[A43] - m[A33]*m[A40];
1241 G4double Det2_34_04 = m[A30]*m[A44] - m[A34]*m[A40];
1242 G4double Det2_34_05 = m[A30]*m[A45] - m[A35]*m[A40];
1243 G4double Det2_34_12 = m[A31]*m[A42] - m[A32]*m[A41];
1244 G4double Det2_34_13 = m[A31]*m[A43] - m[A33]*m[A41];
1245 G4double Det2_34_14 = m[A31]*m[A44] - m[A34]*m[A41];
1246 G4double Det2_34_15 = m[A31]*m[A45] - m[A35]*m[A41];
1247 G4double Det2_34_23 = m[A32]*m[A43] - m[A33]*m[A42];
1248 G4double Det2_34_24 = m[A32]*m[A44] - m[A34]*m[A42];
1249 G4double Det2_34_25 = m[A32]*m[A45] - m[A35]*m[A42];
1250 G4double Det2_34_34 = m[A33]*m[A44] - m[A34]*m[A43];
1251 G4double Det2_34_35 = m[A33]*m[A45] - m[A35]*m[A43];
1252 G4double Det2_34_45 = m[A34]*m[A45] - m[A35]*m[A44];
1253 G4double Det2_35_01 = m[A30]*m[A51] - m[A31]*m[A50];
1254 G4double Det2_35_02 = m[A30]*m[A52] - m[A32]*m[A50];
1255 G4double Det2_35_03 = m[A30]*m[A53] - m[A33]*m[A50];
1256 G4double Det2_35_04 = m[A30]*m[A54] - m[A34]*m[A50];
1257 G4double Det2_35_05 = m[A30]*m[A55] - m[A35]*m[A50];
1258 G4double Det2_35_12 = m[A31]*m[A52] - m[A32]*m[A51];
1259 G4double Det2_35_13 = m[A31]*m[A53] - m[A33]*m[A51];
1260 G4double Det2_35_14 = m[A31]*m[A54] - m[A34]*m[A51];
1261 G4double Det2_35_15 = m[A31]*m[A55] - m[A35]*m[A51];
1262 G4double Det2_35_23 = m[A32]*m[A53] - m[A33]*m[A52];
1263 G4double Det2_35_24 = m[A32]*m[A54] - m[A34]*m[A52];
1264 G4double Det2_35_25 = m[A32]*m[A55] - m[A35]*m[A52];
1265 G4double Det2_35_34 = m[A33]*m[A54] - m[A34]*m[A53];
1266 G4double Det2_35_35 = m[A33]*m[A55] - m[A35]*m[A53];
1267 G4double Det2_35_45 = m[A34]*m[A55] - m[A35]*m[A54];
1268 G4double Det2_45_01 = m[A40]*m[A51] - m[A41]*m[A50];
1269 G4double Det2_45_02 = m[A40]*m[A52] - m[A42]*m[A50];
1270 G4double Det2_45_03 = m[A40]*m[A53] - m[A43]*m[A50];
1271 G4double Det2_45_04 = m[A40]*m[A54] - m[A44]*m[A50];
1272 G4double Det2_45_05 = m[A40]*m[A55] - m[A45]*m[A50];
1273 G4double Det2_45_12 = m[A41]*m[A52] - m[A42]*m[A51];
1274 G4double Det2_45_13 = m[A41]*m[A53] - m[A43]*m[A51];
1275 G4double Det2_45_14 = m[A41]*m[A54] - m[A44]*m[A51];
1276 G4double Det2_45_15 = m[A41]*m[A55] - m[A45]*m[A51];
1277 G4double Det2_45_23 = m[A42]*m[A53] - m[A43]*m[A52];
1278 G4double Det2_45_24 = m[A42]*m[A54] - m[A44]*m[A52];
1279 G4double Det2_45_25 = m[A42]*m[A55] - m[A45]*m[A52];
1280 G4double Det2_45_34 = m[A43]*m[A54] - m[A44]*m[A53];
1281 G4double Det2_45_35 = m[A43]*m[A55] - m[A45]*m[A53];
1282 G4double Det2_45_45 = m[A44]*m[A55] - m[A45]*m[A54];
1283
1284 // Find all NECESSARY 3x3 dets: (80 of them)
1285
1286 G4double Det3_234_012 = m[A20]*Det2_34_12 - m[A21]*Det2_34_02
1287 + m[A22]*Det2_34_01;
1288 G4double Det3_234_013 = m[A20]*Det2_34_13 - m[A21]*Det2_34_03
1289 + m[A23]*Det2_34_01;
1290 G4double Det3_234_014 = m[A20]*Det2_34_14 - m[A21]*Det2_34_04
1291 + m[A24]*Det2_34_01;
1292 G4double Det3_234_015 = m[A20]*Det2_34_15 - m[A21]*Det2_34_05
1293 + m[A25]*Det2_34_01;
1294 G4double Det3_234_023 = m[A20]*Det2_34_23 - m[A22]*Det2_34_03
1295 + m[A23]*Det2_34_02;
1296 G4double Det3_234_024 = m[A20]*Det2_34_24 - m[A22]*Det2_34_04
1297 + m[A24]*Det2_34_02;
1298 G4double Det3_234_025 = m[A20]*Det2_34_25 - m[A22]*Det2_34_05
1299 + m[A25]*Det2_34_02;
1300 G4double Det3_234_034 = m[A20]*Det2_34_34 - m[A23]*Det2_34_04
1301 + m[A24]*Det2_34_03;
1302 G4double Det3_234_035 = m[A20]*Det2_34_35 - m[A23]*Det2_34_05
1303 + m[A25]*Det2_34_03;
1304 G4double Det3_234_045 = m[A20]*Det2_34_45 - m[A24]*Det2_34_05
1305 + m[A25]*Det2_34_04;
1306 G4double Det3_234_123 = m[A21]*Det2_34_23 - m[A22]*Det2_34_13
1307 + m[A23]*Det2_34_12;
1308 G4double Det3_234_124 = m[A21]*Det2_34_24 - m[A22]*Det2_34_14
1309 + m[A24]*Det2_34_12;
1310 G4double Det3_234_125 = m[A21]*Det2_34_25 - m[A22]*Det2_34_15
1311 + m[A25]*Det2_34_12;
1312 G4double Det3_234_134 = m[A21]*Det2_34_34 - m[A23]*Det2_34_14
1313 + m[A24]*Det2_34_13;
1314 G4double Det3_234_135 = m[A21]*Det2_34_35 - m[A23]*Det2_34_15
1315 + m[A25]*Det2_34_13;
1316 G4double Det3_234_145 = m[A21]*Det2_34_45 - m[A24]*Det2_34_15
1317 + m[A25]*Det2_34_14;
1318 G4double Det3_234_234 = m[A22]*Det2_34_34 - m[A23]*Det2_34_24
1319 + m[A24]*Det2_34_23;
1320 G4double Det3_234_235 = m[A22]*Det2_34_35 - m[A23]*Det2_34_25
1321 + m[A25]*Det2_34_23;
1322 G4double Det3_234_245 = m[A22]*Det2_34_45 - m[A24]*Det2_34_25
1323 + m[A25]*Det2_34_24;
1324 G4double Det3_234_345 = m[A23]*Det2_34_45 - m[A24]*Det2_34_35
1325 + m[A25]*Det2_34_34;
1326 G4double Det3_235_012 = m[A20]*Det2_35_12 - m[A21]*Det2_35_02
1327 + m[A22]*Det2_35_01;
1328 G4double Det3_235_013 = m[A20]*Det2_35_13 - m[A21]*Det2_35_03
1329 + m[A23]*Det2_35_01;
1330 G4double Det3_235_014 = m[A20]*Det2_35_14 - m[A21]*Det2_35_04
1331 + m[A24]*Det2_35_01;
1332 G4double Det3_235_015 = m[A20]*Det2_35_15 - m[A21]*Det2_35_05
1333 + m[A25]*Det2_35_01;
1334 G4double Det3_235_023 = m[A20]*Det2_35_23 - m[A22]*Det2_35_03
1335 + m[A23]*Det2_35_02;
1336 G4double Det3_235_024 = m[A20]*Det2_35_24 - m[A22]*Det2_35_04
1337 + m[A24]*Det2_35_02;
1338 G4double Det3_235_025 = m[A20]*Det2_35_25 - m[A22]*Det2_35_05
1339 + m[A25]*Det2_35_02;
1340 G4double Det3_235_034 = m[A20]*Det2_35_34 - m[A23]*Det2_35_04
1341 + m[A24]*Det2_35_03;
1342 G4double Det3_235_035 = m[A20]*Det2_35_35 - m[A23]*Det2_35_05
1343 + m[A25]*Det2_35_03;
1344 G4double Det3_235_045 = m[A20]*Det2_35_45 - m[A24]*Det2_35_05
1345 + m[A25]*Det2_35_04;
1346 G4double Det3_235_123 = m[A21]*Det2_35_23 - m[A22]*Det2_35_13
1347 + m[A23]*Det2_35_12;
1348 G4double Det3_235_124 = m[A21]*Det2_35_24 - m[A22]*Det2_35_14
1349 + m[A24]*Det2_35_12;
1350 G4double Det3_235_125 = m[A21]*Det2_35_25 - m[A22]*Det2_35_15
1351 + m[A25]*Det2_35_12;
1352 G4double Det3_235_134 = m[A21]*Det2_35_34 - m[A23]*Det2_35_14
1353 + m[A24]*Det2_35_13;
1354 G4double Det3_235_135 = m[A21]*Det2_35_35 - m[A23]*Det2_35_15
1355 + m[A25]*Det2_35_13;
1356 G4double Det3_235_145 = m[A21]*Det2_35_45 - m[A24]*Det2_35_15
1357 + m[A25]*Det2_35_14;
1358 G4double Det3_235_234 = m[A22]*Det2_35_34 - m[A23]*Det2_35_24
1359 + m[A24]*Det2_35_23;
1360 G4double Det3_235_235 = m[A22]*Det2_35_35 - m[A23]*Det2_35_25
1361 + m[A25]*Det2_35_23;
1362 G4double Det3_235_245 = m[A22]*Det2_35_45 - m[A24]*Det2_35_25
1363 + m[A25]*Det2_35_24;
1364 G4double Det3_235_345 = m[A23]*Det2_35_45 - m[A24]*Det2_35_35
1365 + m[A25]*Det2_35_34;
1366 G4double Det3_245_012 = m[A20]*Det2_45_12 - m[A21]*Det2_45_02
1367 + m[A22]*Det2_45_01;
1368 G4double Det3_245_013 = m[A20]*Det2_45_13 - m[A21]*Det2_45_03
1369 + m[A23]*Det2_45_01;
1370 G4double Det3_245_014 = m[A20]*Det2_45_14 - m[A21]*Det2_45_04
1371 + m[A24]*Det2_45_01;
1372 G4double Det3_245_015 = m[A20]*Det2_45_15 - m[A21]*Det2_45_05
1373 + m[A25]*Det2_45_01;
1374 G4double Det3_245_023 = m[A20]*Det2_45_23 - m[A22]*Det2_45_03
1375 + m[A23]*Det2_45_02;
1376 G4double Det3_245_024 = m[A20]*Det2_45_24 - m[A22]*Det2_45_04
1377 + m[A24]*Det2_45_02;
1378 G4double Det3_245_025 = m[A20]*Det2_45_25 - m[A22]*Det2_45_05
1379 + m[A25]*Det2_45_02;
1380 G4double Det3_245_034 = m[A20]*Det2_45_34 - m[A23]*Det2_45_04
1381 + m[A24]*Det2_45_03;
1382 G4double Det3_245_035 = m[A20]*Det2_45_35 - m[A23]*Det2_45_05
1383 + m[A25]*Det2_45_03;
1384 G4double Det3_245_045 = m[A20]*Det2_45_45 - m[A24]*Det2_45_05
1385 + m[A25]*Det2_45_04;
1386 G4double Det3_245_123 = m[A21]*Det2_45_23 - m[A22]*Det2_45_13
1387 + m[A23]*Det2_45_12;
1388 G4double Det3_245_124 = m[A21]*Det2_45_24 - m[A22]*Det2_45_14
1389 + m[A24]*Det2_45_12;
1390 G4double Det3_245_125 = m[A21]*Det2_45_25 - m[A22]*Det2_45_15
1391 + m[A25]*Det2_45_12;
1392 G4double Det3_245_134 = m[A21]*Det2_45_34 - m[A23]*Det2_45_14
1393 + m[A24]*Det2_45_13;
1394 G4double Det3_245_135 = m[A21]*Det2_45_35 - m[A23]*Det2_45_15
1395 + m[A25]*Det2_45_13;
1396 G4double Det3_245_145 = m[A21]*Det2_45_45 - m[A24]*Det2_45_15
1397 + m[A25]*Det2_45_14;
1398 G4double Det3_245_234 = m[A22]*Det2_45_34 - m[A23]*Det2_45_24
1399 + m[A24]*Det2_45_23;
1400 G4double Det3_245_235 = m[A22]*Det2_45_35 - m[A23]*Det2_45_25
1401 + m[A25]*Det2_45_23;
1402 G4double Det3_245_245 = m[A22]*Det2_45_45 - m[A24]*Det2_45_25
1403 + m[A25]*Det2_45_24;
1404 G4double Det3_245_345 = m[A23]*Det2_45_45 - m[A24]*Det2_45_35
1405 + m[A25]*Det2_45_34;
1406 G4double Det3_345_012 = m[A30]*Det2_45_12 - m[A31]*Det2_45_02
1407 + m[A32]*Det2_45_01;
1408 G4double Det3_345_013 = m[A30]*Det2_45_13 - m[A31]*Det2_45_03
1409 + m[A33]*Det2_45_01;
1410 G4double Det3_345_014 = m[A30]*Det2_45_14 - m[A31]*Det2_45_04
1411 + m[A34]*Det2_45_01;
1412 G4double Det3_345_015 = m[A30]*Det2_45_15 - m[A31]*Det2_45_05
1413 + m[A35]*Det2_45_01;
1414 G4double Det3_345_023 = m[A30]*Det2_45_23 - m[A32]*Det2_45_03
1415 + m[A33]*Det2_45_02;
1416 G4double Det3_345_024 = m[A30]*Det2_45_24 - m[A32]*Det2_45_04
1417 + m[A34]*Det2_45_02;
1418 G4double Det3_345_025 = m[A30]*Det2_45_25 - m[A32]*Det2_45_05
1419 + m[A35]*Det2_45_02;
1420 G4double Det3_345_034 = m[A30]*Det2_45_34 - m[A33]*Det2_45_04
1421 + m[A34]*Det2_45_03;
1422 G4double Det3_345_035 = m[A30]*Det2_45_35 - m[A33]*Det2_45_05
1423 + m[A35]*Det2_45_03;
1424 G4double Det3_345_045 = m[A30]*Det2_45_45 - m[A34]*Det2_45_05
1425 + m[A35]*Det2_45_04;
1426 G4double Det3_345_123 = m[A31]*Det2_45_23 - m[A32]*Det2_45_13
1427 + m[A33]*Det2_45_12;
1428 G4double Det3_345_124 = m[A31]*Det2_45_24 - m[A32]*Det2_45_14
1429 + m[A34]*Det2_45_12;
1430 G4double Det3_345_125 = m[A31]*Det2_45_25 - m[A32]*Det2_45_15
1431 + m[A35]*Det2_45_12;
1432 G4double Det3_345_134 = m[A31]*Det2_45_34 - m[A33]*Det2_45_14
1433 + m[A34]*Det2_45_13;
1434 G4double Det3_345_135 = m[A31]*Det2_45_35 - m[A33]*Det2_45_15
1435 + m[A35]*Det2_45_13;
1436 G4double Det3_345_145 = m[A31]*Det2_45_45 - m[A34]*Det2_45_15
1437 + m[A35]*Det2_45_14;
1438 G4double Det3_345_234 = m[A32]*Det2_45_34 - m[A33]*Det2_45_24
1439 + m[A34]*Det2_45_23;
1440 G4double Det3_345_235 = m[A32]*Det2_45_35 - m[A33]*Det2_45_25
1441 + m[A35]*Det2_45_23;
1442 G4double Det3_345_245 = m[A32]*Det2_45_45 - m[A34]*Det2_45_25
1443 + m[A35]*Det2_45_24;
1444 G4double Det3_345_345 = m[A33]*Det2_45_45 - m[A34]*Det2_45_35
1445 + m[A35]*Det2_45_34;
1446
1447 // Find all NECESSARY 4x4 dets: (75 of them)
1448
1449 G4double Det4_1234_0123 = m[A10]*Det3_234_123 - m[A11]*Det3_234_023
1450 + m[A12]*Det3_234_013 - m[A13]*Det3_234_012;
1451 G4double Det4_1234_0124 = m[A10]*Det3_234_124 - m[A11]*Det3_234_024
1452 + m[A12]*Det3_234_014 - m[A14]*Det3_234_012;
1453 G4double Det4_1234_0125 = m[A10]*Det3_234_125 - m[A11]*Det3_234_025
1454 + m[A12]*Det3_234_015 - m[A15]*Det3_234_012;
1455 G4double Det4_1234_0134 = m[A10]*Det3_234_134 - m[A11]*Det3_234_034
1456 + m[A13]*Det3_234_014 - m[A14]*Det3_234_013;
1457 G4double Det4_1234_0135 = m[A10]*Det3_234_135 - m[A11]*Det3_234_035
1458 + m[A13]*Det3_234_015 - m[A15]*Det3_234_013;
1459 G4double Det4_1234_0145 = m[A10]*Det3_234_145 - m[A11]*Det3_234_045
1460 + m[A14]*Det3_234_015 - m[A15]*Det3_234_014;
1461 G4double Det4_1234_0234 = m[A10]*Det3_234_234 - m[A12]*Det3_234_034
1462 + m[A13]*Det3_234_024 - m[A14]*Det3_234_023;
1463 G4double Det4_1234_0235 = m[A10]*Det3_234_235 - m[A12]*Det3_234_035
1464 + m[A13]*Det3_234_025 - m[A15]*Det3_234_023;
1465 G4double Det4_1234_0245 = m[A10]*Det3_234_245 - m[A12]*Det3_234_045
1466 + m[A14]*Det3_234_025 - m[A15]*Det3_234_024;
1467 G4double Det4_1234_0345 = m[A10]*Det3_234_345 - m[A13]*Det3_234_045
1468 + m[A14]*Det3_234_035 - m[A15]*Det3_234_034;
1469 G4double Det4_1234_1234 = m[A11]*Det3_234_234 - m[A12]*Det3_234_134
1470 + m[A13]*Det3_234_124 - m[A14]*Det3_234_123;
1471 G4double Det4_1234_1235 = m[A11]*Det3_234_235 - m[A12]*Det3_234_135
1472 + m[A13]*Det3_234_125 - m[A15]*Det3_234_123;
1473 G4double Det4_1234_1245 = m[A11]*Det3_234_245 - m[A12]*Det3_234_145
1474 + m[A14]*Det3_234_125 - m[A15]*Det3_234_124;
1475 G4double Det4_1234_1345 = m[A11]*Det3_234_345 - m[A13]*Det3_234_145
1476 + m[A14]*Det3_234_135 - m[A15]*Det3_234_134;
1477 G4double Det4_1234_2345 = m[A12]*Det3_234_345 - m[A13]*Det3_234_245
1478 + m[A14]*Det3_234_235 - m[A15]*Det3_234_234;
1479 G4double Det4_1235_0123 = m[A10]*Det3_235_123 - m[A11]*Det3_235_023
1480 + m[A12]*Det3_235_013 - m[A13]*Det3_235_012;
1481 G4double Det4_1235_0124 = m[A10]*Det3_235_124 - m[A11]*Det3_235_024
1482 + m[A12]*Det3_235_014 - m[A14]*Det3_235_012;
1483 G4double Det4_1235_0125 = m[A10]*Det3_235_125 - m[A11]*Det3_235_025
1484 + m[A12]*Det3_235_015 - m[A15]*Det3_235_012;
1485 G4double Det4_1235_0134 = m[A10]*Det3_235_134 - m[A11]*Det3_235_034
1486 + m[A13]*Det3_235_014 - m[A14]*Det3_235_013;
1487 G4double Det4_1235_0135 = m[A10]*Det3_235_135 - m[A11]*Det3_235_035
1488 + m[A13]*Det3_235_015 - m[A15]*Det3_235_013;
1489 G4double Det4_1235_0145 = m[A10]*Det3_235_145 - m[A11]*Det3_235_045
1490 + m[A14]*Det3_235_015 - m[A15]*Det3_235_014;
1491 G4double Det4_1235_0234 = m[A10]*Det3_235_234 - m[A12]*Det3_235_034
1492 + m[A13]*Det3_235_024 - m[A14]*Det3_235_023;
1493 G4double Det4_1235_0235 = m[A10]*Det3_235_235 - m[A12]*Det3_235_035
1494 + m[A13]*Det3_235_025 - m[A15]*Det3_235_023;
1495 G4double Det4_1235_0245 = m[A10]*Det3_235_245 - m[A12]*Det3_235_045
1496 + m[A14]*Det3_235_025 - m[A15]*Det3_235_024;
1497 G4double Det4_1235_0345 = m[A10]*Det3_235_345 - m[A13]*Det3_235_045
1498 + m[A14]*Det3_235_035 - m[A15]*Det3_235_034;
1499 G4double Det4_1235_1234 = m[A11]*Det3_235_234 - m[A12]*Det3_235_134
1500 + m[A13]*Det3_235_124 - m[A14]*Det3_235_123;
1501 G4double Det4_1235_1235 = m[A11]*Det3_235_235 - m[A12]*Det3_235_135
1502 + m[A13]*Det3_235_125 - m[A15]*Det3_235_123;
1503 G4double Det4_1235_1245 = m[A11]*Det3_235_245 - m[A12]*Det3_235_145
1504 + m[A14]*Det3_235_125 - m[A15]*Det3_235_124;
1505 G4double Det4_1235_1345 = m[A11]*Det3_235_345 - m[A13]*Det3_235_145
1506 + m[A14]*Det3_235_135 - m[A15]*Det3_235_134;
1507 G4double Det4_1235_2345 = m[A12]*Det3_235_345 - m[A13]*Det3_235_245
1508 + m[A14]*Det3_235_235 - m[A15]*Det3_235_234;
1509 G4double Det4_1245_0123 = m[A10]*Det3_245_123 - m[A11]*Det3_245_023
1510 + m[A12]*Det3_245_013 - m[A13]*Det3_245_012;
1511 G4double Det4_1245_0124 = m[A10]*Det3_245_124 - m[A11]*Det3_245_024
1512 + m[A12]*Det3_245_014 - m[A14]*Det3_245_012;
1513 G4double Det4_1245_0125 = m[A10]*Det3_245_125 - m[A11]*Det3_245_025
1514 + m[A12]*Det3_245_015 - m[A15]*Det3_245_012;
1515 G4double Det4_1245_0134 = m[A10]*Det3_245_134 - m[A11]*Det3_245_034
1516 + m[A13]*Det3_245_014 - m[A14]*Det3_245_013;
1517 G4double Det4_1245_0135 = m[A10]*Det3_245_135 - m[A11]*Det3_245_035
1518 + m[A13]*Det3_245_015 - m[A15]*Det3_245_013;
1519 G4double Det4_1245_0145 = m[A10]*Det3_245_145 - m[A11]*Det3_245_045
1520 + m[A14]*Det3_245_015 - m[A15]*Det3_245_014;
1521 G4double Det4_1245_0234 = m[A10]*Det3_245_234 - m[A12]*Det3_245_034
1522 + m[A13]*Det3_245_024 - m[A14]*Det3_245_023;
1523 G4double Det4_1245_0235 = m[A10]*Det3_245_235 - m[A12]*Det3_245_035
1524 + m[A13]*Det3_245_025 - m[A15]*Det3_245_023;
1525 G4double Det4_1245_0245 = m[A10]*Det3_245_245 - m[A12]*Det3_245_045
1526 + m[A14]*Det3_245_025 - m[A15]*Det3_245_024;
1527 G4double Det4_1245_0345 = m[A10]*Det3_245_345 - m[A13]*Det3_245_045
1528 + m[A14]*Det3_245_035 - m[A15]*Det3_245_034;
1529 G4double Det4_1245_1234 = m[A11]*Det3_245_234 - m[A12]*Det3_245_134
1530 + m[A13]*Det3_245_124 - m[A14]*Det3_245_123;
1531 G4double Det4_1245_1235 = m[A11]*Det3_245_235 - m[A12]*Det3_245_135
1532 + m[A13]*Det3_245_125 - m[A15]*Det3_245_123;
1533 G4double Det4_1245_1245 = m[A11]*Det3_245_245 - m[A12]*Det3_245_145
1534 + m[A14]*Det3_245_125 - m[A15]*Det3_245_124;
1535 G4double Det4_1245_1345 = m[A11]*Det3_245_345 - m[A13]*Det3_245_145
1536 + m[A14]*Det3_245_135 - m[A15]*Det3_245_134;
1537 G4double Det4_1245_2345 = m[A12]*Det3_245_345 - m[A13]*Det3_245_245
1538 + m[A14]*Det3_245_235 - m[A15]*Det3_245_234;
1539 G4double Det4_1345_0123 = m[A10]*Det3_345_123 - m[A11]*Det3_345_023
1540 + m[A12]*Det3_345_013 - m[A13]*Det3_345_012;
1541 G4double Det4_1345_0124 = m[A10]*Det3_345_124 - m[A11]*Det3_345_024
1542 + m[A12]*Det3_345_014 - m[A14]*Det3_345_012;
1543 G4double Det4_1345_0125 = m[A10]*Det3_345_125 - m[A11]*Det3_345_025
1544 + m[A12]*Det3_345_015 - m[A15]*Det3_345_012;
1545 G4double Det4_1345_0134 = m[A10]*Det3_345_134 - m[A11]*Det3_345_034
1546 + m[A13]*Det3_345_014 - m[A14]*Det3_345_013;
1547 G4double Det4_1345_0135 = m[A10]*Det3_345_135 - m[A11]*Det3_345_035
1548 + m[A13]*Det3_345_015 - m[A15]*Det3_345_013;
1549 G4double Det4_1345_0145 = m[A10]*Det3_345_145 - m[A11]*Det3_345_045
1550 + m[A14]*Det3_345_015 - m[A15]*Det3_345_014;
1551 G4double Det4_1345_0234 = m[A10]*Det3_345_234 - m[A12]*Det3_345_034
1552 + m[A13]*Det3_345_024 - m[A14]*Det3_345_023;
1553 G4double Det4_1345_0235 = m[A10]*Det3_345_235 - m[A12]*Det3_345_035
1554 + m[A13]*Det3_345_025 - m[A15]*Det3_345_023;
1555 G4double Det4_1345_0245 = m[A10]*Det3_345_245 - m[A12]*Det3_345_045
1556 + m[A14]*Det3_345_025 - m[A15]*Det3_345_024;
1557 G4double Det4_1345_0345 = m[A10]*Det3_345_345 - m[A13]*Det3_345_045
1558 + m[A14]*Det3_345_035 - m[A15]*Det3_345_034;
1559 G4double Det4_1345_1234 = m[A11]*Det3_345_234 - m[A12]*Det3_345_134
1560 + m[A13]*Det3_345_124 - m[A14]*Det3_345_123;
1561 G4double Det4_1345_1235 = m[A11]*Det3_345_235 - m[A12]*Det3_345_135
1562 + m[A13]*Det3_345_125 - m[A15]*Det3_345_123;
1563 G4double Det4_1345_1245 = m[A11]*Det3_345_245 - m[A12]*Det3_345_145
1564 + m[A14]*Det3_345_125 - m[A15]*Det3_345_124;
1565 G4double Det4_1345_1345 = m[A11]*Det3_345_345 - m[A13]*Det3_345_145
1566 + m[A14]*Det3_345_135 - m[A15]*Det3_345_134;
1567 G4double Det4_1345_2345 = m[A12]*Det3_345_345 - m[A13]*Det3_345_245
1568 + m[A14]*Det3_345_235 - m[A15]*Det3_345_234;
1569 G4double Det4_2345_0123 = m[A20]*Det3_345_123 - m[A21]*Det3_345_023
1570 + m[A22]*Det3_345_013 - m[A23]*Det3_345_012;
1571 G4double Det4_2345_0124 = m[A20]*Det3_345_124 - m[A21]*Det3_345_024
1572 + m[A22]*Det3_345_014 - m[A24]*Det3_345_012;
1573 G4double Det4_2345_0125 = m[A20]*Det3_345_125 - m[A21]*Det3_345_025
1574 + m[A22]*Det3_345_015 - m[A25]*Det3_345_012;
1575 G4double Det4_2345_0134 = m[A20]*Det3_345_134 - m[A21]*Det3_345_034
1576 + m[A23]*Det3_345_014 - m[A24]*Det3_345_013;
1577 G4double Det4_2345_0135 = m[A20]*Det3_345_135 - m[A21]*Det3_345_035
1578 + m[A23]*Det3_345_015 - m[A25]*Det3_345_013;
1579 G4double Det4_2345_0145 = m[A20]*Det3_345_145 - m[A21]*Det3_345_045
1580 + m[A24]*Det3_345_015 - m[A25]*Det3_345_014;
1581 G4double Det4_2345_0234 = m[A20]*Det3_345_234 - m[A22]*Det3_345_034
1582 + m[A23]*Det3_345_024 - m[A24]*Det3_345_023;
1583 G4double Det4_2345_0235 = m[A20]*Det3_345_235 - m[A22]*Det3_345_035
1584 + m[A23]*Det3_345_025 - m[A25]*Det3_345_023;
1585 G4double Det4_2345_0245 = m[A20]*Det3_345_245 - m[A22]*Det3_345_045
1586 + m[A24]*Det3_345_025 - m[A25]*Det3_345_024;
1587 G4double Det4_2345_0345 = m[A20]*Det3_345_345 - m[A23]*Det3_345_045
1588 + m[A24]*Det3_345_035 - m[A25]*Det3_345_034;
1589 G4double Det4_2345_1234 = m[A21]*Det3_345_234 - m[A22]*Det3_345_134
1590 + m[A23]*Det3_345_124 - m[A24]*Det3_345_123;
1591 G4double Det4_2345_1235 = m[A21]*Det3_345_235 - m[A22]*Det3_345_135
1592 + m[A23]*Det3_345_125 - m[A25]*Det3_345_123;
1593 G4double Det4_2345_1245 = m[A21]*Det3_345_245 - m[A22]*Det3_345_145
1594 + m[A24]*Det3_345_125 - m[A25]*Det3_345_124;
1595 G4double Det4_2345_1345 = m[A21]*Det3_345_345 - m[A23]*Det3_345_145
1596 + m[A24]*Det3_345_135 - m[A25]*Det3_345_134;
1597 G4double Det4_2345_2345 = m[A22]*Det3_345_345 - m[A23]*Det3_345_245
1598 + m[A24]*Det3_345_235 - m[A25]*Det3_345_234;
1599
1600 // Find all NECESSARY 5x5 dets: (36 of them)
1601
1602 G4double Det5_01234_01234 = m[A00]*Det4_1234_1234 - m[A01]*Det4_1234_0234
1603 + m[A02]*Det4_1234_0134 - m[A03]*Det4_1234_0124 + m[A04]*Det4_1234_0123;
1604 G4double Det5_01234_01235 = m[A00]*Det4_1234_1235 - m[A01]*Det4_1234_0235
1605 + m[A02]*Det4_1234_0135 - m[A03]*Det4_1234_0125 + m[A05]*Det4_1234_0123;
1606 G4double Det5_01234_01245 = m[A00]*Det4_1234_1245 - m[A01]*Det4_1234_0245
1607 + m[A02]*Det4_1234_0145 - m[A04]*Det4_1234_0125 + m[A05]*Det4_1234_0124;
1608 G4double Det5_01234_01345 = m[A00]*Det4_1234_1345 - m[A01]*Det4_1234_0345
1609 + m[A03]*Det4_1234_0145 - m[A04]*Det4_1234_0135 + m[A05]*Det4_1234_0134;
1610 G4double Det5_01234_02345 = m[A00]*Det4_1234_2345 - m[A02]*Det4_1234_0345
1611 + m[A03]*Det4_1234_0245 - m[A04]*Det4_1234_0235 + m[A05]*Det4_1234_0234;
1612 G4double Det5_01234_12345 = m[A01]*Det4_1234_2345 - m[A02]*Det4_1234_1345
1613 + m[A03]*Det4_1234_1245 - m[A04]*Det4_1234_1235 + m[A05]*Det4_1234_1234;
1614 G4double Det5_01235_01234 = m[A00]*Det4_1235_1234 - m[A01]*Det4_1235_0234
1615 + m[A02]*Det4_1235_0134 - m[A03]*Det4_1235_0124 + m[A04]*Det4_1235_0123;
1616 G4double Det5_01235_01235 = m[A00]*Det4_1235_1235 - m[A01]*Det4_1235_0235
1617 + m[A02]*Det4_1235_0135 - m[A03]*Det4_1235_0125 + m[A05]*Det4_1235_0123;
1618 G4double Det5_01235_01245 = m[A00]*Det4_1235_1245 - m[A01]*Det4_1235_0245
1619 + m[A02]*Det4_1235_0145 - m[A04]*Det4_1235_0125 + m[A05]*Det4_1235_0124;
1620 G4double Det5_01235_01345 = m[A00]*Det4_1235_1345 - m[A01]*Det4_1235_0345
1621 + m[A03]*Det4_1235_0145 - m[A04]*Det4_1235_0135 + m[A05]*Det4_1235_0134;
1622 G4double Det5_01235_02345 = m[A00]*Det4_1235_2345 - m[A02]*Det4_1235_0345
1623 + m[A03]*Det4_1235_0245 - m[A04]*Det4_1235_0235 + m[A05]*Det4_1235_0234;
1624 G4double Det5_01235_12345 = m[A01]*Det4_1235_2345 - m[A02]*Det4_1235_1345
1625 + m[A03]*Det4_1235_1245 - m[A04]*Det4_1235_1235 + m[A05]*Det4_1235_1234;
1626 G4double Det5_01245_01234 = m[A00]*Det4_1245_1234 - m[A01]*Det4_1245_0234
1627 + m[A02]*Det4_1245_0134 - m[A03]*Det4_1245_0124 + m[A04]*Det4_1245_0123;
1628 G4double Det5_01245_01235 = m[A00]*Det4_1245_1235 - m[A01]*Det4_1245_0235
1629 + m[A02]*Det4_1245_0135 - m[A03]*Det4_1245_0125 + m[A05]*Det4_1245_0123;
1630 G4double Det5_01245_01245 = m[A00]*Det4_1245_1245 - m[A01]*Det4_1245_0245
1631 + m[A02]*Det4_1245_0145 - m[A04]*Det4_1245_0125 + m[A05]*Det4_1245_0124;
1632 G4double Det5_01245_01345 = m[A00]*Det4_1245_1345 - m[A01]*Det4_1245_0345
1633 + m[A03]*Det4_1245_0145 - m[A04]*Det4_1245_0135 + m[A05]*Det4_1245_0134;
1634 G4double Det5_01245_02345 = m[A00]*Det4_1245_2345 - m[A02]*Det4_1245_0345
1635 + m[A03]*Det4_1245_0245 - m[A04]*Det4_1245_0235 + m[A05]*Det4_1245_0234;
1636 G4double Det5_01245_12345 = m[A01]*Det4_1245_2345 - m[A02]*Det4_1245_1345
1637 + m[A03]*Det4_1245_1245 - m[A04]*Det4_1245_1235 + m[A05]*Det4_1245_1234;
1638 G4double Det5_01345_01234 = m[A00]*Det4_1345_1234 - m[A01]*Det4_1345_0234
1639 + m[A02]*Det4_1345_0134 - m[A03]*Det4_1345_0124 + m[A04]*Det4_1345_0123;
1640 G4double Det5_01345_01235 = m[A00]*Det4_1345_1235 - m[A01]*Det4_1345_0235
1641 + m[A02]*Det4_1345_0135 - m[A03]*Det4_1345_0125 + m[A05]*Det4_1345_0123;
1642 G4double Det5_01345_01245 = m[A00]*Det4_1345_1245 - m[A01]*Det4_1345_0245
1643 + m[A02]*Det4_1345_0145 - m[A04]*Det4_1345_0125 + m[A05]*Det4_1345_0124;
1644 G4double Det5_01345_01345 = m[A00]*Det4_1345_1345 - m[A01]*Det4_1345_0345
1645 + m[A03]*Det4_1345_0145 - m[A04]*Det4_1345_0135 + m[A05]*Det4_1345_0134;
1646 G4double Det5_01345_02345 = m[A00]*Det4_1345_2345 - m[A02]*Det4_1345_0345
1647 + m[A03]*Det4_1345_0245 - m[A04]*Det4_1345_0235 + m[A05]*Det4_1345_0234;
1648 G4double Det5_01345_12345 = m[A01]*Det4_1345_2345 - m[A02]*Det4_1345_1345
1649 + m[A03]*Det4_1345_1245 - m[A04]*Det4_1345_1235 + m[A05]*Det4_1345_1234; //
1650 G4double Det5_02345_01234 = m[A00]*Det4_2345_1234 - m[A01]*Det4_2345_0234
1651 + m[A02]*Det4_2345_0134 - m[A03]*Det4_2345_0124 + m[A04]*Det4_2345_0123;
1652 G4double Det5_02345_01235 = m[A00]*Det4_2345_1235 - m[A01]*Det4_2345_0235
1653 + m[A02]*Det4_2345_0135 - m[A03]*Det4_2345_0125 + m[A05]*Det4_2345_0123;
1654 G4double Det5_02345_01245 = m[A00]*Det4_2345_1245 - m[A01]*Det4_2345_0245
1655 + m[A02]*Det4_2345_0145 - m[A04]*Det4_2345_0125 + m[A05]*Det4_2345_0124;
1656 G4double Det5_02345_01345 = m[A00]*Det4_2345_1345 - m[A01]*Det4_2345_0345
1657 + m[A03]*Det4_2345_0145 - m[A04]*Det4_2345_0135 + m[A05]*Det4_2345_0134;
1658 G4double Det5_02345_02345 = m[A00]*Det4_2345_2345 - m[A02]*Det4_2345_0345
1659 + m[A03]*Det4_2345_0245 - m[A04]*Det4_2345_0235 + m[A05]*Det4_2345_0234;
1660 G4double Det5_02345_12345 = m[A01]*Det4_2345_2345 - m[A02]*Det4_2345_1345
1661 + m[A03]*Det4_2345_1245 - m[A04]*Det4_2345_1235 + m[A05]*Det4_2345_1234;
1662 G4double Det5_12345_01234 = m[A10]*Det4_2345_1234 - m[A11]*Det4_2345_0234
1663 + m[A12]*Det4_2345_0134 - m[A13]*Det4_2345_0124 + m[A14]*Det4_2345_0123;
1664 G4double Det5_12345_01235 = m[A10]*Det4_2345_1235 - m[A11]*Det4_2345_0235
1665 + m[A12]*Det4_2345_0135 - m[A13]*Det4_2345_0125 + m[A15]*Det4_2345_0123;
1666 G4double Det5_12345_01245 = m[A10]*Det4_2345_1245 - m[A11]*Det4_2345_0245
1667 + m[A12]*Det4_2345_0145 - m[A14]*Det4_2345_0125 + m[A15]*Det4_2345_0124;
1668 G4double Det5_12345_01345 = m[A10]*Det4_2345_1345 - m[A11]*Det4_2345_0345
1669 + m[A13]*Det4_2345_0145 - m[A14]*Det4_2345_0135 + m[A15]*Det4_2345_0134;
1670 G4double Det5_12345_02345 = m[A10]*Det4_2345_2345 - m[A12]*Det4_2345_0345
1671 + m[A13]*Det4_2345_0245 - m[A14]*Det4_2345_0235 + m[A15]*Det4_2345_0234;
1672 G4double Det5_12345_12345 = m[A11]*Det4_2345_2345 - m[A12]*Det4_2345_1345
1673 + m[A13]*Det4_2345_1245 - m[A14]*Det4_2345_1235 + m[A15]*Det4_2345_1234;
1674
1675 // Find the determinant
1676
1677 G4double det = m[A00]*Det5_12345_12345
1678 - m[A01]*Det5_12345_02345
1679 + m[A02]*Det5_12345_01345
1680 - m[A03]*Det5_12345_01245
1681 + m[A04]*Det5_12345_01235
1682 - m[A05]*Det5_12345_01234;
1683
1684 if ( det == 0 )
1685 {
1686 ifail = 1;
1687 return;
1688 }
1689
1690 G4double oneOverDet = 1.0/det;
1691 G4double mn1OverDet = - oneOverDet;
1692
1693 m[A00] = Det5_12345_12345*oneOverDet;
1694 m[A01] = Det5_02345_12345*mn1OverDet;
1695 m[A02] = Det5_01345_12345*oneOverDet;
1696 m[A03] = Det5_01245_12345*mn1OverDet;
1697 m[A04] = Det5_01235_12345*oneOverDet;
1698 m[A05] = Det5_01234_12345*mn1OverDet;
1699
1700 m[A10] = Det5_12345_02345*mn1OverDet;
1701 m[A11] = Det5_02345_02345*oneOverDet;
1702 m[A12] = Det5_01345_02345*mn1OverDet;
1703 m[A13] = Det5_01245_02345*oneOverDet;
1704 m[A14] = Det5_01235_02345*mn1OverDet;
1705 m[A15] = Det5_01234_02345*oneOverDet;
1706
1707 m[A20] = Det5_12345_01345*oneOverDet;
1708 m[A21] = Det5_02345_01345*mn1OverDet;
1709 m[A22] = Det5_01345_01345*oneOverDet;
1710 m[A23] = Det5_01245_01345*mn1OverDet;
1711 m[A24] = Det5_01235_01345*oneOverDet;
1712 m[A25] = Det5_01234_01345*mn1OverDet;
1713
1714 m[A30] = Det5_12345_01245*mn1OverDet;
1715 m[A31] = Det5_02345_01245*oneOverDet;
1716 m[A32] = Det5_01345_01245*mn1OverDet;
1717 m[A33] = Det5_01245_01245*oneOverDet;
1718 m[A34] = Det5_01235_01245*mn1OverDet;
1719 m[A35] = Det5_01234_01245*oneOverDet;
1720
1721 m[A40] = Det5_12345_01235*oneOverDet;
1722 m[A41] = Det5_02345_01235*mn1OverDet;
1723 m[A42] = Det5_01345_01235*oneOverDet;
1724 m[A43] = Det5_01245_01235*mn1OverDet;
1725 m[A44] = Det5_01235_01235*oneOverDet;
1726 m[A45] = Det5_01234_01235*mn1OverDet;
1727
1728 m[A50] = Det5_12345_01234*mn1OverDet;
1729 m[A51] = Det5_02345_01234*oneOverDet;
1730 m[A52] = Det5_01345_01234*mn1OverDet;
1731 m[A53] = Det5_01245_01234*oneOverDet;
1732 m[A54] = Det5_01235_01234*mn1OverDet;
1733 m[A55] = Det5_01234_01234*oneOverDet;
1734
1735 return;
1736}
#define A41
#define A20
#define A01
#define A53
#define A23
#define A45
#define A13
#define A00
#define A54
#define A40
#define A25
#define A02
#define A24
#define A22
#define A04
#define A30
#define A12
#define A55
#define A35
#define A50
#define A03
#define A14
#define A51
#define A21
#define A11
#define A10
#define A44
#define A05
#define A32
#define A31
#define A33
#define A42
#define A52
#define A15
#define A34
#define A43

Referenced by invert().

◆ num_col()

virtual G4int G4ErrorMatrix::num_col ( ) const
inlinevirtual

◆ num_row()

◆ num_size()

virtual G4int G4ErrorMatrix::num_size ( ) const
inlineprotectedvirtual

◆ operator()() [1/2]

virtual G4double & G4ErrorMatrix::operator() ( G4int  row,
G4int  col 
)
inlinevirtual

◆ operator()() [2/2]

virtual const G4double & G4ErrorMatrix::operator() ( G4int  row,
G4int  col 
) const
inlinevirtual

◆ operator*=()

G4ErrorMatrix & G4ErrorMatrix::operator*= ( G4double  t)

Definition at line 325 of file G4ErrorMatrix.cc.

326{
327 SIMPLE_UOP(*=)
328 return (*this);
329}
#define SIMPLE_UOP(OPER)

◆ operator+=() [1/2]

G4ErrorMatrix & G4ErrorMatrix::operator+= ( const G4ErrorMatrix m2)

Definition at line 305 of file G4ErrorMatrix.cc.

306{
307 CHK_DIM_2(num_row(),mat2.num_row(),num_col(),mat2.num_col(),+=);
308 SIMPLE_BOP(+=)
309 return (*this);
310}
#define CHK_DIM_2(r1, r2, c1, c2, fun)
#define SIMPLE_BOP(OPER)

◆ operator+=() [2/2]

G4ErrorMatrix & G4ErrorMatrix::operator+= ( const G4ErrorSymMatrix m2)

Definition at line 401 of file G4ErrorSymMatrix.cc.

402{
403 CHK_DIM_2(num_row(),mat2.num_row(),num_col(),mat2.num_col(),+=);
404 G4int n = num_col();
405 G4ErrorMatrixConstIter sjk = mat2.m.begin();
406 G4ErrorMatrixIter m1j = m.begin();
407 G4ErrorMatrixIter mj = m.begin();
408 // j >= k
409 for(G4int j=1;j<=num_row();j++)
410 {
411 G4ErrorMatrixIter mjk = mj;
412 G4ErrorMatrixIter mkj = m1j;
413 for(G4int k=1;k<=j;k++)
414 {
415 *(mjk++) += *sjk;
416 if(j!=k) *mkj += *sjk;
417 sjk++;
418 mkj += n;
419 }
420 mj += n;
421 m1j++;
422 }
423 return (*this);
424}

◆ operator-()

G4ErrorMatrix G4ErrorMatrix::operator- ( ) const

Definition at line 214 of file G4ErrorMatrix.cc.

215{
216 G4ErrorMatrix mat2(nrow, ncol);
217 G4ErrorMatrixConstIter a=m.begin();
218 G4ErrorMatrixIter b=mat2.m.begin();
219 G4ErrorMatrixConstIter e=m.end();
220 for(;a<e; a++, b++) (*b) = -(*a);
221 return mat2;
222}

◆ operator-=() [1/2]

G4ErrorMatrix & G4ErrorMatrix::operator-= ( const G4ErrorMatrix m2)

Definition at line 312 of file G4ErrorMatrix.cc.

313{
314 CHK_DIM_2(num_row(),mat2.num_row(),num_col(),mat2.num_col(),-=);
315 SIMPLE_BOP(-=)
316 return (*this);
317}

◆ operator-=() [2/2]

G4ErrorMatrix & G4ErrorMatrix::operator-= ( const G4ErrorSymMatrix m2)

Definition at line 433 of file G4ErrorSymMatrix.cc.

434{
435 CHK_DIM_2(num_row(),mat2.num_row(),num_col(),mat2.num_col(),-=);
436 G4int n = num_col();
437 G4ErrorMatrixConstIter sjk = mat2.m.begin();
438 G4ErrorMatrixIter m1j = m.begin();
439 G4ErrorMatrixIter mj = m.begin();
440 // j >= k
441 for(G4int j=1;j<=num_row();j++)
442 {
443 G4ErrorMatrixIter mjk = mj;
444 G4ErrorMatrixIter mkj = m1j;
445 for(G4int k=1;k<=j;k++)
446 {
447 *(mjk++) -= *sjk;
448 if(j!=k) *mkj -= *sjk;
449 sjk++;
450 mkj += n;
451 }
452 mj += n;
453 m1j++;
454 }
455 return (*this);
456}

◆ operator/=()

G4ErrorMatrix & G4ErrorMatrix::operator/= ( G4double  t)

Definition at line 319 of file G4ErrorMatrix.cc.

320{
321 SIMPLE_UOP(/=)
322 return (*this);
323}

◆ operator=() [1/3]

G4ErrorMatrix & G4ErrorMatrix::operator= ( const G4ErrorMatrix m2)

Definition at line 331 of file G4ErrorMatrix.cc.

332{
333 if (&mat1 == this) { return *this; }
334
335 if(mat1.nrow*mat1.ncol != size) //??fixme?? mat1.size != size
336 {
337 size = mat1.nrow * mat1.ncol;
338 m.resize(size); //??fixme?? if (size < mat1.size) m.resize(mat1.size);
339 }
340 nrow = mat1.nrow;
341 ncol = mat1.ncol;
342 m = mat1.m;
343 return (*this);
344}

◆ operator=() [2/3]

G4ErrorMatrix & G4ErrorMatrix::operator= ( const G4ErrorSymMatrix m2)

Definition at line 477 of file G4ErrorSymMatrix.cc.

478{
479 if(mat1.nrow*mat1.nrow != size)
480 {
481 size = mat1.nrow * mat1.nrow;
482 m.resize(size);
483 }
484 nrow = mat1.nrow;
485 ncol = mat1.nrow;
486 G4int n = ncol;
487 G4ErrorMatrixConstIter sjk = mat1.m.begin();
488 G4ErrorMatrixIter m1j = m.begin();
489 G4ErrorMatrixIter mj = m.begin();
490 // j >= k
491 for(G4int j=1;j<=num_row();j++)
492 {
493 G4ErrorMatrixIter mjk = mj;
494 G4ErrorMatrixIter mkj = m1j;
495 for(G4int k=1;k<=j;k++)
496 {
497 *(mjk++) = *sjk;
498 if(j!=k) *mkj = *sjk;
499 sjk++;
500 mkj += n;
501 }
502 mj += n;
503 m1j++;
504 }
505 return (*this);
506}

◆ operator=() [3/3]

G4ErrorMatrix & G4ErrorMatrix::operator= ( G4ErrorMatrix &&  )
default

◆ operator[]() [1/2]

G4ErrorMatrix_row G4ErrorMatrix::operator[] ( G4int  )
inline

◆ operator[]() [2/2]

const G4ErrorMatrix_row_const G4ErrorMatrix::operator[] ( G4int  ) const
inline

◆ sub() [1/2]

G4ErrorMatrix G4ErrorMatrix::sub ( G4int  min_row,
G4int  max_row,
G4int  min_col,
G4int  max_col 
) const

Definition at line 154 of file G4ErrorMatrix.cc.

156{
157 G4ErrorMatrix mret(max_row-min_row+1,max_col-min_col+1);
158 if(max_row > num_row() || max_col >num_col())
159 { error("G4ErrorMatrix::sub: Index out of range"); }
160 G4ErrorMatrixIter a = mret.m.begin();
161 G4int nc = num_col();
162 G4ErrorMatrixConstIter b1 = m.begin() + (min_row - 1) * nc + min_col - 1;
163
164 for(G4int irow=1; irow<=mret.num_row(); irow++)
165 {
166 G4ErrorMatrixConstIter brc = b1;
167 for(G4int icol=1; icol<=mret.num_col(); icol++)
168 {
169 *(a++) = *(brc++);
170 }
171 b1 += nc;
172 }
173 return mret;
174}

Referenced by dsum().

◆ sub() [2/2]

void G4ErrorMatrix::sub ( G4int  row,
G4int  col,
const G4ErrorMatrix m1 
)

Definition at line 176 of file G4ErrorMatrix.cc.

177{
178 if(row <1 || row+mat1.num_row()-1 > num_row() ||
179 col <1 || col+mat1.num_col()-1 > num_col() )
180 { error("G4ErrorMatrix::sub: Index out of range"); }
181 G4ErrorMatrixConstIter a = mat1.m.begin();
182 G4int nc = num_col();
183 G4ErrorMatrixIter b1 = m.begin() + (row - 1) * nc + col - 1;
184
185 for(G4int irow=1; irow<=mat1.num_row(); irow++)
186 {
187 G4ErrorMatrixIter brc = b1;
188 for(G4int icol=1; icol<=mat1.num_col(); icol++)
189 {
190 *(brc++) = *(a++);
191 }
192 b1 += nc;
193 }
194}

◆ T()

G4ErrorMatrix G4ErrorMatrix::T ( ) const

Definition at line 373 of file G4ErrorMatrix.cc.

374{
375 G4ErrorMatrix mret(ncol,nrow);
376 G4ErrorMatrixConstIter pl = m.end();
377 G4ErrorMatrixConstIter pme = m.begin();
378 G4ErrorMatrixIter pt = mret.m.begin();
379 G4ErrorMatrixIter ptl = mret.m.end();
380 for (; pme < pl; pme++, pt+=nrow)
381 {
382 if (pt >= ptl) { pt -= (size-1); }
383 (*pt) = (*pme);
384 }
385 return mret;
386}

Referenced by G4ErrorFreeTrajState::PropagateError().

◆ trace()

G4double G4ErrorMatrix::trace ( ) const

Definition at line 794 of file G4ErrorMatrix.cc.

795{
796 G4double t = 0.0;
797 for (G4ErrorMatrixConstIter d = m.begin(); d < m.end(); d += (ncol+1) )
798 {
799 t += *d;
800 }
801 return t;
802}

Friends And Related Function Documentation

◆ back_solve

void back_solve ( const G4ErrorMatrix R,
G4ErrorMatrix b 
)
friend

◆ col_givens

void col_givens ( G4ErrorMatrix A,
G4double  c,
G4double  s,
G4int  k1,
G4int  k2,
G4int  rowmin,
G4int  rowmax 
)
friend

◆ col_house

void col_house ( G4ErrorMatrix ,
const G4ErrorMatrix ,
G4double  ,
G4int  ,
G4int  ,
G4int  ,
G4int   
)
friend

◆ G4ErrorMatrix_row

friend class G4ErrorMatrix_row
friend

Definition at line 176 of file G4ErrorMatrix.hh.

◆ G4ErrorMatrix_row_const

friend class G4ErrorMatrix_row_const
friend

Definition at line 177 of file G4ErrorMatrix.hh.

◆ G4ErrorSymMatrix

friend class G4ErrorSymMatrix
friend

Definition at line 178 of file G4ErrorMatrix.hh.

◆ house_with_update [1/2]

void house_with_update ( G4ErrorMatrix a,
G4ErrorMatrix v,
G4int  row,
G4int  col 
)
friend

◆ house_with_update [2/2]

void house_with_update ( G4ErrorMatrix a,
G4int  row,
G4int  col 
)
friend

◆ house_with_update2

void house_with_update2 ( G4ErrorSymMatrix a,
G4ErrorMatrix v,
G4int  row,
G4int  col 
)
friend

◆ operator* [1/4]

G4ErrorMatrix operator* ( const G4ErrorMatrix m1,
const G4ErrorMatrix m2 
)
friend

Definition at line 271 of file G4ErrorMatrix.cc.

272{
273 // initialize matrix to 0.0
274 G4ErrorMatrix mret(mat1.nrow,mat2.ncol,0);
275 CHK_DIM_1(mat1.ncol,mat2.nrow,*);
276
277 G4int m1cols = mat1.ncol;
278 G4int m2cols = mat2.ncol;
279
280 for (G4int i=0; i<mat1.nrow; i++)
281 {
282 for (G4int j=0; j<m1cols; j++)
283 {
284 G4double temp = mat1.m[i*m1cols+j];
285 G4ErrorMatrixIter pt = mret.m.begin() + i*m2cols;
286
287 // Loop over k (the column index in matrix mat2)
288 G4ErrorMatrixConstIter pb = mat2.m.begin() + m2cols*j;
289 const G4ErrorMatrixConstIter pblast = pb + m2cols;
290 while (pb < pblast) // Loop checking, 06.08.2015, G.Cosmo
291 {
292 (*pt) += temp * (*pb);
293 pb++;
294 pt++;
295 }
296 }
297 }
298 return mret;
299}
#define CHK_DIM_1(c1, r2, fun)

◆ operator* [2/4]

G4ErrorMatrix operator* ( const G4ErrorMatrix m1,
const G4ErrorSymMatrix m2 
)
friend

Definition at line 286 of file G4ErrorSymMatrix.cc.

287{
288 G4ErrorMatrix mret(mat1.num_row(),mat2.num_col());
289 CHK_DIM_1(mat1.num_col(),mat2.num_row(),*);
290 G4ErrorMatrixConstIter mit1, mit2, sp,snp; //mit2=0
291 G4double temp;
292 G4ErrorMatrixIter mir=mret.m.begin();
293 for(mit1=mat1.m.begin();
294 mit1<mat1.m.begin()+mat1.num_row()*mat1.num_col();
295 mit1 = mit2)
296 {
297 snp=mat2.m.begin();
298 for(int step=1;step<=mat2.num_row();++step)
299 {
300 mit2=mit1;
301 sp=snp;
302 snp+=step;
303 temp=0;
304 while(sp<snp) // Loop checking, 06.08.2015, G.Cosmo
305 { temp+=*(sp++)*(*(mit2++)); }
306 if( step<mat2.num_row() ) { // only if we aren't on the last row
307 sp+=step-1;
308 for(int stept=step+1;stept<=mat2.num_row();stept++)
309 {
310 temp+=*sp*(*(mit2++));
311 if(stept<mat2.num_row()) sp+=stept;
312 }
313 } // if(step
314 *(mir++)=temp;
315 } // for(step
316 } // for(mit1
317 return mret;
318}

◆ operator* [3/4]

G4ErrorMatrix operator* ( const G4ErrorSymMatrix m1,
const G4ErrorMatrix m2 
)
friend

Definition at line 320 of file G4ErrorSymMatrix.cc.

321{
322 G4ErrorMatrix mret(mat1.num_row(),mat2.num_col());
323 CHK_DIM_1(mat1.num_col(),mat2.num_row(),*);
324 G4int step,stept;
325 G4ErrorMatrixConstIter mit1,mit2,sp,snp;
326 G4double temp;
327 G4ErrorMatrixIter mir=mret.m.begin();
328 for(step=1,snp=mat1.m.begin();step<=mat1.num_row();snp+=step++)
329 {
330 for(mit1=mat2.m.begin();mit1<mat2.m.begin()+mat2.num_col();mit1++)
331 {
332 mit2=mit1;
333 sp=snp;
334 temp=0;
335 while(sp<snp+step) // Loop checking, 06.08.2015, G.Cosmo
336 {
337 temp+=*mit2*(*(sp++));
338 mit2+=mat2.num_col();
339 }
340 sp+=step-1;
341 for(stept=step+1;stept<=mat1.num_row();stept++)
342 {
343 temp+=*mit2*(*sp);
344 mit2+=mat2.num_col();
345 sp+=stept;
346 }
347 *(mir++)=temp;
348 }
349 }
350 return mret;
351}

◆ operator* [4/4]

G4ErrorMatrix operator* ( const G4ErrorSymMatrix m1,
const G4ErrorSymMatrix m2 
)
friend

Definition at line 353 of file G4ErrorSymMatrix.cc.

354{
355 G4ErrorMatrix mret(mat1.num_row(),mat1.num_row());
356 CHK_DIM_1(mat1.num_col(),mat2.num_row(),*);
357 G4int step1,stept1,step2,stept2;
358 G4ErrorMatrixConstIter snp1,sp1,snp2,sp2;
359 G4double temp;
360 G4ErrorMatrixIter mr = mret.m.begin();
361 for(step1=1,snp1=mat1.m.begin();step1<=mat1.num_row();snp1+=step1++)
362 {
363 for(step2=1,snp2=mat2.m.begin();step2<=mat2.num_row();)
364 {
365 sp1=snp1;
366 sp2=snp2;
367 snp2+=step2;
368 temp=0;
369 if(step1<step2)
370 {
371 while(sp1<snp1+step1) // Loop checking, 06.08.2015, G.Cosmo
372 { temp+=(*(sp1++))*(*(sp2++)); }
373 sp1+=step1-1;
374 for(stept1=step1+1;stept1!=step2+1;sp1+=stept1++)
375 { temp+=(*sp1)*(*(sp2++)); }
376 sp2+=step2-1;
377 for(stept2=++step2;stept2<=mat2.num_row();sp1+=stept1++,sp2+=stept2++)
378 { temp+=(*sp1)*(*sp2); }
379 }
380 else
381 {
382 while(sp2<snp2) // Loop checking, 06.08.2015, G.Cosmo
383 { temp+=(*(sp1++))*(*(sp2++)); }
384 sp2+=step2-1;
385 for(stept2=++step2;stept2!=step1+1;sp2+=stept2++)
386 { temp+=(*(sp1++))*(*sp2); }
387 sp1+=step1-1;
388 for(stept1=step1+1;stept1<=mat1.num_row();sp1+=stept1++,sp2+=stept2++)
389 { temp+=(*sp1)*(*sp2); }
390 }
391 *(mr++)=temp;
392 }
393 }
394 return mret;
395}

◆ operator+

G4ErrorMatrix operator+ ( const G4ErrorMatrix m1,
const G4ErrorMatrix m2 
)
friend

Definition at line 224 of file G4ErrorMatrix.cc.

225{
226 G4ErrorMatrix mret(mat1.nrow, mat1.ncol);
227 CHK_DIM_2(mat1.num_row(),mat2.num_row(), mat1.num_col(),mat2.num_col(),+);
228 SIMPLE_TOP(+)
229 return mret;
230}
#define SIMPLE_TOP(OPER)

◆ operator-

G4ErrorMatrix operator- ( const G4ErrorMatrix m1,
const G4ErrorMatrix m2 
)
friend

Definition at line 236 of file G4ErrorMatrix.cc.

237{
238 G4ErrorMatrix mret(mat1.num_row(), mat1.num_col());
239 CHK_DIM_2(mat1.num_row(),mat2.num_row(),
240 mat1.num_col(),mat2.num_col(),-);
241 SIMPLE_TOP(-)
242 return mret;
243}

◆ qr_solve

G4ErrorMatrix qr_solve ( G4ErrorMatrix ,
const G4ErrorMatrix b 
)
friend

◆ row_givens

void row_givens ( G4ErrorMatrix A,
G4double  c,
G4double  s,
G4int  k1,
G4int  k2,
G4int  colmin,
G4int  colmax 
)
friend

◆ row_house

void row_house ( G4ErrorMatrix ,
const G4ErrorMatrix ,
G4double  ,
G4int  ,
G4int  ,
G4int  ,
G4int   
)
friend

◆ tridiagonal

void tridiagonal ( G4ErrorSymMatrix a,
G4ErrorMatrix hsm 
)
friend

The documentation for this class was generated from the following files: