Example usage for com.google.common.collect Range span

List of usage examples for com.google.common.collect Range span

Introduction

In this page you can find the example usage for com.google.common.collect Range span.

Prototype

public Range<C> span(Range<C> other) 

Source Link

Document

Returns the minimal range that #encloses encloses both this range and other .

Usage

From source file:com.giaybac.traprange.TrapRangeBuilder.java

/**
 * The result will be ordered by lowerEndpoint ASC
 *
 * @return//from  ww w  .  java2  s.co m
 */
public List<Range<Integer>> build() {
    List<Range<Integer>> retVal = new ArrayList<>();
    //order range by lower Bound
    Collections.sort(ranges, new Comparator<Range>() {
        @Override
        public int compare(Range o1, Range o2) {
            return o1.lowerEndpoint().compareTo(o2.lowerEndpoint());
        }
    });

    for (Range<Integer> range : ranges) {
        if (retVal.isEmpty()) {
            retVal.add(range);
        } else {
            Range<Integer> lastRange = retVal.get(retVal.size() - 1);
            if (lastRange.isConnected(range)) {
                Range newLastRange = lastRange.span(range);
                retVal.set(retVal.size() - 1, newLastRange);
            } else {
                retVal.add(range);
            }
        }
    }
    //debug
    logger.debug("Found " + retVal.size() + " trap-range(s)");
    //return
    return retVal;
}

From source file:org.dishevelled.bio.range.tree.CenteredRangeTree.java

/**
 * Create and return a new node for the specified ranges.
 *
 * @param ranges ranges//from   ww  w . ja v  a 2 s. c  o m
 * @return a new node for the specified ranges
 */
private Node createNode(final Iterable<Range<C>> ranges) {
    Range<C> span = Iterables.getFirst(ranges, null);
    if (span == null) {
        return null;
    }
    for (Range<C> range : ranges) {
        checkNotNull(range, "ranges must not contain null ranges");
        span = range.span(span);
    }
    if (span.isEmpty()) {
        return null;
    }
    C center = Ranges.center(span);
    List<Range<C>> left = Lists.newArrayList();
    List<Range<C>> right = Lists.newArrayList();
    List<Range<C>> overlap = Lists.newArrayList();
    for (Range<C> range : ranges) {
        if (Ranges.isLessThan(range, center)) {
            left.add(range);
        } else if (Ranges.isGreaterThan(range, center)) {
            right.add(range);
        } else {
            overlap.add(range);
        }
    }
    return new Node(center, createNode(left), createNode(right), overlap);
}

From source file:org.dishevelled.bio.range.entrytree.CenteredRangeTree.java

/**
 * Create and return a new node for the specified range entries.
 *
 * @param entries range entries//from ww w.j ava 2s.c  om
 * @return a new node for the specified range entries
 */
private Node createNode(final Iterable<Entry<C, V>> entries) {
    Entry<C, V> first = Iterables.getFirst(entries, null);
    if (first == null) {
        return null;
    }
    Range<C> span = first.getRange();

    for (Entry<C, V> entry : entries) {
        Range<C> range = entry.getRange();
        span = range.span(span);
    }
    if (span.isEmpty()) {
        return null;
    }
    C center = Ranges.center(span);
    List<Entry<C, V>> left = Lists.newArrayList();
    List<Entry<C, V>> right = Lists.newArrayList();
    List<Entry<C, V>> overlap = Lists.newArrayList();

    for (Entry<C, V> entry : entries) {
        Range<C> range = entry.getRange();
        if (Ranges.isLessThan(range, center)) {
            left.add(entry);
        } else if (Ranges.isGreaterThan(range, center)) {
            right.add(entry);
        } else {
            overlap.add(entry);
        }
    }
    return new Node(center, createNode(left), createNode(right), overlap);
}

From source file:net.sf.mzmine.parameters.parametertypes.ranges.RTRangeComponent.java

@Override
public void actionPerformed(ActionEvent event) {

    Object src = event.getSource();

    if (src == setAutoButton) {
        RawDataFile currentFiles[] = MZmineCore.getProjectManager().getCurrentProject().getDataFiles();

        try {//from  w w  w  .ja  va 2s.  c o m
            ParameterSetupDialog setupDialog = (ParameterSetupDialog) SwingUtilities.getWindowAncestor(this);
            RawDataFilesComponent rdc = (RawDataFilesComponent) setupDialog
                    .getComponentForParameter(new RawDataFilesParameter());

            // If the current setup dialog has no raw data file selector, it
            // is probably in the parent dialog, so let's check it
            if (rdc == null) {
                setupDialog = (ParameterSetupDialog) setupDialog.getParent();
                rdc = (RawDataFilesComponent) setupDialog.getComponentForParameter(new RawDataFilesParameter());
            }
            if (rdc != null)
                currentFiles = rdc.getValue().getMatchingRawDataFiles();
        } catch (Exception e) {
            e.printStackTrace();
        }

        Range<Double> rtRange = null;
        for (RawDataFile file : currentFiles) {
            Range<Double> fileRange = file.getDataRTRange();
            if (rtRange == null)
                rtRange = fileRange;
            else
                rtRange = rtRange.span(fileRange);
        }
        setValue(rtRange);
    }

}

From source file:net.sourceforge.ganttproject.task.algorithm.SchedulerImpl.java

private void schedule(Node node) {
    Logger logger = GPLogger.getLogger(this);
    GPLogger.debug(logger, "Scheduling node %s", node);
    Range<Date> startRange = Range.all();
    Range<Date> endRange = Range.all();

    Range<Date> weakStartRange = Range.all();
    Range<Date> weakEndRange = Range.all();

    List<Date> subtaskRanges = Lists.newArrayList();
    List<DependencyEdge> incoming = node.getIncoming();
    GPLogger.debug(logger, ".. #incoming edges=%d", incoming.size());
    for (DependencyEdge edge : incoming) {
        if (!edge.refresh()) {
            continue;
        }//from w  w w.java2 s.  co  m
        if (edge instanceof ImplicitSubSuperTaskDependency) {
            subtaskRanges.add(edge.getStartRange().upperEndpoint());
            subtaskRanges.add(edge.getEndRange().lowerEndpoint());
        } else {
            if (edge.isWeak()) {
                weakStartRange = weakStartRange.intersection(edge.getStartRange());
                weakEndRange = weakEndRange.intersection(edge.getEndRange());
            } else {
                startRange = startRange.intersection(edge.getStartRange());
                endRange = endRange.intersection(edge.getEndRange());
            }
        }
        if (startRange.isEmpty() || endRange.isEmpty()) {
            GPLogger.logToLogger("both start and end ranges were calculated as empty for task=" + node.getTask()
                    + ". Skipping it");
        }
    }
    GPLogger.debug(logger, "..Ranges: start=%s end=%s weakStart=%s weakEnd=%s", startRange, endRange,
            weakStartRange, weakEndRange);

    Range<Date> subtasksSpan = subtaskRanges.isEmpty()
            ? Range.closed(node.getTask().getStart().getTime(), node.getTask().getEnd().getTime())
            : Range.encloseAll(subtaskRanges);
    Range<Date> subtreeStartUpwards = subtasksSpan
            .span(Range.downTo(node.getTask().getStart().getTime(), BoundType.CLOSED));
    Range<Date> subtreeEndDownwards = subtasksSpan
            .span(Range.upTo(node.getTask().getEnd().getTime(), BoundType.CLOSED));
    GPLogger.debug(logger, "..Subtasks span=%s", subtasksSpan);

    if (!startRange.equals(Range.all())) {
        startRange = startRange.intersection(weakStartRange);
    } else if (!weakStartRange.equals(Range.all())) {
        startRange = weakStartRange.intersection(subtreeStartUpwards);
    }
    if (!endRange.equals(Range.all())) {
        endRange = endRange.intersection(weakEndRange);
    } else if (!weakEndRange.equals(Range.all())) {
        endRange = weakEndRange.intersection(subtreeEndDownwards);
    }
    if (node.getTask().getThirdDateConstraint() == TaskImpl.EARLIESTBEGIN
            && node.getTask().getThird() != null) {
        startRange = startRange
                .intersection(Range.downTo(node.getTask().getThird().getTime(), BoundType.CLOSED));
        GPLogger.debug(logger, ".. applying earliest start=%s. Now start range=%s", node.getTask().getThird(),
                startRange);
    }
    if (!subtaskRanges.isEmpty()) {
        startRange = startRange.intersection(subtasksSpan);
        endRange = endRange.intersection(subtasksSpan);
    }
    GPLogger.debug(logger, ".. finally, start range=%s", startRange);
    if (startRange.hasLowerBound()) {
        modifyTaskStart(node.getTask(), startRange.lowerEndpoint());
    }
    if (endRange.hasUpperBound()) {
        GPCalendarCalc cal = node.getTask().getManager().getCalendar();
        Date endDate = endRange.upperEndpoint();
        TimeUnit timeUnit = node.getTask().getDuration().getTimeUnit();
        if (DayMask.WORKING == (cal.getDayMask(endDate) & DayMask.WORKING)) {
            // in case if calculated end date falls on first day after holidays (say, on Monday)
            // we'll want to modify it a little bit, so that it falls on that holidays start
            // If we don't do this, it will be done automatically the next time task activities are recalculated,
            // and thus task end date will keep changing
            Date closestWorkingEndDate = cal.findClosest(endDate, timeUnit,
                    GPCalendarCalc.MoveDirection.BACKWARD, GPCalendar.DayType.WORKING);
            Date closestNonWorkingEndDate = cal.findClosest(endDate, timeUnit,
                    GPCalendarCalc.MoveDirection.BACKWARD, GPCalendar.DayType.NON_WORKING,
                    closestWorkingEndDate);
            // If there is a non-working date between current task end and closest working date
            // then we're really just after holidays
            if (closestNonWorkingEndDate != null && closestWorkingEndDate.before(closestNonWorkingEndDate)) {
                // we need to adjust-right closest working date to position to the very beginning of the holidays interval
                Date nonWorkingPeriodStart = timeUnit.adjustRight(closestWorkingEndDate);
                if (nonWorkingPeriodStart.after(node.getTask().getStart().getTime())) {
                    endDate = nonWorkingPeriodStart;
                }
            }
        }
        modifyTaskEnd(node.getTask(), endDate);
    }
}

From source file:org.kalypso.kalypsomodel1d2d.ui.chart.BuildingParameterPaintData.java

private Range<Double> updateRange(final Range<Double> range, final BigDecimal value) {
    if (value == null)
        return range;

    final Range<Double> valueRange = Ranges.singleton(value.doubleValue());
    if (range == null)
        return valueRange;

    return range.span(valueRange);
}

From source file:net.sf.mzmine.parameters.parametertypes.ranges.MZRangeComponent.java

@Override
public void actionPerformed(ActionEvent event) {

    Object src = event.getSource();

    if (src == setAutoButton) {
        RawDataFile currentFiles[] = MZmineCore.getProjectManager().getCurrentProject().getDataFiles();
        ScanSelection scanSelection = new ScanSelection();

        try {/*w ww  . ja  v a2  s.c om*/
            ParameterSetupDialog setupDialog = (ParameterSetupDialog) SwingUtilities.getWindowAncestor(this);
            RawDataFilesComponent rdc = (RawDataFilesComponent) setupDialog
                    .getComponentForParameter(new RawDataFilesParameter());
            if (rdc != null)
                currentFiles = rdc.getValue().getMatchingRawDataFiles();
            ScanSelectionComponent ssc = (ScanSelectionComponent) setupDialog
                    .getComponentForParameter(new ScanSelectionParameter());
            if (ssc != null)
                scanSelection = ssc.getValue();
        } catch (Exception e) {
            e.printStackTrace();
        }

        Range<Double> mzRange = null;
        for (RawDataFile file : currentFiles) {
            Scan scans[] = scanSelection.getMatchingScans(file);
            for (Scan s : scans) {
                Range<Double> scanRange = s.getDataPointMZRange();
                if (scanRange == null)
                    continue;
                if (mzRange == null)
                    mzRange = scanRange;
                else
                    mzRange = mzRange.span(scanRange);
            }
        }
        if (mzRange != null)
            setValue(mzRange);
    }

    if (src == fromFormulaButton) {
        Range<Double> mzRange = MzRangeCalculatorModule.showRangeCalculationDialog();
        if (mzRange != null)
            setValue(mzRange);
    }

}

From source file:edu.mit.streamjit.impl.compiler2.Storage.java

/**
 * Returns a set containing the indices live before the initialization
 * schedule; that is, the indices holding initial data. (Note that, as a
 * span, not every contained index will be occupied.) The returned range
 * will be/*  w w w  . j a v a  2s  .  com*/
 * {@link Range#canonical(com.google.common.collect.DiscreteDomain) canonical}.
 * The range is not cached so as to be responsive to changes in initial data
 * index functions.
 * @return a range spanning the indices holding initial data under the
 * current index functions
 * @see #initialDataIndices()
 */
public Range<Integer> initialDataIndexSpan() {
    Range<Integer> range = null;
    for (Pair<ImmutableList<Object>, IndexFunction> p : initialData())
        for (int i = 0; i < p.first.size(); ++i)
            try {
                int x = p.second.applyAsInt(i);
                range = (range == null) ? Range.singleton(x) : range.span(Range.singleton(x));
            } catch (Throwable ex) {
                throw new AssertionError("index functions should not throw", ex);
            }
    range = (range != null ? range : Range.closedOpen(0, 0));
    return range.canonical(DiscreteDomain.integers());
}

From source file:net.sf.mzmine.modules.peaklistmethods.gapfilling.samerange.SameRangeTask.java

private Feature fillGap(PeakListRow row, RawDataFile column) {

    SameRangePeak newPeak = new SameRangePeak(column);

    Range<Double> mzRange = null, rtRange = null;

    // Check the peaks for selected data files
    for (RawDataFile dataFile : row.getRawDataFiles()) {
        Feature peak = row.getPeak(dataFile);
        if (peak == null)
            continue;
        if ((mzRange == null) || (rtRange == null)) {
            mzRange = peak.getRawDataPointsMZRange();
            rtRange = peak.getRawDataPointsRTRange();
        } else {//from ww  w .  j ava2 s.  c  o m
            mzRange = mzRange.span(peak.getRawDataPointsMZRange());
            rtRange = rtRange.span(peak.getRawDataPointsRTRange());
        }
    }

    assert mzRange != null;
    assert rtRange != null;

    Range<Double> mzRangeWithTol = mzTolerance.getToleranceRange(mzRange);

    // Get scan numbers
    int[] scanNumbers = column.getScanNumbers(1, rtRange);

    boolean dataPointFound = false;

    for (int scanNumber : scanNumbers) {

        if (isCanceled())
            return null;

        // Get next scan
        Scan scan = column.getScan(scanNumber);

        // Find most intense m/z peak
        DataPoint basePeak = ScanUtils.findBasePeak(scan, mzRangeWithTol);

        if (basePeak != null) {
            if (basePeak.getIntensity() > 0)
                dataPointFound = true;
            newPeak.addDatapoint(scan.getScanNumber(), basePeak);
        } else {
            DataPoint fakeDataPoint = new SimpleDataPoint(RangeUtils.rangeCenter(mzRangeWithTol), 0);
            newPeak.addDatapoint(scan.getScanNumber(), fakeDataPoint);
        }

    }

    if (dataPointFound) {
        newPeak.finalizePeak();
        if (newPeak.getArea() == 0)
            return null;
        return newPeak;
    }

    return null;
}

From source file:net.sf.mzmine.project.impl.RawDataFileImpl.java

public @Nonnull Range<Double> getDataMZRange(int msLevel) {

    // check if we have this value already cached
    Range<Double> mzRange = dataMZRange.get(msLevel);
    if (mzRange != null)
        return mzRange;

    // find the value
    for (Scan scan : scans.values()) {

        // ignore scans of other ms levels
        if ((msLevel != 0) && (scan.getMSLevel() != msLevel))
            continue;

        if (mzRange == null)
            mzRange = scan.getDataPointMZRange();
        else// www  .j a  va2  s .co  m
            mzRange = mzRange.span(scan.getDataPointMZRange());

    }

    // cache the value, if we found any
    if (mzRange != null)
        dataMZRange.put(msLevel, mzRange);
    else
        mzRange = Range.singleton(0.0);

    return mzRange;

}