Ejemplo n.º 1
0
bool
fitter::operator()( MassSpectrum& ms ) const
{
    if ( coeffs_.empty() )
        return false;
    
    const double * masses = ms.getMassArray();

    if ( coeffs_.size() == 1 ) {
        // relative error correction
        for ( size_t i = 0; i < ms.size(); ++i ) {
            double mass = masses[ i ] - masses[ i ] * coeffs_[ 0 ];
            ms.setMass( i, mass );
        }

    } else {

        for ( size_t i = 0; i < ms.size(); ++i ) {
            double mass = masses[i] - adportable::polfit::estimate_y( coeffs_, masses[ i ] );
            ms.setMass( i, mass );
        }

    }

	return true;
}
Ejemplo n.º 2
0
bool
Targeting::operator()( const MassSpectrum& ms )
{
    candidates_.clear();

    if ( !ms.isCentroid() )
        return false;

    bool polarity_positive = (ms.polarity() == PolarityPositive) || (ms.polarity() == PolarityIndeterminate);

    segment_wrapper< const adcontrols::MassSpectrum > segs( ms );
    int fcn = 0;
    for ( auto& fms : segs ) {
        if ( polarity_positive ) {
            find_candidate( fms, fcn++, true, poslist_ );
        }
        else {
            find_candidate( fms, fcn++, false, neglist_ );
        }
    }
    return true;
}
Ejemplo n.º 3
0
bool
Targeting::find_candidate( const MassSpectrum& ms, int fcn, bool polarity_positive, const std::vector< charge_adduct_type >& list )
{
    double tolerance = (method_) ? method_->tolerance( method_->toleranceMethod() ) : 0.010;

    detail::target_finder< const double * > finder( ms.getMassArray(), ms.getMassArray() + ms.size(), tolerance );

    for ( auto& formula : active_formula_ ) {
        double target_mass = formula.second; // search 'M'
        if ( finder( target_mass ) )
            candidates_.push_back( Candidate( uint32_t( finder.pos_.second /*idx*/), fcn, 1/*charge*/, finder.pos_.first /*error*/, formula.first /*formula*/ ) );
    }

    (void)polarity_positive; // this will be necessary for account an electron mass, todo
    for ( auto& adduct : list ) {
        for ( auto& formula : active_formula_ ) {
            double target_mass = (formula.second /* M */ + std::get<0>( adduct /*mass*/ )) / std::get<2>( adduct /*charge*/ );
            if ( finder( target_mass ) )
                candidates_.push_back( Candidate( uint32_t( finder.pos_.second ), fcn, std::get<2>( adduct ), finder.pos_.first, formula.first + "+" + std::get<1>( adduct ) ) );
        }
    }
    return true;
}
Ejemplo n.º 4
0
bool
mslock::operator()( MassSpectrum& ms, bool applyToAll ) const
{
    if ( applyToAll ) {
        std::pair< double, double > range(1000000.0, 0.0);

        for ( auto& fms : adcontrols::segment_wrapper<>( ms ) ) {
            fitter_( fms );
            range.first = std::min( fms.getMass( 0 ), range.first );
            range.second = std::max( fms.getMass( fms.size() - 1 ), range.second );
        }

        range.first = range.first - ( range.second - range.first ) / 100;
        range.second = range.second + ( range.second - range.first ) / 100;

        ms.setAcquisitionMassRange( range.first, range.second );

        return true;

    } else
        return fitter_( ms );
}