Exemple #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="domainInterfaceId"></param>
        /// <param name="domainInterfaceTable"></param>
        /// <param name="pdbpfamTable"></param>
        /// <param name="chainAtomsHash"></param>
        /// <returns></returns>
        private DomainInterface ReadIntraDomainInterfaceFromChain(int domainInterfaceId, DataTable domainInterfaceTable,
                                                                  DataTable pdbpfamTable, Dictionary <string, ChainAtoms> chainAtomsHash)
        {
            DomainInterface domainInterface = new DomainInterface();

            DataRow[] domainInterfaceRows = domainInterfaceTable.Select(string.Format("DomainInterfaceID = '{0}'", domainInterfaceId));
            if (domainInterfaceRows.Length > 0)
            {
                long   domainId1 = Convert.ToInt64(domainInterfaceRows[0]["DomainID1"].ToString());
                long   domainId2 = Convert.ToInt64(domainInterfaceRows[0]["DomainID2"].ToString());
                string asymChain = domainInterfaceRows[0]["AsymChain1"].ToString().TrimEnd();
                if (chainAtomsHash.ContainsKey(asymChain))
                {
                    ChainAtoms chain = chainAtomsHash[asymChain];

                    Range[] domainRanges1 = GetDomainRange(pdbpfamTable, domainId1);
                    Range[] domainRanges2 = GetDomainRange(pdbpfamTable, domainId2);

                    domainInterface.domainInterfaceId = domainInterfaceId;
                    domainInterface.firstSymOpString  = asymChain + "_1_555";
                    domainInterface.secondSymOpString = asymChain + "_1_555";
                    domainInterface.domainId1         = domainId1;
                    domainInterface.domainId2         = domainId2;
                    domainInterface.chain1            = GetDomainAtoms(chain.CartnAtoms, domainRanges1);
                    domainInterface.chain2            = GetDomainAtoms(chain.CartnAtoms, domainRanges2);

                    domainInterface.GetInterfaceResidueDist();
                }
            }
            return(domainInterface);
        }
Exemple #2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="thisEntryCrystal"></param>
        /// <param name="asymChain"></param>
        /// <param name="threeLetterSeq"></param>
        /// <returns></returns>
        private AtomInfo[] ReadChainAtoms(EntryCrystal thisEntryCrystal, string asymChain, out string threeLetterSeq)
        {
            ChainAtoms chain = null;

            threeLetterSeq = "";
            for (int i = 0; i < thisEntryCrystal.atomCat.ChainAtomList.Length; i++)
            {
                if (thisEntryCrystal.atomCat.ChainAtomList[i].AsymChain == asymChain)
                {
                    chain = thisEntryCrystal.atomCat.ChainAtomList[i];
                    break;
                }
            }
            for (int i = 0; i < thisEntryCrystal.entityCat.EntityInfoList.Length; i++)
            {
                EntityInfo entityInfo = thisEntryCrystal.entityCat.EntityInfoList[i];
                string[]   asymChains = entityInfo.asymChains.Split(',');
                if (asymChains.Contains(asymChain))
                {
                    threeLetterSeq = entityInfo.threeLetterSeq;
                }
            }

            if (chain == null)
            {
                return(null);
            }
            AtomInfo[] chainAtoms = chain.CartnAtoms;
            return(chainAtoms);
        }
Exemple #3
0
        /// <summary>
        /// atom coordinates for domains
        /// A SCOP domain may have multiple segmentations
        /// </summary>
        /// <param name="chain"></param>
        /// <param name="ranges"></param>
        /// <returns></returns>
        private AtomInfo[] GetDomainAtoms(ChainAtoms chain, string rangeString)
        {
            AtomInfo[]      domainAtoms    = null;
            List <AtomInfo> domainAtomList = new List <AtomInfo> ();
            int             startPos       = -1;
            int             endPos         = -1;
            int             seqId          = -1;

            string[] ranges = rangeString.Split(';');
            foreach (string range in ranges)
            {
                if (range == "-")
                {
                    domainAtoms = chain.CartnAtoms;
                }
                else
                {
                    string[] posFields = range.Split('-');
                    startPos = ParseHelper.ConvertSeqToInt(posFields[0]);
                    endPos   = ParseHelper.ConvertSeqToInt(posFields[1]);
                    foreach (AtomInfo atom in chain.CartnAtoms)
                    {
                        seqId = ParseHelper.ConvertSeqToInt(atom.seqId);
                        if (seqId >= startPos && seqId <= endPos)
                        {
                            domainAtomList.Add(atom);
                        }
                    }
                }
            }
            return(domainAtomList.ToArray());
        }
Exemple #4
0
        /// <summary>
        /// atoms for each domain
        /// </summary>
        /// <param name="pdbId"></param>
        /// <param name="chainId"></param>
        /// <param name="domainRangesHash"></param>
        /// <returns></returns>
        public Dictionary <string, AtomInfo[]> ReadAtomsOfDomains(string pdbId, string chainId, Dictionary <string, string> domainRangesHash)
        {
            string xmlFile        = Path.Combine(ProtCidSettings.dirSettings.coordXmlPath, pdbId + ".xml.gz");
            string crystalXmlFile = ParseHelper.UnZipFile(xmlFile, ProtCidSettings.tempDir);
            // read data from crystal xml file
            EntryCrystal  thisEntryCrystal;
            XmlSerializer xmlSerializer = new XmlSerializer(typeof(EntryCrystal));
            FileStream    xmlFileStream = new FileStream(crystalXmlFile, FileMode.Open);

            thisEntryCrystal = (EntryCrystal)xmlSerializer.Deserialize(xmlFileStream);
            xmlFileStream.Close();

            Dictionary <string, AtomInfo[]> domainAtomsHash = new Dictionary <string, AtomInfo[]>();

            ChainAtoms chain = null;

            for (int i = 0; i < thisEntryCrystal.atomCat.ChainAtomList.Length; i++)
            {
                if (thisEntryCrystal.atomCat.ChainAtomList[i].AsymChain == chainId)
                {
                    chain = thisEntryCrystal.atomCat.ChainAtomList[i];
                }
            }
            foreach (string DomainID in domainRangesHash.Keys)
            {
                string rangeString = (string)domainRangesHash[DomainID];
                domainAtomsHash.Add(DomainID, GetDomainAtoms(chain, rangeString));
            }
            return(domainAtomsHash);
        }
Exemple #5
0
        // so it doesn't depend on the Appsetting
        // added on Sept. 22, 2016
        /// <summary>
        ///
        /// </summary>
        /// <param name="pdbId"></param>
        /// <param name="asymChain"></param>
        /// <returns></returns>
        public AtomInfo[] ReadChainAtomsFromFile(string coordXmlFile, string asymChain)
        {
            if (asymChain == "")
            {
                return(null);
            }

            // read data from crystal xml file
            EntryCrystal  thisEntryCrystal;
            XmlSerializer xmlSerializer = new XmlSerializer(typeof(EntryCrystal));
            FileStream    xmlFileStream = new FileStream(coordXmlFile, FileMode.Open);

            thisEntryCrystal = (EntryCrystal)xmlSerializer.Deserialize(xmlFileStream);
            xmlFileStream.Close();

            ChainAtoms chain = null;

            for (int i = 0; i < thisEntryCrystal.atomCat.ChainAtomList.Length; i++)
            {
                if (thisEntryCrystal.atomCat.ChainAtomList[i].AsymChain == asymChain)
                {
                    chain = thisEntryCrystal.atomCat.ChainAtomList[i];
                    break;
                }
            }

            if (chain == null)
            {
                return(null);
            }
            AtomInfo[] chainAtoms = chain.CartnAtoms;
            return(chainAtoms);
        }
Exemple #6
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="pdbId"></param>
        /// <param name="asymChain"></param>
        /// <returns></returns>
        public AtomInfo[] ReadChainAtoms(string pdbId, string asymChain)
        {
            if (asymChain == "")
            {
                return(null);
            }
            string xmlFile        = Path.Combine(ProtCidSettings.dirSettings.coordXmlPath, pdbId + ".xml.gz");
            string crystalXmlFile = ParseHelper.UnZipFile(xmlFile, ProtCidSettings.tempDir);
            // read data from crystal xml file
            EntryCrystal  thisEntryCrystal;
            XmlSerializer xmlSerializer = new XmlSerializer(typeof(EntryCrystal));
            FileStream    xmlFileStream = new FileStream(crystalXmlFile, FileMode.Open);

            thisEntryCrystal = (EntryCrystal)xmlSerializer.Deserialize(xmlFileStream);
            xmlFileStream.Close();

            ChainAtoms chain = null;

            for (int i = 0; i < thisEntryCrystal.atomCat.ChainAtomList.Length; i++)
            {
                if (thisEntryCrystal.atomCat.ChainAtomList[i].AsymChain == asymChain)
                {
                    chain = thisEntryCrystal.atomCat.ChainAtomList[i];
                    break;
                }
            }

            File.Delete(crystalXmlFile);
            if (chain == null)
            {
                return(null);
            }
            AtomInfo[] chainAtoms = chain.CartnAtoms;
            return(chainAtoms);
        }
Exemple #7
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="chain1"></param>
        /// <param name="chain2"></param>
        /// <param name="modelType">local, or global</param>
        /// <returns></returns>
        public StructAlignOutput AlignTwoChains(ChainAtoms chain1, ChainAtoms chain2, string modelType)
        {
            AtomInfo[]        calphaAtoms1 = chain1.CalphaAtoms();
            AtomInfo[]        calphaAtoms2 = chain2.CalphaAtoms();
            StructAlignOutput alignOutput  = AlignTwoSetsAtoms(calphaAtoms1, calphaAtoms2, modelType);

            return(alignOutput);
        }
Exemple #8
0
        /// <summary>
        /// write the interactive chains into a pdb formated text file
        /// </summary>
        /// <param name="pdbId"></param>
        /// <param name="interChains"></param>
        public string WriteBiolUnitFile(string pdbId, string buId, Dictionary <string, AtomInfo[]> buChains, string destDir, DataTable asuInfoTable, string type)
        {
            string       fileName   = Path.Combine(destDir, pdbId + "_" + buId + "." + type);
            FileStream   fileStream = new FileStream(Path.Combine(filePath, fileName), FileMode.Create, FileAccess.Write);
            StreamWriter fileWriter = new StreamWriter(fileStream);
            string       header     = "HEADER    " + pdbId + "                    " + DateTime.Today;

            fileWriter.WriteLine(header);

            List <string> chainSymOpList = new List <string> (buChains.Keys);

            chainSymOpList.Sort();
            string[] chainSymOpStrs = new string[chainSymOpList.Count];
            chainSymOpList.CopyTo(chainSymOpStrs);
            //       string[] chainSymOpStrs = SortChainSymOpList(chainSymOpList);

            Dictionary <string, string> asymPolymerTypeHash = GetAsymChainPolymerTypeHash(asuInfoTable);
            string chainRemarkString = GetChainComponentRemarkString(chainSymOpStrs, asuInfoTable, type);

            fileWriter.WriteLine(chainRemarkString);

            bool isChainLigand = false;
            int  atomId        = 0;
            int  count         = 0;

            try
            {
                string preSymOpNum = "0";
                foreach (string chain in chainSymOpStrs)
                {
                    string[] fields   = chain.Split('_');
                    string   symOpNum = fields[1];
                    if (preSymOpNum != symOpNum)
                    {
                        atomId = 0;
                    }
                    isChainLigand = IsChainLigand(fields[0], asymPolymerTypeHash);
                    ChainAtoms buChain = new ChainAtoms();
                    buChain.CartnAtoms = (AtomInfo[])buChains[chain];
                    buChain.SortByAtomId();
                    string chainId = letters[count % letters.Length].ToString();
                    WriteOneChain(buChain.CartnAtoms, chainId, ref atomId, isChainLigand, fileWriter);
                    count++;
                    preSymOpNum = symOpNum;
                }
                fileWriter.WriteLine("END");
            }
            catch (Exception ex)
            {
                string errorMsg = ex.Message;
                throw ex;
            }
            finally
            {
                fileWriter.Close();
            }
            return(fileName);
        }
Exemple #9
0
        /// <summary>
        /// write the interactive chains into a pdb formated text file
        /// </summary>
        /// <param name="pdbId"></param>
        /// <param name="interChains"></param>
        public string WriteBiolUnitFile(string pdbId, string buId, Dictionary <string, AtomInfo[]> buChains, string destDir, string remark, string type)
        {
            string       fileName   = Path.Combine(destDir, pdbId + "_" + buId + "." + type);
            FileStream   fileStream = new FileStream(Path.Combine(filePath, fileName), FileMode.Create, FileAccess.Write);
            StreamWriter fileWriter = new StreamWriter(fileStream);
            string       header     = "HEADER    " + pdbId + "                    " + DateTime.Today;

            fileWriter.WriteLine(header);
            fileWriter.WriteLine(remark);

            List <string> chainSymOpList = new List <string> (buChains.Keys);

            string[] chainSymOpStrs = SortChainSymOpList(chainSymOpList);

            int atomId = 0;
            int count  = 0;

            try
            {
                string preSymOpNum = "0";
                foreach (string chain in chainSymOpStrs)
                {
                    string[] fields   = chain.Split('_');
                    string   symOpNum = fields[1];
                    if (preSymOpNum != symOpNum)
                    {
                        atomId = 0;
                    }
                    ChainAtoms buChain = new ChainAtoms();
                    buChain.CartnAtoms = (AtomInfo[])buChains[chain];
                    buChain.SortByAtomId();
                    string chainId = letters[count % letters.Length].ToString();
                    WriteOneChain(buChain.CartnAtoms, chainId, ref atomId, fileWriter);
                    count++;
                    preSymOpNum = symOpNum;
                }
                fileWriter.WriteLine("END");
            }
            catch (Exception ex)
            {
                string errorMsg = ex.Message;
                throw ex;
            }
            finally
            {
                fileWriter.Close();
            }
            return(fileName);
        }
Exemple #10
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="pdbId"></param>
        /// <param name="asuChains"></param>
        /// <param name="destDir"></param>
        /// <param name="remark"></param>
        /// <returns></returns>
        public string WriteAsymUnitFile(string pdbId, Dictionary <string, AtomInfo[]> asuChainsHash, string[] asymChainsInOrder,
                                        string[] fileChainsInOrder, string[] nonpolymerAsymChains, string destDir, string remark)
        {
            string       fileName   = Path.Combine(destDir, pdbId + ".ent");
            FileStream   fileStream = new FileStream(Path.Combine(filePath, fileName), FileMode.Create, FileAccess.Write);
            StreamWriter fileWriter = new StreamWriter(fileStream);
            string       header     = "HEADER    " + pdbId + "                    " + DateTime.Today;

            fileWriter.WriteLine(header);
            fileWriter.WriteLine(remark);

            int    atomId          = 0;
            int    chainCount      = 0;
            string fileChain       = "";
            bool   nonpolymerChain = false;

            try
            {
                foreach (string asymChain in asymChainsInOrder)
                {
                    nonpolymerChain = false;
                    ChainAtoms asuChain = new ChainAtoms();
                    asuChain.CartnAtoms = asuChainsHash[asymChain];
                    asuChain.SortByAtomId();
                    fileChain = fileChainsInOrder[chainCount];
                    if (Array.IndexOf(nonpolymerAsymChains, asymChain) > -1)
                    {
                        nonpolymerChain = true;
                    }
                    WriteOneChain(asuChain.CartnAtoms, fileChain, ref atomId, nonpolymerChain, fileWriter);
                    chainCount++;
                }
                fileWriter.WriteLine("END");
            }
            catch (Exception ex)
            {
                string errorMsg = ex.Message;
                throw ex;
            }
            finally
            {
                fileWriter.Close();
            }
            return(fileName);
        }
Exemple #11
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="domainEntityInfo"></param>
        /// <param name="chainInfo"></param>
        /// <returns></returns>
        private AtomInfo[] GetDomainSegmentAtoms(DomainSegmentInfo domainEntityInfo, ChainAtoms chainInfo)
        {
            ArrayList domainAtomList = new ArrayList();
            int       seqId          = -1;

            foreach (AtomInfo atom in chainInfo.CartnAtoms)
            {
                seqId = Convert.ToInt16(atom.seqId);
                if (seqId >= domainEntityInfo.seqStart && seqId <= domainEntityInfo.seqEnd)
                {
                    //     AddAtomToList(atom, domainAtomList);
                    domainAtomList.Add(atom);
                }
            }
            AtomInfo[] domainAtoms = new AtomInfo[domainAtomList.Count];
            domainAtomList.CopyTo(domainAtoms);
            return(domainAtoms);
        }
Exemple #12
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="pdbId"></param>
        /// <param name="asuChains"></param>
        /// <param name="destDir"></param>
        /// <param name="remark"></param>
        /// <returns></returns>
        public void WriteAsymUnitFile(string coordFileName, Dictionary <string, AtomInfo[]> asuChainsHash, string[] asymChainsInOrder, string[] fileChainsInOrder, string[] hetChains, string remark)
        {
            FileStream   fileStream = new FileStream(coordFileName, FileMode.Create, FileAccess.Write);
            StreamWriter fileWriter = new StreamWriter(fileStream);

            fileWriter.WriteLine(remark);

            int    atomId        = 0;
            int    chainCount    = 0;
            string fileChain     = "";
            bool   isHetatmChain = false;

            try
            {
                foreach (string asymChain in asymChainsInOrder)
                {
                    isHetatmChain = false;
                    if (asuChainsHash.ContainsKey(asymChain))
                    {
                        ChainAtoms asuChain = new ChainAtoms();
                        asuChain.CartnAtoms = asuChainsHash[asymChain];
                        asuChain.SortByAtomId();
                        fileChain = fileChainsInOrder[chainCount];
                        if (Array.IndexOf(hetChains, asymChain) > -1)
                        {
                            isHetatmChain = true;
                        }
                        WriteOneChain(asuChain.CartnAtoms, fileChain, ref atomId, isHetatmChain, fileWriter);
                        chainCount++;
                    }
                }
                fileWriter.WriteLine("END");
            }
            catch (Exception ex)
            {
                string errorMsg = ex.Message;
                throw ex;
            }
            finally
            {
                fileWriter.Close();
            }
        }
Exemple #13
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="pdbId"></param>
        /// <param name="asymChain"></param>
        /// <returns></returns>
        public AtomInfo[] ReadChainAtomsFromFile(string coordXmlFile, string asymChain, out string threeLetterSeq)
        {
            threeLetterSeq = "";

            if (asymChain == "")
            {
                return(null);
            }
            // read data from crystal xml file
            EntryCrystal  thisEntryCrystal;
            XmlSerializer xmlSerializer = new XmlSerializer(typeof(EntryCrystal));
            FileStream    xmlFileStream = new FileStream(coordXmlFile, FileMode.Open);

            thisEntryCrystal = (EntryCrystal)xmlSerializer.Deserialize(xmlFileStream);
            xmlFileStream.Close();

            ChainAtoms chain = null;

            for (int i = 0; i < thisEntryCrystal.atomCat.ChainAtomList.Length; i++)
            {
                if (thisEntryCrystal.atomCat.ChainAtomList[i].AsymChain == asymChain)
                {
                    chain = thisEntryCrystal.atomCat.ChainAtomList[i];
                    break;
                }
            }
            for (int i = 0; i < thisEntryCrystal.entityCat.EntityInfoList.Length; i++)
            {
                EntityInfo entityInfo = thisEntryCrystal.entityCat.EntityInfoList[i];
                string[]   asymChains = entityInfo.asymChains.Split(',');
                if (asymChains.Contains(asymChain))
                {
                    threeLetterSeq = entityInfo.threeLetterSeq;
                }
            }

            if (chain == null)
            {
                return(null);
            }
            AtomInfo[] chainAtoms = chain.CartnAtoms;
            return(chainAtoms);
        }
Exemple #14
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="thisEntryCrystal"></param>
        /// <param name="asymChain"></param>
        /// <returns></returns>
        private AtomInfo[] ReadChainAtoms(EntryCrystal thisEntryCrystal, string asymChain)
        {
            ChainAtoms chain = null;

            for (int i = 0; i < thisEntryCrystal.atomCat.ChainAtomList.Length; i++)
            {
                if (thisEntryCrystal.atomCat.ChainAtomList[i].AsymChain == asymChain)
                {
                    chain = thisEntryCrystal.atomCat.ChainAtomList[i];
                    break;
                }
            }

            if (chain == null)
            {
                return(null);
            }
            AtomInfo[] chainAtoms = chain.CartnAtoms;
            return(chainAtoms);
        }
Exemple #15
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="pdbId"></param>
        /// <param name="asuChains"></param>
        /// <param name="destDir"></param>
        /// <param name="remark"></param>
        /// <returns></returns>
        public string WriteAsymUnitFile(string pdbId, Dictionary <string, AtomInfo[]> asuChainsHash, string destDir, string remark)
        {
            string       fileName   = Path.Combine(destDir, pdbId + ".ent");
            FileStream   fileStream = new FileStream(Path.Combine(filePath, fileName), FileMode.Create, FileAccess.Write);
            StreamWriter fileWriter = new StreamWriter(fileStream);
            string       header     = "HEADER    " + pdbId + "                    " + DateTime.Today;

            fileWriter.WriteLine(header);
            fileWriter.WriteLine(remark);

            List <string> asymChainList = new List <string>(asuChainsHash.Keys);

            asymChainList.Sort();
            int atomId = 0;

            try
            {
                foreach (string asymChain in asymChainList)
                {
                    ChainAtoms asuChain = new ChainAtoms();
                    asuChain.CartnAtoms = asuChainsHash[asymChain];
                    asuChain.SortByAtomId();
                    WriteOneChain(asuChain.CartnAtoms, asymChain, ref atomId, fileWriter);
                }
                fileWriter.WriteLine("END");
            }
            catch (Exception ex)
            {
                string errorMsg = ex.Message;
                throw ex;
            }
            finally
            {
                fileWriter.Close();
            }
            return(fileName);
        }
Exemple #16
0
        /// <summary>
        /// atoms for each domain
        /// </summary>
        /// <param name="pdbId"></param>
        /// <param name="chainId"></param>
        /// <param name="domainRangesHash"></param>
        /// <returns></returns>
        public Dictionary <long, AtomInfo[]> ReadAtomsOfDomains(string pdbId, string chainId, Dictionary <long, string> domainRangesHash, Dictionary <string, ChainAtoms> chainAtomsHash)
        {
            Dictionary <long, AtomInfo[]> domainAtomsHash = new Dictionary <long, AtomInfo[]>();

            ChainAtoms chain = null;

            foreach (string asymChain in chainAtomsHash.Keys)
            {
                if (asymChain == chainId)
                {
                    chain = chainAtomsHash[asymChain];
                }
            }
            foreach (long DomainID in domainRangesHash.Keys)
            {
                string     rangeString = (string)domainRangesHash[DomainID];
                AtomInfo[] domainAtoms = GetDomainAtoms(chain, rangeString);
                if (domainAtoms != null && domainAtoms.Length > 0)
                {
                    domainAtomsHash.Add(DomainID, domainAtoms);
                }
            }
            return(domainAtomsHash);
        }
Exemple #17
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="fileName"></param>
        /// <param name="pdbId"></param>
        /// <param name="chainAtomsHash"></param>
        /// <param name="remark"></param>
        /// <returns></returns>
        public string WriteAtoms(string fileName, string pdbId, Dictionary <string, AtomInfo[]> chainAtomsHash, string remark)
        {
            FileStream   fileStream = new FileStream(fileName, FileMode.Create, FileAccess.Write);
            StreamWriter fileWriter = new StreamWriter(fileStream);
            string       header     = "Header    " + pdbId.ToString() + "      " + DateTime.Today.ToShortDateString();

            fileWriter.WriteLine(header);
            fileWriter.WriteLine(remark);

            List <string> asymChainList = new List <string> (chainAtomsHash.Keys);

            asymChainList.Sort();
            int atomId = 0;

            try
            {
                foreach (string asymChain in asymChainList)
                {
                    ChainAtoms asuChain = new ChainAtoms();
                    asuChain.CartnAtoms = (AtomInfo[])chainAtomsHash[asymChain];
                    asuChain.SortByAtomId();
                    WriteOneChain(asuChain.CartnAtoms, asymChain, ref atomId, fileWriter);
                }
                fileWriter.WriteLine("END");
            }
            catch (Exception ex)
            {
                string errorMsg = ex.Message;
                throw ex;
            }
            finally
            {
                fileWriter.Close();
            }
            return(fileName);
        }
Exemple #18
0
        //extracts atoms from pdb file
        public static AtomCategory readPdbFile(string pdbfilename, ref Dictionary <Tuple <string, string>, double> partialCharges)
        {
            AtomCategory myAtomCategory = new AtomCategory();

            ChainAtoms chainAtoms = new ChainAtoms();
            ArrayList  atomList   = new ArrayList();

            string preAsymId = "";
            string asymID    = "";

            if (File.Exists(pdbfilename))
            {
                using (StreamReader sr = new StreamReader(pdbfilename))
                {
                    String line;
                    // Read and display lines from the file until the end of
                    // the file is reached.
                    Int32 seqID         = -1;
                    Int32 previousSeqID = -1;
                    while ((line = sr.ReadLine()) != null)
                    {
                        string[] spLine = Array.FindAll <string>(((string)line).Split(
                                                                     new char[] { ' ', '\t', ',', ';' }), delegate(string s) { return(!String.IsNullOrEmpty(s)); });
                        List <string> splitLine = new List <string>(spLine);
                        if (splitLine[0] == "HETATM" && splitLine[3] == "MSE")
                        {
                            splitLine[0] = "ATOM";
                            splitLine[3] = "MET";
                        }
                        if (splitLine[0] == "ENDMDL")
                        {
                            break;
                        }

                        if (splitLine[0] == "ATOM")
                        {
                            AtomInfo myAtom = new AtomInfo();
                            asymID             = line.Substring(21, 1);
                            myAtom.altConfID   = "";
                            myAtom.atomId      = Convert.ToInt32(line.Substring(6, 5).Trim());
                            myAtom.atomName    = line.Substring(12, 4).Trim();
                            myAtom.residue     = line.Substring(17, 3);
                            myAtom.authResidue = myAtom.residue;
                            myAtom.authSeqId   = line.Substring(22, 4).Trim();
                            if (Convert.ToInt32(myAtom.authSeqId) != previousSeqID)
                            {
                                seqID = seqID + 1;
                            }
                            myAtom.seqId  = seqID.ToString();
                            previousSeqID = Convert.ToInt32(myAtom.authSeqId);

                            AtomParser.Coordinate coord = new Coordinate();
                            coord           = new Coordinate(Convert.ToDouble(line.Substring(30, 8).Trim()), Convert.ToDouble(line.Substring(38, 8).Trim()), Convert.ToDouble(line.Substring(46, 8).Trim()));
                            myAtom.xyz      = coord;
                            myAtom.atomType = line.Substring(76, 2).Trim();
                            //This handful of conditions are occasionally different and throw off the check for hydrogen bonding, etc
                            if (myAtom.atomName == "HG")
                            {
                                myAtom.atomName = "HG1";
                            }
                            if (myAtom.atomName == "OG")
                            {
                                myAtom.atomName = "OG1";
                            }
                            if ((myAtom.atomName == "NH1" && myAtom.residue == "ARG") || (myAtom.atomName == "NZ" && myAtom.residue == "LYS"))
                            {
                                myAtom.atomType = "N1+";
                            }
                            if ((myAtom.atomName == "OD2" && myAtom.residue == "ASP") || (myAtom.atomName == "OE2" && myAtom.residue == "GLU"))
                            {
                                myAtom.atomType = "O1-";
                            }

                            myAtom.bFac      = Convert.ToDouble(line.Substring(60, 6).Trim());
                            myAtom.occupancy = 1.00;

                            //Compare chain ID. If this is now a new chain, write existing list, and create empty new ones.
                            if (preAsymId != asymID && preAsymId != "" && atomList.Count > 0)
                            {
                                chainAtoms.AsymChain     = preAsymId;
                                chainAtoms.AuthAsymChain = preAsymId;
                                chainAtoms.EntityID      = "1";    // problem with int to string in new version
                                chainAtoms.PolymerType   = "-";

                                AtomInfo[] atomArray = new AtomInfo[atomList.Count];
                                atomList.CopyTo(atomArray);
                                chainAtoms.CartnAtoms = atomArray;
                                myAtomCategory.AddChainAtoms(chainAtoms);
                                atomList   = new ArrayList();
                                chainAtoms = new ChainAtoms();
                            }
                            //Add atom to current list of atoms if it is not a water molecule
                            if (myAtom.residue.ToUpper() != "HOH")
                            {
                                if (myAtom.atomType == "H")
                                {
                                    Tuple <string, string> key = new Tuple <string, string> (myAtom.residue, myAtom.atomName);
                                    if (partialCharges.ContainsKey(key) == true)
                                    {
                                        atomList.Add(myAtom);
                                    }
                                }
                                else
                                {
                                    atomList.Add(myAtom);
                                }
                            }
                            preAsymId = asymID;
                        }
                    }
                    //Capture final chain
                    if (atomList.Count > 0)
                    {
                        chainAtoms.AsymChain     = preAsymId;
                        chainAtoms.AuthAsymChain = preAsymId;
                        chainAtoms.EntityID      = "1";
                        chainAtoms.PolymerType   = "-";
                        AtomInfo[] atomArray = new AtomInfo[atomList.Count];
                        atomList.CopyTo(atomArray);
                        chainAtoms.CartnAtoms = atomArray;
                        myAtomCategory.AddChainAtoms(chainAtoms);
                        atomList   = new ArrayList();
                        chainAtoms = new ChainAtoms();
                    }
                }
            }

            myAtomCategory.Resolution = 2.5;

            return(myAtomCategory);
        }
Exemple #19
0
        /// <summary>
        /// write the interactive chains into a pdb formated text file
        /// </summary>
        /// <param name="pdbId"></param>
        /// <param name="interChains"></param>
        public string WriteBiolUnitFile(string pdbId, string buId, Dictionary <string, AtomInfo[]> buChains, string destDir,
                                        CrystalInfo cryst1, Matrix fractMatrix)
        {
            string       fileName   = Path.Combine(destDir, pdbId + "_" + buId.ToString() + ".pdb");
            FileStream   fileStream = new FileStream(Path.Combine(filePath, fileName), FileMode.Create, FileAccess.Write);
            StreamWriter fileWriter = new StreamWriter(fileStream);
            string       header     = "HEADER    " + pdbId + "                    " + DateTime.Today;

            fileWriter.WriteLine(header);
            string        remark         = "REMARK 290 ";
            int           count          = 0;
            List <string> chainSymOpList = new List <string> (buChains.Keys);

            string[] chainSymOpStrs = SortChainSymOpList(chainSymOpList);
            foreach (string chainAndSymOpStr in chainSymOpStrs)
            {
                string thisRemark = remark + letters[count].ToString() + ": ";
                // format of chainAndSymOpStr: chain_symOpNum_fullsymString
                string[] fields = chainAndSymOpStr.Split('_');
                thisRemark += fields[0].PadRight(3, ' ');
                thisRemark += fields[1].PadRight(3, ' ');
                thisRemark += fields[2].PadRight(30, ' ');
                fileWriter.WriteLine(thisRemark);
                count++;
            }
            string crystString = FormatCrystString(cryst1);
            string fractString = FormatFractString(fractMatrix);

            fileWriter.WriteLine(crystString);
            fileWriter.WriteLine(fractString);


            int atomId = 0;

            count = 0;
            try
            {
                string preSymOpNum = "0";
                foreach (string chain in chainSymOpStrs)
                {
                    string[] fields   = chain.Split('_');
                    string   symOpNum = fields[1];
                    if (preSymOpNum != symOpNum)
                    {
                        atomId = 0;
                    }
                    ChainAtoms buChain = new ChainAtoms();
                    buChain.CartnAtoms = (AtomInfo[])buChains[chain];
                    buChain.SortByAtomId();
                    string chainId = letters[count % letters.Length].ToString();
                    WriteOneChain(buChain.CartnAtoms, chainId, ref atomId, fileWriter);
                    count++;
                    preSymOpNum = symOpNum;
                }
                fileWriter.WriteLine("END");
            }
            catch (Exception ex)
            {
                string errorMsg = ex.Message;
                throw ex;
            }
            finally
            {
                fileWriter.Close();
            }
            return(fileName);
        }