aboutsummaryrefslogtreecommitdiff
path: root/libcrystfel/src
diff options
context:
space:
mode:
Diffstat (limited to 'libcrystfel/src')
-rw-r--r--libcrystfel/src/crystal.c104
-rw-r--r--libcrystfel/src/crystal.h48
-rw-r--r--libcrystfel/src/image.h33
3 files changed, 158 insertions, 27 deletions
diff --git a/libcrystfel/src/crystal.c b/libcrystfel/src/crystal.c
new file mode 100644
index 00000000..85430b6f
--- /dev/null
+++ b/libcrystfel/src/crystal.c
@@ -0,0 +1,104 @@
+/*
+ * crystal.c
+ *
+ * A class representing a single crystal
+ *
+ * Copyright © 2013 Deutsches Elektronen-Synchrotron DESY,
+ * a research centre of the Helmholtz Association.
+ *
+ * Authors:
+ * 2013 Thomas White <taw@physics.org>
+ *
+ * This file is part of CrystFEL.
+ *
+ * CrystFEL is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * CrystFEL is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with CrystFEL. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "crystal.h"
+#include "utils.h"
+
+
+/**
+ * SECTION:crystal
+ * @short_description: Crystal
+ * @title: Crystal
+ * @section_id:
+ * @see_also:
+ * @include: "crystal.h"
+ * @Image:
+ *
+ * This structure represents a single crystal.
+ */
+
+
+struct _crystal
+{
+ /* Information about the crystal */
+ UnitCell *indexed_cell;
+ UnitCell *candidate_cells[MAX_CELL_CANDIDATES];
+ int ncells;
+ double m; /* Mosaicity in radians */
+ double osf;
+ double profile_radius;
+ int pr_dud;
+ double diffracting_resolution;
+
+ /* Integrated (or about-to-be-integrated) reflections */
+ RefList *reflections;
+ long long int n_saturated; /* Number of overloads */
+};
+
+
+/************************** Setters and Constructors **************************/
+
+
+/**
+ * crystal_new:
+ *
+ * Create a new %Crystal.
+ *
+ * Returns: the new unit cell, or NULL on failure.
+ *
+ */
+Crystal *crystal_new()
+{
+ Crystal *cryst;
+
+ cryst = malloc(sizeof(Crystal));
+ if ( cryst == NULL ) return NULL;
+
+ return cryst;
+}
+
+
+/**
+ * crystal_free:
+ * @cryst: A %Crystal to free.
+ *
+ * Frees a %Crystal, and all internal resources concerning that crystal.
+ *
+ */
+void crystal_free(UnitCell *cryst)
+{
+ if ( cryst == NULL ) return;
+ free(crysta);
+}
+
+
+/********************************** Getters ***********************************/
diff --git a/libcrystfel/src/crystal.h b/libcrystfel/src/crystal.h
new file mode 100644
index 00000000..4f53eead
--- /dev/null
+++ b/libcrystfel/src/crystal.h
@@ -0,0 +1,48 @@
+/*
+ * crystal.h
+ *
+ * A class representing a single crystal
+ *
+ * Copyright © 2013 Deutsches Elektronen-Synchrotron DESY,
+ * a research centre of the Helmholtz Association.
+ *
+ * Authors:
+ * 2013 Thomas White <taw@physics.org>
+ *
+ * This file is part of CrystFEL.
+ *
+ * CrystFEL is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * CrystFEL is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with CrystFEL. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#ifndef CRYSTAL_H
+#define CRYSTAL_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+/**
+ * Crystal:
+ *
+ * This data structure is opaque. You must use the available accessor functions
+ * to read and write its contents.
+ **/
+typedef struct _crystal Crystal;
+
+
+extern Crystal *crystal_new(void);
+extern void crystal_free(Crystal *cryst);
+
+#endif /* CRYSTAL_H */
diff --git a/libcrystfel/src/image.h b/libcrystfel/src/image.h
index afa9e4a7..bd90a920 100644
--- a/libcrystfel/src/image.h
+++ b/libcrystfel/src/image.h
@@ -41,6 +41,7 @@
#include "cell.h"
#include "detector.h"
#include "reflist.h"
+#include "crystal.h"
#define MAX_CELL_CANDIDATES (32)
@@ -79,10 +80,9 @@ typedef struct _imagefeaturelist ImageFeatureList;
* uint16_t *flags;
* double *twotheta;
*
- * UnitCell *indexed_cell;
- * UnitCell *candidate_cells[MAX_CELL_CANDIDATES];
- * int ncells;
-
+ * Crystal **crystals;
+ * int n_crystals;
+ *
* struct detector *det;
* struct beam_params *beam;
* char *filename;
@@ -90,22 +90,13 @@ typedef struct _imagefeaturelist ImageFeatureList;
*
* int id;
*
- * double m;
- *
* double lambda;
* double div;
* double bw;
- * double osf;
- * double profile_radius;
- * int pr_dud;
- * double diffracting_resolution;
*
* int width;
* int height;
*
- * RefList *reflections;
- * long long unsigned int n_saturated;
- *
* ImageFeatureList *features;
* };
* </programlisting>
@@ -141,9 +132,8 @@ struct image {
uint16_t *flags;
double *twotheta;
- UnitCell *indexed_cell;
- UnitCell *candidate_cells[MAX_CELL_CANDIDATES];
- int ncells;
+ struct crystal **crystals;
+ int n_crystals;
struct detector *det;
struct beam_params *beam; /* The nominal beam parameters */
@@ -153,25 +143,14 @@ struct image {
int id; /* ID number of the thread
* handling this image */
- /* Information about the crystal */
- double m; /* Mosaicity in radians */
-
/* Per-shot radiation values */
double lambda; /* Wavelength in m */
double div; /* Divergence in radians */
double bw; /* Bandwidth as a fraction */
- double osf; /* Overall scaling factor */
- double profile_radius; /* Radius of reflection */
- int pr_dud; /* Post refinement failed */
- double diffracting_resolution; /* Max 1/d in m^-1 */
int width;
int height;
- /* Integrated (or about-to-be-integrated) reflections */
- RefList *reflections;
- long long int n_saturated; /* Number of overloads */
-
/* Detected peaks */
ImageFeatureList *features;