-
-
Notifications
You must be signed in to change notification settings - Fork 40
FROWNS
The information on this page will become irrelevant in an upcoming update due to a rewrite of the chemistry API!
The Fairly Restrictive Overcumbersome Way to Notate Species, adapted from SMILES, is my way of representing Molecules in String format. It is used primarily to:
- Compare structures, e.g. if a species with the structure
destroy:linear:CC(=O)C
is generated from a reaction, it is useful for the Mod to be able to identify this as Acetone. - Store structures as NBT in human-readable form
I will attempt to explain, but the best way to understand is probably by checking the extensive list of examples I made for Destroy.
All FROWNS strings are of the format <namespace>:<topology>:<group(s)>
.
<namespace>
is the Mod ID of the mod which added the topology, not the Molecule itself. For Molecules generated by a Generic Reaction, <namespace>
is novel
.
<topology>
is explained here.
<group(s)>
is explained here.
FROWNS is very similar to SMILES with regards to acylcic compounds - I'm not going to retype what you can perfectly easily find on the Wikipedia page, so go and check that for your starter course on SMILES. Instead I will simply highlight the differences between SMILES and FROWNS.
FROWNS strings of linear and branched Molecules must be preceded with the identifier destroy:linear
. Examples of simple Molecules:
- Methane:
destroy:linear:C
- Ethane:
destroy:linear:CC
- Ethanol:
destroy:linear:CCO
- Propan-2-ol:
destroy:linear:CC(O)C
- 3-(dimethylethyl)-pentane:
destroy:linear:CCC(C(C)(C)C)CC
Double (2c4e) bonds are notated as =
, triple (2c6e) bonds as #
, and 'aromatic bonds' (a term I invented for interactions best represented in Lewis structures as one-and-a-half single bonds, i.e. 2c3e bonds) as ~
. For example:
- Buta-1,3-diene:
destroy:linear:C=CC=C
- Ethanenitrile:
destroy:linear:CC#N
- Acetate anion:
destroy:linear:CC(~O)~O
Importantly, if an Atom is double (or otherwise non-single) bonded to the next Atom, and has a side group, the double bond notation must come first. For example chloroethene is destroy:linear:C=(Cl)C
and not destroy:linear:C(Cl)=C
.
To signify formal charges on Atoms, use ^
followed by the formal charge. In these cases, it is always best to specify the exact number of hydrogens, as the system that strips and re-adds hydrogens may produce unexpected results otherwise. For example:
- Protonated acetone:
destroy:linear:CC(=O^1H)C
- Ethoxide:
destroy:linear:CCO^-1
- Formate:
destroy:linear:C~(~O^-0.5)O^-0.5
To save myself a nightmare when rendering cyclic Molecules in 3D, all cyclic Molecules must be represented as derivatives of the simplest 'topologically' equivalent cycle (this is where the 'Fairly Restrictive' in FROWNS comes from). Each cycle has hard-coded positions, and the FROWNS string looks like this: <namespace>:<topology>:<substituent1>,<substituent2>,<substituent3>,...
.
For example:
- Benzene:
destroy:benzene:,,,,,
- Methylbenzene:
destroy:benzene:C,,,,,
- 1,3-dimethylbenzene:
destroy:benzene:C,,C,,,
Each substituent can be a Chain Molecule, for example:
- Aspirin:
destroy:benzene:C(=O)OH,OC(=O)C,,,,
For Topologies with no side chains, some filler text must be added to avoid deserialization errors. This text is ignored. For example:
- Sulfur:
destroy:octasulfur:hello
It's scuffed but oh well.
FROWNS
Chemistry Definitions
Custom Groups
Custom Generic Reactions
It'll Get Beta
0.0.1
0.0.2
0.0.3
0.0.4
0.0.5
0.0.6
0.0.7
0.0.8
Beta Still
0.1.0-snapshot-1
0.1.0-snapshot-2
0.1.0-snapshot-3
0.1.0-snapshot-4
0.1.0-snapshot-5
0.1.0-snapshot-6
0.1.0-snapshot-7
0.1.0-snapshot-8
0.1.0-snapshot-9
0.1.0-snapshot-10