code: private void getSymmetryAxes(List<Axis> symmAxes, Matrix4d prior, int level, int firstRepeat) {
  		if(level >= getNumLevels() ) {
  			return;
  		}
  
  		Axis elem = axes.get(level);
  		Matrix4d elemOp = elem.getOperator();
  
  		// Current axis:
  		// elementary maps B -> A
  		// prior maps I -> A and J -> B
  		// want J -> I = J -> B -> A <- I= inv(prior) * elementary * prior
  		Matrix4d currAxisOp = new Matrix4d(prior);
  		currAxisOp.invert();
  		currAxisOp.mul(elemOp);
  		currAxisOp.mul(prior);
  		Axis currAxis = new Axis(currAxisOp,elem.getOrder(),elem.getSymmType(),level,firstRepeat);
  		symmAxes.add(currAxis);
  
  		//Remember that all degrees are at least 2
  		getSymmetryAxes(symmAxes,prior,level+1,firstRepeat);
  		//New prior is elementary^d*prior
  		Matrix4d newPrior = new Matrix4d(elemOp);
  		newPrior.mul(prior);
  		int childSize = getNumRepeats(level+1);
  		getSymmetryAxes(symmAxes,newPrior,level+1,firstRepeat+childSize);
  		for(int d=2;d<elem.getOrder();d++) {
  			newPrior.mul(elemOp,newPrior);
  			getSymmetryAxes(symmAxes,newPrior,level+1,firstRepeat+childSize*d);
  		}
  	}
docs: Recursive helper
  @param symmAxes output list
  @param prior transformation aligning the first repeat of this axis with the first overall
  @param level current level