aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas White <taw@physics.org>2012-10-15 18:51:37 +0200
committerThomas White <taw@physics.org>2012-10-15 18:51:37 +0200
commit4548f166eeb7d29f28793b39ede58cafaa2b64f8 (patch)
treedc251db80f0d1c40a1a4bbdda2c7c9c582e8670f
parenta9212e954c49c0c8e0227bf5309177b3aadbb8e1 (diff)
Add intmat_is_identity()
-rw-r--r--libcrystfel/src/integer_matrix.c31
-rw-r--r--libcrystfel/src/integer_matrix.h3
2 files changed, 34 insertions, 0 deletions
diff --git a/libcrystfel/src/integer_matrix.c b/libcrystfel/src/integer_matrix.c
index f975fa8b..c8849dda 100644
--- a/libcrystfel/src/integer_matrix.c
+++ b/libcrystfel/src/integer_matrix.c
@@ -375,3 +375,34 @@ void intmat_print(const IntegerMatrix *m)
fprintf(stderr, "]\n");
}
}
+
+
+/**
+ * intmat_is_identity
+ * @m: An %IntegerMatrix
+ *
+ * Returns true if @m is an identity matrix.
+ *
+ */
+int intmat_is_identity(const IntegerMatrix *m)
+{
+ int i, j;
+
+ for ( i=0; i<m->rows; i++ ) {
+ for ( j=0; j<m->cols; j++ ) {
+
+ signed int v;
+
+ v = intmat_get(m, i, j);
+
+ if ( i == j ) {
+ if ( v != 1 ) return 0;
+ } else {
+ if ( v != 0 ) return 0;
+ }
+
+ }
+ }
+
+ return 1;
+}
diff --git a/libcrystfel/src/integer_matrix.h b/libcrystfel/src/integer_matrix.h
index 1c930720..f413573a 100644
--- a/libcrystfel/src/integer_matrix.h
+++ b/libcrystfel/src/integer_matrix.h
@@ -65,6 +65,9 @@ extern IntegerMatrix *intmat_inverse(const IntegerMatrix *m);
/* Determinant */
extern signed int intmat_det(const IntegerMatrix *m);
+/* Is identity? */
+extern int intmat_is_identity(const IntegerMatrix *m);
+
/* Diagnostics */
extern void intmat_print(const IntegerMatrix *m);