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 } }
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; } } } } }