diff options
-rw-r--r-- | src/image.c | 10 | ||||
-rw-r--r-- | src/image.h | 11 | ||||
-rw-r--r-- | src/refine.c | 8 | ||||
-rw-r--r-- | src/reflections.c | 11 | ||||
-rw-r--r-- | src/reflections.h | 1 | ||||
-rw-r--r-- | src/reproject.c | 16 | ||||
-rw-r--r-- | src/reproject.h | 2 |
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); |