Ejemplo n.º 1
0
        // the Atom tests

        private static ValidationReport ValidateCharge(IAtom atom)
        {
            var report     = new ValidationReport();
            var tooCharged = new ValidationTest(atom, "Atom has an unlikely large positive or negative charge");

            switch (atom.AtomicNumber)
            {
            case AtomicNumbers.O:
            case AtomicNumbers.N:
            case AtomicNumbers.C:
            case AtomicNumbers.H:
                if (atom.FormalCharge == 0)
                {
                    report.OKs.Add(tooCharged);
                }
                else
                {
                    tooCharged.Details = $"Atom {atom.Symbol} has charge {atom.FormalCharge}";
                    if (atom.FormalCharge < -3)
                    {
                        report.Errors.Add(tooCharged);
                    }
                    else if (atom.FormalCharge < -1)
                    {
                        report.Warnings.Add(tooCharged);
                    }
                    else if (atom.FormalCharge > 3)
                    {
                        report.Errors.Add(tooCharged);
                    }
                    else if (atom.FormalCharge > 1)
                    {
                        report.Warnings.Add(tooCharged);
                    }
                }
                break;

            default:
                if (atom.FormalCharge == 0)
                {
                    report.OKs.Add(tooCharged);
                }
                else
                {
                    tooCharged.Details = $"Atom {atom.Symbol} has charge {atom.FormalCharge}";
                    if (atom.FormalCharge < -4)
                    {
                        report.Errors.Add(tooCharged);
                    }
                    else if (atom.FormalCharge < -3)
                    {
                        report.Warnings.Add(tooCharged);
                    }
                    else if (atom.FormalCharge > 4)
                    {
                        report.Errors.Add(tooCharged);
                    }
                    else if (atom.FormalCharge > 3)
                    {
                        report.Warnings.Add(tooCharged);
                    }
                }
                break;
            }
            return(report);
        }
Ejemplo n.º 2
0
 public override ValidationReport ValidateChemObject(IChemObject subject)
 {
     var report = new ValidationReport();
     var properties = subject.GetProperties();
     var iter = properties.Keys;
     var noNamespace = new ValidationTest(subject,"Dictionary Reference lacks a namespace indicating the dictionary.");
     var noDict = new ValidationTest(subject, "The referenced dictionary does not exist.");
     var noEntry = new ValidationTest(subject, "The referenced entry does not exist in the dictionary.");
     foreach (var key in iter)
     {
         if (key is string keyName)
         {
             if (keyName.StartsWith(DictionaryDatabase.DictRefPropertyName, StringComparison.Ordinal))
             {
                 string dictRef = (string)properties[keyName];
                 string details = "Dictref being anaylyzed: " + dictRef + ". ";
                 noNamespace.Details = details;
                 noDict.Details = details;
                 noEntry.Details = details;
                 int index = dictRef.IndexOf(':');
                 if (index != -1)
                 {
                     report.OKs.Add(noNamespace);
                     string dict = dictRef.Substring(0, index);
                     Debug.WriteLine($"Looking for dictionary:{dict}");
                     if (db.HasDictionary(dict))
                     {
                         report.OKs.Add(noDict);
                         if (dictRef.Length > index + 1)
                         {
                             string entry = dictRef.Substring(index + 1);
                             Debug.WriteLine($"Looking for entry:{entry}");
                             if (db.HasEntry(dict, entry))
                             {
                                 report.OKs.Add(noEntry);
                             }
                             else
                             {
                                 report.Errors.Add(noEntry);
                             }
                         }
                         else
                         {
                             report.Errors.Add(noEntry);
                         }
                     }
                     else
                     {
                         details += "The dictionary searched: " + dict + ".";
                         noDict.Details = details;
                         report.Errors.Add(noDict);
                         report.Errors.Add(noEntry);
                     }
                 }
                 else
                 {
                     // The dictRef has no namespace
                     details += "There is not a namespace given.";
                     noNamespace.Details = details;
                     report.Errors.Add(noNamespace);
                     report.Errors.Add(noDict);
                     report.Errors.Add(noEntry);
                 }
             }
             else
             {
                 // not a dictref
             }
         }
         else
         {
             // not a dictref
         }
     }
     return report;
 }