List of usage examples for com.google.common.collect Range span
public Range<C> span(Range<C> other)
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; }