예제 #1
0
        public ValidationReport ValidateReaction(IReaction subject)
        {
            Trace.TraceInformation($"Validating {nameof(IReaction)}");
            var report = new ValidationReport();

            // apply validators
            foreach (var test in validators.Values)
            {
                report.Add(test.ValidateReaction(subject));
            }
            // traverse into super class
            report.Add(ValidateChemObject(subject));
            // traverse into hierarchy
            var reactants = subject.Reactants;

            foreach (var reactant in reactants)
            {
                report.Add(ValidateMolecule(reactant));
            }
            var products = subject.Products;

            foreach (var product in products)
            {
                report.Add(ValidateMolecule(product));
            }
            return(report);
        }
예제 #2
0
        public ValidationReport ValidateChemModel(IChemModel subject)
        {
            Trace.TraceInformation($"Validating {nameof(IChemModel)}");
            var report = new ValidationReport();

            // apply validators
            foreach (var test in validators.Values)
            {
                report.Add(test.ValidateChemModel(subject));
            }
            // traverse into super class
            report.Add(ValidateChemObject(subject));
            // traverse into hierarchy
            ICrystal crystal = subject.Crystal;

            if (crystal != null)
            {
                report.Add(ValidateCrystal(crystal));
            }
            IReactionSet reactionSet = subject.ReactionSet;

            if (reactionSet != null)
            {
                report.Add(ValidateReactionSet(reactionSet));
            }
            var moleculeSet = subject.MoleculeSet;

            if (moleculeSet != null)
            {
                report.Add(ValidateMoleculeSet(moleculeSet));
            }
            return(report);
        }
예제 #3
0
        public override ValidationReport ValidateBond(IBond subject)
        {
            var report = new ValidationReport();

            report.Add(ValidateStereoChemistry(subject));
            report.Add(ValidateMaxBondOrder(subject));
            return(report);
        }
예제 #4
0
        public override ValidationReport ValidateAtom(IAtom subject)
        {
            var report = new ValidationReport();

            report.Add(ValidateCharge(subject));
            report.Add(ValidateHydrogenCount(subject));
            report.Add(ValidatePseudoAtom(subject));
            return(report);
        }
예제 #5
0
        public ValidationReport ValidateAtom(IAtom subject)
        {
            Trace.TraceInformation($"Validating {nameof(IAtom)}");
            var report = new ValidationReport();

            // apply validators
            foreach (var test in validators.Values)
            {
                report.Add(test.ValidateAtom(subject));
            }
            // traverse into super class
            report.Add(ValidateAtomType(subject));
            // traverse into hierarchy
            return(report);
        }
예제 #6
0
        public ValidationReport ValidateElectronContainer(IElectronContainer subject)
        {
            Trace.TraceInformation($"Validating {nameof(IElectronContainer)}");
            var report = new ValidationReport();

            // apply validators
            foreach (var test in validators.Values)
            {
                report.Add(test.ValidateElectronContainer(subject));
            }
            // traverse into super class
            report.Add(ValidateChemObject(subject));
            // traverse into hierarchy
            return(report);
        }
예제 #7
0
        public ValidationReport ValidateReactionSet(IReactionSet subject)
        {
            Trace.TraceInformation("Validating org.openscience.cdk.ReactionSet");
            var report = new ValidationReport();

            // apply validators
            foreach (var test in validators.Values)
            {
                report.Add(test.ValidateReactionSet(subject));
            }
            // traverse into super class
            report.Add(ValidateChemObject(subject));
            // traverse into hierarchy
            foreach (var reaction in subject)
            {
                report.Add(ValidateReaction(reaction));
            }
            return(report);
        }
예제 #8
0
        public ValidationReport ValidateMoleculeSet(IChemObjectSet <IAtomContainer> subject)
        {
            Trace.TraceInformation($"Validating {nameof(IChemObjectSet<IAtomContainer>)}");
            var report = new ValidationReport();

            // apply validators
            foreach (var test in validators.Values)
            {
                report.Add(test.ValidateMoleculeSet(subject));
            }
            // traverse into super class
            report.Add(ValidateChemObject(subject));
            // traverse into hierarchy
            foreach (var container in subject)
            {
                report.Add(ValidateMolecule(container));
            }
            return(report);
        }
예제 #9
0
        public ValidationReport ValidateChemSequence(IChemSequence subject)
        {
            Trace.TraceInformation($"Validating {nameof(IChemSequence)}");
            var report = new ValidationReport();

            // apply validators
            foreach (var test in validators.Values)
            {
                report.Add(test.ValidateChemSequence(subject));
            }
            // traverse into super class
            report.Add(ValidateChemObject(subject));
            // traverse into hierarchy
            foreach (var model in subject)
            {
                report.Add(ValidateChemModel(model));
            }
            return(report);
        }
예제 #10
0
        public ValidationReport ValidateBond(IBond subject)
        {
            Trace.TraceInformation($"Validating {nameof(IBond)}");
            var report = new ValidationReport();

            // apply validators
            foreach (var test in validators.Values)
            {
                report.Add(test.ValidateBond(subject));
            }
            // traverse into super class
            report.Add(ValidateElectronContainer(subject));
            // traverse into hierarchy
            foreach (var atom in subject.Atoms)
            {
                report.Add(ValidateAtom(atom));
            }
            return(report);
        }
예제 #11
0
        public override ValidationReport ValidateReaction(IReaction subject)
        {
            var report     = new ValidationReport();
            var container1 = subject.Builder.NewAtomContainer();
            var reactants  = subject.Reactants;

            for (int i = 0; i < reactants.Count; i++)
            {
                container1.Add(reactants[i]);
            }
            var container2 = subject.Builder.NewAtomContainer();
            var products   = subject.Products;

            for (int i = 0; i < products.Count; i++)
            {
                container2.Add(products[i]);
            }
            report.Add(ValidateAtomCountConservation(subject, container1, container2));
            report.Add(ValidateChargeConservation(subject, container1, container2));
            return(report);
        }
예제 #12
0
        public override ValidationReport ValidateMolecule(IAtomContainer subject)
        {
            var report        = new ValidationReport();
            var emptyMolecule = new ValidationTest(subject, "Molecule does not contain any atom");

            if (subject.Atoms.Count == 0)
            {
                report.Errors.Add(emptyMolecule);
            }
            else
            {
                report.OKs.Add(emptyMolecule);
                var  massCalcProblem      = new ValidationTest(subject, "Molecule contains PseudoAtom's. Won't be able to calculate some properties, like molecular mass.");
                bool foundMassCalcProblem = false;
                for (int i = 0; i < subject.Atoms.Count; i++)
                {
                    if (subject.Atoms[i] is IPseudoAtom)
                    {
                        foundMassCalcProblem = true;
                    }
                    else
                    {
                        report.Add(ValidateBondOrderSum(subject.Atoms[i], subject));
                    }
                }
                if (foundMassCalcProblem)
                {
                    report.Warnings.Add(massCalcProblem);
                }
                else
                {
                    report.OKs.Add(massCalcProblem);
                }
            }
            return(report);
        }