Stereoisomers around double bond

Cis/Trans stereoisomers

The cis/trans information for ligands of the double bond can be calculated by scpecifying a ligand (a1) of the double bond connecting to one end (a2) of the double bond and giving another ligand (a4) of the double bond connecting to the other end (a3) of the double bond.

The possible values:

Molecule

 

_img36

 

_img37

 

_img38

 

_img39

 

_img40

cis/trans value

0

CIS

TRANS

CIS|TRANS

CIS|TRANS

An additional flag is used in conjunction with CIS or TRANS information in case of query molecules:

Change Cis/Trans stereoisomers in the GUI

Depending on the molecule's dimension the cis/trans information corresponding to the ligands of the double bond is stored in the bond or calculated from the coordinates.

It is optional to check atom equivalences using graph invariants for the ligands of the double bond during stereo calculation. If graph invariants are equal on one endpoint of the double bond then the two ligands connecting to this node are equivalent and so the double bond does not exhibit cis/trans isomerism.

Double bond stereo information of the atoms 3-1=2-5

 

if graph invariants not checked on the ligands the result is CIS

if graph invariants checked on the ligands

the result is 0

To change cis/trans information of a double bond in the GUI, move the double bond ligands to the expected position.

To set cis/trans isomers, set the double bond type to Double Cis or Trans or set one ligand of the double bond to Single Up or Down.

bond1_2

bond3_4

Cis/Trans stereoisomers in 0 Dimension

If the atomic coordinates are all zero then the molecule's dimension is zero. The double bond stereo information is stored in the bond flag referring to the first ligand (which is not the other end of the double bond) of each endpoint for the double bond (default reference frame).

Setting cis/trans information in 0D (API)

The cis/trans information can be set directly using the setFlags(int) function of the MolBond class. In this case the set value refers to the default reference frame arrangement a1-a2=a3-a4 where a2 and a3 is the double bond first and second node and a1 and a4 is the first ligand of a2 and a3 respectively.

Code example for getting the default reference frame:

  MolBond b = molecule.getBond(2)

  // default reference frame 
  // for which the bond stereo will be set 
  MolAtom a1 = b.getCTAtom1();
  MolAtom a2 = b.getAtom1();
  MolAtom a3 = b.getAtom2();
  MolAtom a4 = b.getCTAtom4();

_img48

molecule with atom indexes

Code example to set flags using the default reference frame:

MolBond b = molecule.getBond(2); // set CIS value to the reference frame b.setFlags(StereoConstants.CIS, StereoConstants.CTUMASK);

Another possibility to set cis/trans information is via the setStereo2Flags(MolAtom a1, MolAtom a4, int s) function of the MolBond class, where the reference frame is defined by the a1 and a4 atoms.

Code example using given reference frame:

 
MolBond b = molecule.getBond(2); 

 // reference frame
MolAtom a1 = molecule.getAtom(0); 
MolAtom a4 = molecule.getAtom(4); 

// set CIS value to the reference frame
b.setStereo2Flags(a1, a4, StereoConstants.TRANS);

_img49

Result

Getting cis/trans information in 0D (API)

The cis/trans information can be got directly by the getFlags() function of the MolBond class. In this case the value returned refers to the default reference frame.

Code example:

     
         MolBond b = molecule.getBond(2);
         int s = b.getFlags() &  StereoConstants.CTUMASK; 
       

_img48

s = TRANS

With a given reference frame there are four options to get the stereo information:

These all functions of the MoleculeGraph class. The difference between them is how the reference frame is given (by the node or by the node index) and the last method can check atom equivalences too.

Code example:

        
MolBond b = molecule.getBond(2); // reference frame MolAtom a1 = molecule.getAtom(0); MolAtom a4 = molecule.getAtom(4); int s = molecule.getStereo2(b, a1, a4);

 

s = CIS

Code example with atom equivalence check:

     
MolBond b = molecule.getBond(2); // reference frame MolAtom a1 = molecule.getAtom(0); MolAtom a4 = molecule.getAtom(4); int s = molecule.getStereo2(b, a1, a4, true);

 

s = 0

Cis/Trans stereoisomers in 2 or 3 Dimensions

If the atomic coordinates are specified, then the molecule has nonzero spatial dimension. In this case the double bond stereo information is calculated from the double bond and the reference frame atom coordinates. There are two exceptions when coordinates are not used and CIS|TRANS value is returned:

1. CIS|TRANS flag is set for the double bond which is depicted as crossed double bond.

_img51

2. One ligand of the double bond has wiggly (UP|DOWN) bond type.

_img52

Setting cis/trans information in 2 or 3 Dimensions (API)

The only way to change the double stereo information from CIS to TRANS in 2 or 3D is to change the atomic coordinates of the corresponding ligands. This can be achieved through setXYZ(double x, double y, double z) or setXY(double x, double y) functions of MolAtom class. Be aware that modifying the coordinates directly may cause overlapping atoms and bonds. It is more convenient to convert the molecule to 0D, change stereo information in the 0D molecule and clean it to 2D or 3D.

Code example changing double bond type through 0 dimension:

molecule.setDim(0); 

// reference frame 
MolAtom a1 = molecule.getAtom(0); 
MolAtom a4 = molecule.getAtom(4);

// set CIS value to the reference frame 
MolBond b = molecule.getBond(1); 
b.setStereo2Flags(a1, a4, StereoConstants.CIS); 

// clean to 2D 
molecule.clean(2, null); 

To change the actual value to CIS|TRANS, there are two possibilities: either set CIS|TRANS flag for the double bond or set one bond between the double bond and a ligand to wiggly.

Code example: set the double bond to CIS|TRANS via changing the double bond flag:

          int CISTRANS =  StereoConstants.CIS | StereoConstants.TRANS;
          // get the double bond
          MolBond b = molecule.getBond(2);
          // change flag
          b.setFlags(CISTRANS, StereoConstants.CTUMASK);
       

Code example: set double bond to CIS|TRANS using wiggly bond:

         // get the double bond 
         MolBond b = molecule.getBond(2); 

         // get a single bond connected to one endpoint 
         // of the double bond
         MolAtom a1 = b.getAtom1(); 
         MolBond s = (a1.getBond(0)  == b) ? a1.getBond(1) : a1.getBond(0);
         // change single bond to WAVY
         s.setFlags(MolBond.WAVY, STEREO1_MASK);
       

Getting cis/trans information in 2 or 3 Dimensions (API)

There are two low level functions in MolBond class to calculate double bond stereo information from the coordinates in 2D or 3D. None of them checks if the bond in question is double bond or not.

As in case of the 0D molecules there are four methods to get the stereo information with reference frame given:

1. getStereo2(MolAtom a1, int i2, int i3, MolAtom a4)
2. getStereo2(int i1, int i2, int i3, int i4)
3. getStereo2(MolBond b, MolAtom a1, MolAtom a4)
4. getStereo2(MolBond b, MolAtom a1, MolAtom a4, boolean grcheck)

All of them are functions of the MoleculeGraph class. The difference between them is how the reference frame is specified (by the node or by the node index) and the last method can check atom equivalences too.

It is important to note that CIS or TRANS result can be obtained if and only if there is no contradictory information in the coordinates. This means that two ligands at one end of the double bond on the same side are not allowed. Moreover, if a ligand is collinear with the double bond CIS|TRANS value is returned:

_img39

Stereo value:
0 - if graph invariances are checked on the ligands
CIS | TRANS - if graph invariances are not checked on the ligands

Stereo value: CIS | TRANS

Code example without atom equivalence check:

            MolBond b = molecule.getBond(2); 
            // reference frame
            MolAtom a1 = molecule.getAtom(0); 
            MolAtom a4 = molecule.getAtom(4); 
            int s = molecule.getStereo2(b, a1, a4);  
      

 

s = CIS

Code example with atom equivalence check:

      MolBond b = molecule.getBond(2);
      // reference frame
      MolAtom a1 = molecule.getAtom(0); 
      MolAtom a4 = molecule.getAtom(4);
      int s = molecule.getStereo2(b, a1, a4, true);
     

 

s = 0

E/Z stereoisomers

Each substituent on a double bond is assigned a priority based on the Cahn-Ingold-Prelog priority rules. Ligands with highest priorities define the reference frame. If the two groups of higher priority are on opposite sides of the double bond (trans arrangement), then the E configuration is assigned to the bond. If the two groups of higher priority are on the same side of the double bond (cis arrangement), than the Z configuration is assigned to it.

Possible values:

Setting E/Z information

The stereoisomer type can not be modified directly. However, it is possible to change it through changing cis/trans information of the double bond using the methods mentioned in Setting cis/trans information in 0 Dimension and Setting cis/trans information in 2 or 3 Dimension . If the opposite value is needed then the one actually set, cis/trans information should be changed to the opposite value also. The removal of cis/trans information also removes the E/Z information.

Getting E/Z information

The E/Z stereoinformation can be calculated by the getStereo2(MolBond b) function of the MoleculeGraph class.

Code example:

       MolBond b = molecule.getBond(2); 
       int s = molecule.getStereo2(b); 
      

s = CIS

(which equals with the Z stereoisomer)

 

 

 

 

CIPStereoChemistry
Previous chapter

Table of contents
 

Parity
Next chapter