aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/image.c10
-rw-r--r--src/image.h11
-rw-r--r--src/refine.c8
-rw-r--r--src/reflections.c11
-rw-r--r--src/reflections.h1
-rw-r--r--src/reproject.c16
-rw-r--r--src/reproject.h2
7 files changed, 36 insertions, 23 deletions
diff --git a/src/image.c b/src/image.c
index 3bb6ba1..ebeff15 100644
--- a/src/image.c
+++ b/src/image.c
@@ -68,8 +68,8 @@ ImageList *image_list_new() {
}
-void image_add_feature_index(ImageFeatureList *flist, double x, double y, ImageRecord *parent, double intensity,
- signed int h, signed int k, signed int l) {
+void image_add_feature_reflection(ImageFeatureList *flist, double x, double y, ImageRecord *parent, double intensity,
+ Reflection *reflection) {
if ( flist->features ) {
flist->features = realloc(flist->features, (flist->n_features+1)*sizeof(ImageFeature));
@@ -84,16 +84,14 @@ void image_add_feature_index(ImageFeatureList *flist, double x, double y, ImageR
flist->features[flist->n_features].parent = parent;
flist->features[flist->n_features].partner = NULL;
flist->features[flist->n_features].partner_d = 0.0;
- flist->features[flist->n_features].h = h;
- flist->features[flist->n_features].k = k;
- flist->features[flist->n_features].l = l;
+ flist->features[flist->n_features].reflection = reflection;
flist->n_features++;
}
void image_add_feature(ImageFeatureList *flist, double x, double y, ImageRecord *parent, double intensity) {
- image_add_feature_index(flist, x, y, parent, intensity, 0, 0, 0);
+ image_add_feature_reflection(flist, x, y, parent, intensity, NULL);
}
ImageFeatureList *image_feature_list_new() {
diff --git a/src/image.h b/src/image.h
index 178f363..df505ec 100644
--- a/src/image.h
+++ b/src/image.h
@@ -25,13 +25,11 @@ typedef struct imagefeature_struct {
double y;
double intensity;
- signed int h;
- signed int k;
- signed int l;
-
struct imagefeature_struct *partner; /* Partner for this feature (in another feature list) or NULL */
double partner_d; /* Distance between this feature and its partner, if any. */
+ struct reflection_struct *reflection; /* The reflection this was projected from, if any */
+
} ImageFeature;
typedef struct {
@@ -71,13 +69,14 @@ typedef struct imagelist_struct {
} ImageList;
+#include "reflections.h"
+
extern ImageList *image_list_new(void);
extern int image_add(ImageList *list, uint16_t *image, int width, int height, double tilt, ControlContext *ctx);
extern ImageFeatureList *image_feature_list_new(void);
extern void image_feature_list_free(ImageFeatureList *flist);
extern void image_add_feature(ImageFeatureList *flist, double x, double y, ImageRecord *parent, double intensity);
-extern void image_add_feature_index(ImageFeatureList *flist, double x, double y, ImageRecord *parent, double intensity,
- signed int h, signed int k, signed int l);
+extern void image_add_feature_reflection(ImageFeatureList *flist, double x, double y, ImageRecord *parent, double intensity, Reflection *reflection);
extern ImageFeature *image_feature_closest(ImageFeatureList *flist, double x, double y, double *d, int *idx);
extern ImageFeature *image_feature_second_closest(ImageFeatureList *flist, double x, double y, double *d, int *idx);
diff --git a/src/refine.c b/src/refine.c
index 812d5a5..8202a21 100644
--- a/src/refine.c
+++ b/src/refine.c
@@ -119,9 +119,9 @@ static ImageFeature *refine_fit_image(Basis *cell, ImageRecord *image, Reflectio
/* Skip if no partner */
if ( !image->rflist->features[i].partner ) continue;
- h = image->rflist->features[i].h;
- k = image->rflist->features[i].k;
- l = image->rflist->features[i].l;
+ h = image->rflist->features[i].reflection->h;
+ k = image->rflist->features[i].reflection->k;
+ l = image->rflist->features[i].reflection->l;
/* Determine the difference vector */
dix = image->rflist->features[i].partner->x - image->rflist->features[i].x;
@@ -203,6 +203,8 @@ static ImageFeature *refine_fit_image(Basis *cell, ImageRecord *image, Reflectio
done = TRUE;
+ // break;
+
}
if ( !done ) {
diff --git a/src/reflections.c b/src/reflections.c
index 3060bfd..b8d2fa1 100644
--- a/src/reflections.c
+++ b/src/reflections.c
@@ -282,3 +282,14 @@ void reflection_list_from_new_cell(ReflectionList *ordered, Basis *basis) {
}
+/* Return true if the reflection is of type h00, 0k0 or 0l0 */
+int reflection_is_easy(Reflection *reflection) {
+
+ if ( reflection->h ) return !(reflection->k || reflection->l);
+ if ( reflection->k ) return !(reflection->h || reflection->l);
+ if ( reflection->l ) return !(reflection->h || reflection->k);
+
+ return 0; /* 000 */
+
+}
+
diff --git a/src/reflections.h b/src/reflections.h
index 9158d27..1ca7d5a 100644
--- a/src/reflections.h
+++ b/src/reflections.h
@@ -62,6 +62,7 @@ extern void reflectionlist_clear_markers(ReflectionList *reflectionlist);
extern void reflectionlist_free(ReflectionList *reflectionlist);
extern Reflection *reflection_add(ReflectionList *reflectionlist, double x, double y, double z, double intensity, ReflectionType type);
+extern int reflection_is_easy(Reflection *reflection);
extern double reflectionlist_largest_g(ReflectionList *reflectionlist);
extern Reflection *reflectionlist_find_nearest(ReflectionList *reflectionlist, double x, double y, double z);
diff --git a/src/reproject.c b/src/reproject.c
index 3768a5e..1fd061a 100644
--- a/src/reproject.c
+++ b/src/reproject.c
@@ -20,21 +20,23 @@
#include "image.h"
/* Attempt to find partners from the feature list of "image" for each feature in "flist". */
-void reproject_partner_features(ImageFeatureList *flist, ImageRecord *image) {
+void reproject_partner_features(ImageFeatureList *rflist, ImageRecord *image) {
int i;
- for ( i=0; i<flist->n_features; i++ ) {
+ for ( i=0; i<rflist->n_features; i++ ) {
+ //if ( !reflection_is_easy(rflist->features[i].reflection) ) continue;
+
double d = 0.0;
ImageFeature *partner;
int idx;
- partner = image_feature_closest(image->features, flist->features[i].x, flist->features[i].y, &d, &idx);
+ partner = image_feature_closest(image->features, rflist->features[i].x, rflist->features[i].y, &d, &idx);
if ( (d <= 20.0) && partner ) {
- flist->features[i].partner = partner;
- flist->features[i].partner_d = d;
+ rflist->features[i].partner = partner;
+ rflist->features[i].partner_d = d;
}
}
@@ -182,8 +184,8 @@ ImageFeatureList *reproject_get_reflections(ImageRecord *image, ReflectionList *
if ( (x>=0) && (x<image->width) && (y>=0) && (y<image->height) ) {
/* Record the reflection */
- image_add_feature_index(flist, x, y, image, reflection->intensity,
- reflection->h, reflection->k, reflection->l);
+ image_add_feature_reflection(flist, x, y, image, reflection->intensity, reflection);
+
//printf("Reflection at %f, %f\n", x, y);
} /* else it's outside the picture somewhere */
diff --git a/src/reproject.h b/src/reproject.h
index 9964048..79aa919 100644
--- a/src/reproject.h
+++ b/src/reproject.h
@@ -20,7 +20,7 @@
#include "image.h"
extern ImageFeatureList *reproject_get_reflections(ImageRecord *image, ReflectionList *reflectionlist);
-extern void reproject_partner_features(ImageFeatureList *flist, ImageRecord *image);
+extern void reproject_partner_features(ImageFeatureList *rflist, ImageRecord *image);
extern void reproject_open(ControlContext *ctx);
extern void reproject_lattice_changed(ControlContext *ctx);