void writeHeader(VCFHeader header) { header = doNotWriteGenotypes ? new VCFHeader(header.MetaDataInSortedOrder) : header; try { // the file format field needs to be written first writer.Write(VERSION_LINE + "\n"); foreach (VCFHeaderLine line in header.MetaDataInSortedOrder) { if (VCFHeaderVersion.IsFormatString(line.Key)) { continue; } writer.Write(VCFHeader.METADATA_INDICATOR); writer.Write(line.ToString()); writer.Write("\n"); } // write out the column line writer.Write(VCFHeader.HEADER_INDICATOR); bool isFirst = true; foreach (string field in VCFHeader.HEADER_FIELDS) { if (isFirst) { isFirst = false; // don't write out a field separator } else { writer.Write(VCFConstants.FIELD_SEPARATOR); } writer.Write(field.ToString()); } if (header.hasGenotypingData()) { writer.Write(VCFConstants.FIELD_SEPARATOR); writer.Write("FORMAT"); foreach (string sample in header.GenotypeSampleNames) { writer.Write(VCFConstants.FIELD_SEPARATOR); writer.Write(sample); } } writer.Write("\n"); } catch (IOException e) { throw new Exception("IOException writing the VCF header.", e); } }
/// <summary> /// check our metadata for a VCF version tag, and throw an exception if the version is out of date /// or the version is not present /// TODO: Should only be one format line /// </summary> public virtual void loadVCFVersion() { IList <VCFHeaderLine> toRemove = new List <VCFHeaderLine>(); foreach (VCFHeaderLine line in mMetaData) { if (VCFHeaderVersion.IsFormatString(line.Key)) { toRemove.Add(line); } } // remove old header lines for now, mMetaData.RemoveRange(toRemove); }
/// <param name="reader"> the line reader to take header lines from </param> /// <returns> the number of header lines </returns> public virtual VCFHeader readHeader(StreamReader reader) { IList <string> headerStrings = new List <string>(); string line; try { bool foundHeaderVersion = false; while ((line = reader.ReadLine()) != null) { lineNo++; if (line.StartsWith(VCFHeader.METADATA_INDICATOR)) { string[] lineFields = line.Substring(2).Split('='); if (lineFields.Length == 2 && VCFHeaderVersion.IsFormatString(lineFields[0])) { if (!VCFHeaderVersion.IsVersionString(lineFields[1])) { throw new VCFParsingError("Header: " + lineFields[1] + " is not a supported version"); } foundHeaderVersion = true; version = VCFHeaderVersion.ToHeaderVersion(lineFields[1]); if (!this.AcceptableVersions.Contains(version)) { throw new VCFParsingError("This codec is strictly for " + Name + "; please use a different codec for " + lineFields[1]); } } headerStrings.Add(line); } else if (line.StartsWith(VCFHeader.HEADER_INDICATOR)) {//should be only one such line if (!foundHeaderVersion) { throw new VCFParsingError("We never saw a header line specifying VCF version"); } headerStrings.Add(line); return(parseHeaderFromLines(headerStrings, version)); } else { throw new VCFParsingError("We never saw the required CHROM header line (starting with one #) for the input VCF file"); } } } catch (IOException e) { throw new Exception("IO Exception ", e); } throw new VCFParsingError("We never saw the required CHROM header line (starting with one #) for the input VCF file"); }