From 585602b57f77e0e45c0489aee0f4a30b1a7a830f Mon Sep 17 00:00:00 2001 From: Thomas White Date: Mon, 18 May 2015 14:44:48 +0200 Subject: Strip out scaling report stuff --- Makefile.am | 10 +- src/partialator.c | 35 +- src/scaling-report.c | 898 --------------------------------------------------- src/scaling-report.h | 82 ----- 4 files changed, 3 insertions(+), 1022 deletions(-) delete mode 100644 src/scaling-report.c delete mode 100644 src/scaling-report.h diff --git a/Makefile.am b/Makefile.am index 662abba8..da210d47 100644 --- a/Makefile.am +++ b/Makefile.am @@ -103,14 +103,6 @@ src_geoptimiser_SOURCES = src/geoptimiser.c src/hdfsee-render.c src_whirligig_SOURCES = src/whirligig.c -if HAVE_CAIRO -if HAVE_PANGO -if HAVE_PANGOCAIRO -src_partialator_SOURCES += src/scaling-report.c -endif -endif -endif - tests_list_check_SOURCES = tests/list_check.c tests_integration_check_SOURCES = tests/integration_check.c @@ -137,7 +129,7 @@ tests_cell_check_SOURCES = tests/cell_check.c INCLUDES = -I$(top_srcdir)/libcrystfel/src -I$(top_srcdir)/data EXTRA_DIST += src/dw-hdfsee.h src/hdfsee.h src/render_hkl.h \ - src/post-refinement.h src/merge.h src/scaling-report.h \ + src/post-refinement.h src/merge.h \ src/cl-utils.h src/hdfsee-render.h src/diffraction.h \ src/diffraction-gpu.h src/pattern_sim.h src/list_tmp.h \ src/im-sandbox.h src/process_image.h src/multihistogram.h \ diff --git a/src/partialator.c b/src/partialator.c index 8d175d33..e17331e0 100644 --- a/src/partialator.c +++ b/src/partialator.c @@ -54,7 +54,6 @@ #include "version.h" #include "post-refinement.h" #include "merge.h" -#include "scaling-report.h" #include "rejection.h" @@ -97,7 +96,6 @@ struct queue_args int n_done; Crystal **crystals; int n_crystals; - struct srdata *srdata; struct refine_args task_defaults; }; @@ -134,10 +132,6 @@ static void done_image(void *vqargs, void *task) struct refine_args *pargs = task; qargs->n_done++; - if ( pargs->prdata.refined ) { - qargs->srdata->n_refined += pargs->prdata.refined; - qargs->srdata->n_filtered += pargs->prdata.n_filtered; - } progress_bar(qargs->n_done, qargs->n_crystals, "Refining"); free(task); @@ -146,7 +140,7 @@ static void done_image(void *vqargs, void *task) static void refine_all(Crystal **crystals, int n_crystals, RefList *full, int nthreads, PartialityModel pmodel, - int no_scale, struct srdata *srdata) + int no_scale) { struct refine_args task_defaults; struct queue_args qargs; @@ -163,17 +157,12 @@ static void refine_all(Crystal **crystals, int n_crystals, qargs.n_done = 0; qargs.n_crystals = n_crystals; qargs.crystals = crystals; - qargs.srdata = srdata; /* Don't have threads which are doing nothing */ if ( n_crystals < nthreads ) nthreads = n_crystals; run_threads(nthreads, refine_image, get_image, done_image, &qargs, n_crystals, 0, 0, 0); - - STATUS("%5.2f eigenvalues filtered on final iteration per successfully " - "refined crystal\n", - (double)srdata->n_filtered/srdata->n_refined); } @@ -348,7 +337,6 @@ int main(int argc, char *argv[]) int n_images = 0; int n_crystals = 0; char cmdline[1024]; - SRContext *sr; int no_scale = 0; Stream *st; Crystal **crystals; @@ -356,7 +344,6 @@ int main(int argc, char *argv[]) PartialityModel pmodel = PMODEL_SCSPHERE; int min_measurements = 2; char *rval; - struct srdata srdata; int polarisation = 1; double max_adu = +INFINITY; char *sparams_fn = NULL; @@ -653,16 +640,6 @@ int main(int argc, char *argv[]) check_rejection(crystals, n_crystals); - srdata.crystals = crystals; - srdata.n = n_crystals; - srdata.full = full; - srdata.n_filtered = 0; - srdata.n_refined = 0; - - sr = sr_titlepage(crystals, n_crystals, "scaling-report.pdf", - infile, cmdline); - sr_iteration(sr, 0, &srdata); - show_duds(crystals, n_crystals); /* Iterate */ @@ -670,11 +647,9 @@ int main(int argc, char *argv[]) STATUS("Refinement cycle %i of %i\n", i+1, n_iter); - srdata.n_filtered = 0; - /* Refine all crystals to get the best fit */ refine_all(crystals, n_crystals, full, nthreads, pmodel, - no_scale, &srdata); + no_scale); show_duds(crystals, n_crystals); check_rejection(crystals, n_crystals); @@ -686,14 +661,8 @@ int main(int argc, char *argv[]) check_rejection(crystals, n_crystals); - srdata.full = full; - - sr_iteration(sr, i+1, &srdata); - } - sr_finish(sr); - /* Output results */ write_reflist(outfile, full); diff --git a/src/scaling-report.c b/src/scaling-report.c deleted file mode 100644 index ca4c5cbc..00000000 --- a/src/scaling-report.c +++ /dev/null @@ -1,898 +0,0 @@ -/* - * scaling-report.c - * - * Write a nice PDF of scaling parameters - * - * Copyright © 2012-2013 Deutsches Elektronen-Synchrotron DESY, - * a research centre of the Helmholtz Association. - * - * Authors: - * 2010-2013 Thomas White - * - * 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 . - * - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include -#include -#include - -#include "image.h" -#include "scaling-report.h" - - -#define PAGE_WIDTH (842.0) - -enum justification -{ - J_CENTER, - J_LEFT, - J_RIGHT, -}; - - -struct _srcontext -{ - cairo_surface_t *surf; - cairo_t *cr; - double w; - double h; - - /* Most sampled reflections */ - signed int ms_h[9]; - signed int ms_k[9]; - signed int ms_l[9]; - -}; - - -static void show_text(cairo_t *cr, const char *text, double y, - enum justification j, char *font) -{ - PangoLayout *layout; - PangoFontDescription *fontdesc; - int width, height; - PangoAlignment just; - - if ( font == NULL ) font = "Sans 10"; - - layout = pango_cairo_create_layout(cr); - pango_layout_set_ellipsize(layout, PANGO_ELLIPSIZE_NONE); - pango_layout_set_width(layout, PANGO_SCALE*(PAGE_WIDTH-20.0)); - - switch ( j ) - { - case J_CENTER : just = PANGO_ALIGN_CENTER; break; - case J_LEFT : just = PANGO_ALIGN_LEFT; break; - case J_RIGHT : just = PANGO_ALIGN_RIGHT; break; - default: just = PANGO_ALIGN_LEFT; break; - } - - pango_layout_set_alignment(layout, just); - pango_layout_set_wrap(layout, PANGO_WRAP_CHAR); - pango_layout_set_spacing(layout, 4.0*PANGO_SCALE); - - pango_layout_set_text(layout, text, -1); - - fontdesc = pango_font_description_from_string(font); - pango_layout_set_font_description(layout, fontdesc); - - pango_cairo_update_layout(cr, layout); - pango_layout_get_size(layout, &width, &height); - - cairo_move_to(cr, 10.0, y); - cairo_set_source_rgb(cr, 0.0, 0.0, 0.0); - pango_cairo_show_layout(cr, layout); -} - - -static void show_text_simple(cairo_t *cr, const char *text, double x, double y, - char *font, double rot, enum justification j) -{ - PangoLayout *layout; - PangoFontDescription *fontdesc; - int width, height; - - cairo_save(cr); - - if ( font == NULL ) font = "Sans 10"; - - layout = pango_cairo_create_layout(cr); - pango_layout_set_ellipsize(layout, PANGO_ELLIPSIZE_NONE); - pango_layout_set_alignment(layout, PANGO_ALIGN_LEFT); - - pango_layout_set_text(layout, text, -1); - - fontdesc = pango_font_description_from_string(font); - pango_layout_set_font_description(layout, fontdesc); - - pango_cairo_update_layout(cr, layout); - pango_layout_get_size(layout, &width, &height); - - cairo_new_path(cr); - cairo_translate(cr, x, y); - cairo_rotate(cr, rot); - if ( j == J_CENTER ) { - cairo_translate(cr, -(width/2.0)/PANGO_SCALE, - -(height/2.0)/PANGO_SCALE); - } else if ( j == J_RIGHT ) { - cairo_translate(cr, -width/PANGO_SCALE, - -(height/2.0)/PANGO_SCALE); - } else { - cairo_translate(cr, 0.0, -(height/2.0)/PANGO_SCALE); - } - cairo_set_source_rgb(cr, 0.0, 0.0, 0.0); - pango_cairo_show_layout(cr, layout); - - cairo_restore(cr); -} - - -static void plot_point(cairo_t *cr, double g_width, double g_height, - double pcalc, double pobs) -{ - int bad = 0; - - if ( pobs > 1.0 ) { - pobs = 1.01; - bad = 1; - - } - if ( pcalc > 1.0 ) { - pcalc = 1.01; - bad = 1; - } - if ( pobs < 0.0 ) { - pobs = -0.01; - bad = 1; - } - if ( pcalc < 0.0 ) { - pobs = -0.01; - bad = 1; - } - - if ( bad ) { - cairo_set_source_rgb(cr, 1.0, 0.0, 0.0); - } - - cairo_arc(cr, g_width*pcalc, g_height*(1.0-pobs), - 1.0, 0.0, 2.0*M_PI); - cairo_fill(cr); - - if ( bad ) { - cairo_set_source_rgb(cr, 0.0, 0.7, 0.0); - } -} - - -static void partiality_graph(cairo_t *cr, Crystal **crystals, int n, - RefList *full) -{ - const double g_width = 200.0; - const double g_height = 200.0; - int i; - const int nbins = 25; - double t_num[nbins]; - double t_den[nbins]; - double prob; - double pcalcmin[nbins]; - double pcalcmax[nbins]; - int num_nondud; - gsl_rng *rng; - - show_text_simple(cr, "Observed partiality", -20.0, g_height/2.0, - NULL, -M_PI_2, J_CENTER); - show_text_simple(cr, "Calculated partiality", - g_width/2.0,g_height+20.0, NULL, 0.0, J_CENTER); - - show_text_simple(cr, "0.0", -20.0, g_height, NULL, 0.0, J_CENTER); - show_text_simple(cr, "1.0", -20.0, 0.0, NULL, 0.0, J_CENTER); - show_text_simple(cr, "0.0", 0.0, g_height+10.0, NULL, - -M_PI/3.0, J_RIGHT); - show_text_simple(cr, "1.0", g_width, g_height+10.0, NULL, - -M_PI/3.0, J_RIGHT); - - for ( i=0; i= pcalcmin[bin]) - && (pcalc < pcalcmax[bin]) ) - { - double esd_pobs, esd_Ip, esd_If; - esd_Ip = get_esd_intensity(refl); - esd_If = get_esd_intensity(f); - esd_If *= crystal_get_osf(cryst); - esd_pobs = pow(esd_Ip/Ipart, 2.0); - esd_pobs += pow(esd_If/Ifull, 2.0); - esd_pobs = sqrt(esd_pobs); - t_num[bin] += pobs / esd_pobs; - t_den[bin] += 1.0 / esd_pobs; - } - } - - bin = nbins * pcalc; - - if ( random_flat(rng, 1.0) < prob ) { - plot_point(cr, g_width, g_height, pcalc, pobs); - } - } - - } - - gsl_rng_free(rng); - - cairo_new_path(cr); - cairo_rectangle(cr, 0.0, 0.0, g_width, g_height); - cairo_clip(cr); - - cairo_new_path(cr); - cairo_move_to(cr, 0.0, g_height); - for ( i=0; i=0) && (b f_max ) f_max = counts[b]; - } - f_max = (f_max/10)*10 + 10; - - if ( !backwards ) { - show_text_simple(cr, "0", axis_pos, g_height, - NULL, 0.0, J_RIGHT); - } else { - show_text_simple(cr, "0", axis_pos, 0.0, - NULL, M_PI, J_RIGHT); - } - snprintf(tmp, 31, "%i", f_max); - if ( !backwards ) { - show_text_simple(cr, tmp, axis_pos, 0.0, - NULL, 0.0, J_RIGHT); - } else { - show_text_simple(cr, tmp, axis_pos, g_height, - NULL, M_PI, J_RIGHT); - } - - for ( b=0; b osf_max ) osf_max = osf; - } - osf_max = ceil(osf_max+osf_max/10000.0); - if ( osf_max > 1000.0 ) { - ERROR("Silly scale factor detected. Using 100.0 instead.\n"); - osf_max = 100.0; - } - - do { - - osf_inc = osf_max / nbins; - - for ( b=0; b= osf_low[b]) - && (osf < osf_high[b]) ) - { - counts[b]++; - break; - } - } - } - - n_zero = 0; - n_half = 0; - if ( osf_max > 10.0 ) { - - /* Count the number of bins with no counts, subtract 1 - * from the maximum value until this isn't the case */ - for ( b=0; b n_half ) osf_max -= 1.0; - - } - - } while ( n_zero > n_half ); - - f_max = 0; - for ( b=0; b f_max ) f_max = counts[b]; - } - f_max = (f_max/10)*10 + 10; - - show_text_simple(cr, "0", -10.0, g_height, NULL, 0.0, J_RIGHT); - snprintf(tmp, 31, "%i", f_max); - show_text_simple(cr, tmp, -10.0, 0.0, NULL, 0.0, J_RIGHT); - - show_text_simple(cr, "0.00", 0.0, g_height+10.0, - NULL, -M_PI/3.0, J_RIGHT); - snprintf(tmp, 32, "%5.2f", osf_max); - show_text_simple(cr, tmp, g_width, g_height+10.0, - NULL, -M_PI/3.0, J_RIGHT); - - for ( b=0; b int_max ) int_max = Ifull_est; - nmeas++; - } - - } - int_max *= 1.1; - int_inc = int_max / nbins; - - for ( b=0; b= int_low[b]) - && (Ifull_est < int_high[b]) ) { - counts[b]++; - break; - } - } - } - - } - - f_max = 0; - for ( b=0; b f_max ) f_max = counts[b]; - } - f_max = (f_max/10)*10 + 10; - - snprintf(tmp, 32, "Max I=%.0f", int_max); - show_text_simple(cr, tmp, 10.0, 10.0, "Sans 9", 0.0, J_LEFT); - - for ( b=0; bcr, "Written by partialator from CrystFEL" - " version "PACKAGE_VERSION, sr->h-15.0, J_RIGHT, - "Sans 7"); -} - - -static void new_page(struct _srcontext *sr) -{ - cairo_show_page(sr->cr); - watermark(sr); -} - - -static void find_most_sampled_reflections(RefList *list, int n, signed int *h, - signed int *k, signed int *l) -{ - Reflection *refl; - RefListIterator *iter; - int *samples; - int j; - - for ( j=0; j samples[i] ) { - - int j; - - /* Shift everything down */ - for ( j=n-2; j>i; j-- ) { - h[j+1] = h[j]; - k[j+1] = k[j]; - l[j+1] = l[j]; - samples[j+1] = samples[j]; - } - - /* Add this in its place */ - get_indices(refl, &h[i], &k[i], &l[i]); - samples[i] = red; - - /* Don't compare against the others */ - break; - - } - - } - - } - - free(samples); -} - - - -SRContext *sr_titlepage(Crystal **crystals, int n, - const char *filename, const char *stream_filename, - const char *cmdline) -{ - char tmp[1024]; - struct _srcontext *sr; - - sr = malloc(sizeof(*sr)); - if ( sr == NULL ) return NULL; - - sr->w = PAGE_WIDTH; - sr->h = 595.0; - - sr->surf = cairo_pdf_surface_create(filename, sr->w, sr->h); - - if ( cairo_surface_status(sr->surf) != CAIRO_STATUS_SUCCESS ) { - fprintf(stderr, "Couldn't create Cairo surface\n"); - cairo_surface_destroy(sr->surf); - free(sr); - return NULL; - } - - sr->cr = cairo_create(sr->surf); - watermark(sr); - - snprintf(tmp, 1023, "%s", stream_filename); - show_text(sr->cr, tmp, 10.0, J_CENTER, "Sans Bold 16"); - snprintf(tmp, 1023, "partialator %s", cmdline); - show_text(sr->cr, tmp, 45.0, J_LEFT, "Mono 7"); - - return sr; -} - - -void sr_iteration(SRContext *sr, int iteration, struct srdata *d) -{ - int i; - char page_title[1024]; - double dash[] = {2.0, 2.0}; - - if ( sr == NULL ) return; - - snprintf(page_title, 1023, "After %i iteration%s", - iteration, iteration==1?"":"s"); - - new_page(sr); - show_text(sr->cr, page_title, 10.0, J_CENTER, "Sans Bold 16"); - - cairo_save(sr->cr); - cairo_translate(sr->cr, 480.0, 350.0); - scale_factor_histogram(sr->cr, d->crystals, d->n, - "Distribution of overall scale factors"); - cairo_restore(sr->cr); - - /* Draw partiality plots (three graphs together) */ - cairo_save(sr->cr); - - cairo_translate(sr->cr, 70.0, 330.0); - partiality_graph(sr->cr, d->crystals, d->n, d->full); - - cairo_save(sr->cr); - cairo_move_to(sr->cr, 0.0, 0.0); - cairo_line_to(sr->cr, 0.0, -30.0); - cairo_move_to(sr->cr, 200.0, 0.0); - cairo_line_to(sr->cr, 200.0, -30.0); - cairo_set_dash(sr->cr, dash, 2, 0.0); - cairo_stroke(sr->cr); - cairo_set_dash(sr->cr, NULL, 0, 0.0); - cairo_translate(sr->cr, 0.0, -150.0); - partiality_histogram(sr->cr, d->crystals, d->n, d->full, 1, 0); - cairo_restore(sr->cr); - - cairo_save(sr->cr); - cairo_move_to(sr->cr, 200.0, 0.0); - cairo_line_to(sr->cr, 230.0, 00.0); - cairo_move_to(sr->cr, 200.0, 200.0); - cairo_line_to(sr->cr, 230.0, 200.0); - cairo_set_dash(sr->cr, dash, 2, 0.0); - cairo_stroke(sr->cr); - cairo_set_dash(sr->cr, NULL, 0, 0.0); - cairo_translate(sr->cr, 230.0, 200.0); - cairo_rotate(sr->cr, -M_PI_2); - partiality_histogram(sr->cr, d->crystals, d->n, d->full, 0, 1); - cairo_restore(sr->cr); - - cairo_restore(sr->cr); - - if ( iteration == 0 ) { - find_most_sampled_reflections(d->full, 9, - sr->ms_h, sr->ms_k, sr->ms_l); - } - - for ( i=0; i<9; i++ ) { - - int x, y; - - x = i % 3; - y = i / 3; - - cairo_save(sr->cr); - cairo_translate(sr->cr, 400.0+140.0*x, 60.0+80.0*y); - intensity_histogram(sr->cr, d->crystals, d->n, d->full, - sr->ms_h[i], sr->ms_k[i], sr->ms_l[i]); - cairo_restore(sr->cr); - - } -} - - -void sr_finish(SRContext *sr) -{ - cairo_surface_finish(sr->surf); - cairo_destroy(sr->cr); -} diff --git a/src/scaling-report.h b/src/scaling-report.h deleted file mode 100644 index 55037038..00000000 --- a/src/scaling-report.h +++ /dev/null @@ -1,82 +0,0 @@ -/* - * scaling-report.h - * - * Write a nice PDF of scaling parameters - * - * Copyright © 2012-2014 Deutsches Elektronen-Synchrotron DESY, - * a research centre of the Helmholtz Association. - * - * Authors: - * 2011-2014 Thomas White - * - * 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 . - * - */ - -#ifndef SCALING_REPORT_H -#define SCALING_REPORT_H - -#ifdef HAVE_CONFIG_H -#include -#endif - - -#include "utils.h" - -typedef struct _srcontext SRContext; /* Opaque */ - -/* Information is logged in this structure */ -struct srdata -{ - Crystal **crystals; - int n; - RefList *full; - - int n_filtered; - int n_refined; -}; - -#if defined(HAVE_CAIRO) && defined(HAVE_PANGO) && defined(HAVE_PANGOCAIRO) - -extern SRContext *sr_titlepage(Crystal **crystals, int n, - const char *filename, - const char *stream_filename, - const char *cmdline); - -extern void sr_iteration(SRContext *sr, int iteration, struct srdata *d); - -extern void sr_finish(SRContext *sr); - -#else /* defined(HAVE_CAIRO) && defined(HAVE_PANGO) && ... */ - -SRContext *sr_titlepage(Crystal **crystals, int n, const char *filename, - const char *stream_filename, const char *cmdline) -{ - return NULL; -} - -void sr_iteration(SRContext *sr, int iteration, struct srdata *d) -{ -} - -void sr_finish(SRContext *sr) -{ -} - -#endif /* defined(HAVE_CAIRO) && defined(HAVE_PANGO) && ... */ - - -#endif /* SCALING_REPORT_H */ -- cgit v1.2.3