private void parse(Map<String, Integer> names, final Reader reference, final Sex sex) throws IOException { final BufferedReader in = new BufferedReader(reference); final ReferenceParse parse = new ReferenceParse(names, in, sex); try { parse.parse(); } catch (final IOException e) { throw new IOException("I/O error while reading reference file. ", e); } postProcessing(names, parse); if (parse.mError) { throw new NoTalkbackSlimException("Invalid reference file (see earlier warning messages)."); } }
/** * Finish constructing the references and link in duplicates. * * @param names the ordered set of reference sequence names * @param parse results from parsing. */ private void postProcessing(Map<String, Integer> names, final ReferenceParse parse) { mReferences = new LinkedHashMap<>(); // deal with sequences in genome but explicitly described. for (final Map.Entry<String, Integer> entry : names.entrySet()) { final String name = entry.getKey(); if (parse.mReferences.containsKey( name)) { // have seen explicitly declared seq line, so copy from parse mReferences.put(name, parse.mReferences.get(name)); continue; } if (parse.mPloidyDefault == null) { parse.error("No default specified but required for sequence:" + name); return; } try { mReferences.put( name, new ReferenceSequence( false, parse.mLinearDefault, parse.mPloidyDefault, name, null, entry.getValue())); } catch (final IllegalArgumentException e) { throw new NoTalkbackSlimException("Invalid reference file. " + e.getMessage()); } } // add duplicate information into sequence entries for (final Pair<RegionRestriction, RegionRestriction> duplicate : parse.mDuplicates) { final RegionRestriction r1 = duplicate.getA(); if (!mReferences.containsKey(r1.getSequenceName())) { continue; } final RegionRestriction r2 = duplicate.getB(); if (!mReferences.containsKey(r2.getSequenceName())) { continue; } try { mReferences.get(r1.getSequenceName()).addDuplicate(duplicate); mReferences.get(r2.getSequenceName()).addDuplicate(duplicate); } catch (final IllegalArgumentException e) { throw new NoTalkbackSlimException("Invalid reference file. " + e.getMessage()); } } }