Geant4.10
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Data Structures | Public Member Functions | Static Public Member Functions | Protected Member Functions | Friends
G4ErrorMatrix Class Reference

#include <G4ErrorMatrix.hh>

Data Structures

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 (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)
 
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::G4ErrorMatrix ( )
G4ErrorMatrix::G4ErrorMatrix ( G4int  p,
G4int  q 
)

Definition at line 74 of file G4ErrorMatrix.cc.

75  : m(p*q), nrow(p), ncol(q)
76 {
77  size = nrow * ncol;
78 }
const char * p
Definition: xmltok.h:285
G4ErrorMatrix::G4ErrorMatrix ( G4int  p,
G4int  q,
G4int  i 
)

Definition at line 80 of file G4ErrorMatrix.cc.

References test::a, test::b, and error().

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

Definition at line 117 of file G4ErrorMatrix.cc.

118  : m(mat1.size), nrow(mat1.nrow), ncol(mat1.ncol), size(mat1.size)
119 {
120  m = mat1.m;
121 }
G4ErrorMatrix::G4ErrorMatrix ( const G4ErrorSymMatrix m1)

Definition at line 123 of file G4ErrorMatrix.cc.

References n.

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

Definition at line 113 of file G4ErrorMatrix.cc.

114 {
115 }

Member Function Documentation

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

Definition at line 390 of file G4ErrorMatrix.cc.

References test::a, test::b, num_col(), and num_row().

391 {
392  G4ErrorMatrix mret(num_row(),num_col());
393  G4ErrorMatrixConstIter a = m.begin();
394  G4ErrorMatrixIter b = mret.m.begin();
395  for(G4int ir=1;ir<=num_row();ir++)
396  {
397  for(G4int ic=1;ic<=num_col();ic++)
398  {
399  *(b++) = (*f)(*(a++), ir, ic);
400  }
401  }
402  return mret;
403 }
virtual G4int num_row() const
virtual G4int num_col() const
int G4int
Definition: G4Types.hh:78
std::vector< G4double >::const_iterator G4ErrorMatrixConstIter
std::vector< G4double >::iterator G4ErrorMatrixIter
G4double G4ErrorMatrix::determinant ( ) const

Definition at line 776 of file G4ErrorMatrix.cc.

References error(), and G4ThreadLocal.

777 {
778  static G4ThreadLocal G4int max_array = 20;
779  static G4ThreadLocal G4int *ir = 0 ; if (!ir) ir= new G4int [max_array+1];
780  if(ncol != nrow)
781  { error("G4ErrorMatrix::determinant: G4ErrorMatrix is not NxN"); }
782  if (ncol > max_array)
783  {
784  delete [] ir;
785  max_array = nrow;
786  ir = new G4int [max_array+1];
787  }
788  G4double det;
789  G4ErrorMatrix mt(*this);
790  G4int i = mt.dfact_matrix(det, ir);
791  if(i==0) return det;
792  return 0;
793 }
#define G4ThreadLocal
Definition: tls.hh:52
int G4int
Definition: G4Types.hh:78
static void error(const char *s)
double G4double
Definition: G4Types.hh:76
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(), sub(), and G4ErrorSymMatrix::sub().

806 {
807  G4cerr << msg << G4endl;
808  G4cerr << "---Exiting to System." << G4endl;
809  abort();
810 }
#define G4endl
Definition: G4ios.hh:61
G4GLOB_DLL std::ostream G4cerr
G4ErrorMatrix G4ErrorMatrix::inverse ( G4int ierr) const
inline
void G4ErrorMatrix::invert ( G4int ierr)
virtual

Definition at line 645 of file G4ErrorMatrix.cc.

References error(), G4ThreadLocal, invertHaywood4(), invertHaywood5(), invertHaywood6(), and plottest35::t1.

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

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().

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 F33
#define F13
#define F00
#define F30
#define F22
#define F11
#define F20
#define F23
#define F10
#define F32
#define F02
#define F01
#define F03
#define F12
double G4double
Definition: G4Types.hh:76
#define F31
#define F21
void G4ErrorMatrix::invertHaywood5 ( G4int ierr)
protectedvirtual

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().

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 M30
#define M04
#define M43
#define M44
#define M03
#define M31
#define M13
#define M01
#define M34
#define M14
#define M41
#define M40
#define M12
#define M24
#define M00
#define M21
#define M42
#define M23
#define M22
double G4double
Definition: G4Types.hh:76
#define M10
#define M33
#define M32
#define M02
#define M11
#define M20
void G4ErrorMatrix::invertHaywood6 ( G4int ierr)
protectedvirtual

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().

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 A21
#define A14
#define A42
#define A13
#define A01
#define A00
#define A31
#define A22
#define A10
#define A52
#define A50
#define A12
#define A54
#define A25
#define A03
#define A35
#define A02
#define A55
#define A30
#define A45
#define A15
#define A43
#define A32
#define A23
#define A53
#define A04
#define A40
#define A05
#define A51
#define A41
#define A34
#define A11
#define A33
#define A24
#define A44
double G4double
Definition: G4Types.hh:76
#define A20
virtual G4int G4ErrorMatrix::num_col ( ) const
inlinevirtual
virtual G4int G4ErrorMatrix::num_row ( ) const
inlinevirtual
virtual G4int G4ErrorMatrix::num_size ( ) const
inlineprotectedvirtual
virtual const G4double& G4ErrorMatrix::operator() ( G4int  row,
G4int  col 
) const
inlinevirtual
virtual G4double& G4ErrorMatrix::operator() ( G4int  row,
G4int  col 
)
inlinevirtual
G4ErrorMatrix & G4ErrorMatrix::operator*= ( G4double  t)

Definition at line 326 of file G4ErrorMatrix.cc.

References SIMPLE_UOP.

327 {
328  SIMPLE_UOP(*=)
329  return (*this);
330 }
#define SIMPLE_UOP(OPER)
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.

307 {
308  CHK_DIM_2(num_row(),mat2.num_row(),num_col(),mat2.num_col(),+=);
309  SIMPLE_BOP(+=)
310  return (*this);
311 }
virtual G4int num_row() const
#define CHK_DIM_2(r1, r2, c1, c2, fun)
virtual G4int num_col() const
#define SIMPLE_BOP(OPER)
G4ErrorMatrix & G4ErrorMatrix::operator+= ( const G4ErrorSymMatrix m2)

Definition at line 402 of file G4ErrorSymMatrix.cc.

References CHK_DIM_2, n, G4ErrorSymMatrix::num_col(), num_col(), G4ErrorSymMatrix::num_row(), and num_row().

403 {
404  CHK_DIM_2(num_row(),mat2.num_row(),num_col(),mat2.num_col(),+=);
405  G4int n = num_col();
406  G4ErrorMatrixConstIter sjk = mat2.m.begin();
407  G4ErrorMatrixIter m1j = m.begin();
408  G4ErrorMatrixIter mj = m.begin();
409  // j >= k
410  for(G4int j=1;j<=num_row();j++)
411  {
412  G4ErrorMatrixIter mjk = mj;
413  G4ErrorMatrixIter mkj = m1j;
414  for(G4int k=1;k<=j;k++)
415  {
416  *(mjk++) += *sjk;
417  if(j!=k) *mkj += *sjk;
418  sjk++;
419  mkj += n;
420  }
421  mj += n;
422  m1j++;
423  }
424  return (*this);
425 }
virtual G4int num_row() const
virtual G4int num_col() const
int G4int
Definition: G4Types.hh:78
std::vector< G4double >::const_iterator G4ErrorMatrixConstIter
const G4int n
std::vector< G4double >::iterator G4ErrorMatrixIter
#define CHK_DIM_2(r1, r2, c1, c2, fun)
G4ErrorMatrix G4ErrorMatrix::operator- ( ) const

Definition at line 215 of file G4ErrorMatrix.cc.

References test::a, and test::b.

216 {
217  G4ErrorMatrix mat2(nrow, ncol);
218  G4ErrorMatrixConstIter a=m.begin();
219  G4ErrorMatrixIter b=mat2.m.begin();
220  G4ErrorMatrixConstIter e=m.end();
221  for(;a<e; a++, b++) (*b) = -(*a);
222  return mat2;
223 }
std::vector< G4double >::const_iterator G4ErrorMatrixConstIter
std::vector< G4double >::iterator G4ErrorMatrixIter
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.

314 {
315  CHK_DIM_2(num_row(),mat2.num_row(),num_col(),mat2.num_col(),-=);
316  SIMPLE_BOP(-=)
317  return (*this);
318 }
virtual G4int num_row() const
#define CHK_DIM_2(r1, r2, c1, c2, fun)
virtual G4int num_col() const
#define SIMPLE_BOP(OPER)
G4ErrorMatrix & G4ErrorMatrix::operator-= ( const G4ErrorSymMatrix m2)

Definition at line 434 of file G4ErrorSymMatrix.cc.

References CHK_DIM_2, n, G4ErrorSymMatrix::num_col(), num_col(), G4ErrorSymMatrix::num_row(), and num_row().

435 {
436  CHK_DIM_2(num_row(),mat2.num_row(),num_col(),mat2.num_col(),-=);
437  G4int n = num_col();
438  G4ErrorMatrixConstIter sjk = mat2.m.begin();
439  G4ErrorMatrixIter m1j = m.begin();
440  G4ErrorMatrixIter mj = m.begin();
441  // j >= k
442  for(G4int j=1;j<=num_row();j++)
443  {
444  G4ErrorMatrixIter mjk = mj;
445  G4ErrorMatrixIter mkj = m1j;
446  for(G4int k=1;k<=j;k++)
447  {
448  *(mjk++) -= *sjk;
449  if(j!=k) *mkj -= *sjk;
450  sjk++;
451  mkj += n;
452  }
453  mj += n;
454  m1j++;
455  }
456  return (*this);
457 }
virtual G4int num_row() const
virtual G4int num_col() const
int G4int
Definition: G4Types.hh:78
std::vector< G4double >::const_iterator G4ErrorMatrixConstIter
const G4int n
std::vector< G4double >::iterator G4ErrorMatrixIter
#define CHK_DIM_2(r1, r2, c1, c2, fun)
G4ErrorMatrix & G4ErrorMatrix::operator/= ( G4double  t)

Definition at line 320 of file G4ErrorMatrix.cc.

References SIMPLE_UOP.

321 {
322  SIMPLE_UOP(/=)
323  return (*this);
324 }
#define SIMPLE_UOP(OPER)
G4ErrorMatrix & G4ErrorMatrix::operator= ( const G4ErrorMatrix m2)

Definition at line 332 of file G4ErrorMatrix.cc.

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

Definition at line 478 of file G4ErrorSymMatrix.cc.

References n, and num_row().

479 {
480  if(mat1.nrow*mat1.nrow != size)
481  {
482  size = mat1.nrow * mat1.nrow;
483  m.resize(size);
484  }
485  nrow = mat1.nrow;
486  ncol = mat1.nrow;
487  G4int n = ncol;
488  G4ErrorMatrixConstIter sjk = mat1.m.begin();
489  G4ErrorMatrixIter m1j = m.begin();
490  G4ErrorMatrixIter mj = m.begin();
491  // j >= k
492  for(G4int j=1;j<=num_row();j++)
493  {
494  G4ErrorMatrixIter mjk = mj;
495  G4ErrorMatrixIter mkj = m1j;
496  for(G4int k=1;k<=j;k++)
497  {
498  *(mjk++) = *sjk;
499  if(j!=k) *mkj = *sjk;
500  sjk++;
501  mkj += n;
502  }
503  mj += n;
504  m1j++;
505  }
506  return (*this);
507 }
virtual G4int num_row() const
int G4int
Definition: G4Types.hh:78
std::vector< G4double >::const_iterator G4ErrorMatrixConstIter
const G4int n
std::vector< G4double >::iterator G4ErrorMatrixIter
G4ErrorMatrix_row G4ErrorMatrix::operator[] ( G4int  )
inline
const G4ErrorMatrix_row_const G4ErrorMatrix::operator[] ( G4int  ) const
inline
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 test::a, error(), num_col(), and num_row().

Referenced by dsum().

157 {
158  G4ErrorMatrix mret(max_row-min_row+1,max_col-min_col+1);
159  if(max_row > num_row() || max_col >num_col())
160  { error("G4ErrorMatrix::sub: Index out of range"); }
161  G4ErrorMatrixIter a = mret.m.begin();
162  G4int nc = num_col();
163  G4ErrorMatrixConstIter b1 = m.begin() + (min_row - 1) * nc + min_col - 1;
164 
165  for(G4int irow=1; irow<=mret.num_row(); irow++)
166  {
167  G4ErrorMatrixConstIter brc = b1;
168  for(G4int icol=1; icol<=mret.num_col(); icol++)
169  {
170  *(a++) = *(brc++);
171  }
172  b1 += nc;
173  }
174  return mret;
175 }
virtual G4int num_row() const
virtual G4int num_col() const
int G4int
Definition: G4Types.hh:78
std::vector< G4double >::const_iterator G4ErrorMatrixConstIter
static void error(const char *s)
std::vector< G4double >::iterator G4ErrorMatrixIter
void G4ErrorMatrix::sub ( G4int  row,
G4int  col,
const G4ErrorMatrix m1 
)

Definition at line 177 of file G4ErrorMatrix.cc.

References test::a, error(), num_col(), and num_row().

178 {
179  if(row <1 || row+mat1.num_row()-1 > num_row() ||
180  col <1 || col+mat1.num_col()-1 > num_col() )
181  { error("G4ErrorMatrix::sub: Index out of range"); }
182  G4ErrorMatrixConstIter a = mat1.m.begin();
183  G4int nc = num_col();
184  G4ErrorMatrixIter b1 = m.begin() + (row - 1) * nc + col - 1;
185 
186  for(G4int irow=1; irow<=mat1.num_row(); irow++)
187  {
188  G4ErrorMatrixIter brc = b1;
189  for(G4int icol=1; icol<=mat1.num_col(); icol++)
190  {
191  *(brc++) = *(a++);
192  }
193  b1 += nc;
194  }
195 }
virtual G4int num_row() const
virtual G4int num_col() const
int G4int
Definition: G4Types.hh:78
std::vector< G4double >::const_iterator G4ErrorMatrixConstIter
static void error(const char *s)
std::vector< G4double >::iterator G4ErrorMatrixIter
G4ErrorMatrix G4ErrorMatrix::T ( ) const

Definition at line 374 of file G4ErrorMatrix.cc.

References readPY::pl.

Referenced by G4ErrorFreeTrajState::PropagateError().

375 {
376  G4ErrorMatrix mret(ncol,nrow);
377  G4ErrorMatrixConstIter pl = m.end();
378  G4ErrorMatrixConstIter pme = m.begin();
379  G4ErrorMatrixIter pt = mret.m.begin();
380  G4ErrorMatrixIter ptl = mret.m.end();
381  for (; pme < pl; pme++, pt+=nrow)
382  {
383  if (pt >= ptl) { pt -= (size-1); }
384  (*pt) = (*pme);
385  }
386  return mret;
387 }
std::vector< G4double >::const_iterator G4ErrorMatrixConstIter
tuple pl
Definition: readPY.py:5
std::vector< G4double >::iterator G4ErrorMatrixIter
G4double G4ErrorMatrix::trace ( ) const

Definition at line 795 of file G4ErrorMatrix.cc.

796 {
797  G4double t = 0.0;
798  for (G4ErrorMatrixConstIter d = m.begin(); d < m.end(); d += (ncol+1) )
799  {
800  t += *d;
801  }
802  return t;
803 }
std::vector< G4double >::const_iterator G4ErrorMatrixConstIter
double G4double
Definition: G4Types.hh:76

Friends And Related Function Documentation

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,
G4int  row,
G4int  col 
)
friend
void house_with_update ( G4ErrorMatrix a,
G4ErrorMatrix v,
G4int  row,
G4int  col 
)
friend
void house_with_update2 ( G4ErrorSymMatrix a,
G4ErrorMatrix v,
G4int  row,
G4int  col 
)
friend
G4ErrorMatrix operator* ( const G4ErrorMatrix m1,
const G4ErrorMatrix m2 
)
friend

Definition at line 272 of file G4ErrorMatrix.cc.

273 {
274  // initialize matrix to 0.0
275  G4ErrorMatrix mret(mat1.nrow,mat2.ncol,0);
276  CHK_DIM_1(mat1.ncol,mat2.nrow,*);
277 
278  G4int m1cols = mat1.ncol;
279  G4int m2cols = mat2.ncol;
280 
281  for (G4int i=0; i<mat1.nrow; i++)
282  {
283  for (G4int j=0; j<m1cols; j++)
284  {
285  G4double temp = mat1.m[i*m1cols+j];
286  G4ErrorMatrixIter pt = mret.m.begin() + i*m2cols;
287 
288  // Loop over k (the column index in matrix mat2)
289  G4ErrorMatrixConstIter pb = mat2.m.begin() + m2cols*j;
290  const G4ErrorMatrixConstIter pblast = pb + m2cols;
291  while (pb < pblast)
292  {
293  (*pt) += temp * (*pb);
294  pb++;
295  pt++;
296  }
297  }
298  }
299  return mret;
300 }
#define CHK_DIM_1(c1, r2, fun)
int G4int
Definition: G4Types.hh:78
std::vector< G4double >::const_iterator G4ErrorMatrixConstIter
std::vector< G4double >::iterator G4ErrorMatrixIter
double G4double
Definition: G4Types.hh:76
G4ErrorMatrix operator* ( const G4ErrorMatrix m1,
const G4ErrorSymMatrix m2 
)
friend

Definition at line 287 of file G4ErrorSymMatrix.cc.

288 {
289  G4ErrorMatrix mret(mat1.num_row(),mat2.num_col());
290  CHK_DIM_1(mat1.num_col(),mat2.num_row(),*);
291  G4ErrorMatrixConstIter mit1, mit2, sp,snp; //mit2=0
292  G4double temp;
293  G4ErrorMatrixIter mir=mret.m.begin();
294  for(mit1=mat1.m.begin();
295  mit1<mat1.m.begin()+mat1.num_row()*mat1.num_col();
296  mit1 = mit2)
297  {
298  snp=mat2.m.begin();
299  for(int step=1;step<=mat2.num_row();++step)
300  {
301  mit2=mit1;
302  sp=snp;
303  snp+=step;
304  temp=0;
305  while(sp<snp)
306  temp+=*(sp++)*(*(mit2++));
307  if( step<mat2.num_row() ) { // only if we aren't on the last row
308  sp+=step-1;
309  for(int stept=step+1;stept<=mat2.num_row();stept++)
310  {
311  temp+=*sp*(*(mit2++));
312  if(stept<mat2.num_row()) sp+=stept;
313  }
314  } // if(step
315  *(mir++)=temp;
316  } // for(step
317  } // for(mit1
318  return mret;
319 }
std::vector< G4double >::const_iterator G4ErrorMatrixConstIter
#define CHK_DIM_1(c1, r2, fun)
std::vector< G4double >::iterator G4ErrorMatrixIter
double G4double
Definition: G4Types.hh:76
G4ErrorMatrix operator* ( const G4ErrorSymMatrix m1,
const G4ErrorMatrix m2 
)
friend

Definition at line 321 of file G4ErrorSymMatrix.cc.

322 {
323  G4ErrorMatrix mret(mat1.num_row(),mat2.num_col());
324  CHK_DIM_1(mat1.num_col(),mat2.num_row(),*);
325  G4int step,stept;
326  G4ErrorMatrixConstIter mit1,mit2,sp,snp;
327  G4double temp;
328  G4ErrorMatrixIter mir=mret.m.begin();
329  for(step=1,snp=mat1.m.begin();step<=mat1.num_row();snp+=step++)
330  {
331  for(mit1=mat2.m.begin();mit1<mat2.m.begin()+mat2.num_col();mit1++)
332  {
333  mit2=mit1;
334  sp=snp;
335  temp=0;
336  while(sp<snp+step)
337  {
338  temp+=*mit2*(*(sp++));
339  mit2+=mat2.num_col();
340  }
341  sp+=step-1;
342  for(stept=step+1;stept<=mat1.num_row();stept++)
343  {
344  temp+=*mit2*(*sp);
345  mit2+=mat2.num_col();
346  sp+=stept;
347  }
348  *(mir++)=temp;
349  }
350  }
351  return mret;
352 }
int G4int
Definition: G4Types.hh:78
std::vector< G4double >::const_iterator G4ErrorMatrixConstIter
#define CHK_DIM_1(c1, r2, fun)
std::vector< G4double >::iterator G4ErrorMatrixIter
double G4double
Definition: G4Types.hh:76
G4ErrorMatrix operator* ( const G4ErrorSymMatrix m1,
const G4ErrorSymMatrix m2 
)
friend

Definition at line 354 of file G4ErrorSymMatrix.cc.

355 {
356  G4ErrorMatrix mret(mat1.num_row(),mat1.num_row());
357  CHK_DIM_1(mat1.num_col(),mat2.num_row(),*);
358  G4int step1,stept1,step2,stept2;
359  G4ErrorMatrixConstIter snp1,sp1,snp2,sp2;
360  G4double temp;
361  G4ErrorMatrixIter mr = mret.m.begin();
362  for(step1=1,snp1=mat1.m.begin();step1<=mat1.num_row();snp1+=step1++)
363  {
364  for(step2=1,snp2=mat2.m.begin();step2<=mat2.num_row();)
365  {
366  sp1=snp1;
367  sp2=snp2;
368  snp2+=step2;
369  temp=0;
370  if(step1<step2)
371  {
372  while(sp1<snp1+step1)
373  { temp+=(*(sp1++))*(*(sp2++)); }
374  sp1+=step1-1;
375  for(stept1=step1+1;stept1!=step2+1;sp1+=stept1++)
376  { temp+=(*sp1)*(*(sp2++)); }
377  sp2+=step2-1;
378  for(stept2=++step2;stept2<=mat2.num_row();sp1+=stept1++,sp2+=stept2++)
379  { temp+=(*sp1)*(*sp2); }
380  }
381  else
382  {
383  while(sp2<snp2)
384  { temp+=(*(sp1++))*(*(sp2++)); }
385  sp2+=step2-1;
386  for(stept2=++step2;stept2!=step1+1;sp2+=stept2++)
387  { temp+=(*(sp1++))*(*sp2); }
388  sp1+=step1-1;
389  for(stept1=step1+1;stept1<=mat1.num_row();sp1+=stept1++,sp2+=stept2++)
390  { temp+=(*sp1)*(*sp2); }
391  }
392  *(mr++)=temp;
393  }
394  }
395  return mret;
396 }
int G4int
Definition: G4Types.hh:78
std::vector< G4double >::const_iterator G4ErrorMatrixConstIter
#define CHK_DIM_1(c1, r2, fun)
std::vector< G4double >::iterator G4ErrorMatrixIter
double G4double
Definition: G4Types.hh:76
G4ErrorMatrix operator+ ( const G4ErrorMatrix m1,
const G4ErrorMatrix m2 
)
friend

Definition at line 225 of file G4ErrorMatrix.cc.

226 {
227  G4ErrorMatrix mret(mat1.nrow, mat1.ncol);
228  CHK_DIM_2(mat1.num_row(),mat2.num_row(), mat1.num_col(),mat2.num_col(),+);
229  SIMPLE_TOP(+)
230  return mret;
231 }
#define CHK_DIM_2(r1, r2, c1, c2, fun)
#define SIMPLE_TOP(OPER)
G4ErrorMatrix operator- ( const G4ErrorMatrix m1,
const G4ErrorMatrix m2 
)
friend

Definition at line 237 of file G4ErrorMatrix.cc.

238 {
239  G4ErrorMatrix mret(mat1.num_row(), mat1.num_col());
240  CHK_DIM_2(mat1.num_row(),mat2.num_row(),
241  mat1.num_col(),mat2.num_col(),-);
242  SIMPLE_TOP(-)
243  return mret;
244 }
#define CHK_DIM_2(r1, r2, c1, c2, fun)
#define SIMPLE_TOP(OPER)
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

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