void compare(const MassDistribution& test, const MassDistribution& good) { unit_assert(test.size() == good.size()); for (unsigned int i=0; i<test.size(); i++) { unit_assert_equal(test[i].mass, good[i].mass, 1e-12); unit_assert_equal(test[i].abundance, good[i].abundance, 1e-12); } }
MassDistribution calculateDistributionFor2Isotopes(const MassDistribution& isotopeDistribution, int atomCount) { MassDistribution result; if (isotopeDistribution.size() != 2) throw runtime_error("only implemented for 2 isotopes"); double m0 = isotopeDistribution[0].mass; double p0 = isotopeDistribution[0].abundance; double m1 = isotopeDistribution[1].mass; double p1 = isotopeDistribution[1].abundance; double mass = m0 * atomCount; double abundance = pow(p0, atomCount); //for (int i=0; i<=atomCount; i++) for (int i=0; i<=4; i++) { result.push_back(MassAbundance(mass, abundance)); mass += (m1-m0); abundance *= p1/p0*(atomCount-i)/(i+1); } return result; }
void test1() { MassDistribution md; md.push_back(MassAbundance(10, 1)); IsotopeTable table(md, 10, 0); for (int i=1; i<=10; i++) { MassDistribution temp = table.distribution(i); unit_assert(temp.size() == 1); unit_assert(temp[0] == MassAbundance(i*10, 1)); //cout << i << " atoms:\n" << temp << endl; } }