Example #1
0
        /// <summary>
        /// Similarity between two structures
        /// which need to be superposed
        /// 1. Superpose individual chains of structure1 to
        /// inidividual chains of structure2 based on PSIBLAST sequence alignment
        /// including renaming the sequence id in second structure
        /// 2. apply KLD Q function
        /// </summary>
        /// <param name="interChains1">structure1</param>
        /// <param name="interChains2">structure2</param>
        public InterfacePairInfo[] CompareSupStructuresByKldGaussFunc(InterfaceChains[] interfaceChains1, InterfaceChains[] interfaceChains2, DataTable alignInfoTable)
        {
            List <InterfacePairInfo> interfacesList = new List <InterfacePairInfo> ();

            SuperpositionInterfaces supInterfaces = new SuperpositionInterfaces();

            supInterfaces.SuperposeInterfaces(interfaceChains2, alignInfoTable);

            for (int i = 0; i < interfaceChains1.Length; i++)
            {
                for (int j = 0; j < interfaceChains2.Length; j++)
                {
                    // Q score
                    float qScore = (float)qFunc.KLDQFunc_Gauss(interfaceChains1[i], interfaceChains2[j]);
                    //		if (qScore <= AppSettings.parameters.simInteractParam.interfaceSimCutoff)
                    //		{
                    InterfacePairInfo interfacesInfo = new InterfacePairInfo((InterfaceInfo)interfaceChains1[i], (InterfaceInfo)interfaceChains2[j]);
                    interfacesInfo.qScore = qScore;
                    interfacesList.Add(interfacesInfo);

                    /*		}
                     *              else
                     *              {
                     *                      // try the other chain order
                     *                      interfaceChains2[j].Reverse ();
                     *                      float reversedQScore = (float)qFunc.KLDQFunc_Gauss (interfaceChains1[i], interfaceChains2[j]);
                     *                      if (reversedQScore < qScore)
                     *                      {
                     *                              InterfacePairInfo interfacesInfo = new InterfacePairInfo ((InterfaceInfo)interfaceChains1[i], (InterfaceInfo)interfaceChains2[j]);
                     *                              interfacesInfo.qScore = reversedQScore;
                     *                              interfacesList.Add (interfacesInfo);
                     *                      }
                     *                      else
                     *                      {
                     *                              // go back to the original chain order
                     *                              interfaceChains2[j].Reverse ();
                     *                              InterfacePairInfo interfacesInfo = new InterfacePairInfo ((InterfaceInfo)interfaceChains1[i], (InterfaceInfo)interfaceChains2[j]);
                     *                              interfacesInfo.qScore = qScore;
                     *                              interfacesList.Add (interfacesInfo);
                     *                      }
                     *              }*/
                }
            }
            // change the sequence number back.
            supInterfaces.ReverseSupInterfaces(interfaceChains2, alignInfoTable);

            return(interfacesList.ToArray());
        }
Example #2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="interfaceChains1"></param>
        /// <param name="interfaceChains2"></param>
        /// <param name="alignRow"></param>
        /// <returns></returns>
        public InterfacePairInfo CompareSupStructures(InterfaceChains interface1, InterfaceChains interface2, DataTable alignInfoTable)
        {
            InterfacePairInfo       interfacePairInfo = new InterfacePairInfo((InterfaceInfo)interface1, (InterfaceInfo)interface2);
            SuperpositionInterfaces supInterface      = new SuperpositionInterfaces();
            bool isReverse = false;

            double identity = supInterface.SuperposeInterfaces(interface1, interface2, alignInfoTable, isReverse);

            // Q score
            float qScore = (float)qFunc.WeightQFunc(interface1, interface2);

            // change the sequence number back.
            supInterface.ReverseSupInterfaces(interface1, interface2, alignInfoTable, isReverse);

            if (qScore >= AppSettings.parameters.simInteractParam.interfaceSimCutoff)
            {
                interfacePairInfo.qScore               = qScore;
                interfacePairInfo.identity             = identity;
                interfacePairInfo.isInterface2Reversed = false;
            }
            else
            {
                isReverse = true;
                double reversedIdentity = supInterface.SuperposeInterfaces(interface1, interface2, alignInfoTable, isReverse);
                if (reversedIdentity < AppSettings.parameters.simInteractParam.identityCutoff)
                {
                    reversedIdentity = AppSettings.parameters.simInteractParam.identityCutoff;
                }
                float reversedQScore = (float)qFunc.WeightQFunc(interface1, interface2);
                supInterface.ReverseSupInterfaces(interface1, interface2, alignInfoTable, isReverse);
                if (reversedQScore >= qScore)
                {
                    interfacePairInfo.qScore               = reversedQScore;
                    interfacePairInfo.identity             = reversedIdentity;
                    interfacePairInfo.isInterface2Reversed = true;
                }
                else
                {
                    // go back to the original chain order
                    //		interface2.Reverse ();
                    interfacePairInfo.qScore               = qScore;
                    interfacePairInfo.identity             = identity;
                    interfacePairInfo.isInterface2Reversed = false;
                }
            }

            return(interfacePairInfo);
        }
Example #3
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="interfaceChains1"></param>
        /// <param name="interfaceChains2"></param>
        /// <param name="alignRow"></param>
        /// <returns></returns>
        public InterfacePairInfo CompareSupStructuresByKld(InterfaceChains interface1, InterfaceChains interface2, DataTable alignInfoTable)
        {
            InterfacePairInfo       interfacePairInfo = null;
            SuperpositionInterfaces supInterfaces     = new SuperpositionInterfaces();

            supInterfaces.SuperposeInterfaces(interface2, alignInfoTable);

            // Q score
            float qScore = (float)qFunc.KldQFunc(interface1, interface2);

            if (qScore <= AppSettings.parameters.simInteractParam.interfaceSimCutoff)
            {
                interfacePairInfo        = new InterfacePairInfo((InterfaceInfo)interface1, (InterfaceInfo)interface2);
                interfacePairInfo.qScore = qScore;
            }
            // change the sequence number back.
            supInterfaces.ReverseSupInterfaces(interface2, alignInfoTable);

            return(interfacePairInfo);
        }
Example #4
0
        /// <summary>
        /// Similarity between two structures
        /// which need to be superposed
        /// 1. Superpose individual chains of structure1 to
        /// inidividual chains of structure2 based on PSIBLAST sequence alignment
        /// including renaming the sequence id in second structure
        /// 2. apply Q function
        /// </summary>
        /// <param name="interChains1">structure1</param>
        /// <param name="interChains2">structure2</param>
        public InterfacePairInfo[] CompareSupStructures(InterfaceChains[] interfaceChains1, InterfaceChains[] interfaceChains2, DataTable alignInfoTable)
        {
            List <InterfacePairInfo> interfacesList = new List <InterfacePairInfo>();
            double identity  = 1.0;
            bool   isReverse = false;
            SuperpositionInterfaces supInterfaces = new SuperpositionInterfaces();

            for (int i = 0; i < interfaceChains1.Length; i++)
            {
                for (int j = 0; j < interfaceChains2.Length; j++)
                {
                    try
                    {
                        isReverse = false;
                        identity  = supInterfaces.SuperposeInterfaces
                                        (interfaceChains1[i], interfaceChains2[j], alignInfoTable, isReverse);
                        if (identity < AppSettings.parameters.simInteractParam.identityCutoff)
                        {
                            identity = AppSettings.parameters.simInteractParam.identityCutoff;
                        }
                        // Q score
                        float qScore = (float)qFunc.WeightQFunc(interfaceChains1[i], interfaceChains2[j]);
                        supInterfaces.ReverseSupInterfaces(interfaceChains1[i], interfaceChains2[j], alignInfoTable, isReverse);
                        if (qScore >= AppSettings.parameters.simInteractParam.interfaceSimCutoff)
                        {
                            InterfacePairInfo interfacesInfo = new InterfacePairInfo((InterfaceInfo)interfaceChains1[i], (InterfaceInfo)interfaceChains2[j]);
                            interfacesInfo.qScore               = qScore;
                            interfacesInfo.identity             = identity;
                            interfacesInfo.isInterface2Reversed = false;
                            interfacesList.Add(interfacesInfo);
                        }
                        else
                        {
                            // try the other chain order
                            isReverse = true;
                            double reversedIdentity = supInterfaces.SuperposeInterfaces
                                                          (interfaceChains1[i], interfaceChains2[j], alignInfoTable, isReverse);
                            if (reversedIdentity < AppSettings.parameters.simInteractParam.identityCutoff)
                            {
                                reversedIdentity = AppSettings.parameters.simInteractParam.identityCutoff;
                            }
                            float reversedQScore = (float)qFunc.WeightQFunc(interfaceChains1[i], interfaceChains2[j]);
                            supInterfaces.ReverseSupInterfaces(interfaceChains1[i], interfaceChains2[j], alignInfoTable, isReverse);
                            if (reversedQScore >= qScore &&
                                reversedQScore > AppSettings.parameters.contactParams.minQScore)
                            {
                                InterfacePairInfo interfacesInfo = new InterfacePairInfo((InterfaceInfo)interfaceChains1[i], (InterfaceInfo)interfaceChains2[j]);
                                interfacesInfo.qScore               = reversedQScore;
                                interfacesInfo.identity             = reversedIdentity;
                                interfacesInfo.isInterface2Reversed = true;
                                interfacesList.Add(interfacesInfo);
                            }
                            else
                            {
                                if (qScore > AppSettings.parameters.contactParams.minQScore)
                                {
                                    InterfacePairInfo interfacesInfo = new InterfacePairInfo((InterfaceInfo)interfaceChains1[i], (InterfaceInfo)interfaceChains2[j]);
                                    interfacesInfo.qScore               = qScore;
                                    interfacesInfo.identity             = identity;
                                    interfacesInfo.isInterface2Reversed = false;
                                    interfacesList.Add(interfacesInfo);
                                }
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        ProtCidSettings.progressInfo.progStrQueue.Enqueue
                            (interfaceChains1[i].pdbId + "  " + interfaceChains2[j].pdbId +
                            "calculating Q error: " + ex.Message);
                    }
                }
            }

            return(interfacesList.ToArray());
        }