ui/src/main/java/ucar/nc2/ui/grib/Grib2ReportPanel.java
private void doPdsSummary(Formatter f, MCollection dcm, boolean eachFile) throws IOException {
    Counters countersAll = new Counters();
    countersAll.add("template");
    countersAll.add("timeUnit");
    countersAll.add("timeOffset");
    countersAll.add("timeIntervalSize");
    countersAll.add("levelType");
    countersAll.add("genProcessType");
    countersAll.add("genProcessId");
    countersAll.add("levelScale");
    countersAll.add("nExtraCoords");

    for (MFile mfile : dcm.getFilesSorted()) {
      f.format("---%s%n", mfile.getPath());
      doPdsSummary(f, mfile, countersAll);

      if (eachFile) {
        countersAll.show(f);
        countersAll.reset();
      }
    }

    f.format("PdsSummary - all files%n");
    if (!eachFile)
      countersAll.show(f);
  }
private void doPdsSummary(Formatter f, MCollection dcm, boolean eachFile) throws IOException {
    Counters countersAll = new Counters();
    countersAll.add("template");
    countersAll.add("timeUnit");
    countersAll.add("timeOffset");
    countersAll.add("timeIntervalSize");
    countersAll.add("levelType");
    countersAll.add("genProcessType");
    countersAll.add("genProcessId");
    countersAll.add("levelScale");
    countersAll.add("nExtraCoords");

    for (MFile mfile : dcm.getFilesSorted()) {
      f.format("---%s%n", mfile.getPath());
      doPdsSummary(f, mfile, countersAll);

      if (eachFile) {
        countersAll.show(f);
        countersAll.reset();
      }
    }

    f.format("PdsSummary - all files%n");
    if (!eachFile)
      countersAll.show(f);
  }
/////////////////////////////////////////////////