示例#1
0
        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);
            }
        }
示例#2
0
        /// <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);
        }
示例#3
0
        /// <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");
        }