diff options
Diffstat (limited to 'src/get_hkl.c')
-rw-r--r-- | src/get_hkl.c | 105 |
1 files changed, 30 insertions, 75 deletions
diff --git a/src/get_hkl.c b/src/get_hkl.c index cddb54b8..f8a43ddb 100644 --- a/src/get_hkl.c +++ b/src/get_hkl.c @@ -1,9 +1,9 @@ /* * get_hkl.c * - * Small program to write out a list of h,k,l,I values given a structure + * Small program to manipulate reflection lists * - * (c) 2006-2010 Thomas White <taw@physics.org> + * (c) 2006-2011 Thomas White <taw@physics.org> * * Part of CrystFEL - crystallography with a FEL * @@ -22,7 +22,6 @@ #include <getopt.h> #include "utils.h" -#include "sfac.h" #include "reflections.h" #include "symmetry.h" #include "beam-parameters.h" @@ -32,27 +31,34 @@ static void show_help(const char *s) { printf("Syntax: %s [options]\n\n", s); printf( -"Create reflections lists.\n" +"Manipulate reflection lists.\n" "\n" " -h, --help Display this help message.\n" "\n" -" -t, --template=<filename> Only include reflections mentioned in file.\n" +" -i, --input=<file> Read reflections from <file>.\n" +" -y, --symmetry=<sym> The symmetry of the input reflection list.\n" +"\n" +"You can add noise to the reflections with either of:\n" " --poisson Simulate Poisson samples.\n" " --noise Add 10%% random noise.\n" -" -y, --symmetry=<sym> The symmetry of the input file (-i).\n" +"\n" +"To calculate Poisson samples accurately, you must also give:\n" +" -b, --beam=<file> Get beam parameters from file.\n" +"\n" +"You can artificially 'twin' the reflections, or expand them out:\n" " -w, --twin=<sym> Generate twinned data according to the given\n" " point group.\n" " -e, --expand=<sym> Expand reflections to this point group.\n" -" -o, --output=<filename> Output filename (default: stdout).\n" -" -i, --intensities=<file> Read intensities from file instead of\n" -" calculating them from scratch. You might use\n" -" this if you need to apply noise or twinning.\n" -" -p, --pdb=<file> PDB file from which to get the structure.\n" -" --no-phases Do not try to use phases in the input file.\n" +"\n" +"You can restrict which reflections are written out:\n" +" -t, --template=<filename> Only include reflections mentioned in file.\n" +"\n" +"You might sometimes need to do this:\n" " --multiplicity Multiply intensities by the number of\n" " equivalent reflections.\n" -" -b, --beam=<file> Get beam parameters from file (used for sigmas).\n" -" --max-res=<d> Calculate structure factors out to d=<d> nm.\n" +"\n" +"Don't forget to specify the output filename:\n" +" -o, --output=<filename> Output filename (default: stdout).\n" ); } @@ -253,7 +259,6 @@ int main(int argc, char *argv[]) double *ideal_ref; double *phases; double *esds; - struct molecule *mol; char *template = NULL; int config_noise = 0; int config_poisson = 0; @@ -269,10 +274,7 @@ int main(int argc, char *argv[]) ReflItemList *write_items; UnitCell *cell = NULL; char *beamfile = NULL; - char *rval; - struct beam_params *beam; /* Beam parameters for SF calculation */ - int have_max_res = 0; - double max_res = 0.0; + struct beam_params *beam; /* Beam parameters for Poisson calculation */ /* Long options */ const struct option longopts[] = { @@ -285,16 +287,13 @@ int main(int argc, char *argv[]) {"twin", 1, NULL, 'w'}, {"expand", 1, NULL, 'e'}, {"intensities", 1, NULL, 'i'}, - {"pdb", 1, NULL, 'p'}, - {"no-phases", 0, &config_nophase, 1}, {"multiplicity", 0, &config_multi, 1}, {"beam", 1, NULL, 'b'}, - {"max-res", 1, NULL, 2}, {0, 0, NULL, 0} }; /* Short options */ - while ((c = getopt_long(argc, argv, "ht:o:i:p:w:y:e:b:", + while ((c = getopt_long(argc, argv, "ht:o:i:w:y:e:b:", longopts, NULL)) != -1) { switch (c) { @@ -314,10 +313,6 @@ int main(int argc, char *argv[]) input = strdup(optarg); break; - case 'p' : - filename = strdup(optarg); - break; - case 'y' : mero = strdup(optarg); break; @@ -334,16 +329,6 @@ int main(int argc, char *argv[]) beamfile = strdup(optarg); break; - case 2 : - max_res = strtod(optarg, &rval); - if ( *rval != '\0' ) { - ERROR("Invalid maximum resolution.\n"); - return 1; - } - max_res = 1.0 / (max_res * 1.0e-9); - have_max_res = 1; - break; - case 0 : break; @@ -363,7 +348,6 @@ int main(int argc, char *argv[]) exit(1); } - mol = load_molecule(filename); cell = load_cell_from_pdb(filename); if ( !config_nophase ) { phases = new_list_phase(); @@ -371,44 +355,15 @@ int main(int argc, char *argv[]) phases = NULL; } esds = new_list_sigma(); - if ( input == NULL ) { - - if ( beamfile == NULL ) { - ERROR("To calculate structure factors, you must" - " provide a beam parameters file (use -b)\n"); - return 1; - } - - beam = get_beam_parameters(beamfile); - if ( beam == NULL ) { - ERROR("Failed to read beam parameters from '%s'\n", beamfile); - return 1; - } - free(beamfile); - - if ( !have_max_res ) { - STATUS("You didn't specify the maximum resolution to" - " calculate structure factors. I'll go to" - " d = 0.5 nm.\n"); - max_res = 1.0/0.5e-9; - } - - input_items = new_items(); - ideal_ref = get_reflections(mol, eV_to_J(beam->photon_energy), - max_res, phases, input_items); - - } else { - - ideal_ref = new_list_intensity(); - input_items = read_reflections(input, ideal_ref, phases, - NULL, esds); - free(input); - if ( check_symmetry(input_items, mero) ) { - ERROR("The input reflection list does not appear to" - " have symmetry %s\n", mero); - return 1; - } + ideal_ref = new_list_intensity(); + input_items = read_reflections(input, ideal_ref, phases, + NULL, esds); + free(input); + if ( check_symmetry(input_items, mero) ) { + ERROR("The input reflection list does not appear to" + " have symmetry %s\n", mero); + return 1; } if ( config_poisson ) poisson_reflections(ideal_ref, input_items); |