/* * compare_hkl.c * * Compare reflection lists * * (c) 2006-2010 Thomas White * * Part of CrystFEL - crystallography with a FEL * */ #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include #include #include #include "utils.h" #include "sfac.h" #include "reflections.h" #include "statistics.h" static void show_help(const char *s) { printf("Syntax: %s [options] \n\n", s); printf( "Compare intensity lists.\n" "\n" " -h, --help Display this help message.\n" " -o, --output= Specify output filename for correction factor.\n" "\n"); } int main(int argc, char *argv[]) { int c; double *ref1; double *ref2; double *out; UnitCell *cell; char *outfile = NULL; char *afile = NULL; char *bfile = NULL; signed int h, k, l; double scale, R2, Rmerge; unsigned int *c1; unsigned int *c2; int i; int nc1, nc2, ncom; /* Long options */ const struct option longopts[] = { {"help", 0, NULL, 'h'}, {"output", 1, NULL, 'o'}, {0, 0, NULL, 0} }; /* Short options */ while ((c = getopt_long(argc, argv, "ho:a:b:", longopts, NULL)) != -1) { switch (c) { case 'h' : show_help(argv[0]); return 0; case 'o' : outfile = strdup(optarg); break; case 0 : break; default : return 1; } } if ( argc != (optind+2) ) { ERROR("Please provide exactly two HKL files to compare.\n"); return 1; } afile = strdup(argv[optind++]); bfile = strdup(argv[optind]); cell = load_cell_from_pdb("molecule.pdb"); c1 = new_list_count(); ref1 = read_reflections(afile, c1, NULL); if ( ref1 == NULL ) { ERROR("Couldn't open file '%s'\n", afile); return 1; } c2 = new_list_count(); ref2 = read_reflections(bfile, c2, NULL); if ( ref2 == NULL ) { ERROR("Couldn't open file '%s'\n", bfile); return 1; } out = new_list_intensity(); /* Knock out the zero beam, in case it's present */ set_count(c1, 0, 0, 0, 0); set_count(c2, 0, 0, 0, 0); /* Divide by number of counts, since we're not interested in them */ divide_down(ref1, c1); divide_down(ref2, c2); for ( h=-INDMAX; h