From b6ec4053a99b1c0b584a20af189a1a48db89f908 Mon Sep 17 00:00:00 2001 From: Thomas White Date: Fri, 28 Feb 2014 15:09:43 +0100 Subject: Split out ambiguity tests to "ambi_check" --- tests/ambi_check.c | 309 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 309 insertions(+) create mode 100644 tests/ambi_check.c (limited to 'tests/ambi_check.c') diff --git a/tests/ambi_check.c b/tests/ambi_check.c new file mode 100644 index 00000000..287249eb --- /dev/null +++ b/tests/ambi_check.c @@ -0,0 +1,309 @@ +/* + * ambi_check.c + * + * Check indexing ambiguities + * + * Copyright © 2012-2014 Deutsches Elektronen-Synchrotron DESY, + * a research centre of the Helmholtz Association. + * + * Authors: + * 2012-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 . + * + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + + +#include +#include +#include + +#include +#include + + +static int is_nonmirror_subgroup(SymOpList *holo, SymOpList *mero) +{ + SymOpList *twins; + int index; + + if ( !is_subgroup(holo, mero) ) return 0; + + twins = get_ambiguities(holo, mero); + if ( twins == NULL ) return 0; + + index = num_equivs(twins, NULL); + free_symoplist(twins); + + return index; +} + + +static int is_maximal_nonmirror_subgroup(SymOpList *holo, SymOpList *mero, + SymOpList **list, int n) +{ + int i; + int index; + + index = is_nonmirror_subgroup(holo, mero); + if ( index == 0 ) return 0; + + /* Try to find a group ... */ + for ( i=0; i