private void updateMatrix() {
   ComplexMatrix[] matrices = new ComplexMatrix[layers.length - 2];
   for (int i = 0; i < matrices.length; i++) {
     Layer[] subset = {layers[i], layers[i + 1], layers[i + 2]};
     matrices[i] = VcselMath.calculateTransferMatrix(source, subset);
   }
   ComplexMatrix overallTransfer = matrices[0];
   for (int i = 1; i < matrices.length; i++) {
     overallTransfer = overallTransfer.times(matrices[i]);
   }
   this.transfer = overallTransfer;
 }
 private void updateGammas() {
   this.gammas = VcselMath.calculateLayerGammas(angles, layers);
 }
 private void updateAngles() {
   this.angles = VcselMath.calculateOpticalAngles(source, layers);
 }