Exemplo n.º 1
0
        private void ExtendMapping(int xIndex, int yIndex, McgregorHelper mcGregorHelper, List <int> additionalMapping,
                                   List <int> currentMapping)
        {
            int atom1MoleculeA = mcGregorHelper.GetIBondNeighborAtomsA()[xIndex * 3 + 0];
            int atom2MoleculeA = mcGregorHelper.GetIBondNeighborAtomsA()[xIndex * 3 + 1];
            int atom1MoleculeB = mcGregorHelper.GetIBondNeighborAtomsB()[yIndex * 3 + 0];
            int atom2MoleculeB = mcGregorHelper.GetIBondNeighborAtomsB()[yIndex * 3 + 1];

            IAtom r1A          = source.Atoms[atom1MoleculeA];
            IAtom r2A          = source.Atoms[atom2MoleculeA];
            IBond reactantBond = source.GetBond(r1A, r2A);

            IAtom p1B         = target.Atoms[atom1MoleculeB];
            IAtom p2B         = target.Atoms[atom2MoleculeB];
            IBond productBond = target.GetBond(p1B, p2B);

            //      Bond Order Check Introduced by Asad

            if (McGregorChecks.IsMatchFeasible(source, reactantBond, target, productBond, IsBondMatch))
            {
                for (int indexZ = 0; indexZ < mcGregorHelper.MappedAtomCount; indexZ++)
                {
                    int mappedAtom1 = currentMapping[indexZ * 2 + 0];
                    int mappedAtom2 = currentMapping[indexZ * 2 + 1];

                    if ((mappedAtom1 == atom1MoleculeA) && (mappedAtom2 == atom1MoleculeB))
                    {
                        additionalMapping.Add(atom2MoleculeA);
                        additionalMapping.Add(atom2MoleculeB);
                    }
                    else if ((mappedAtom1 == atom1MoleculeA) && (mappedAtom2 == atom2MoleculeB))
                    {
                        additionalMapping.Add(atom2MoleculeA);
                        additionalMapping.Add(atom1MoleculeB);
                    }
                    else if ((mappedAtom1 == atom2MoleculeA) && (mappedAtom2 == atom1MoleculeB))
                    {
                        additionalMapping.Add(atom1MoleculeA);
                        additionalMapping.Add(atom2MoleculeB);
                    }
                    else if ((mappedAtom1 == atom2MoleculeA) && (mappedAtom2 == atom2MoleculeB))
                    {
                        additionalMapping.Add(atom1MoleculeA);
                        additionalMapping.Add(atom1MoleculeB);
                    }
                }//for loop
            }
        }
Exemplo n.º 2
0
        private void SetModifedArcs(McgregorHelper mcGregorHelper)
        {
            int neighborBondNumA    = mcGregorHelper.NeighborBondNumA;
            int neighborBondNumB    = mcGregorHelper.NeighborBondNumB;
            var iBondNeighborAtomsA = mcGregorHelper.GetIBondNeighborAtomsA();
            var iBondNeighborAtomsB = mcGregorHelper.GetIBondNeighborAtomsB();
            var cBondNeighborsA     = mcGregorHelper.GetCBondNeighborsA();
            var cBondNeighborsB     = mcGregorHelper.GetCBondNeighborsB();

            for (int row = 0; row < neighborBondNumA; row++)
            {
                for (int column = 0; column < neighborBondNumB; column++)
                {
                    string g1A = cBondNeighborsA[row * 4 + 0];
                    string g2A = cBondNeighborsA[row * 4 + 1];
                    string g1B = cBondNeighborsB[column * 4 + 0];
                    string g2B = cBondNeighborsB[column * 4 + 1];

                    if (MatchGAtoms(g1A, g2A, g1B, g2B))
                    {
                        int indexI      = iBondNeighborAtomsA[row * 3 + 0];
                        int indexIPlus1 = iBondNeighborAtomsA[row * 3 + 1];

                        IAtom r1A          = source.Atoms[indexI];
                        IAtom r2A          = source.Atoms[indexIPlus1];
                        IBond reactantBond = source.GetBond(r1A, r2A);

                        int indexJ      = iBondNeighborAtomsB[column * 3 + 0];
                        int indexJPlus1 = iBondNeighborAtomsB[column * 3 + 1];

                        IAtom p1B         = target.Atoms[indexJ];
                        IAtom p2B         = target.Atoms[indexJPlus1];
                        IBond productBond = target.GetBond(p1B, p2B);
                        if (McGregorChecks.IsMatchFeasible(source, reactantBond, target, productBond, IsBondMatch))
                        {
                            modifiedARCS[row * neighborBondNumB + column] = 1;
                        }
                    }
                }
            }
        }