/// <summary>
 /// Initializes a new instance of the <see cref="DriftTimeTarget"/> class.
 /// </summary>
 /// <param name="libraryEntryName">
 /// The library Entry Name.
 /// </param>
 /// <param name="normalizedDriftTimeInMs">
 /// The drift time.
 /// </param>
 /// <param name="empiricalFormula">
 /// The empirical formula.
 /// </param>
 /// <param name="adduct">
 /// The adduct.
 /// </param>
 public DriftTimeTarget(string libraryEntryName, double normalizedDriftTimeInMs, string empiricalFormula, IonizationAdduct adduct)
     : base(empiricalFormula, adduct, libraryEntryName)
 {
     this.NormalizedDriftTimeInMs = normalizedDriftTimeInMs;
     this.TargetType = TargetType.MoleculeWithKnownDriftTime;
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="MolecularTarget"/> class. 
 /// Constructor for non peptides with composition
 /// </summary>
 /// <param name="empiricalFormula">
 /// The empirical formula.
 /// </param>
 /// <param name="ionization">
 /// The ionization.
 /// </param>
 /// <param name="correspondingChemical">
 /// The CorrespondingChemical Identifier.
 /// </param>
 public MolecularTarget(string empiricalFormula, IonizationAdduct ionization, string correspondingChemical)
 {
     this.correspondingChemical = correspondingChemical;
     this.Setup(empiricalFormula, ionization);
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="MolecularTarget"/> class.
 /// </summary>
 /// <param name="empiricalFormula">
 /// The empirical formula.
 /// </param>
 /// <param name="ionization">
 /// The ionization.
 /// </param>
 /// <param name="correspondingChemical">
 /// </param>
 /// <param name="adductMultiplier">
 /// The adductMultiplier.
 /// </param>
 public MolecularTarget(string empiricalFormula, IonizationMethod ionization, string correspondingChemical, int adductMultiplier = 1)
 {
     this.correspondingChemical = correspondingChemical;
     IonizationAdduct adduct = new IonizationAdduct(ionization, adductMultiplier);
     this.Setup(empiricalFormula, adduct);
 }
        /// <summary>
        /// The setup.
        /// </summary>
        /// <param name="empiricalFormula">
        /// The empirical formula.
        /// </param>
        /// <param name="ionization">
        /// The ionization.
        /// </param>
        private void Setup(string empiricalFormula, IonizationAdduct ionization)
        {
            this.EmpiricalFormula = empiricalFormula;

            // parse the small molecule empirical formula
            this.CompositionWithoutAdduct = MoleculeUtil.ReadEmpiricalFormula(empiricalFormula);

            // Compensate for mass changes due to ionization
            this.CompositionWithAdduct = ionization.ModifyComposition(this.CompositionWithoutAdduct);
            this.MonoisotopicMass = this.CompositionWithoutAdduct.Mass;
            this.MassWithAdduct = this.CompositionWithAdduct.Mass;
            this.TargetType = TargetType.Molecule;
            this.Adduct = ionization;
        }