code: public Double maxF1() 
      {
          double maxF1 = -Double.MAX_VALUE;
          double n = 0;
          for (int i=0; i<pairs.length; i++) {
              if (correctPair(i)) {
                  n++;
                  double precisionAtRankI = n/(i+1.0);
                  double recallAtRankI = n/numCorrectPairs;
                  if (precisionAtRankI>0 && recallAtRankI>0) {
                      double f1 = 2*(precisionAtRankI*recallAtRankI) / (precisionAtRankI + recallAtRankI);
                      maxF1 = Math.max( f1, maxF1 );
                  }
              }
          }
          return new Double(maxF1);
      }
docs: max F1 for any threshold