test_class.declarator: smipar = new SmilesParser(SilentChemObjectBuilder.getInstance())
test_class.modifier: private static
test_class.original_string: private static SmilesParser smipar = new SmilesParser(SilentChemObjectBuilder.getInstance());
test_class.type: SmilesParser
test_class.var_name: smipar
test_class.file: app/depict/src/test/java/org/openscience/cdk/depict/AbbreviationsTest.java
test_class.identifier: AbbreviationsTest
test_case.body: @Test public void HOOH() throws Exception {
          Abbreviations factory = new Abbreviations();
          IAtomContainer mol = smi("OO");
          List<Sgroup> sgroups = factory.generate(mol);
          assertThat(sgroups.size(), is(1));
          assertThat(sgroups.get(0).getSubscript(), is("HOOH"));
      }
test_case.class_method_signature: AbbreviationsTest.HOOH()
test_case.full_signature: @Test public void HOOH()
test_case.identifier: HOOH
test_case.invocations: smi generate assertThat size is assertThat getSubscript get is
test_case.modifiers: @Test public
test_case.parameters: ()
test_case.return: void
test_case.signature: void HOOH()
focal_class.declarator: MAX_FRAG = 50
focal_class.modifier: private static final
focal_class.original_string: private static final int MAX_FRAG = 50;
focal_class.type: int
focal_class.var_name: MAX_FRAG
focal_class.declarator: INTERPUNCT = "·";
focal_class.modifier: private static final
focal_class.original_string: private static final String INTERPUNCT = "·";
focal_class.type: String
focal_class.var_name: INTERPUNCT
focal_class.declarator: connectedAbbreviations    = new LinkedHashMap<>()
focal_class.modifier: private final
focal_class.original_string: private final Map<String, String> connectedAbbreviations    = new LinkedHashMap<>();
focal_class.type: Map<String, String>
focal_class.var_name: connectedAbbreviations
focal_class.declarator: disconnectedAbbreviations = new LinkedHashMap<>()
focal_class.modifier: private final
focal_class.original_string: private final Map<String, String> disconnectedAbbreviations = new LinkedHashMap<>();
focal_class.type: Map<String, String>
focal_class.var_name: disconnectedAbbreviations
focal_class.declarator: labels                    = new LinkedHashSet<>()
focal_class.modifier: private final
focal_class.original_string: private final Set<String>         labels                    = new LinkedHashSet<>();
focal_class.type: Set<String>
focal_class.var_name: labels
focal_class.declarator: disabled                  = new HashSet<>()
focal_class.modifier: private final
focal_class.original_string: private final Set<String>         disabled                  = new HashSet<>();
focal_class.type: Set<String>
focal_class.var_name: disabled
focal_class.declarator: usmigen                   = SmilesGenerator.unique()
focal_class.modifier: private final
focal_class.original_string: private final SmilesGenerator     usmigen                   = SmilesGenerator.unique();
focal_class.type: SmilesGenerator
focal_class.var_name: usmigen
focal_class.declarator: smipar = new SmilesParser(SilentChemObjectBuilder.getInstance())
focal_class.modifier: private final
focal_class.original_string: private final SmilesParser smipar = new SmilesParser(SilentChemObjectBuilder.getInstance());
focal_class.type: SmilesParser
focal_class.var_name: smipar
focal_class.declarator: contractOnHetero = true
focal_class.modifier: private
focal_class.original_string: private boolean contractOnHetero = true;
focal_class.type: boolean
focal_class.var_name: contractOnHetero
focal_class.declarator: contractSingleFragments = false
focal_class.modifier: private
focal_class.original_string: private boolean contractSingleFragments = false;
focal_class.type: boolean
focal_class.var_name: contractSingleFragments
focal_class.declarator: CUT_BOND = "cutbond"
focal_class.modifier: private static final
focal_class.original_string: private static final String CUT_BOND = "cutbond";
focal_class.type: String
focal_class.var_name: CUT_BOND
focal_class.file: app/depict/src/main/java/org/openscience/cdk/depict/Abbreviations.java
focal_class.identifier: Abbreviations
focal_class.interfaces: implements Iterable<String>
focal_class.class_method_signature: Abbreviations.Abbreviations()
focal_class.full_signature: public  Abbreviations()
focal_class.identifier: Abbreviations
focal_class.modifiers: public
focal_class.parameters: ()
focal_class.signature:  Abbreviations()
focal_class.class_method_signature: Abbreviations.iterator()
focal_class.full_signature: @Override public Iterator<String> iterator()
focal_class.identifier: iterator
focal_class.modifiers: @Override public
focal_class.parameters: ()
focal_class.return: Iterator<String>
focal_class.signature: Iterator<String> iterator()
focal_class.class_method_signature: Abbreviations.isEnabled(final String label)
focal_class.full_signature: public boolean isEnabled(final String label)
focal_class.identifier: isEnabled
focal_class.modifiers: public
focal_class.parameters: (final String label)
focal_class.return: boolean
focal_class.signature: boolean isEnabled(final String label)
focal_class.class_method_signature: Abbreviations.setEnabled(String label, boolean enabled)
focal_class.full_signature: public boolean setEnabled(String label, boolean enabled)
focal_class.identifier: setEnabled
focal_class.modifiers: public
focal_class.parameters: (String label, boolean enabled)
focal_class.return: boolean
focal_class.signature: boolean setEnabled(String label, boolean enabled)
focal_class.class_method_signature: Abbreviations.setContractOnHetero(boolean val)
focal_class.full_signature: public void setContractOnHetero(boolean val)
focal_class.identifier: setContractOnHetero
focal_class.modifiers: public
focal_class.parameters: (boolean val)
focal_class.return: void
focal_class.signature: void setContractOnHetero(boolean val)
focal_class.class_method_signature: Abbreviations.setContractToSingleLabel(boolean val)
focal_class.full_signature: public void setContractToSingleLabel(boolean val)
focal_class.identifier: setContractToSingleLabel
focal_class.modifiers: public
focal_class.parameters: (boolean val)
focal_class.return: void
focal_class.signature: void setContractToSingleLabel(boolean val)
focal_class.class_method_signature: Abbreviations.findCutBonds(IAtomContainer mol, EdgeToBondMap bmap, int[][] adjlist)
focal_class.full_signature: private static Set<IBond> findCutBonds(IAtomContainer mol, EdgeToBondMap bmap, int[][] adjlist)
focal_class.identifier: findCutBonds
focal_class.modifiers: private static
focal_class.parameters: (IAtomContainer mol, EdgeToBondMap bmap, int[][] adjlist)
focal_class.return: Set<IBond>
focal_class.signature: Set<IBond> findCutBonds(IAtomContainer mol, EdgeToBondMap bmap, int[][] adjlist)
focal_class.class_method_signature: Abbreviations.makeCut(IBond cut, IAtomContainer mol, Map<IAtom, Integer> idx,
                                                  int[][] adjlist)
focal_class.full_signature: private static List<IAtomContainer> makeCut(IBond cut, IAtomContainer mol, Map<IAtom, Integer> idx,
                                                  int[][] adjlist)
focal_class.identifier: makeCut
focal_class.modifiers: private static
focal_class.parameters: (IBond cut, IAtomContainer mol, Map<IAtom, Integer> idx,
                                                  int[][] adjlist)
focal_class.return: List<IAtomContainer>
focal_class.signature: List<IAtomContainer> makeCut(IBond cut, IAtomContainer mol, Map<IAtom, Integer> idx,
                                                  int[][] adjlist)
focal_class.class_method_signature: Abbreviations.generateFragments(IAtomContainer mol)
focal_class.full_signature: private static List<IAtomContainer> generateFragments(IAtomContainer mol)
focal_class.identifier: generateFragments
focal_class.modifiers: private static
focal_class.parameters: (IAtomContainer mol)
focal_class.return: List<IAtomContainer>
focal_class.signature: List<IAtomContainer> generateFragments(IAtomContainer mol)
focal_class.class_method_signature: Abbreviations.generate(final IAtomContainer mol)
focal_class.full_signature: public List<Sgroup> generate(final IAtomContainer mol)
focal_class.identifier: generate
focal_class.modifiers: public
focal_class.parameters: (final IAtomContainer mol)
focal_class.return: List<Sgroup>
focal_class.signature: List<Sgroup> generate(final IAtomContainer mol)
focal_class.class_method_signature: Abbreviations.getAbbr(IAtomContainer part)
focal_class.full_signature: private Sgroup getAbbr(IAtomContainer part)
focal_class.identifier: getAbbr
focal_class.modifiers: private
focal_class.parameters: (IAtomContainer part)
focal_class.return: Sgroup
focal_class.signature: Sgroup getAbbr(IAtomContainer part)
focal_class.class_method_signature: Abbreviations.countUpper(String str)
focal_class.full_signature: private int countUpper(String str)
focal_class.identifier: countUpper
focal_class.modifiers: private
focal_class.parameters: (String str)
focal_class.return: int
focal_class.signature: int countUpper(String str)
focal_class.class_method_signature: Abbreviations.containsChargeChar(String str)
focal_class.full_signature: private boolean containsChargeChar(String str)
focal_class.identifier: containsChargeChar
focal_class.modifiers: private
focal_class.parameters: (String str)
focal_class.return: boolean
focal_class.signature: boolean containsChargeChar(String str)
focal_class.class_method_signature: Abbreviations.digitAtEnd(String str)
focal_class.full_signature: private boolean digitAtEnd(String str)
focal_class.identifier: digitAtEnd
focal_class.modifiers: private
focal_class.parameters: (String str)
focal_class.return: boolean
focal_class.signature: boolean digitAtEnd(String str)
focal_class.class_method_signature: Abbreviations.newSymbol(int atomnum, int hcount, boolean prefix)
focal_class.full_signature: private String newSymbol(int atomnum, int hcount, boolean prefix)
focal_class.identifier: newSymbol
focal_class.modifiers: private
focal_class.parameters: (int atomnum, int hcount, boolean prefix)
focal_class.return: String
focal_class.signature: String newSymbol(int atomnum, int hcount, boolean prefix)
focal_class.class_method_signature: Abbreviations.appendGroup(StringBuilder sb, String group, int coef, boolean useParen)
focal_class.full_signature: private void appendGroup(StringBuilder sb, String group, int coef, boolean useParen)
focal_class.identifier: appendGroup
focal_class.modifiers: private
focal_class.parameters: (StringBuilder sb, String group, int coef, boolean useParen)
focal_class.return: void
focal_class.signature: void appendGroup(StringBuilder sb, String group, int coef, boolean useParen)
focal_class.class_method_signature: Abbreviations.apply(final IAtomContainer mol)
focal_class.full_signature: public int apply(final IAtomContainer mol)
focal_class.identifier: apply
focal_class.modifiers: public
focal_class.parameters: (final IAtomContainer mol)
focal_class.return: int
focal_class.signature: int apply(final IAtomContainer mol)
focal_class.class_method_signature: Abbreviations.matchExact(final IAtomContainer mol, final IAtom atom)
focal_class.full_signature: private IQueryAtom matchExact(final IAtomContainer mol, final IAtom atom)
focal_class.identifier: matchExact
focal_class.modifiers: private
focal_class.parameters: (final IAtomContainer mol, final IAtom atom)
focal_class.return: IQueryAtom
focal_class.signature: IQueryAtom matchExact(final IAtomContainer mol, final IAtom atom)
focal_class.class_method_signature: Abbreviations.matchExact(IAtomContainer mol)
focal_class.full_signature: private IQueryAtomContainer matchExact(IAtomContainer mol)
focal_class.identifier: matchExact
focal_class.modifiers: private
focal_class.parameters: (IAtomContainer mol)
focal_class.return: IQueryAtomContainer
focal_class.signature: IQueryAtomContainer matchExact(IAtomContainer mol)
focal_class.class_method_signature: Abbreviations.addDisconnectedAbbreviation(IAtomContainer mol, String label)
focal_class.full_signature: private boolean addDisconnectedAbbreviation(IAtomContainer mol, String label)
focal_class.identifier: addDisconnectedAbbreviation
focal_class.modifiers: private
focal_class.parameters: (IAtomContainer mol, String label)
focal_class.return: boolean
focal_class.signature: boolean addDisconnectedAbbreviation(IAtomContainer mol, String label)
focal_class.class_method_signature: Abbreviations.addConnectedAbbreviation(IAtomContainer mol, String label)
focal_class.full_signature: private boolean addConnectedAbbreviation(IAtomContainer mol, String label)
focal_class.identifier: addConnectedAbbreviation
focal_class.modifiers: private
focal_class.parameters: (IAtomContainer mol, String label)
focal_class.return: boolean
focal_class.signature: boolean addConnectedAbbreviation(IAtomContainer mol, String label)
focal_class.class_method_signature: Abbreviations.add(String line)
focal_class.full_signature: public boolean add(String line)
focal_class.identifier: add
focal_class.modifiers: public
focal_class.parameters: (String line)
focal_class.return: boolean
focal_class.signature: boolean add(String line)
focal_class.class_method_signature: Abbreviations.add(IAtomContainer mol, String label)
focal_class.full_signature: public boolean add(IAtomContainer mol, String label)
focal_class.identifier: add
focal_class.modifiers: public
focal_class.parameters: (IAtomContainer mol, String label)
focal_class.return: boolean
focal_class.signature: boolean add(IAtomContainer mol, String label)
focal_class.class_method_signature: Abbreviations.getSmilesSuffix(String line)
focal_class.full_signature: private static String getSmilesSuffix(String line)
focal_class.identifier: getSmilesSuffix
focal_class.modifiers: private static
focal_class.parameters: (String line)
focal_class.return: String
focal_class.signature: String getSmilesSuffix(String line)
focal_class.class_method_signature: Abbreviations.getBasicElementSymbol(IAtom atom)
focal_class.full_signature: private static String getBasicElementSymbol(IAtom atom)
focal_class.identifier: getBasicElementSymbol
focal_class.modifiers: private static
focal_class.parameters: (IAtom atom)
focal_class.return: String
focal_class.signature: String getBasicElementSymbol(IAtom atom)
focal_class.class_method_signature: Abbreviations.loadSmiles(final InputStream in)
focal_class.full_signature: private int loadSmiles(final InputStream in)
focal_class.identifier: loadSmiles
focal_class.modifiers: private
focal_class.parameters: (final InputStream in)
focal_class.return: int
focal_class.signature: int loadSmiles(final InputStream in)
focal_class.class_method_signature: Abbreviations.loadFromFile(final String path)
focal_class.full_signature: public int loadFromFile(final String path)
focal_class.identifier: loadFromFile
focal_class.modifiers: public
focal_class.parameters: (final String path)
focal_class.return: int
focal_class.signature: int loadFromFile(final String path)
focal_method.body: public List<Sgroup> generate(final IAtomContainer mol) {
  
          // mark which atoms have already been abbreviated or are
          // part of an existing Sgroup
          Set<IAtom> usedAtoms = new HashSet<>();
          List<Sgroup> sgroups = mol.getProperty(CDKConstants.CTAB_SGROUPS);
          if (sgroups != null) {
              for (Sgroup sgroup : sgroups)
                  usedAtoms.addAll(sgroup.getAtoms());
          }
  
          final List<Sgroup> newSgroups = new ArrayList<>();
  
          // disconnected abbreviations, salts, common reagents, large compounds
          if (usedAtoms.isEmpty()) {
              try {
                  IAtomContainer copy = AtomContainerManipulator.copyAndSuppressedHydrogens(mol);
                  String cansmi = usmigen.create(copy);
                  String label = disconnectedAbbreviations.get(cansmi);
  
                  if (label != null && !disabled.contains(label) && contractSingleFragments) {
                      Sgroup sgroup = new Sgroup();
                      sgroup.setType(SgroupType.CtabAbbreviation);
                      sgroup.setSubscript(label);
                      for (IAtom atom : mol.atoms())
                          sgroup.addAtom(atom);
                      return Collections.singletonList(sgroup);
                  } else if (cansmi.contains(".")) {
                      IAtomContainerSet parts = ConnectivityChecker.partitionIntoMolecules(mol);
  
  
                      // leave one out
                      Sgroup best = null;
                      for (int i = 0; i < parts.getAtomContainerCount(); i++) {
                          IAtomContainer a = parts.getAtomContainer(i);
                          IAtomContainer b = a.getBuilder().newAtomContainer();
                          for (int j = 0; j < parts.getAtomContainerCount(); j++)
                              if (j != i)
                                  b.add(parts.getAtomContainer(j));
                          Sgroup sgroup1 = getAbbr(a);
                          Sgroup sgroup2 = getAbbr(b);
                          if (sgroup1 != null && sgroup2 != null && contractSingleFragments) {
                              Sgroup combined = new Sgroup();
                              label = null;
                              for (IAtom atom : sgroup1.getAtoms())
                                  combined.addAtom(atom);
                              for (IAtom atom : sgroup2.getAtoms())
                                  combined.addAtom(atom);
                              if (sgroup1.getSubscript().length() > sgroup2.getSubscript().length())
                                  combined.setSubscript(sgroup1.getSubscript() + INTERPUNCT + sgroup2.getSubscript());
                              else
                                  combined.setSubscript(sgroup2.getSubscript() + INTERPUNCT + sgroup1.getSubscript());
                              combined.setType(SgroupType.CtabAbbreviation);
                              return Collections.singletonList(combined);
                          }
                          if (sgroup1 != null && (best == null || sgroup1.getAtoms().size() > best.getAtoms().size()))
                              best = sgroup1;
                          if (sgroup2 != null && (best == null || sgroup2.getAtoms().size() < best.getAtoms().size()))
                              best = sgroup2;
                      }
  
                      if (best != null) {
                          newSgroups.add(best);
                          usedAtoms.addAll(best.getAtoms());
                      }
                  }
  
              } catch (CDKException ignored) {
              }
          }
  
          List<IAtomContainer> fragments = generateFragments(mol);
          Multimap<IAtom, Sgroup> sgroupAdjs = ArrayListMultimap.create();
  
          for (IAtomContainer frag : fragments) {
              try {
                  final String smi = usmigen.create(AtomContainerManipulator.copyAndSuppressedHydrogens(frag));
                  final String label = connectedAbbreviations.get(smi);
  
                  if (label == null || disabled.contains(label))
                      continue;
  
                  boolean overlap = false;
  
                  // note: first atom is '*'
                  int numAtoms = frag.getAtomCount();
                  int numBonds = frag.getBondCount();
                  for (int i = 1; i < numAtoms; i++) {
                      if (usedAtoms.contains(frag.getAtom(i))) {
                          overlap = true;
                          break;
                      }
                  }
  
                  // overlaps with previous assignment
                  if (overlap)
                      continue;
  
                  // create new abbreviation SGroup
                  Sgroup sgroup = new Sgroup();
                  sgroup.setType(SgroupType.CtabAbbreviation);
                  sgroup.setSubscript(label);
  
                  IBond attachBond = frag.getBond(0).getProperty(CUT_BOND, IBond.class);
                  IAtom attachAtom = null;
                  sgroup.addBond(attachBond);
                  for (int i = 1; i < numAtoms; i++) {
                      IAtom atom = frag.getAtom(i);
                      usedAtoms.add(atom);
                      sgroup.addAtom(atom);
                      if (attachBond.getBegin().equals(atom))
                          attachAtom = attachBond.getEnd();
                      else if (attachBond.getEnd().equals(atom))
                          attachAtom = attachBond.getBegin();
                  }
  
                  if (attachAtom != null)
                      sgroupAdjs.put(attachAtom, sgroup);
                  newSgroups.add(sgroup);
  
               } catch (CDKException e) {
                  // ignore
              }
          }
  
          if (!contractOnHetero)
              return newSgroups;
  
          // now collapse
          collapse:
          for (IAtom attach : mol.atoms()) {
              if (usedAtoms.contains(attach))
                  continue;
  
              // skip charged or isotopic labelled, C or R/*, H, He
              if ((attach.getFormalCharge() != null && attach.getFormalCharge() != 0)
                  || attach.getMassNumber() != null
                  || attach.getAtomicNumber() == 6
                  || attach.getAtomicNumber() < 2)
                  continue;
  
              int hcount = attach.getImplicitHydrogenCount();
              Set<IAtom> xatoms   = new HashSet<>();
              Set<IBond> xbonds   = new HashSet<>();
              Set<IBond> newbonds = new HashSet<>();
              xatoms.add(attach);
  
              List<String> nbrSymbols = new ArrayList<>();
              Set<Sgroup> todelete = new HashSet<>();
              for (Sgroup sgroup : sgroupAdjs.get(attach)) {
                  if (containsChargeChar(sgroup.getSubscript()))
                      continue;
                  if (sgroup.getBonds().size() != 1)
                      continue;
                  IBond xbond = sgroup.getBonds().iterator().next();
                  xbonds.add(xbond);
                  xatoms.addAll(sgroup.getAtoms());
                  if (attach.getSymbol().length() == 1 &&
                      Character.isLowerCase(sgroup.getSubscript().charAt(0))) {
                      if (Elements.ofString(attach.getSymbol() + sgroup.getSubscript().charAt(0)) != Elements.Unknown)
                          continue collapse;
                  }
                  nbrSymbols.add(sgroup.getSubscript());
                  todelete.add(sgroup);
              }
              int numSGrpNbrs = nbrSymbols.size();
              for (IBond bond : mol.getConnectedBondsList(attach)) {
                  if (!xbonds.contains(bond)) {
                      IAtom nbr = bond.getOther(attach);
                      // contract terminal bonds
                      if (mol.getConnectedBondsCount(nbr) == 1) {
                          if (nbr.getMassNumber() != null ||
                              (nbr.getFormalCharge() != null && nbr.getFormalCharge() != 0)) {
                              newbonds.add(bond);
                          } else if (nbr.getAtomicNumber() == 1) {
                              hcount++;
                              xatoms.add(nbr);
                          } else if (nbr.getAtomicNumber() > 0){
                              nbrSymbols.add(newSymbol(nbr.getAtomicNumber(), nbr.getImplicitHydrogenCount(), false));
                              xatoms.add(nbr);
                          }
                      } else {
                          newbonds.add(bond);
                      }
                  }
              }
  
              // reject if no symbols
              // reject if no bonds (<1), except if all symbols are identical... (HashSet.size==1)
              // reject if more that 2 bonds
              if (nbrSymbols.isEmpty() ||
                  newbonds.size() < 1 && (new HashSet<>(nbrSymbols).size() != 1) ||
                  newbonds.size() > 2)
                  continue;
  
              // create the symbol
              StringBuilder sb = new StringBuilder();
              sb.append(newSymbol(attach.getAtomicNumber(), hcount, newbonds.size() == 0));
              String prev  = null;
              int    count = 0;
              Collections.sort(nbrSymbols, new Comparator<String>() {
                  @Override
                  public int compare(String o1, String o2) {
                      int cmp = Integer.compare(o1.length(), o2.length());
                      if (cmp != 0) return cmp;
                      return o1.compareTo(o2);
                  }
              });
              for (String nbrSymbol : nbrSymbols) {
                  if (nbrSymbol.equals(prev)) {
                      count++;
                  } else {
                      boolean useParen = count == 0 || countUpper(prev) > 1 || (prev != null && nbrSymbol.startsWith(prev));
                      appendGroup(sb, prev, count, useParen);
                      prev = nbrSymbol;
                      count = 1;
                  }
              }
              appendGroup(sb, prev, count, false);
  
              // remove existing
              newSgroups.removeAll(todelete);
  
              // create new
              Sgroup newSgroup = new Sgroup();
              newSgroup.setType(SgroupType.CtabAbbreviation);
              newSgroup.setSubscript(sb.toString());
              for (IBond bond : newbonds)
                  newSgroup.addBond(bond);
              for (IAtom atom : xatoms)
                  newSgroup.addAtom(atom);
  
              newSgroups.add(newSgroup);
              usedAtoms.addAll(xatoms);
          }
  
          return newSgroups;
      }
focal_method.class_method_signature: Abbreviations.generate(final IAtomContainer mol)
focal_method.full_signature: public List<Sgroup> generate(final IAtomContainer mol)
focal_method.identifier: generate
focal_method.invocations: getProperty addAll getAtoms isEmpty copyAndSuppressedHydrogens create get contains setType setSubscript atoms addAtom singletonList contains partitionIntoMolecules getAtomContainerCount getAtomContainer newAtomContainer getBuilder getAtomContainerCount add getAtomContainer getAbbr getAbbr getAtoms addAtom getAtoms addAtom length getSubscript length getSubscript setSubscript getSubscript getSubscript setSubscript getSubscript getSubscript setType singletonList size getAtoms size getAtoms size getAtoms size getAtoms add addAll getAtoms generateFragments create create copyAndSuppressedHydrogens get contains getAtomCount getBondCount contains getAtom setType setSubscript getProperty getBond addBond getAtom add addAtom equals getBegin getEnd equals getEnd getBegin put add atoms contains getFormalCharge getFormalCharge getMassNumber getAtomicNumber getAtomicNumber getImplicitHydrogenCount add get containsChargeChar getSubscript size getBonds next iterator getBonds add addAll getAtoms length getSymbol isLowerCase charAt getSubscript ofString getSymbol charAt getSubscript add getSubscript add size getConnectedBondsList contains getOther getConnectedBondsCount getMassNumber getFormalCharge getFormalCharge add getAtomicNumber add getAtomicNumber add newSymbol getAtomicNumber getImplicitHydrogenCount add add isEmpty size size size append newSymbol getAtomicNumber size sort compare length length compareTo equals countUpper startsWith appendGroup appendGroup removeAll setType setSubscript toString addBond addAtom add addAll
focal_method.modifiers: public
focal_method.parameters: (final IAtomContainer mol)
focal_method.return: List<Sgroup>
focal_method.signature: List<Sgroup> generate(final IAtomContainer mol)