/** * There are multiple parsers for the same IlluminaDataType (e.g. BCLParser and QSeqParser). * Instantiate an instance of the preferred parser for the given data type with the information * available and return it. * * @param format The type of data we want to parse * @param requestedTiles The requestedTiles over which we will be parsing data * @return A parser that will parse dataType data over the given requestedTiles and cycles and * output it in groupings of the sizes specified in outputLengths */ private IlluminaParser makeParser( final SupportedIlluminaFormat format, final List<Integer> requestedTiles) { final IlluminaParser parser; switch (format) { case Barcode: parser = new BarcodeParser( ((PerTileFileUtil) fileUtil.getUtil(SupportedIlluminaFormat.Barcode)) .getFiles(requestedTiles)); break; case Bcl: { final CycleIlluminaFileMap bclFileMap = ((PerTilePerCycleFileUtil) fileUtil.getUtil(SupportedIlluminaFormat.Bcl)) .getFiles(requestedTiles, outputMapping.getOutputCycles()); bclFileMap.assertValid(requestedTiles, outputMapping.getOutputCycles()); parser = new BclParser( basecallDirectory, lane, bclFileMap, outputMapping, this.applyEamssFiltering, bclQualityEvaluationStrategy); break; } case Filter: final IlluminaFileMap filterFileMap = ((PerTileFileUtil) fileUtil.getUtil(SupportedIlluminaFormat.Filter)) .getFiles(requestedTiles); parser = new FilterParser(filterFileMap); break; case Locs: case Clocs: case Pos: final PerTileFileUtil fu = (PerTileFileUtil) fileUtil.getUtil(format); parser = new PosParser(fu.getFiles(requestedTiles), format); break; case MultiTileFilter: parser = ((MultiTileFilterFileUtil) fileUtil.getUtil(SupportedIlluminaFormat.MultiTileFilter)) .makeParser(requestedTiles); break; case MultiTileLocs: parser = ((MultiTileLocsFileUtil) fileUtil.getUtil(SupportedIlluminaFormat.MultiTileLocs)) .makeParser(requestedTiles); break; case MultiTileBcl: { final MultiTileBclFileUtil util = (MultiTileBclFileUtil) fileUtil.getUtil(SupportedIlluminaFormat.MultiTileBcl); final CycleIlluminaFileMap bclFileMap = util.getFiles(requestedTiles, outputMapping.getOutputCycles()); bclFileMap.assertValid(requestedTiles, outputMapping.getOutputCycles()); parser = new MultiTileBclParser( basecallDirectory, lane, bclFileMap, outputMapping, this.applyEamssFiltering, bclQualityEvaluationStrategy, util.tileIndex); break; } default: throw new PicardException( "Unrecognized data type(" + format + ") found by IlluminaDataProviderFactory!"); } return parser; }
/** * Sometimes (in the case of skipped reads) the logical read structure of the output cluster data * is different from the input readStructure * * @return The ReadStructure describing the output cluster data */ public ReadStructure getOutputReadStructure() { return outputMapping.getOutputReadStructure(); }