adfs::file QuanSampleProcessor::processIt( adcontrols::QuanSample& sample , adcontrols::MassSpectrum& profile , QuanDataWriter * writer , bool bSerialize ) { if ( auto pCentroidMethod = procmethod_->find< adcontrols::CentroidMethod >() ) { adcontrols::MassSpectrum centroid; adcontrols::MSPeakInfo pkInfo; adcontrols::MassSpectrum filtered; bool result(false); if ( pCentroidMethod->noiseFilterMethod() == adcontrols::CentroidMethod::eDFTLowPassFilter ) { filtered.clone( profile, true ); for ( auto& ms : adcontrols::segment_wrapper<>( filtered ) ) { adcontrols::waveform_filter::fft4c::lowpass_filter( ms, pCentroidMethod->cutoffFreqHz() ); double base( 0 ), rms( 0 ); const double * intens = ms.getIntensityArray(); adportable::spectrum_processor::tic( uint32_t( ms.size() ), intens, base, rms ); for ( size_t i = 0; i < ms.size(); ++i ) ms.setIntensity( i, intens[ i ] - base ); } filtered.addDescription( adcontrols::description( L"process", dataproc::Constants::F_DFT_FILTERD ) ); result = doCentroid( pkInfo, centroid, filtered, *pCentroidMethod ); } else { result = doCentroid( pkInfo, centroid, profile, *pCentroidMethod ); } if ( result ) { // doMSLock if required. if ( auto pCompounds = procmethod_->find< adcontrols::QuanCompounds >() ) { if ( auto lkMethod = procmethod_->find< adcontrols::MSLockMethod >() ) { if ( lkMethod->enabled() ) doMSLock( pkInfo, centroid, *lkMethod, *pCompounds ); } } // Look up compounds if ( auto pCompounds = procmethod_->find< adcontrols::QuanCompounds >() ) { if ( auto pTgtMethod = procmethod_->find< adcontrols::TargetingMethod >() ) { doMSFind( pkInfo, centroid, sample, *pCompounds, *pTgtMethod ); } } if ( bSerialize ) { adcontrols::MassSpectrum * pProfile = &profile; adcontrols::MassSpectrum * pFiltered = (filtered.size() > 0 ) ? &filtered : 0; adcontrols::MassSpectrum * pCentroid = ¢roid; adcontrols::MSPeakInfo * pPkInfo = &pkInfo; if ( sample.channel() > 0 ) { if ( auto p = profile.findProtocol( sample.channel() - 1 ) ) { p->clearSegments(); pProfile = p; } if ( pFiltered ) { if ( auto p = filtered.findProtocol( sample.channel() - 1 ) ) { p->clearSegments(); pFiltered = p; } } if ( auto p = centroid.findProtocol( sample.channel() - 1 ) ) { p->clearSegments(); pCentroid = p; } if ( auto p = pkInfo.findProtocol( sample.channel() - 1 ) ) { p->clearSegments(); pPkInfo = p; } } std::lock_guard<std::mutex> lock( mutex_ ); if ( adfs::file file = writer->write( *pProfile, sample.name() ) ) { for ( auto& resp: sample.results() ) resp.dataGuid_ = file.name(); if ( pFiltered ) writer->attach<adcontrols::MassSpectrum>( file, *pFiltered, dataproc::Constants::F_DFT_FILTERD ); auto afile = writer->attach< adcontrols::MassSpectrum >( file, *pCentroid, dataproc::Constants::F_CENTROID_SPECTRUM ); writer->attach< adcontrols::ProcessMethod >( afile, *procmethod_, L"ProcessMethod" ); writer->attach< adcontrols::MSPeakInfo >( file, *pPkInfo, dataproc::Constants::F_MSPEAK_INFO ); writer->attach< adcontrols::QuanSample >( file, sample, dataproc::Constants::F_QUANSAMPLE ); return file; } } } } return adfs::file(); }