Пример #1
0
  /**
   * 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;
  }
Пример #2
0
 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");
   }
 }
Пример #3
0
  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;
  }