예제 #1
0
        public static List <ATOM_Record> FindAtomInteractingWithOtherProteinInterfaces(ATOM_Record atom, InteractionBetweenProteinInterfacesListContainer interactionBetweenProteinInterfacesContainer, FindAtomInteractingWithAnotherProteinInterfaceOptions findAtomInteractingWithAnotherProteinInterfaceOptions)
        {
            if (ParameterValidation.IsAtomNullOrEmpty(atom))
            {
                throw new ArgumentNullException(nameof(atom));
            }

            if (ParameterValidation.IsInteractionBetweenProteinInterfacesListContainerNullOrEmpty(interactionBetweenProteinInterfacesContainer))
            {
                ////////Console.WriteLine("empty");
                return(null);
            }

            List <InteractionBetweenProteinInterfaces> searchList = null;

            if (findAtomInteractingWithAnotherProteinInterfaceOptions == FindAtomInteractingWithAnotherProteinInterfaceOptions.FindAtomsInteractingWithOtherProteinInterfaces)
            {
                searchList = interactionBetweenProteinInterfacesContainer.InteractionBetweenProteinInterfacesList;
            }
            else if (findAtomInteractingWithAnotherProteinInterfaceOptions == FindAtomInteractingWithAnotherProteinInterfaceOptions.FindAtomsInteractingWithNonProteinInterfaces)
            {
                searchList = interactionBetweenProteinInterfacesContainer.InteractionBetweenNonProteinInterfacesList;
            }
            else
            {
                throw new NotImplementedException();
            }

            if (searchList == null)
            {
                ////////Console.WriteLine("returning null");
                return(null);
            }

            var result = new List <ATOM_Record>();

            foreach (InteractionBetweenProteinInterfaces interaction in searchList)
            {
                if (interaction.Atom1.Atom == atom && interaction.Atom2.Atom != atom)
                {
                    //return interaction.Atom1.Atom;
                    result.Add(interaction.Atom2.Atom);
                }

                if (interaction.Atom1.Atom != atom && interaction.Atom2.Atom == atom)
                {
                    //return interaction.Atom2.Atom;
                    result.Add(interaction.Atom1.Atom);
                }
            }

            //if (result.Count == 0)
            //{
            //    //////Console.WriteLine("returning empty list");
            //}

            return(result);
        }
        public static ProteinInterfaceSymmetryModeValues CheckDimer2X2ProteinInterfaceSymmetry(InteractionBetweenProteinInterfacesListContainer interactionBetweenProteinInterfacesContainer)
        {
            if (ParameterValidation.IsInteractionBetweenProteinInterfacesListContainerNullOrEmpty(interactionBetweenProteinInterfacesContainer))
            {
                throw new ArgumentOutOfRangeException(nameof(interactionBetweenProteinInterfacesContainer));
            }

            //int? chainIdA = null;
            //int? chainIdB = null;

            //foreach (var interaction in interactionsBetweenProteinInterfaces.InteractionBetweenProteinInterfacesList)
            //{
            //    if (chainIdA == null || interaction.Atom1.FullProteinInterfaceId.ChainId < chainIdA)
            //    {
            //        chainIdA = interaction.Atom1.FullProteinInterfaceId.ChainId;
            //    }

            //    if (chainIdA == null || interaction.Atom2.FullProteinInterfaceId.ChainId < chainIdA)
            //    {
            //        chainIdA = interaction.Atom2.FullProteinInterfaceId.ChainId;
            //    }

            //    if (chainIdB == null || interaction.Atom1.FullProteinInterfaceId.ChainId > chainIdB)
            //    {
            //        chainIdB = interaction.Atom1.FullProteinInterfaceId.ChainId;
            //    }

            //    if (chainIdB == null || interaction.Atom2.FullProteinInterfaceId.ChainId > chainIdB)
            //    {
            //        chainIdB = interaction.Atom2.FullProteinInterfaceId.ChainId;
            //    }
            //}

            int chainIdA = 0;
            int chainIdB = 1;

            //List<int> totalProteinInterfacesA = new List<int>();
            //List<int> totalProteinInterfacesB = new List<int>();

            int totalProteinInterfacesA = interactionBetweenProteinInterfacesContainer.InteractionBetweenProteinInterfacesList.Where(a => a.Atom1.FullProteinInterfaceId.ChainId == chainIdA).Select(a => a.Atom1.FullProteinInterfaceId.ProteinInterfaceId).Distinct().Count() +
                                          interactionBetweenProteinInterfacesContainer.InteractionBetweenProteinInterfacesList.Where(a => a.Atom2.FullProteinInterfaceId.ChainId == chainIdA).Select(a => a.Atom2.FullProteinInterfaceId.ProteinInterfaceId).Distinct().Count();

            int totalProteinInterfacesB = interactionBetweenProteinInterfacesContainer.InteractionBetweenProteinInterfacesList.Where(a => a.Atom1.FullProteinInterfaceId.ChainId == chainIdB).Select(a => a.Atom1.FullProteinInterfaceId.ProteinInterfaceId).Distinct().Count() +
                                          interactionBetweenProteinInterfacesContainer.InteractionBetweenProteinInterfacesList.Where(a => a.Atom2.FullProteinInterfaceId.ChainId == chainIdB).Select(a => a.Atom2.FullProteinInterfaceId.ProteinInterfaceId).Distinct().Count();


            //foreach (var interaction in interactionsBetweenProteinInterfaces.InteractionBetweenProteinInterfacesList)
            //{
            //    if (interaction.Atom1.FullProteinInterfaceId.ChainId == chainIdA && (interaction.Atom1.FullProteinInterfaceId.ProteinInterfaceId != null && !totalProteinInterfacesA.Contains((int) interaction.Atom1.FullProteinInterfaceId.ProteinInterfaceId)))
            //    {
            //        totalProteinInterfacesA.Add((int) interaction.Atom1.FullProteinInterfaceId.ProteinInterfaceId);
            //    }

            //    if (interaction.Atom2.FullProteinInterfaceId.ChainId == chainIdA && (interaction.Atom2.FullProteinInterfaceId.ProteinInterfaceId != null && !totalProteinInterfacesA.Contains((int) interaction.Atom2.FullProteinInterfaceId.ProteinInterfaceId)))
            //    {
            //        totalProteinInterfacesA.Add((int) interaction.Atom2.FullProteinInterfaceId.ProteinInterfaceId);
            //    }

            //    //

            //    if (interaction.Atom1.FullProteinInterfaceId.ChainId == chainIdB && (interaction.Atom1.FullProteinInterfaceId.ProteinInterfaceId != null && !totalProteinInterfacesB.Contains((int) interaction.Atom1.FullProteinInterfaceId.ProteinInterfaceId)))
            //    {
            //        totalProteinInterfacesB.Add((int) interaction.Atom1.FullProteinInterfaceId.ProteinInterfaceId);
            //    }

            //    if (interaction.Atom2.FullProteinInterfaceId.ChainId == chainIdB && (interaction.Atom2.FullProteinInterfaceId.ProteinInterfaceId != null && !totalProteinInterfacesB.Contains((int) interaction.Atom2.FullProteinInterfaceId.ProteinInterfaceId)))
            //    {
            //        totalProteinInterfacesB.Add((int) interaction.Atom2.FullProteinInterfaceId.ProteinInterfaceId);
            //    }
            //}

            //var interactionsBetweenProteinInterfaces2 = new List<AtomPair>[totalProteinInterfacesA.Max() > totalProteinInterfacesA.Count ? totalProteinInterfacesA.Max() : totalProteinInterfacesA.Count, totalProteinInterfacesB.Max() > totalProteinInterfacesB.Count ? totalProteinInterfacesB.Max() : totalProteinInterfacesB.Count];

            //var interactionsBetweenProteinInterfaces2 = new List<AtomPair>[totalProteinInterfacesA, totalProteinInterfacesB];

            //foreach (var interaction in interactionsBetweenProteinInterfaces.InteractionBetweenProteinInterfacesList)
            //{
            //    if (interaction.Atom1.FullProteinInterfaceId.ChainId == chainIdA && interaction.Atom2.FullProteinInterfaceId.ChainId == chainIdB)
            //    {
            //        AtomPair atomPair = new AtomPair(interaction.Atom1.Atom, interaction.Atom2.Atom, 0);
            //        interactionsBetweenProteinInterfaces2[(int)interaction.Atom1.FullProteinInterfaceId.ProteinInterfaceId, (int) interaction.Atom2 .ProteinInterfaceId].Add(atomPair);
            //    }
            //    else if (interaction.Atom1.FullProteinInterfaceId.ChainId == chainIdB && interaction.Atom2.FullProteinInterfaceId.ChainId == chainIdA)
            //    {
            //        AtomPair atomPair = new AtomPair(interaction.Atom2.Atom, interaction.Atom1.Atom, 0);
            //        interactionsBetweenProteinInterfaces2[(int)interaction.Atom2.FullProteinInterfaceId.ProteinInterfaceId, (int) interaction.Atom1.FullProteinInterfaceId.ProteinInterfaceId].Add(atomPair);
            //    }

            //}

            // C0S0 to C1S0 plus C0S1 to C1S1
            //int Chain_A_ProteinInterface_A_to_Chain_B_ProteinInterface_A = interactionsBetweenProteinInterfaces2[0, 0].Count;
            //int Chain_A_ProteinInterface_B_to_Chain_B_ProteinInterface_B = interactionsBetweenProteinInterfaces2[1, 1].Count;

            const int proteinInterfaceIdA = StaticValues.ProteinInterfaceA;
            const int proteinInterfaceIdB = StaticValues.ProteinInterfaceB;

            int Chain_A_ProteinInterface_A_to_Chain_B_ProteinInterface_A = interactionBetweenProteinInterfacesContainer.InteractionBetweenProteinInterfacesList.Count(a => a.Atom1.FullProteinInterfaceId.ChainId == chainIdA && a.Atom2.FullProteinInterfaceId.ChainId == chainIdB && a.Atom1.FullProteinInterfaceId.ProteinInterfaceId == proteinInterfaceIdA && a.Atom2.FullProteinInterfaceId.ProteinInterfaceId == proteinInterfaceIdA) +
                                                                           interactionBetweenProteinInterfacesContainer.InteractionBetweenProteinInterfacesList.Count(a => a.Atom1.FullProteinInterfaceId.ChainId == chainIdB && a.Atom2.FullProteinInterfaceId.ChainId == chainIdA && a.Atom1.FullProteinInterfaceId.ProteinInterfaceId == proteinInterfaceIdA && a.Atom2.FullProteinInterfaceId.ProteinInterfaceId == proteinInterfaceIdA);

            int Chain_A_ProteinInterface_B_to_Chain_B_ProteinInterface_B = interactionBetweenProteinInterfacesContainer.InteractionBetweenProteinInterfacesList.Count(a => a.Atom1.FullProteinInterfaceId.ChainId == chainIdA && a.Atom2.FullProteinInterfaceId.ChainId == chainIdB && a.Atom1.FullProteinInterfaceId.ProteinInterfaceId == proteinInterfaceIdB && a.Atom2.FullProteinInterfaceId.ProteinInterfaceId == proteinInterfaceIdB) +
                                                                           interactionBetweenProteinInterfacesContainer.InteractionBetweenProteinInterfacesList.Count(a => a.Atom1.FullProteinInterfaceId.ChainId == chainIdB && a.Atom2.FullProteinInterfaceId.ChainId == chainIdA && a.Atom1.FullProteinInterfaceId.ProteinInterfaceId == proteinInterfaceIdB && a.Atom2.FullProteinInterfaceId.ProteinInterfaceId == proteinInterfaceIdB);

            int categoryStraight = Chain_A_ProteinInterface_A_to_Chain_B_ProteinInterface_A + Chain_A_ProteinInterface_B_to_Chain_B_ProteinInterface_B;

            // C0S0 to C1S1 and C0S1 to C1S0
            //int Chain_A_ProteinInterface_A_to_Chain_B_ProteinInterface_B = interactionsBetweenProteinInterfaces2[0, 1].Count;
            //int Chain_A_ProteinInterface_B_to_Chain_B_ProteinInterface_A = interactionsBetweenProteinInterfaces2[1, 0].Count;

            int Chain_A_ProteinInterface_A_to_Chain_B_ProteinInterface_B = interactionBetweenProteinInterfacesContainer.InteractionBetweenProteinInterfacesList.Count(a => a.Atom1.FullProteinInterfaceId.ChainId == chainIdA && a.Atom2.FullProteinInterfaceId.ChainId == chainIdB && a.Atom1.FullProteinInterfaceId.ProteinInterfaceId == proteinInterfaceIdA && a.Atom2.FullProteinInterfaceId.ProteinInterfaceId == proteinInterfaceIdB) +
                                                                           interactionBetweenProteinInterfacesContainer.InteractionBetweenProteinInterfacesList.Count(a => a.Atom1.FullProteinInterfaceId.ChainId == chainIdB && a.Atom2.FullProteinInterfaceId.ChainId == chainIdA && a.Atom1.FullProteinInterfaceId.ProteinInterfaceId == proteinInterfaceIdB && a.Atom2.FullProteinInterfaceId.ProteinInterfaceId == proteinInterfaceIdA);

            int Chain_A_ProteinInterface_B_to_Chain_B_ProteinInterface_A = interactionBetweenProteinInterfacesContainer.InteractionBetweenProteinInterfacesList.Count(a => a.Atom1.FullProteinInterfaceId.ChainId == chainIdA && a.Atom2.FullProteinInterfaceId.ChainId == chainIdB && a.Atom1.FullProteinInterfaceId.ProteinInterfaceId == proteinInterfaceIdB && a.Atom2.FullProteinInterfaceId.ProteinInterfaceId == proteinInterfaceIdA) +
                                                                           interactionBetweenProteinInterfacesContainer.InteractionBetweenProteinInterfacesList.Count(a => a.Atom1.FullProteinInterfaceId.ChainId == chainIdB && a.Atom2.FullProteinInterfaceId.ChainId == chainIdA && a.Atom1.FullProteinInterfaceId.ProteinInterfaceId == proteinInterfaceIdA && a.Atom2.FullProteinInterfaceId.ProteinInterfaceId == proteinInterfaceIdB);

            int categoryDiagonal = Chain_A_ProteinInterface_A_to_Chain_B_ProteinInterface_B + Chain_A_ProteinInterface_B_to_Chain_B_ProteinInterface_A;

            var proteinInterfaceSymmetryModeEnum = ProteinInterfaceSymmetryModeEnum.Unknown;

            // Top straight line ----------------------- Bottom straight line ------------------ Top to bottom diagonal line ----------- Bottom to top diagonal line
            if (Chain_A_ProteinInterface_A_to_Chain_B_ProteinInterface_A == 0 && Chain_A_ProteinInterface_B_to_Chain_B_ProteinInterface_B == 0 &&
                Chain_A_ProteinInterface_A_to_Chain_B_ProteinInterface_B == 0 && Chain_A_ProteinInterface_B_to_Chain_B_ProteinInterface_A == 0)
            {
                // Interaction Mode 0
                proteinInterfaceSymmetryModeEnum = ProteinInterfaceSymmetryModeEnum.Unknown;
            }
            else if (Chain_A_ProteinInterface_A_to_Chain_B_ProteinInterface_A > 0 && Chain_A_ProteinInterface_B_to_Chain_B_ProteinInterface_B > 0 &&
                     Chain_A_ProteinInterface_A_to_Chain_B_ProteinInterface_B == 0 && Chain_A_ProteinInterface_B_to_Chain_B_ProteinInterface_A == 0)
            {
                // Interaction Mode 1
                proteinInterfaceSymmetryModeEnum = ProteinInterfaceSymmetryModeEnum.Straight;
            }
            else if (Chain_A_ProteinInterface_A_to_Chain_B_ProteinInterface_A == 0 && Chain_A_ProteinInterface_B_to_Chain_B_ProteinInterface_B == 0 &&
                     Chain_A_ProteinInterface_A_to_Chain_B_ProteinInterface_B > 0 && Chain_A_ProteinInterface_B_to_Chain_B_ProteinInterface_A > 0)
            {
                // Interaction Mode 2
                proteinInterfaceSymmetryModeEnum = ProteinInterfaceSymmetryModeEnum.Diagonal;
            }
            else if (Chain_A_ProteinInterface_A_to_Chain_B_ProteinInterface_A > 0 && Chain_A_ProteinInterface_B_to_Chain_B_ProteinInterface_B > 0 &&
                     Chain_A_ProteinInterface_A_to_Chain_B_ProteinInterface_B > 0 && Chain_A_ProteinInterface_B_to_Chain_B_ProteinInterface_A > 0)
            {
                // Interaction Mode 3
                proteinInterfaceSymmetryModeEnum = ProteinInterfaceSymmetryModeEnum.StraightAndDiagonal;
            }
            else if (Chain_A_ProteinInterface_A_to_Chain_B_ProteinInterface_A > 0 && Chain_A_ProteinInterface_B_to_Chain_B_ProteinInterface_B == 0 &&
                     Chain_A_ProteinInterface_A_to_Chain_B_ProteinInterface_B > 0 && Chain_A_ProteinInterface_B_to_Chain_B_ProteinInterface_A > 0)
            {
                // Interaction Mode 4
                proteinInterfaceSymmetryModeEnum = ProteinInterfaceSymmetryModeEnum.DiagonalAndTopStraight;
            }
            else if (Chain_A_ProteinInterface_A_to_Chain_B_ProteinInterface_A == 0 && Chain_A_ProteinInterface_B_to_Chain_B_ProteinInterface_B > 0 &&
                     Chain_A_ProteinInterface_A_to_Chain_B_ProteinInterface_B > 0 && Chain_A_ProteinInterface_B_to_Chain_B_ProteinInterface_A > 0)
            {
                // Interaction Mode 5
                proteinInterfaceSymmetryModeEnum = ProteinInterfaceSymmetryModeEnum.DiagonalAndBottomStraight;
            }
            else if (Chain_A_ProteinInterface_A_to_Chain_B_ProteinInterface_A > 0 && Chain_A_ProteinInterface_B_to_Chain_B_ProteinInterface_B > 0 &&
                     Chain_A_ProteinInterface_A_to_Chain_B_ProteinInterface_B > 0 && Chain_A_ProteinInterface_B_to_Chain_B_ProteinInterface_A == 0)
            {
                // Interaction Mode 6
                proteinInterfaceSymmetryModeEnum = ProteinInterfaceSymmetryModeEnum.StraightAndTopToBottomDiagonal;
            }
            else if (Chain_A_ProteinInterface_A_to_Chain_B_ProteinInterface_A > 0 && Chain_A_ProteinInterface_B_to_Chain_B_ProteinInterface_B > 0 &&
                     Chain_A_ProteinInterface_A_to_Chain_B_ProteinInterface_B == 0 &&
                     Chain_A_ProteinInterface_B_to_Chain_B_ProteinInterface_A > 0)
            {
                // Interaction Mode 7
                proteinInterfaceSymmetryModeEnum = ProteinInterfaceSymmetryModeEnum.StraightAndBottomToTopDiagonal;
            }

            return(new ProteinInterfaceSymmetryModeValues(categoryDiagonal, categoryStraight, proteinInterfaceSymmetryModeEnum));
        }