# Interface IntervalListScatterer

All Known Implementing Classes:
  `IntervalListScattererByBaseCount, IntervalListScattererByIntervalCount, IntervalListScattererByIntervalCountWithDistributedRemainder, IntervalListScattererWithoutSubdivision, IntervalListScattererWithoutSubdivisionWithOverflow, IntervalListScattererWithSubdivision`

public interface IntervalListScatterer
An interface for a class that scatters IntervalLists.

## Method Summary

Modifier and Type
Method
Description
`int`
`deduceIdealSplitWeight(htsjdk.samtools.util.IntervalList intervalList, int nCount)`
A method that determines the ideal target "weight" of the output IntervalList.
`long`
`intervalWeight(htsjdk.samtools.util.Interval interval)`
A method that defines the "weight" of an interval list for the purpose of scattering.
`long`
`listWeight(htsjdk.samtools.util.IntervalList intervalList)`
A method that defines the "weight" of an interval for the purpose of scattering.
`default htsjdk.samtools.util.IntervalList`
`preprocessIntervalList(htsjdk.samtools.util.IntervalList inputList)`
A function that will be called on an IntervalList prior to splitting it into sub-lists, and is a point where implementations can chose to impose some conditions on the lists, for example, merging overlapping/abutting intervals, removing duplicates, etc.
`default List<htsjdk.samtools.util.IntervalList>`
`scatter(htsjdk.samtools.util.IntervalList inputList, int scatterCount)`
Scatter an `IntervalList` into several IntervalLists.
`List<htsjdk.samtools.util.Interval>`
`takeSome(htsjdk.samtools.util.Interval interval, long idealSplitWeight, long currentSize, double projectSizeOfRemaining)`
Figure out how much of the input interval to put into current list and how much to leave for the next interval list.

## Method Details

### scatter

default List<htsjdk.samtools.util.IntervalList> scatter(htsjdk.samtools.util.IntervalList inputList, int scatterCount)
Scatter an `IntervalList` into several IntervalLists. The default implementation makes use of the other interfaced methods, and aims to provide a universal way to scatter an IntervalList.

Parameters:
  `inputList` - IntervalList to be scattered
  `scatterCount` - ideal number of scatters generated.
Returns:
  Scattered `List` of IntervalLists,

### preprocessIntervalList

default htsjdk.samtools.util.IntervalList preprocessIntervalList(htsjdk.samtools.util.IntervalList inputList)
A function that will be called on an IntervalList prior to splitting it into sub-lists, and is a point where implementations can chose to impose some conditions on the lists, for example, merging overlapping/abutting intervals, removing duplicates, etc.

Parameters:
  `inputList` - the original `IntervalList`
Returns:
  the IntervalList that will be split up by the scatterer.

### intervalWeight

long intervalWeight(htsjdk.samtools.util.Interval interval)
A method that defines the "weight" of an interval list for the purpose of scattering. The class will attempt to create sublists that all have similar weights.

### listWeight

long listWeight(htsjdk.samtools.util.IntervalList intervalList)
A method that defines the "weight" of an interval for the purpose of scattering. The class will attempt to create sublists that all have similar weights. This method need to estimate the change in any sublists weight due to the possible of the provided interval.

### takeSome

List<htsjdk.samtools.util.Interval> takeSome(htsjdk.samtools.util.Interval interval, long idealSplitWeight, long currentSize, double projectSizeOfRemaining)
Figure out how much of the input interval to put into current list and how much to leave for the next interval list.

Parameters:
  `interval` -
Returns:
  a list of two (possibly null) elements. The first element should be added to the current interval list, the second should be offered to the next interval list.

### deduceIdealSplitWeight

int deduceIdealSplitWeight(htsjdk.samtools.util.IntervalList intervalList, int nCount)
A method that determines the ideal target "weight" of the output IntervalList.

Parameters:
  `intervalList` - the `IntervalList` that is about to get split
  `nCount` - the scatter count into which to split intervalList
Returns:
  The ideal "weight" of the output `IntervalList`'s