public void full_agg()
        {
            double max_monoisotopic_mass = TestExperimentalProteoform.starter_mass + TestExperimentalProteoform.missed_monoisotopics * Lollipop.MONOISOTOPIC_UNIT_MASS;
            double min_monoisotopic_mass = TestExperimentalProteoform.starter_mass - TestExperimentalProteoform.missed_monoisotopics * Lollipop.MONOISOTOPIC_UNIT_MASS;

            IEnumerable <NeuCodePair> neucodes         = TestExperimentalProteoform.generate_neucode_components(TestExperimentalProteoform.starter_mass).OfType <NeuCodePair>();
            List <Component>          components       = neucodes.Select(nc => nc.neuCodeLight).Concat(neucodes.Select(nc => nc.neuCodeHeavy)).ToList();
            List <Component>          quant_components = TestExperimentalProteoform.generate_neucode_quantitative_components();

            //Must use Sweet.lol.remaining_components because ThreadStart only uses void methods
            //Must use Sweet.lol.remaining_components because ThreadStart only uses void methods
            Sweet.lollipop.neucode_labeled = true;
            Sweet.lollipop.input_files     = new List <InputFile> {
                new InputFile("fake.txt", Purpose.Quantification)
            };
            List <ExperimentalProteoform> vetted_quant = Sweet.lollipop.aggregate_proteoforms(true, neucodes, components, quant_components, 0);

            Assert.AreEqual(1, vetted_quant.Count);
            Assert.AreEqual(2, vetted_quant[0].aggregated.Count);
            Assert.AreEqual(2, vetted_quant[0].lt_verification_components.Count);
            Assert.AreEqual(2, vetted_quant[0].hv_verification_components.Count);
            Assert.AreEqual(1, vetted_quant[0].lt_quant_components.Count);
            Assert.AreEqual(1, vetted_quant[0].hv_quant_components.Count);
            Assert.AreEqual(2, quant_components.Count);
            Assert.AreEqual(0, Sweet.lollipop.remaining_quantification_components.Count);
        }
        public void assign_quant_components_in_bounds_monoisotopic_tolerance()
        {
            double max_monoisotopic_mass = TestExperimentalProteoform.starter_mass + TestExperimentalProteoform.missed_monoisotopics * Lollipop.MONOISOTOPIC_UNIT_MASS;
            double min_monoisotopic_mass = TestExperimentalProteoform.starter_mass - TestExperimentalProteoform.missed_monoisotopics * Lollipop.MONOISOTOPIC_UNIT_MASS;

            IEnumerable <NeuCodePair> neucodes         = TestExperimentalProteoform.generate_neucode_components(TestExperimentalProteoform.starter_mass).OfType <NeuCodePair>();
            List <Component>          quant_components = TestExperimentalProteoform.generate_neucode_quantitative_components();

            // in bounds lowest monoisotopic error
            SaveState.lollipop.neucode_labeled = true;
            List <ExperimentalProteoform> pfs          = SaveState.lollipop.createProteoforms(neucodes, neucodes, 0);
            List <ExperimentalProteoform> vetted_quant = SaveState.lollipop.assignQuantificationComponents(pfs, quant_components);

            Assert.AreEqual(1, vetted_quant.Count);
            Assert.AreEqual(2, vetted_quant[0].aggregated_components.Count);
            Assert.AreEqual(1, vetted_quant[0].lt_quant_components.Count);
            Assert.AreEqual(1, vetted_quant[0].hv_quant_components.Count);
            Assert.AreEqual(2, quant_components.Count);
            Assert.AreEqual(0, SaveState.lollipop.remaining_quantification_components.Count);
        }
        public void full_agg_without_validation()
        {
            double max_monoisotopic_mass = TestExperimentalProteoform.starter_mass + TestExperimentalProteoform.missed_monoisotopics * Lollipop.MONOISOTOPIC_UNIT_MASS;
            double min_monoisotopic_mass = TestExperimentalProteoform.starter_mass - TestExperimentalProteoform.missed_monoisotopics * Lollipop.MONOISOTOPIC_UNIT_MASS;

            IEnumerable <NeuCodePair> neucodes         = TestExperimentalProteoform.generate_neucode_components(TestExperimentalProteoform.starter_mass).OfType <NeuCodePair>();
            List <Component>          components       = neucodes.Select(nc => nc.neuCodeLight).Concat(neucodes.Select(nc => nc.neuCodeHeavy)).ToList();
            List <Component>          quant_components = TestExperimentalProteoform.generate_neucode_quantitative_components();

            //Must use Sweet.lol.remaining_components because ThreadStart only uses void methods
            Sweet.lollipop.neucode_labeled = true;
            Sweet.lollipop.decoy_proteoform_communities = new Dictionary <string, ProteoformCommunity> {
                { "1", new ProteoformCommunity() }
            };
            Sweet.lollipop.input_files = new List <InputFile> {
                new InputFile("fake.txt", Purpose.Quantification)
            };
            List <ExperimentalProteoform> vetted_quant = Sweet.lollipop.aggregate_proteoforms(false, neucodes, components, quant_components, 0);

            Assert.AreEqual(1, vetted_quant.Count);
            Assert.AreEqual(1, Sweet.lollipop.decoy_proteoform_communities.First().Value.experimental_proteoforms.Length);
            Assert.AreEqual(2, vetted_quant[0].aggregated.Count);
            Assert.AreEqual(0, vetted_quant[0].lt_verification_components.Count);
            Assert.AreEqual(0, vetted_quant[0].hv_verification_components.Count);
            Assert.AreEqual(1, vetted_quant[0].lt_quant_components.Count);
            Assert.AreEqual(1, vetted_quant[0].hv_quant_components.Count);
            Assert.AreEqual(2, quant_components.Count);
            Assert.AreEqual(0, Sweet.lollipop.remaining_quantification_components.Count);

            Sweet.lollipop.clear_aggregation();
            Assert.True(Sweet.lollipop.decoy_proteoform_communities.All(x => x.Value.experimental_proteoforms.Length == 0));
            Assert.IsEmpty(Sweet.lollipop.target_proteoform_community.experimental_proteoforms);
            Assert.IsEmpty(Sweet.lollipop.remaining_to_aggregate);
            Assert.IsEmpty(Sweet.lollipop.remaining_quantification_components);
            Assert.IsEmpty(Sweet.lollipop.remaining_verification_components);
        }