aboutsummaryrefslogtreecommitdiff
path: root/libcrystfel
diff options
context:
space:
mode:
authorThomas White <taw@physics.org>2018-09-10 17:17:44 +0200
committerThomas White <taw@physics.org>2018-09-10 17:17:44 +0200
commitb8d8023ecec118354268a77fb196e0b524d4492c (patch)
tree5693382b0bf0d5adfcf3bc31b02457077af89bde /libcrystfel
parentb89a8bb0780a623b85a82d356d2e82b09942b8a5 (diff)
parentf22a30956317ccdc48d29eaf8d95e32e01f0be34 (diff)
Merge branch 'tom/deltacchalf'
Diffstat (limited to 'libcrystfel')
-rw-r--r--libcrystfel/src/reflist-utils.c28
-rw-r--r--libcrystfel/src/reflist-utils.h6
-rw-r--r--libcrystfel/src/reflist.c36
-rw-r--r--libcrystfel/src/reflist.h19
4 files changed, 80 insertions, 9 deletions
diff --git a/libcrystfel/src/reflist-utils.c b/libcrystfel/src/reflist-utils.c
index 54c467b3..70548994 100644
--- a/libcrystfel/src/reflist-utils.c
+++ b/libcrystfel/src/reflist-utils.c
@@ -3,11 +3,11 @@
*
* Utilities to complement the core reflist.c
*
- * Copyright © 2012-2017 Deutsches Elektronen-Synchrotron DESY,
+ * Copyright © 2012-2018 Deutsches Elektronen-Synchrotron DESY,
* a research centre of the Helmholtz Association.
*
* Authors:
- * 2011-2017 Thomas White <taw@physics.org>
+ * 2011-2018 Thomas White <taw@physics.org>
* 2014 Valerio Mariani
*
* This file is part of CrystFEL.
@@ -648,6 +648,30 @@ RefList *copy_reflist(RefList *list)
}
+/**
+ * free_contribs:
+ * @list: A %RefList
+ *
+ * Goes through @list and frees all the reflection contribution structures.
+ **/
+void free_contribs(RefList *list)
+{
+ Reflection *refl;
+ RefListIterator *iter;
+
+ for ( refl = first_refl(list, &iter);
+ refl != NULL;
+ refl = next_refl(refl, iter) )
+ {
+ struct reflection_contributions *c;
+ c = get_contributions(refl);
+ free(c->contribs);
+ free(c->contrib_crystals);
+ free(c);
+ }
+}
+
+
static char *full_command_line(int argc, char *argv[])
{
int i;
diff --git a/libcrystfel/src/reflist-utils.h b/libcrystfel/src/reflist-utils.h
index f64e9f51..c955491a 100644
--- a/libcrystfel/src/reflist-utils.h
+++ b/libcrystfel/src/reflist-utils.h
@@ -3,11 +3,11 @@
*
* Utilities to complement the core reflist.c
*
- * Copyright © 2012-2017 Deutsches Elektronen-Synchrotron DESY,
+ * Copyright © 2012-2018 Deutsches Elektronen-Synchrotron DESY,
* a research centre of the Helmholtz Association.
*
* Authors:
- * 2011-2017 Thomas White <taw@physics.org>
+ * 2011-2018 Thomas White <taw@physics.org>
* 2014 Valerio Mariani
*
* This file is part of CrystFEL.
@@ -69,6 +69,8 @@ extern RefList *res_cutoff(RefList *list, UnitCell *cell,
extern RefList *copy_reflist(RefList *list);
+extern void free_contribs(RefList *list);
+
extern void reflist_add_command_and_version(RefList *list,
int argcv, char *argv[]);
diff --git a/libcrystfel/src/reflist.c b/libcrystfel/src/reflist.c
index a35aa575..f1d759ea 100644
--- a/libcrystfel/src/reflist.c
+++ b/libcrystfel/src/reflist.c
@@ -3,11 +3,11 @@
*
* Fast reflection/peak list
*
- * Copyright © 2012-2016 Deutsches Elektronen-Synchrotron DESY,
+ * Copyright © 2012-2018 Deutsches Elektronen-Synchrotron DESY,
* a research centre of the Helmholtz Association.
*
* Authors:
- * 2011-2016 Thomas White <taw@physics.org>
+ * 2011-2018 Thomas White <taw@physics.org>
*
* This file is part of CrystFEL.
*
@@ -100,6 +100,9 @@ struct _refldata {
double peak;
double mean_bg;
+ /* Contributions */
+ struct reflection_contributions *contribs;
+
/* User-specified temporary values */
double temp1;
double temp2;
@@ -587,6 +590,18 @@ int get_flag(const Reflection *refl)
}
+/**
+ * get_contributions:
+ * @refl: A %Reflection
+ *
+ * Returns: the reflection's contribution list
+ *
+ **/
+struct reflection_contributions *get_contributions(const Reflection *refl)
+{
+ return refl->data.contribs;
+}
+
/********************************** Setters ***********************************/
/**
@@ -634,6 +649,7 @@ void set_panel(Reflection *refl, struct panel *p)
refl->data.panel = p;
}
+
/**
* set_khalf:
* @refl: A %Reflection
@@ -647,7 +663,6 @@ void set_khalf(Reflection *refl, double khalf)
}
-
/**
* set_kpred:
* @refl: A %Reflection
@@ -848,6 +863,21 @@ void set_flag(Reflection *refl, int flag)
}
+/**
+ * set_contributions:
+ * @refl: A %Reflection
+ * @contribs: Pointer to the contribution list
+ *
+ * Note that the pointer will be stored, not the contents of the structure.
+ *
+ **/
+void set_contributions(Reflection *refl,
+ struct reflection_contributions *contribs)
+{
+ refl->data.contribs = contribs;
+}
+
+
/********************************* Insertion **********************************/
static Reflection *rotate_once(Reflection *refl, int dir)
diff --git a/libcrystfel/src/reflist.h b/libcrystfel/src/reflist.h
index 9f494474..f2fadb8b 100644
--- a/libcrystfel/src/reflist.h
+++ b/libcrystfel/src/reflist.h
@@ -3,11 +3,11 @@
*
* Fast reflection/peak list
*
- * Copyright © 2012-2017 Deutsches Elektronen-Synchrotron DESY,
+ * Copyright © 2012-2018 Deutsches Elektronen-Synchrotron DESY,
* a research centre of the Helmholtz Association.
*
* Authors:
- * 2011-2017 Thomas White <taw@physics.org>
+ * 2011-2018 Thomas White <taw@physics.org>
*
* This file is part of CrystFEL.
*
@@ -38,6 +38,7 @@
#define GET_K(serial) ((((serial) & 0x000ffc00)>>10)-512)
#define GET_L(serial) (((serial) & 0x000003ff)-512)
+
/**
* RefList:
*
@@ -73,6 +74,17 @@ typedef struct _reflistiterator RefListIterator;
extern "C" {
#endif
+typedef struct _crystal Crystal;
+
+/* Structure representing the contributions to a merged reflection */
+struct reflection_contributions
+{
+ int n_contrib;
+ int max_contrib;
+ Reflection **contribs;
+ Crystal **contrib_crystals;
+};
+
/* Creation/deletion */
extern RefList *reflist_new(void);
extern void reflist_free(RefList *list);
@@ -105,6 +117,7 @@ extern double get_phase(const Reflection *refl, int *have_phase);
extern double get_peak(const Reflection *refl);
extern double get_mean_bg(const Reflection *refl);
extern int get_flag(const Reflection *refl);
+extern struct reflection_contributions *get_contributions(const Reflection *refl);
/* Set */
extern void copy_data(Reflection *to, const Reflection *from);
@@ -126,6 +139,8 @@ extern void set_mean_bg(Reflection *refl, double mean_bg);
extern void set_symmetric_indices(Reflection *refl,
signed int hs, signed int ks, signed int ls);
extern void set_flag(Reflection *refl, int flag);
+extern void set_contributions(Reflection *refl,
+ struct reflection_contributions *contribs);
/* Insertion */
extern Reflection *add_refl(RefList *list,