BUSCAR UNA SUBESTRUCTURA MOLECULAR DENTRO DE UNA MOLECULA

BUSCAR UNA SUBESTRUCTURA EN UNA MOLÉCULA

Definimos una molécula a partir de sus átomos y enlaces:

Molecule[{"C","C","C","C","C","C","C","C","C","C","C","C","C","C","C","C","C","C","C","C","C","C"},{Bond[{1,2},"Single"],Bond[{2,3},"Single"],Bond[{3,4},"Single"],Bond[{4,5},"Aromatic"],Bond[{5,6},"Aromatic"],Bond[{6,7},"Aromatic"],Bond[{7,8},"Aromatic"],Bond[{8,9},"Aromatic"],Bond[{8,10},"Single"],Bond[{10,11},"Single"],Bond[{11,12},"Single"],Bond[{12,13},"Single"],Bond[{13,14},"Single"],Bond[{14,15},"Single"],Bond[{15,16},"Aromatic"],Bond[{16,17},"Aromatic"],Bond[{17,18},"Aromatic"],Bond[{18,19},"Aromatic"],Bond[{19,20},"Aromatic"],Bond[{14,21},"Single"],Bond[{21,22},"Single"],Bond[{9,4},"Aromatic"],Bond[{20,15},"Aromatic"]},{}],MoleculePattern["c1ccccc1"]

Su estructura en 2D es:

MoleculePlot[Molecule[{"C","C","C","C","C","C","C","C","C","C","C","C","C","C","C","C","C","C","C","C","C","C"},{Bond[{1,2},"Single"],Bond[{2,3},"Single"],Bond[{3,4},"Single"],Bond[{4,5},"Aromatic"],Bond[{5,6},"Aromatic"],Bond[{6,7},"Aromatic"],Bond[{7,8},"Aromatic"],Bond[{8,9},"Aromatic"],Bond[{8,10},"Single"],Bond[{10,11},"Single"],Bond[{11,12},"Single"],Bond[{12,13},"Single"],Bond[{13,14},"Single"],Bond[{14,15},"Single"],Bond[{15,16},"Aromatic"],Bond[{16,17},"Aromatic"],Bond[{17,18},"Aromatic"],Bond[{18,19},"Aromatic"],Bond[{19,20},"Aromatic"],Bond[{14,21},"Single"],Bond[{21,22},"Single"],Bond[{9,4},"Aromatic"],Bond[{20,15},"Aromatic"]},{}],MoleculePattern["c1ccccc1"], AtomLabels->"AtomIndex"]

Podemos encontrar los anillos “fenilo” que lleva la molecula:

FindMoleculeSubstructure[Molecule[{"C","C","C","C","C","C","C","C","C","C","C","C","C","C","C","C","C","C","C","C","C","C"},{Bond[{1,2},"Single"],Bond[{2,3},"Single"],Bond[{3,4},"Single"],Bond[{4,5},"Aromatic"],Bond[{5,6},"Aromatic"],Bond[{6,7},"Aromatic"],Bond[{7,8},"Aromatic"],Bond[{8,9},"Aromatic"],Bond[{8,10},"Single"],Bond[{10,11},"Single"],Bond[{11,12},"Single"],Bond[{12,13},"Single"],Bond[{13,14},"Single"],Bond[{14,15},"Single"],Bond[{15,16},"Aromatic"],Bond[{16,17},"Aromatic"],Bond[{17,18},"Aromatic"],Bond[{18,19},"Aromatic"],Bond[{19,20},"Aromatic"],Bond[{14,21},"Single"],Bond[{21,22},"Single"],Bond[{9,4},"Aromatic"],Bond[{20,15},"Aromatic"]},{}],MoleculePattern["c1ccccc1"]]

Representamos una nueva molécula en la que deseamos visualizar los grupos alcohol:

MoleculePlot[Molecule[{"C","C","C","C","C","C","C","C","C","C","C","O","C","C","C","C","C","C","C","O","C","C","C","O","H","H","H","H","H","H","H","H","H","H","H","H","H","H","H","H","H","H","H","H","H","H","H","H","H","H"},{Bond[{1,2},"Single"],Bond[{2,3},"Single"],Bond[{3,4},"Single"],Bond[{4,5},"Single"],Bond[{5,6},"Aromatic"],Bond[{6,7},"Aromatic"],Bond[{7,8},"Aromatic"],Bond[{8,9},"Aromatic"],Bond[{9,10},"Aromatic"],Bond[{10,11},"Aromatic"],Bond[{11,12},"Single"],Bond[{11,13},"Aromatic"],Bond[{13,14},"Aromatic"],Bond[{14,15},"Aromatic"],Bond[{6,16},"Single"],Bond[{16,17},"Single"],Bond[{17,18},"Single"],Bond[{18,19},"Single"],Bond[{19,20},"Single"],Bond[{19,21},"Single"],Bond[{21,22},"Single"],Bond[{22,23},"Single"],Bond[{23,24},"Single"],Bond[{16,2},"Single"],Bond[{19,2},"Single"],Bond[{15,5},"Aromatic"],Bond[{15,9},"Aromatic"],Bond[{1,25},"Single"],Bond[{1,26},"Single"],Bond[{1,27},"Single"],Bond[{3,28},"Single"],Bond[{3,29},"Single"],Bond[{4,30},"Single"],Bond[{4,31},"Single"],Bond[{7,32},"Single"],Bond[{8,33},"Single"],Bond[{10,34},"Single"],Bond[{12,35},"Single"],Bond[{13,36},"Single"],Bond[{14,37},"Single"],Bond[{16,38},"Single"],Bond[{17,39},"Single"],Bond[{17,40},"Single"],Bond[{18,41},"Single"],Bond[{18,42},"Single"],Bond[{20,43},"Single"],Bond[{21,44},"Single"],Bond[{21,45},"Single"],Bond[{22,46},"Single"],Bond[{22,47},"Single"],Bond[{23,48},"Single"],Bond[{23,49},"Single"],Bond[{24,50},"Single"]},{StereochemistryElements->{<|"StereoType"->"Tetrahedral","ChiralCenter"->2,"Direction"->"Counterclockwise"|>,<|"StereoType"->"Tetrahedral","ChiralCenter"->16,"Direction"->"Counterclockwise"|>,<|"StereoType"->"Tetrahedral","ChiralCenter"->19,"Direction"->"Clockwise"|>}}],MoleculePattern[{"C","O","H"},{Bond[{1,2}],Bond[{2,3}]}],AtomLabels->"AtomIndex"]

Podemos pedir que encuentre todos los grupos funcionales del alcohol:

FindMoleculeSubstructure[Molecule[{"C","C","C","C","C","C","C","C","C","C","C","O","C","C","C","C","C","C","C","O","C","C","C","O","H","H","H","H","H","H","H","H","H","H","H","H","H","H","H","H","H","H","H","H","H","H","H","H","H","H"},{Bond[{1,2},"Single"],Bond[{2,3},"Single"],Bond[{3,4},"Single"],Bond[{4,5},"Single"],Bond[{5,6},"Aromatic"],Bond[{6,7},"Aromatic"],Bond[{7,8},"Aromatic"],Bond[{8,9},"Aromatic"],Bond[{9,10},"Aromatic"],Bond[{10,11},"Aromatic"],Bond[{11,12},"Single"],Bond[{11,13},"Aromatic"],Bond[{13,14},"Aromatic"],Bond[{14,15},"Aromatic"],Bond[{6,16},"Single"],Bond[{16,17},"Single"],Bond[{17,18},"Single"],Bond[{18,19},"Single"],Bond[{19,20},"Single"],Bond[{19,21},"Single"],Bond[{21,22},"Single"],Bond[{22,23},"Single"],Bond[{23,24},"Single"],Bond[{16,2},"Single"],Bond[{19,2},"Single"],Bond[{15,5},"Aromatic"],Bond[{15,9},"Aromatic"],Bond[{1,25},"Single"],Bond[{1,26},"Single"],Bond[{1,27},"Single"],Bond[{3,28},"Single"],Bond[{3,29},"Single"],Bond[{4,30},"Single"],Bond[{4,31},"Single"],Bond[{7,32},"Single"],Bond[{8,33},"Single"],Bond[{10,34},"Single"],Bond[{12,35},"Single"],Bond[{13,36},"Single"],Bond[{14,37},"Single"],Bond[{16,38},"Single"],Bond[{17,39},"Single"],Bond[{17,40},"Single"],Bond[{18,41},"Single"],Bond[{18,42},"Single"],Bond[{20,43},"Single"],Bond[{21,44},"Single"],Bond[{21,45},"Single"],Bond[{22,46},"Single"],Bond[{22,47},"Single"],Bond[{23,48},"Single"],Bond[{23,49},"Single"],Bond[{24,50},"Single"]},{StereochemistryElements->{<|"StereoType"->"Tetrahedral","ChiralCenter"->2,"Direction"->"Counterclockwise"|>,<|"StereoType"->"Tetrahedral","ChiralCenter"->16,"Direction"->"Counterclockwise"|>,<|"StereoType"->"Tetrahedral","ChiralCenter"->19,"Direction"->"Clockwise"|>}}],MoleculePattern[{"C","O","H"},{Bond[{1,2}],Bond[{2,3}]}],All]

Podemos usar un símbolo atómico de cadena como patrón de búsqueda:

MoleculePlot[Molecule[{"O","H","H"},{Bond[{1,2},"Single"],Bond[{1,3},"Single"]},{}],"O"]

FindMoleculeSubstructure[Molecule[{"O","H","H"},{Bond[{1,2},"Single"],Bond[{1,3},"Single"]},{}],"O"]

FindMoleculeSubstructure[Molecule[{"O","H","H"},{Bond[{1,2},"Single"],Bond[{1,3},"Single"]},{}],"H",All]

Podemos preguntar por la carga o masa del elemento cuyo símbolo atómico nos interese:

m=Molecule[{Atom["C"],Atom["C","MassNumber"->14],Atom["O"],Atom["O","FormalCharge"->-1],Atom["H"],Atom["H"],Atom["H"]},{Bond[{1,2},"Single"],Bond[{2,3},"Double"],Bond[{2,4},"Single"],Bond[{1,5},"Single"],Bond[{1,6},"Single"],Bond[{1,7},"Single"]}];

MoleculePlot[m,AtomLabels->"AtomIndex"]

FindMoleculeSubstructure[m,Atom["O","FormalCharge"->-1]]

FindMoleculeSubstructure[m,Atom["C","MassNumber"->14]]

Definimos una molécula:

n=Molecule[Entity["Chemical","Methyl4Nitrobutyrate"]];

MoleculePlot[n,AtomLabels->"AtomIndex"]

En tres dimensiones:

MoleculePlot3D[n, AtomLabels->"AtomIndex"]

FindMoleculeSubstructure[n,Atom["FormalCharge"->Except[0]],All]

Podemos encontrar los átomos cargados positivamente:

FindMoleculeSubstructure[n,Atom["FormalCharge"->GreaterThan[0]],All]

Los átomos cargados negativamente:

FindMoleculeSubstructure[n,Atom["FormalCharge"->LessEqualThan[-1]],All]

Utilice Bond para definir un patrón para cualquier doble enlace:

o=Molecule["2-[[(1E,4E)-1,5-bis(5-nitrofuran-2-yl)penta-1,4-dien-3-ylidene]amino]guanidine"];

MoleculePlot3D[o, AtomLabels->"AtomIndex"]

FindMoleculeSubstructure[o,Bond[_,"Double"],All]

Solo dobles enlaces con un átomo de nitrógeno:

FindMoleculeSubstructure[o,Bond[{"N",_},"Double"],All]

Encontrar dobles enlaces con un átomo cargado:

FindMoleculeSubstructure[o,Bond[{Atom["FormalCharge"->Except[0]],_},"Double"],All]

Por defecto los estereoisómeros no coinciden:

FindMoleculeSubstructure[Molecule["l-alanine"],MoleculePattern["C[C@@H](N)C(=O)O"]]

Use IgnoreStereochemistry -> True, para coincidencia positiva:

FindMoleculeSubstructure[Molecule["l-alanine"],MoleculePattern["C[C@@H](N)C(=O)O"],IgnoreStereochemistry->True]

De forma predeterminada, la coincidencia de subestructuras se realiza utilizando el gráfico de supresión de hidrógenos de una molécula, a menos que el patrón contenga átomos de hidrógeno específicos:

FindMoleculeSubstructure[Molecule[{"C","C","C","Cl"},{Bond[{1,2},"Single"],Bond[{2,3},"Single"],Bond[{2,4},"Single"]},{}],Bond[{"C","H"},"Single"],All]

Se perderán algunas coincidencias con el hidrógeno debido a patrones más complicados. En el siguiente ejemplo, el patrón es para un átomo de carbono unido a un átomo cloro, pero solo se encuentra el enlace C - Cl:

FindMoleculeSubstructure[Molecule[{"C","C","C","Cl"},{Bond[{1,2},"Single"],Bond[{2,3},"Single"],Bond[{2,4},"Single"]},{}],Bond[{"C",Atom["AtomicNumber"->(1|17)]},"Single"],All]

Utilice la opción IncludeHydrogens -> True, para asegurarse de que los hidrógenos se tratan de forma explícita a los efectos de la coincidencia de patrones:

FindMoleculeSubstructure[Molecule[{"C","C","C","Cl"},{Bond[{1,2},"Single"],Bond[{2,3},"Single"],Bond[{2,4},"Single"]},{}],Bond[{"C",Atom["AtomicNumber"->(1|17)]},"Single"],All,IncludeHydrogens->True]

De forma predeterminada, las coincidencias de subestructuras se eliminan para eliminar múltiples coincidencias con el mismo conjunto de átomos:

FindMoleculeSubstructure[Molecule["hexane"],MoleculePattern["CCCCC"],All]

Utilice la opción Overlaps -> True, para encontrar todas las coincidencias posibles entre el patrón y la molécula:

FindMoleculeSubstructure[Molecule["hexane"],MoleculePattern["CCCCC"],All,Overlaps->True]

Escriba una función para localizar el nitrógeno y el carbono del carbonilo en el extremo de un proteína:

nterminus[mol_]:=Module[{patt,atomsOfInterest={1,3}},patt=MoleculePattern[{Atom["N","HydrogenCount"->2],Atom["C","OrbitalHybridization"->"SP3"],Atom["C"],Atom["O"],Atom[Alternatives["O","N"]]},{Bond[{1,2},"Single"],Bond[{2,3},"Single"],Bond[{3,4},"Double"],Bond[{3,5},"Single"]}];
DeleteMissing[AssociationThread[{"amine","carbonyl"},Lookup[First[FindMoleculeSubstructure[mol,patt],{}],atomsOfInterest]]]]

Aplicar la función a un péptido:

peptide=BioSequence["Peptide","VGSA"];
nterminus[peptide]

Si lo representamos:

peptide=BioSequence["Peptide","VGSA"];
nterminus[peptide];
MoleculePlot[peptide,%]