Stereoisomers around double bonds

    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.

    images/download/attachments/1806296/stereo_around_double_bond_1.png

    The possible values:

    • 0: if no stereo information given or the double bond doesn't have enough ligands to be stereochemically active

    • CIS: if the ligands are on the same side of the double bond

    • TRANS: if the ligands are on the opposite side of the double bond

    • CIS|TRANS: if the ligands can be both CIS and TRANS arrangement

      Molecule images/download/attachments/1806296/stereo_around_double_bond_2.png images/download/attachments/1806296/stereo_around_double_bond_3.png images/download/attachments/1806296/stereo_around_double_bond_4.png images/download/attachments/1806296/stereo_around_double_bond_5.png images/download/attachments/1806296/stereo_around_double_bond_6.png
      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:

    • CTUNSPEC : the ligands are in the specified (CIS or TRANS) configuration or unspecified

      images/download/attachments/1806296/stereo_around_double_bond_7.png images/download/attachments/1806296/stereo_around_double_bond_8.png
      CIS or unspecified double bond TRANS or unspecified double bond

    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

    images/download/attachments/1806296/stereo_around_double_bond_9.png

    Working example to get double bond stereo information of double bonds

    
    /* 
     * Copyright (c) 1998-2022 Chemaxon. All Rights Reserved.
     */
    
    import java.io.IOException; 
    import chemaxon.struc.Molecule; 
    import chemaxon.struc.MolBond; 
    import chemaxon.struc.CNode; 
    import chemaxon.struc.StereoConstants; 
    import chemaxon.formats.MolImporter; 
    
    /** 
     * Example to get double bond stereo information of double bonds. 
     * Usage: 
     * java CisTransExample filename 
     * 
     * @version 5.1 04/24/2008 
     * @since Marvin 5.1 
     * @author Andras Volford 
     */ 
    
    public class CisTransExample { 
         /** 
          * Main method. 
          * @param args   command line arguments (filename) 
          */ 
    
        public static void main(String[] args) throws IOException {
             if(args.length < 1) {
                 System.err.println("Usage: java CisTransTest filename");
                 System.exit(0); 
            } 
    
            // create importer for the file argument 
            String s = (String)args[0]; 
            MolImporter molimp = new MolImporter(s); 
    
            // store the imported molecules in m 
            Molecule m = new Molecule(); 
    
            // counter for molecules 
            int n = 0; 
    
            while(molimp.read(m)){  // read molecules from the file 
                ++n;                // increment counter 
                System.err.println("mol "+n);
    
                // calculate double bond stereo for every double bond 
                // which have at least one ligand on each node of the double bond 
                for (int i=0; i<m.getBondCount(); i++){
                     MolBond b = m.getBond(i); 
                    if (b.getType() == 2){
    
                        // get the default frame 
                        CNode c1 = b.getCTAtom1(); 
                        CNode c2 = b.getNode1(); 
                        CNode c3 = b.getNode2(); 
                        CNode c4 = b.getCTAtom4(); 
    
                        if (c1 != null && c4 != null){
    
                            // cis/trans stereo for the default frame 
                            int ct = m.getStereo2(b, c1, c4, true);
    
                            System.out.println(m.indexOf(c1)+"-"+
                            m.indexOf(c2)+"="+m.indexOf(c3)+"-"+
                            m.indexOf(c4)+"  "+ 
                                ((ct == MolBond.CIS) ? "CIS" :
                                 (ct == MolBond.TRANS) ? "TRANS" :
                                 (ct == (MolBond.TRANS|MolBond.CIS)) ?  
                                       "CIS|TRANS" : (""+ct) )+
                                 (((ct & StereoConstants.CTUNSPEC) != 0) ?  
                                       "CTUNSPEC" : " ") ); 
    
                            // E/Z stereo 
                            ct = m.getStereo2(b); 
                            System.out.println("E/Z "+
                                 m.indexOf(c2)+"="+m.indexOf(c3)+"   "+
                                 ((ct == MolBond.CIS) ? "Z" :
                                  (ct == MolBond.TRANS) ? "E" : ""+ct )+
                                 (((ct & StereoConstants.CTUNSPEC) != 0) ?    
                                       "CTUNSPEC" : "") ); 
                        } 
                    } 
                } 
            } 
        } 
    }