/// <summary> /// compare two domain interfaces /// </summary> /// <param name="domainInterface1"></param> /// <param name="domainInterface2"></param> /// <returns></returns> public DomainInterfacePairInfo CompareEntryDomainInterfaces(DomainInterface domainInterface1, DomainInterface domainInterface2) { double qScore = qFunc.WeightQFunc(domainInterface1, domainInterface2); bool interfaceReversed = false; if (qScore < AppSettings.parameters.simInteractParam.interfaceSimCutoff && domainInterface1.familyCode1 == domainInterface2.familyCode2) { domainInterface2.Reverse(); double reversedQScore = qFunc.WeightQFunc(domainInterface1, domainInterface2); if (qScore < reversedQScore) { qScore = reversedQScore; interfaceReversed = true; } else { domainInterface2.Reverse(); } } DomainInterfacePairInfo interfacePairInfo = new DomainInterfacePairInfo (new DomainInterfaceInfo(domainInterface1), new DomainInterfaceInfo(domainInterface2)); interfacePairInfo.qScore = qScore; interfacePairInfo.isInterface2Reversed = interfaceReversed; return(interfacePairInfo); }
/// <summary> /// compare two domain interfaces of same entry /// </summary> /// <param name="domainInterfaces1"></param> /// <param name="domainInterfaces2"></param> public DomainInterfacePairInfo[] CompareEntryDomainInterfaces(DomainInterface[] domainInterfaces1, DomainInterface[] domainInterfaces2) { Dictionary <string, long[]> familyDomainHash = GetFamilyDomainHash(domainInterfaces1, domainInterfaces2); DataTable domainAlignInfoTable = GetDomainAlignmentTable(familyDomainHash); List <DomainInterfacePairInfo> interfaceCompList = new List <DomainInterfacePairInfo>(); foreach (DomainInterface domainInterface1 in domainInterfaces1) { foreach (DomainInterface domainInterface2 in domainInterfaces2) { try { DomainInterfacePairInfo compInfo = CompareTwoDomainInterfaces(domainInterface1, domainInterface2, domainAlignInfoTable); if (compInfo != null && // compInfo.qScore > -1) compInfo.qScore >= AppSettings.parameters.contactParams.minQScore) { interfaceCompList.Add(compInfo); } } catch (Exception ex) { nonAlignDomainWriter.WriteLine(domainInterface1.pdbId + " " + domainInterface1.domainInterfaceId + " " + domainInterface2.pdbId + " " + domainInterface2.domainInterfaceId + " : " + ex.Message); } } } nonAlignDomainWriter.Flush(); DomainInterfacePairInfo[] pairCompInfos = new DomainInterfacePairInfo[interfaceCompList.Count]; interfaceCompList.CopyTo(pairCompInfos); return(pairCompInfos); }
/// <summary> /// compare domain interfaces for one entry /// </summary> /// <param name="domainInterfaces1"></param> /// <param name="domainInterfaces2"></param> public DomainInterfacePairInfo[] CompareEntryDomainInterfaces(DomainInterface[] domainInterfaces) { Dictionary <string, long[]> familyDomainHash = GetFamilyDomainHash(domainInterfaces); DataTable domainAlignInfoTable = GetDomainAlignmentTable(familyDomainHash); List <DomainInterfacePairInfo> interfaceCompList = new List <DomainInterfacePairInfo> (); foreach (DomainInterface domainInterface1 in domainInterfaces) { foreach (DomainInterface domainInterface2 in domainInterfaces) { if (domainInterface1.domainInterfaceId != domainInterface2.domainInterfaceId) { if (!IsDomainInterfaceAlignmentExist(domainInterface1, domainInterface2, domainAlignInfoTable)) { nonAlignDomainWriter.WriteLine(domainInterface1.pdbId + " " + domainInterface1.domainInterfaceId + " " + domainInterface1.domainId1 + " " + domainInterface1.domainId2 + " " + " " + domainInterface2.pdbId + " " + domainInterface2.domainInterfaceId + " " + domainInterface2.domainId1 + " " + domainInterface2.domainId2); continue; } DomainInterfacePairInfo compInfo = CompareTwoDomainInterfaces(domainInterface1, domainInterface2, domainAlignInfoTable); if (compInfo != null && compInfo.qScore > -1) // compInfo.qScore >= AppSettings.parameters.contactParams.minQScore) { interfaceCompList.Add(compInfo); } } } } nonAlignDomainWriter.Flush(); return(interfaceCompList.ToArray()); }
/// <summary> /// same domain interfaces means two domain interfaces with same domain id components /// and Q score >= unique interface q score which is defined to 0.90 /// </summary> /// <param name="domainInterface1"></param> /// <param name="domainInterface2"></param> /// <returns></returns> public bool AreSameDomainInterfaces(DomainInterface domainInterface1, DomainInterface domainInterface2) { DomainInterfacePairInfo pairInfo = CompareEntryDomainInterfaces(domainInterface1, domainInterface2); if (pairInfo.qScore >= AppSettings.parameters.simInteractParam.uniqueInterfaceCutoff && AreDomainInterfacesSameDomainIds(domainInterface1, domainInterface2)) { return(true); } return(false); }
/// <summary> /// compare two domain interfaces /// </summary> /// <param name="domainInterfaces1"></param> /// <param name="domainInterfaces2"></param> public DomainInterfacePairInfo CompareDomainInterfaces(DomainInterface domainInterface1, DomainInterface domainInterface2) { Dictionary <string, long[]> familyDomainHash = GetFamilyDomainHash(domainInterface1, domainInterface2); DataTable domainAlignmentTable = GetDomainAlignmentTable(familyDomainHash); /* if (domainAlignInfoTable == null || domainAlignInfoTable.Rows.Count == 0) * { * return null; * }*/ DomainInterfacePairInfo compInfo = CompareTwoDomainInterfaces(domainInterface1, domainInterface2, domainAlignmentTable); domainAlignmentTable.Clear(); return(compInfo); }
/// <summary> /// compare two domain interfaces /// </summary> /// <param name="domainInterface1"></param> /// <param name="domainInterface2"></param> /// <param name="domainAlignInfoTable"></param> /// <returns></returns> public DomainInterfacePairInfo CompareTwoDomainInterfaces(DomainInterface domainInterface1, DomainInterface domainInterface2, DataTable domainAlignInfoTable) { DomainInterface domainInterface2Copy = new DomainInterface(domainInterface2, true); // keep a deep copy double identity = supDomainInterface.SuperposeDomainInterfaces(domainInterface1, domainInterface2Copy, domainAlignInfoTable); double qScore = qFunc.WeightQFunc(domainInterface1, domainInterface2Copy); // domainInterface2 = domainInterface2Copy; // shadow copy // supDomainInterface.ReverseSupDomainInterfaces(domainInterface1, domainInterface2, domainAlignInfoTable); bool interfaceReversed = false; if (qScore < AppSettings.parameters.simInteractParam.interfaceSimCutoff && domainInterface1.familyCode1 == domainInterface2.familyCode2) { domainInterface2Copy = new DomainInterface(domainInterface2, true); domainInterface2Copy.Reverse(); // keep deep copy double reversedIdentity = supDomainInterface.SuperposeDomainInterfaces(domainInterface1, domainInterface2Copy, domainAlignInfoTable); double reversedQScore = qFunc.WeightQFunc(domainInterface1, domainInterface2Copy); // domainInterface2 = domainInterface2Copy; // supDomainInterface.ReverseSupDomainInterfaces(domainInterface1, domainInterface2, domainAlignInfoTable); if (qScore < reversedQScore) { qScore = reversedQScore; identity = reversedIdentity; interfaceReversed = true; } } DomainInterfacePairInfo interfacePairInfo = new DomainInterfacePairInfo (new DomainInterfaceInfo(domainInterface1), new DomainInterfaceInfo(domainInterface2)); interfacePairInfo.qScore = qScore; if (identity <= 0) { interfacePairInfo.identity = -1.0; } else { interfacePairInfo.identity = identity; } interfacePairInfo.isInterface2Reversed = interfaceReversed; return(interfacePairInfo); }
/// <summary> /// compare two domain interfaces /// </summary> /// <param name="domainInterfaces1"></param> /// <param name="domainInterfaces2"></param> public DomainInterfacePairInfo[] CompareDifRelationDomainInterfaces(DomainInterface[] domainInterfaces1, DomainInterface[] domainInterfaces2) { Dictionary <string, long[]> familyDomainHash1 = GetFamilyDomainHash(domainInterfaces1); Dictionary <string, long[]> familyDomainHash2 = GetFamilyDomainHash(domainInterfaces2); DataTable domainAlignInfoTable = GetDomainAlignmentTable(familyDomainHash1, familyDomainHash2); List <DomainInterfacePairInfo> interfaceCompList = new List <DomainInterfacePairInfo> (); foreach (DomainInterface domainInterface1 in domainInterfaces1) { foreach (DomainInterface domainInterface2 in domainInterfaces2) { if (!IsDomainInterfaceAlignmentExist(domainInterface1, domainInterface2, domainAlignInfoTable)) { nonAlignDomainWriter.WriteLine(domainInterface1.pdbId + " " + domainInterface1.domainInterfaceId + " " + domainInterface1.domainId1 + " " + domainInterface1.domainId2 + " " + " " + domainInterface2.pdbId + " " + domainInterface2.domainInterfaceId + " " + domainInterface2.domainId1 + " " + domainInterface2.domainId2); // continue; } try { DomainInterfacePairInfo compInfo = CompareTwoDomainInterfaces(domainInterface1, domainInterface2, domainAlignInfoTable); if (compInfo != null && // compInfo.qScore > -1) compInfo.qScore >= AppSettings.parameters.contactParams.minQScore) { interfaceCompList.Add(compInfo); } } catch (Exception ex) { nonAlignDomainWriter.WriteLine(domainInterface1.pdbId + " " + domainInterface1.domainInterfaceId + " " + domainInterface2.pdbId + " " + domainInterface2.domainInterfaceId + " : " + ex.Message); } } } nonAlignDomainWriter.Flush(); return(interfaceCompList.ToArray()); }