/** * Returns a list of list of subunit ids that form an "orbit", i.e. they are transformed into each * other during a rotation around the principal symmetry axis (z-axis) * * @return */ private List<List<Integer>> calcOrbits() { int n = subunits.getSubunitCount(); List<List<Integer>> orbits = new ArrayList<List<Integer>>(); for (int i = 0; i < n; i++) { orbits.add(Collections.singletonList(i)); } return orbits; }
public HelixAxisAligner(QuatSymmetryResults results) { this.subunits = results.getSubunits(); this.helixLayers = results.getHelixLayers(); if (subunits == null) { throw new IllegalArgumentException("HelixAxisTransformation: Subunits are null"); } else if (helixLayers == null) { throw new IllegalArgumentException("HelixAxisTransformation: HelixLayers is null"); } else if (subunits.getSubunitCount() == 0) { throw new IllegalArgumentException("HelixAxisTransformation: Subunits is empty"); } else if (helixLayers.size() == 0) { throw new IllegalArgumentException("HelixAxisTransformation: HelixLayers is empty"); } }
private double[] getSubunitZDepth() { int n = subunits.getSubunitCount(); double[] depth = new double[n]; Point3d probe = new Point3d(); // transform subunit centers into z-aligned position and calculate // z-coordinates (depth) along the z-axis. for (int i = 0; i < n; i++) { Point3d p = subunits.getCenters().get(i); probe.set(p); transformationMatrix.transform(probe); depth[i] = probe.z; } return depth; }