def testAtomSymmetryNumberEthanewithDeuteriumTritium(self): """ Test the Molecule.calculateAtomSymmetryNumber() on CC(D)(T) This is meant to test whether chirality is accounted for, which should half the symmetry term. The total number is 1.5 because the methyl group contributes *3 and the chiral center contributes *0.5 """ molecule = Molecule().fromAdjacencyList( """ 1 C u0 p0 c0 {2,S} {3,S} {4,S} {5,S} 2 C u0 p0 c0 {1,S} {6,S} {7,S} {8,S} 3 D u0 p0 c0 {1,S} 4 T u0 p0 c0 {1,S} 5 H u0 p0 c0 {1,S} 6 H u0 p0 c0 {2,S} 7 H u0 p0 c0 {2,S} 8 H u0 p0 c0 {2,S} """) symmetryNumber = 1 for atom in molecule.atoms: if not molecule.isAtomInCycle(atom): symmetryNumber *= calculateAtomSymmetryNumber(molecule, atom) self.assertAlmostEqual(symmetryNumber, 1.5)
def testAtomSymmetryNumberEthanewithDeuteriumTritium(self): """ Test the Molecule.calculateAtomSymmetryNumber() on CC(D)(T) This is meant to test whether chirality is accounted for, which should half the symmetry term. The total number is 1.5 because the methyl group contributes *3 and the chiral center contributes *0.5 """ molecule = Molecule().fromAdjacencyList(""" 1 C u0 p0 c0 {2,S} {3,S} {4,S} {5,S} 2 C u0 p0 c0 {1,S} {6,S} {7,S} {8,S} 3 D u0 p0 c0 {1,S} 4 T u0 p0 c0 {1,S} 5 H u0 p0 c0 {1,S} 6 H u0 p0 c0 {2,S} 7 H u0 p0 c0 {2,S} 8 H u0 p0 c0 {2,S} """) symmetryNumber = 1 for atom in molecule.atoms: if not molecule.isAtomInCycle(atom): symmetryNumber *= calculateAtomSymmetryNumber(molecule, atom) self.assertAlmostEqual(symmetryNumber, 1.5)
def testAtomSymmetryNumberEthane(self): """ Test the Molecule.calculateAtomSymmetryNumber() on CC """ molecule = Molecule().fromSMILES('CC') symmetryNumber = 1 for atom in molecule.atoms: if not molecule.isAtomInCycle(atom): symmetryNumber *= calculateAtomSymmetryNumber(molecule, atom) self.assertEqual(symmetryNumber, 9)
def testAtomSymmetryNumberMethyl(self): """ Test the Molecule.calculateAtomSymmetryNumber() on [CH3] """ molecule = Molecule().fromSMILES('[CH3]') symmetryNumber = 1 for atom in molecule.atoms: if not molecule.isAtomInCycle(atom): symmetryNumber *= calculateAtomSymmetryNumber(molecule, atom) self.assertEqual(symmetryNumber, 6)
def testAtomSymmetryNumberIsobutane(self): """ Test the Molecule.calculateAtomSymmetryNumber() on CC(C)C """ molecule = Molecule().fromSMILES('CC(C)C') symmetryNumber = 1 for atom in molecule.atoms: if not molecule.isAtomInCycle(atom): symmetryNumber *= calculateAtomSymmetryNumber(molecule, atom) self.assertEqual(symmetryNumber, 81)
def testAtomSymmetryNumberAllyl(self): """ Test the Molecule.calculateAtomSymmetryNumber() on [CH2]C=C """ spc = Species(molecule=[Molecule().fromSMILES('[CH2]C=C')]) molecule = spc.getResonanceHybrid() symmetryNumber = 1 for atom in molecule.atoms: if not molecule.isAtomInCycle(atom): symmetryNumber *= calculateAtomSymmetryNumber(molecule, atom) self.assertEqual(symmetryNumber, 2)
def testEdgeCarbonAtomSymmetryNumberAllyl(self): """ Test the Molecule.calculateAtomSymmetryNumber() for the edge carbons on [CH2]C=C """ spc = Species(molecule=[Molecule().fromSMILES('[CH2]C=C')]) molecule = spc.getResonanceHybrid() for atom in molecule.atoms: if atom.symbol =='C': number_carbon_bonds = sum([1 for bond in atom.bonds if bond.symbol=='C']) if number_carbon_bonds == 1: atom.label = 'edge' symmetryNumber = calculateAtomSymmetryNumber(molecule, atom) self.assertEqual(symmetryNumber, 1)
def testMiddleCarbonAtomSymmetryNumberAllylUsingResonanceHybrid(self): """ Test the Molecule.calculateAtomSymmetryNumber() for the middle carbon on [CH2]C=C using the resonance hybrid structure """ molecule = Molecule().fromSMILES('[CH2]C=C') species = Species(molecule=[molecule]) resonanceHybrid = species.getResonanceHybrid() for atom in resonanceHybrid.atoms: if atom.symbol == 'C': number_carbon_bonds = sum([1 for bond in atom.bonds if bond.symbol=='C']) if number_carbon_bonds == 2: atom.label = 'center' symmetryNumber = calculateAtomSymmetryNumber(resonanceHybrid, atom) self.assertEqual(symmetryNumber, 2) pass
def testAtomSymmetryNumberWithTwoChiralCenters(self): """ Test the Molecule.calculateAtomSymmetryNumber() on [CH2]CC([CH2])C(C)C=C This is meant to test whether chirality is accounted for, which should half the symmetry term. The molecule has one methyl group (*3), two CH2dot groups (*2 each), and two chiral centers (*0.5), leading to a total atom symmetry number of 3 """ molecule = Molecule().fromAdjacencyList( """ multiplicity 3 1 C u1 p0 c0 {2,S} {3,S} {4,S} 2 H u0 p0 c0 {1,S} 3 H u0 p0 c0 {1,S} 4 C u0 p0 c0 {1,S} {5,S} {13,S} {14,S} 5 C u0 p0 c0 {4,S} {6,S} {9,S} {15,S} 6 C u1 p0 c0 {5,S} {7,S} {8,S} 7 H u0 p0 c0 {6,S} 8 H u0 p0 c0 {6,S} 9 C u0 p0 c0 {5,S} {10,S} {11,S} {16,S} 10 C u0 p0 c0 {9,S} {17,S} {18,S} {19,S} 11 C u0 p0 c0 {9,S} {12,D} {20,S} 12 C u0 p0 c0 {11,D} {21,S} {22,S} 13 H u0 p0 c0 {4,S} 14 H u0 p0 c0 {4,S} 15 H u0 p0 c0 {5,S} 16 H u0 p0 c0 {9,S} 17 H u0 p0 c0 {10,S} 18 H u0 p0 c0 {10,S} 19 H u0 p0 c0 {10,S} 20 H u0 p0 c0 {11,S} 21 H u0 p0 c0 {12,S} 22 H u0 p0 c0 {12,S} """) symmetryNumber = 1 for atom in molecule.atoms: if not molecule.isAtomInCycle(atom): symmetryNumber *= calculateAtomSymmetryNumber(molecule, atom) self.assertAlmostEqual(symmetryNumber, 3)