code: @Override
    public NavigableMap<Integer, IScan> getScansByRtSpanAtMsLevel(double rtStart, double rtEnd,
        int msLevel) {
      if (getNum2scan().size() == 0) {
        return null;
      }
      List<IScan> startScans = getScansByRtUpper(rtStart);
      int startScanNum =
          startScans == null ?
              getNum2scan().firstEntry().getValue().getNum() :
              startScans.get(0).getNum();
      List<IScan> endScans = getScansByRtLower(rtEnd);
      int endScanNum =
          endScans == null ?
              getNum2scan().lastEntry().getValue().getNum() :
              endScans.get(0).getNum();
      if (endScanNum < startScanNum) {
        return null;
      }
      NavigableMap<Integer, IScan> scansByNumSpanAtMsLevel = getScansByNumSpanAtMsLevel(startScanNum,
          endScanNum, msLevel);
      if (scansByNumSpanAtMsLevel != null && scansByNumSpanAtMsLevel.size() > 0) {
        return scansByNumSpanAtMsLevel;
      }
      return null;
    }
docs: Same as {@link #getScansByRtSpan(double, double)}, but only searches at one MS Level. If it so
  happens, that the RTs are between just 2 consecutive scans, then null is returned. You get a
  view of the original scan map, not a copy!
  
  @param rtStart The beginning of RT window
  @param rtEnd The end of RT window
  @param msLevel MS Level at which to get scans
  @return null, if no scans were in this window.