code: @Override public List<InputSplit> getSplits(JobContext job)
  		throws IOException
  	{
  		if (this.conf == null)
  			this.conf = job.getConfiguration();
  
  		final List<InputSplit> origSplits =
  				BAMInputFormat.removeIndexFiles(super.getSplits(job));
  
  		// We have to partition the splits by input format and hand them over to
  		// the *InputFormats for any further handling.
  		//
  		// BAMInputFormat and CRAMInputFormat need to change the split boundaries, so we can
  		// just extract the BAM and CRAM ones and leave the rest as they are.
  
  		final List<InputSplit>
  			bamOrigSplits = new ArrayList<InputSplit>(origSplits.size()),
  			cramOrigSplits = new ArrayList<InputSplit>(origSplits.size()),
  			newSplits     = new ArrayList<InputSplit>(origSplits.size());
  
  		for (final InputSplit iSplit : origSplits) {
  			final FileSplit split = (FileSplit)iSplit;
  
  			if (SAMFormat.BAM.equals(getFormat(split.getPath())))
  				bamOrigSplits.add(split);
  			else if (SAMFormat.CRAM.equals(getFormat(split.getPath())))
  				cramOrigSplits.add(split);
  			else
  				newSplits.add(split);
  		}
  		newSplits.addAll(bamIF.getSplits(bamOrigSplits, job.getConfiguration()));
  		newSplits.addAll(cramIF.getSplits(cramOrigSplits, job.getConfiguration()));
  		return newSplits;
  	}
docs: Defers to {@link BAMInputFormat} or {@link CRAMInputFormat} as appropriate for each
  individual path. SAM paths do not require special handling, so their splits are left
  unchanged.