aboutsummaryrefslogtreecommitdiff
path: root/libcrystfel
diff options
context:
space:
mode:
Diffstat (limited to 'libcrystfel')
-rw-r--r--libcrystfel/src/integer_matrix.c31
-rw-r--r--libcrystfel/src/integer_matrix.h1
2 files changed, 32 insertions, 0 deletions
diff --git a/libcrystfel/src/integer_matrix.c b/libcrystfel/src/integer_matrix.c
index 018f0ca6..c31072b4 100644
--- a/libcrystfel/src/integer_matrix.c
+++ b/libcrystfel/src/integer_matrix.c
@@ -501,3 +501,34 @@ int intmat_equals(const IntegerMatrix *a, const IntegerMatrix *b)
return 1;
}
+
+
+/**
+ * intmat_identity
+ * @size: The size of the (square) matrix
+ *
+ * Returns: an identity %IntegerMatrix with side length @size, or NULL on error.
+ *
+ */
+IntegerMatrix *intmat_identity(int size)
+{
+ IntegerMatrix *m;
+ int i, j;
+
+ m = intmat_new(size, size);
+ if ( m == NULL ) return NULL;
+
+ for ( i=0; i<size; i++ ) {
+ for ( j=0; j<size; j++ ) {
+
+ if ( i == j ) {
+ intmat_set(m, i, j, 1);
+ } else {
+ intmat_set(m, i, j, 0);
+ }
+
+ }
+ }
+
+ return m;
+}
diff --git a/libcrystfel/src/integer_matrix.h b/libcrystfel/src/integer_matrix.h
index e1ba2c56..6616b5e8 100644
--- a/libcrystfel/src/integer_matrix.h
+++ b/libcrystfel/src/integer_matrix.h
@@ -47,6 +47,7 @@ extern "C" {
/* Alloc/dealloc */
extern IntegerMatrix *intmat_new(unsigned int rows, unsigned int cols);
extern IntegerMatrix *intmat_copy(IntegerMatrix *m);
+extern IntegerMatrix *intmat_identity(int size);
extern void intmat_free(IntegerMatrix *m);
/* Get/set */