Ejemplo n.º 1
0
        /// <summary>
        /// Detect all interfaces in a crystal
        /// built from XML coordinates file
        /// </summary>
        /// <param name="xmlFile"></param>
        /// <param name="paramFile"></param>
        public void FindInteractChains(string xmlFile, Dictionary <int, string> interfaceDefHash)
        {
            asymChainTreesHash.Clear();
            interfaceChainsList.Clear();
            string[] symOpStrings = GetSymOpStrings(interfaceDefHash);
            if (AppSettings.parameters == null)
            {
                AppSettings.LoadParameters();
            }

            pdbId = xmlFile.Substring(xmlFile.LastIndexOf("\\") + 1, 4);
            CrystalBuilder crystalBuilder = new CrystalBuilder("ALL");
            Dictionary <string, AtomInfo[]> interfaceChainHash = null;

            try
            {
                interfaceChainHash = crystalBuilder.BuildCrystal(xmlFile, symOpStrings);
            }
            catch (Exception ex)
            {
                throw new Exception("Building interface chains errors: " + xmlFile + ". " + ex.Message);
            }

            // for each chain in a cell including original and symmetric chains
            foreach (string chainAndSymOp in interfaceChainHash.Keys)
            {
                BVTree chainTree = new BVTree();
                chainTree.BuildBVTree(interfaceChainHash[chainAndSymOp], AppSettings.parameters.kDopsParam.bvTreeMethod, true);
                asymChainTreesHash.Add(chainAndSymOp, chainTree);
            }

            ChainContact chainContact  = null;
            List <int>   interfaceList = new List <int> (interfaceDefHash.Keys);

            interfaceList.Sort();
            foreach (int interfaceId in interfaceList)
            {
                string[] interfaceDefStrings = interfaceDefHash[interfaceId].ToString().Split(';');
                chainContact = new ChainContact(interfaceDefStrings[0], interfaceDefStrings[1]);
                BVTree           tree1       = (BVTree)asymChainTreesHash[interfaceDefStrings[0]];
                BVTree           tree2       = (BVTree)asymChainTreesHash[interfaceDefStrings[1]];
                ChainContactInfo contactInfo = chainContact.GetChainContactInfo(tree1, tree2);

                if (contactInfo == null)
                {
                    continue;
                }
                InterfaceChains interfaceChains = null;
                interfaceChains = new InterfaceChains(interfaceDefStrings[0], interfaceDefStrings[1],
                                                      tree1.Root.AtomList, tree2.Root.AtomList);
                interfaceChains.pdbId       = pdbId;
                interfaceChains.interfaceId = interfaceId;
                interfaceChains.seqDistHash = contactInfo.GetBbDistHash();
                //      interfaceChains.seqDistHash = contactInfo.cbetaContactHash;
                interfaceChains.seqContactHash = contactInfo.GetContactsHash();
                interfaceChainsList.Add(interfaceChains);
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// get the interface between two input chains
        /// </summary>
        /// <param name="chain1"></param>
        /// <param name="chain2"></param>
        /// <returns></returns>
        public ChainContactInfo GetAllChainContactInfo(AtomInfo[] chain1, AtomInfo[] chain2)
        {
            BVTree chain1Tree = new BVTree();

            chain1Tree.BuildBVTree(chain1, AppSettings.parameters.kDopsParam.bvTreeMethod, true);
            BVTree chain2Tree = new BVTree();

            chain2Tree.BuildBVTree(chain2, AppSettings.parameters.kDopsParam.bvTreeMethod, true);
            return(GetAnyChainContactInfo(chain1Tree, chain2Tree));
        }
Ejemplo n.º 3
0
        /// <summary>
        /// build BVtrees for chains in a biological unit
        /// </summary>
        /// <param name="biolUnit"></param>
        /// <returns></returns>
        private Dictionary <string, BVTree> BuildBVtreesForAsu(Dictionary <string, AtomInfo[]> asymUnit)
        {
            Dictionary <string, BVTree> chainTreesHash = new Dictionary <string, BVTree> ();

            // for each chain in the biological unit
            // build BVtree
            foreach (string chainAndSymOp in asymUnit.Keys)
            {
                BVTree chainTree = new BVTree();
                chainTree.BuildBVTree(asymUnit[chainAndSymOp], AppSettings.parameters.kDopsParam.bvTreeMethod, true);
                chainTreesHash.Add(chainAndSymOp, chainTree);
            }
            return(chainTreesHash);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Detect all interfaces in a crystal
        /// built from XML coordinates file
        /// </summary>
        /// <param name="xmlFile"></param>
        /// <param name="paramFile"></param>
        public int FindInteractChains(string xmlFile)
        {
            interChainId = 0;
            asymChainTreesHash.Clear();
            interfaceChainsList.Clear();
            pdbId = xmlFile.Substring(xmlFile.LastIndexOf("\\") + 1, 4);
            CrystalBuilder crystalBuilder = new CrystalBuilder(AppSettings.parameters.contactParams.atomType);
            Dictionary <string, AtomInfo[]> unitCellChainsHash = null;

            int[] maxSteps = null;
            // build crystal based on all symmetry operations
            try
            {
                maxSteps = crystalBuilder.BuildCrystal(xmlFile, ref unitCellChainsHash);
                if (unitCellChainsHash == null)
                {
                    throw new Exception("Cannot build unit cell.");
                }
                // if there are too many chains in a unit cell
                // only compute the interfaces between original ASU chains
                // and other chains
                if (unitCellChainsHash.Count > unitCellSize)
                {
                    //	throw new Exception ("Unit cell too large. Skip processing " + pdbId + ".");
                    // if there are too many chains in the unit cell,
                    // only check the interfaces within the unit cell.
                    for (int i = 0; i < maxSteps.Length; i++)
                    {
                        maxSteps[i] = 0;
                    }
                }
                // if there are too many chains, only use chains in the asymmetric unit
                if (unitCellChainsHash.Count >= maxUnitCellSize)
                {
                    Dictionary <string, AtomInfo[]> asuChainHash = GetAsymUnitHash(unitCellChainsHash);
                    unitCellChainsHash = asuChainHash;
                    // if it is still too big due to Non-symmetry operators,
                    // only use chains in the original asu in the PDB file, may not be the real Asu
                    if (asuChainHash.Count >= unitCellSize)
                    {
                        Dictionary <string, AtomInfo[]> origAsuChainHash = GetOrigAsymUnitHash(asuChainHash);
                        unitCellChainsHash = origAsuChainHash;
                    }
                }
            }
            catch (Exception ex)
            {
                throw new Exception("Building Crystal Errors: " + xmlFile + " " + ex.Message);
            }

            /*
             * build BVTree for original asymmetric chains +
             * their chains after applied symmetry operations
             * without translations
             */
            try
            {
                // for each chain in a cell including original and symmetric chains
                foreach (string chainAndSymOp in unitCellChainsHash.Keys)
                {
                    BVTree chainTree = new BVTree();
                    chainTree.BuildBVTree(unitCellChainsHash[chainAndSymOp], AppSettings.parameters.kDopsParam.bvTreeMethod, true);
                    asymChainTreesHash.Add(chainAndSymOp, chainTree);
                }
            }
            catch (Exception ex)
            {
                throw new Exception("Building Bounding Volumn Tree Errors: " + xmlFile + ". " + ex.Message);
            }

            /*
             * the critical step for the computation time
             * check all pairs of chains including translated chains
             * return a list of atompairs if exists
             */
            cryst1            = crystalBuilder.Crystal1;
            fract2CartnMatrix = crystalBuilder.fract2cartnMatrix;

            List <string> chainAndSymOps        = new List <string> (asymChainTreesHash.Keys);
            List <string> orderedChainAndSymOps = SortChainsInUnitCell(chainAndSymOps);

            // check interactions between 2 different chains and their translated chains
            // chainAndSymOps: chainId_symmetry operator_full symmetry operations
            // e.g. A_1_545
            try
            {
                ComputeUniqueInterfacesFromCryst(orderedChainAndSymOps, maxSteps);
            }
            catch (Exception ex)
            {
                /*	ProtCidSettings.progressInfo.progStrQueue.Enqueue
                 *              ("Retrieving unique interfaces of " + pdbId + " errors: " + ex.Message);*/
                throw new Exception("Retrieving unique interfaces of " + pdbId + " errors: " + ex.Message);
            }
            return(unitCellChainsHash.Count);
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Detect all interfaces in a crystal
        /// built from XML coordinates file
        /// </summary>
        /// <param name="xmlFile"></param>
        /// <param name="paramFile"></param>
        public void FindInteractChains(string xmlFile, Dictionary <int, string> interfaceDefHash, Dictionary <int, string> interfaceEntityInfoHash, out bool interfaceExist)
        {
            interChainId = 0;
            interfaceChainsList.Clear();
            asymChainTreesHash.Clear();
            interfaceExist = true;
            string[] symOpStrings = GetSymOpStrings(interfaceDefHash);

            pdbId = xmlFile.Substring(xmlFile.LastIndexOf("\\") + 1, 4);
            CrystalBuilder crystalBuilder = new CrystalBuilder(AppSettings.parameters.contactParams.atomType);
            Dictionary <string, AtomInfo[]> interfaceChainHash = null;

            try
            {
                interfaceChainHash = crystalBuilder.BuildCrystal(xmlFile, symOpStrings);
            }
            catch (Exception ex)
            {
                throw new Exception("Building interface chains errors: " + xmlFile + "  " + ex.Message);
            }

            // for each chain in a cell including original and symmetric chains
            foreach (string chainAndSymOp in interfaceChainHash.Keys)
            {
                BVTree chainTree = new BVTree();
                chainTree.BuildBVTree(interfaceChainHash[chainAndSymOp], AppSettings.parameters.kDopsParam.bvTreeMethod, true);
                asymChainTreesHash.Add(chainAndSymOp, chainTree);
            }

            ChainContact chainContact = null;

            foreach (int interfaceId in interfaceDefHash.Keys)
            {
                string[] interfaceDefStrings = interfaceDefHash[interfaceId].ToString().Split(';');
                chainContact = new ChainContact(interfaceDefStrings[0], interfaceDefStrings[1]);
                BVTree tree1 = (BVTree)asymChainTreesHash[interfaceDefStrings[0]];
                BVTree tree2 = (BVTree)asymChainTreesHash[interfaceDefStrings[1]];
                if (tree1 == null || tree2 == null)
                {
                    continue;
                }
                ChainContactInfo contactInfo = chainContact.GetChainContactInfo(tree1, tree2);

                if (contactInfo == null)
                {
                    interfaceExist = false;
                    break;
                }
                string[]        entityStrings   = interfaceEntityInfoHash[interfaceId].Split('_');
                InterfaceChains interfaceChains = null;
                interfaceChains = new InterfaceChains(interfaceDefStrings[0], interfaceDefStrings[1], tree1.Root.CalphaCbetaAtoms(), tree2.Root.CalphaCbetaAtoms());
                //	interfaceChains = new InterfaceChains (symOpStrings[0], symOpStrings[1], tree1.Root.AtomList, tree2.Root.AtomList);
                interfaceChains.pdbId          = pdbId;
                interfaceChains.interfaceId    = interfaceId;
                interfaceChains.entityId1      = Convert.ToInt32(entityStrings[0]);
                interfaceChains.entityId2      = Convert.ToInt32(entityStrings[1]);
                interfaceChains.seqDistHash    = contactInfo.GetBbDistHash();
                interfaceChains.seqContactHash = contactInfo.GetContactsHash();
                interfaceChainsList.Add(interfaceChains);
            }
        }