code: private void calcAlignedOrbits() {
  		Map<Double, List<Integer>> depthMap = new TreeMap<Double, List<Integer>>();
  		double[] depth = getSubunitZDepth();
  		alignedOrbits = calcOrbits();
  
  		// calculate the mean depth of orbit along z-axis
  		for (List<Integer> orbit: alignedOrbits) {
  			// calculate the mean depth along z-axis for each orbit
  			double meanDepth = 0;
  			for (int subunit: orbit) {
  				meanDepth += depth[subunit];
  			}
  			meanDepth /= orbit.size();
  
  			if (depthMap.get(meanDepth) != null) {
  				meanDepth += 0.01;
  			}
  //			System.out.println("calcAlignedOrbits: " + meanDepth + " orbit: " + orbit);
  			depthMap.put(meanDepth, orbit);
  		}
  
  		// now fill orbits back into list ordered by depth
  		alignedOrbits.clear();
  		for (List<Integer> orbit: depthMap.values()) {
  			// order subunit in a clockwise rotation around the z-axis
  			/// starting at the 12 O-clock position (+y position)
  			// TODO how should this be aligned??
  	//		alignWithReferenceAxis(orbit);
  			alignedOrbits.add(orbit);
  		}
  	}
docs: Returns a list of orbits (an orbit is a cyclic permutation of subunit indices that are related
  by a rotation around the principal rotation axis) ordered from the +z direction to the -z direction (z-depth).
  Within an orbit, subunit indices are ordered with a clockwise rotation around the z-axis.
  @return list of orbits ordered by z-depth