code: public static ParseSetup guessSetup( Key[] fkeys, ParseSetup userSetup ) {
  
      //Guess setup of each file and collect results
      GuessSetupTsk t = new GuessSetupTsk(userSetup);
      t.doAll(fkeys).getResult();
  
      //Calc chunk-size
      // FIXME: should be a parser specific - or at least parser should be able to override defaults
      Iced ice = DKV.getGet(fkeys[0]);
      if (ice instanceof Frame && ((Frame) ice).vec(0) instanceof UploadFileVec) {
        t._gblSetup._chunk_size = FileVec.DFLT_CHUNK_SIZE;
      } else {
        t._gblSetup._chunk_size = FileVec.calcOptimalChunkSize(t._totalParseSize, t._gblSetup._number_columns, t._maxLineLength,
                Runtime.getRuntime().availableProcessors(), H2O.getCloudSize(), false /*use new heuristic*/, true);
      }
  
      return t._gblSetup;
    }
docs: Discover the parse setup needed to correctly parse all files.
  This takes a ParseSetup as guidance.  Each file is examined
  individually and then results merged.  If a conflict exists
  between any results all files are re-examined using the
  best guess from the first examination.
  
  @param fkeys Keys to input vectors to be parsed
  @param userSetup Setup guidance from user
  @return ParseSetup settings from looking at all files