**/
  private void exciteVerticalSameShapeRecognizers(int shape) {
    int shapeOffset = 2500 * shape;
    double weight = 0.3;
    for (int neuron = 0; neuron < 2500; neuron++) {
      if (neuron % 5 != 0) {// not the inhibitory ones
        int toNeuron;
        int fromNeuron = neuron + shapeOffset;
        int fromCol = neuron % 50;
        int fromRow = neuron / 50;

        if ((fromRow % 10) >= 5) {// only for bottom half.
          int fromBigRow = neuron / 500;
          int fromBigCol = fromCol / 10;
          int toBigCol = fromBigCol; // going up column "n"
          for (int toBigRow = 0; toBigRow < 5; toBigRow++) { // through all the
            // other rows
            if (toBigRow != fromBigRow) { // not self
              for (int toRow = 5; toRow < 10; toRow++) {// ignoring the top half
                // of the big rows
                for (int i = 0; i < 10; i++) {
                  toNeuron = shapeOffset + toBigRow * 500 + toRow * 50
                  + toBigCol * 10 + i;
                  addConnection(fromNeuron, toNeuron + 4, weight);
                }
              }
            }
          }
        }
      }
    }
  }