示例#1
0
MassDistribution multiply(const MassDistribution& m, const MassDistribution& n)
{
    MassDistribution result;

    for (MassDistribution::const_iterator i=m.begin(); i!=m.end(); ++i)
    for (MassDistribution::const_iterator j=n.begin(); j!=n.end(); ++j)
        result.push_back(MassAbundance(i->mass + j->mass, i->abundance * j->abundance));

    return result;
}
示例#2
0
void printEnvelope(const MassDistribution& md, int charge)
{
    using namespace pwiz::calibration; // for Ion

    for (MassDistribution::const_iterator it=md.begin(); it!=md.end(); ++it)
    {
        if (it->abundance < .0001) continue;
        cout << Ion::mz(it->mass, charge) << " " << it->abundance << endl;
    }
}
示例#3
0
void testNormalization(const IsotopeCalculator& calc)
{
    if (os_) *os_ << "mass normalized:\n"
                  << calc.distribution(Formula("C100"), 0, 
                                       IsotopeCalculator::NormalizeMass) << endl; 

    if (os_) *os_ << "abundance normalized:\n"
                  << calc.distribution(Formula("C100"), 0, 
                                       IsotopeCalculator::NormalizeAbundance) << endl; 
    
    MassDistribution md = calc.distribution(Formula("C100"), 0, 
                                            IsotopeCalculator::NormalizeMass |
                                            IsotopeCalculator::NormalizeAbundance);
    if (os_) *os_ << "both normalized:\n" << md << endl;

    double sumSquares = 0;
    for (MassDistribution::iterator it=md.begin(); it!=md.end(); ++it)
        sumSquares += it->abundance * it->abundance;
    if (os_) *os_ << "sumSquares: " << sumSquares << endl;

    unit_assert_equal(sumSquares, 1, 1e-12);
    unit_assert(md[0].mass == 0);
}
示例#4
0
void test()
{
    using namespace Peptide;
    cout.precision(12);

    initializeIsotopes();

    for (Element e=ElementBegin; e!=ElementEnd; ++e)
    {
        cout << e << ":\n";
        copy(isotopes[e].begin(), isotopes[e].end(), ostream_iterator<MassAbundance>(cout, "\n")); 
    }
    cout << endl;


    for (Element e=ElementBegin; e!=ElementEnd; ++e)
    {
        if (isotopes[e].size() != 2) continue;
        MassDistribution test = calculateDistributionFor2Isotopes(isotopes[e], 100); 
        cout << e << ":\n"; 
        copy(test.begin(), test.end(), ostream_iterator<MassAbundance>(cout, "\n"));
        cout << endl;
    }
}
示例#5
0
void calculateIsotopeEnvelope(const PepDatum& peptide)
{
    using namespace Peptide;
    const string& name = peptide.first;
    const Peptide::Formula f = peptide.second;

    cout << name << endl << endl;

    MassDistribution c = calculateDistributionFor2Isotopes(isotopes[C], f[C]); 
    cout << "C envelope:\n";
    copy(c.begin(), c.end(), ostream_iterator<MassAbundance>(cout, "\n"));
    cout << endl;

    MassDistribution n = calculateDistributionFor2Isotopes(isotopes[N], f[N]); 
    cout << "N envelope:\n";
    copy(n.begin(), n.end(), ostream_iterator<MassAbundance>(cout, "\n"));
    cout << endl;

    // calculate product of C and N envelopes
    MassDistribution cn = multiply(c,n);
    sort(cn.begin(), cn.end(), isMoreAbundant);
    cout << "C*N envelope:\n";
    copy(cn.begin(), cn.begin()+5, ostream_iterator<MassAbundance>(cout, "\n"));
    cout << endl;

    // hack to add back in H, O, S 
    Peptide::Formula hack(0, f[H], 0, f[O], f[S]);
    double hackMass = hack.monoisotopicMass();
    for (MassDistribution::iterator it=cn.begin(); it!=cn.end(); ++it)
        it->mass += hackMass;

    // print envelopes by charge state
    for (int i=1; i<5; i++)
    {
        cout << "charge state " << i << endl;
        printEnvelope(cn, i);
        cout << endl;
    }
}