diff --git a/modules/mol/alg/src/find_membrane.cc b/modules/mol/alg/src/find_membrane.cc index 8669efd8abbac9fcf88e6ab2279558fee3dcc2ba..d3ebede1b48a8bce0b0cf8e955a1539ab930598a 100644 --- a/modules/mol/alg/src/find_membrane.cc +++ b/modules/mol/alg/src/find_membrane.cc @@ -986,6 +986,21 @@ FindMemParam FindMembrane(ost::mol::EntityView& ent, "of heavy atoms!"); } + // number of atom position with non-zero accessibility is relevant too + int n_nonzero_asa = 0; + for(Real acc: asas) { + if(acc != 0.0) { + ++n_nonzero_asa; + } + } + if(n_nonzero_asa < 10) { + throw ost::Error("Cannot detect membrane with such a low number of " + "atoms with non-zero accessibility. Potential failure " + "mode: Atoms on top of each other result in zero " + "solvent accessibility (yes this happens)."); + } + + // we always optimizer along the z-axis. // We therefore have to transform the positions. We use a rotation // around the z-axis with subsequent rotation around the x-axis for this task