示例#1
0
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);
    }
}
示例#2
0
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;
}
示例#3
0
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;
    }
}