docs: public void applyQTran( DMatrixRBlock B ) {
          int minDimen = Math.min(dataA.numCols,dataA.numRows);
  
          DSubmatrixD1 subB = new DSubmatrixD1(B);
  
          W.col0 = W.row0 = 0;
          Y.row1 = W.row1 = dataA.numRows;
          WTA.row0 = WTA.col0 = 0;
  
          // (Q3^T * (Q2^T * (Q1^t * A)))
          for( int i = 0; i < minDimen; i += blockLength ) {
  
              Y.col0 = i;
              Y.col1 = Math.min(Y.col0+blockLength,dataA.numCols);
              Y.row0 = i;
              
              subB.row0 = i;
  //            subB.row1 = B.numRows;
  //            subB.col0 = 0;
  //            subB.col1 = B.numCols;
  
              setW();
  //            W.original.reshape(W.row1,W.col1,false);
              WTA.row0 = 0;
              WTA.col0 = 0;
              WTA.row1 = W.col1-W.col0;
              WTA.col1 = subB.col1-subB.col0;
              WTA.original.reshape(WTA.row1,WTA.col1,false);
  
              // Compute W matrix from reflectors stored in Y
              if( !saveW )
                  BlockHouseHolder_DDRB.computeW_Column(blockLength,Y,W,temp, gammas,Y.col0);
  
              // Apply the Qi to Q
              MatrixMult_DDRB.multTransA(blockLength,W,subB,WTA);
              BlockHouseHolder_DDRB.multAdd_zeros(blockLength,Y,WTA,subB);
          }
      }