class AdductionSodiumLPReaction extends ReactionEngine implements IReactionProcess {

    @Override
    public IReactionSet initiate(IAtomContainerSet reactants, IAtomContainerSet agents) throws CDKException {

        logger.debug("initiate reaction: AdductionSodiumLPReaction");

        if (reactants.getAtomContainerCount() != 1) {
            throw new CDKException("AdductionSodiumLPReaction only expects one reactant");
        }
        if (agents != null) {
            throw new CDKException("AdductionSodiumLPReaction don't expects agents");
        }

        IReactionSet setOfReactions = reactants.getBuilder().newInstance(IReactionSet.class);
        IAtomContainer reactant = reactants.getAtomContainer(0);

        /*
         * if the parameter hasActiveCenter is not fixed yet, set the active
         * centers
         */
        IParameterReact ipr = super.getParameterClass(SetReactionCenter.class);
        if (ipr != null && !ipr.isSetParameter()) setActiveCenters(reactant);

        if (AtomContainerManipulator.getTotalCharge(reactant) > 0) return setOfReactions;

        Iterator<IAtom> atoms = reactant.atoms().iterator();
        while (atoms.hasNext()) {
            IAtom atomi = atoms.next(); // Atom pos 1
            if (atomi.getFlag(CDKConstants.REACTIVE_CENTER)
                    && (atomi.getFormalCharge() == CDKConstants.UNSET ? 0 : atomi.getFormalCharge()) <= 0
                    && reactant.getConnectedLonePairsCount(atomi) > 0
                    && reactant.getConnectedSingleElectronsCount(atomi) == 0) {

                ArrayList<IAtom> atomList = new ArrayList<IAtom>();
                atomList.add(atomi);
                IAtom atomH = reactant.getBuilder().newInstance(IAtom.class, "Na");
                atomH.setFormalCharge(1);
                atomList.add(atomH);

                IAtomContainerSet moleculeSet = reactant.getBuilder().newInstance(IAtomContainerSet.class);
                moleculeSet.addAtomContainer(reactant);
                IAtomContainer adduct = reactant.getBuilder().newInstance(IAtomContainer.class);
                adduct.addAtom(atomH);
                moleculeSet.addAtomContainer(adduct);

                IReaction reaction = mechanism.initiate(moleculeSet, atomList, null);
                if (reaction == null)
                    continue;
                else
                    setOfReactions.addReaction(reaction);

            }
        }

        return setOfReactions;
    }

    public  AdductionSodiumLPReaction();

}