package org.fhcrc.cpl.viewer.feature.extraction.strategy;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import org.fhcrc.cpl.viewer.MSRun;
import org.fhcrc.cpl.viewer.feature.ExtractMaxima2D;
import org.fhcrc.cpl.viewer.feature.Feature;
import org.fhcrc.cpl.viewer.feature.Spectrum;
import org.fhcrc.cpl.viewer.feature.extraction.DefaultPeakCombiner;
import org.fhcrc.cpl.viewer.feature.extraction.PeakExtractor;
import org.fhcrc.cpl.viewer.feature.extraction.SmootherCreator;
import org.fhcrc.cpl.viewer.feature.extraction.WaveletPeakExtractor;
import org.labkey.common.tools.FloatRange;
import org.labkey.common.tools.Scan;
public class FeatureStrategyMSe extends FeatureStrategyWindow {
protected boolean peakRidgeWalkSmoothed =
PeakExtractor.DEFAULT_PEAK_RIDGE_WALK_SMOOTHED;
protected int msLevel = 1;
protected WaveletPeakExtractor extractor = new WaveletPeakExtractor();
protected DefaultPeakCombiner peakCombiner = new DefaultPeakCombiner();
public FeatureStrategyMSe() {
}
public FeatureStrategyMSe(int msLevel) {
this();
this.msLevel = msLevel;
}
/**
* @param run
* @param startScanIndex
* @param scanCount
* @param maxCharge
* @param range
*/
@Override
public void init(MSRun run, int startScanIndex,
int scanCount, int maxCharge, FloatRange range, boolean plotStatistics)
{
super.init(run, startScanIndex, scanCount, maxCharge, range, plotStatistics);
if (msLevel == 2) {
_scans = _run.getMS2Scans();
if (_scans.length > scanCount) {
int endScanIndex = Math.max(startScanIndex + scanCount, _scans.length);
_scans = Arrays.copyOfRange(_scans, startScanIndex, endScanIndex);
}
}
extractor.setPeakRidgeWalkSmoothed(peakRidgeWalkSmoothed);
extractor.setShortPeak(2);
extractor.setUseIntensityCutoff(false);
peakCombiner.setMaxCharge(_maxCharge);
peakCombiner.setResamplingFrequency(_resamplingFrequency);
}
@Override
protected Collection<Feature> findPeptidesIn2DWindow(float[][] spectra,
Scan[] scanWindow) throws InterruptedException {
Feature[] allPeptides = extractor.extractPeakFeatures(_scans, spectra, _mzRange);
// Spectrum.Peak[] rawPeaks =
// ExtractMaxima2D.analyze(spectra, _mzRange.min, 1 / ((float) _resamplingFrequency), SmootherCreator.getThresholdSmoother(), 0.0F);
//
Arrays.sort(allPeptides, Spectrum.comparePeakMzAsc);
allPeptides = peakCombiner.createFeaturesFromPeaks(_run, allPeptides);
java.util.List<Feature> features = new ArrayList<Feature>();
// for (Spectrum.Peak rawPeak : rawPeaks) {
// features.add(new Feature(rawPeak));
// }
for (Feature peptide : allPeptides) {
features.add(peptide);
}
return features;
}
@Override
public boolean isPeakRidgeWalkSmoothed() {
return peakRidgeWalkSmoothed;
}
@Override
public void setPeakRidgeWalkSmoothed(boolean peakRidgeWalkSmoothed) {
this.peakRidgeWalkSmoothed = peakRidgeWalkSmoothed;
}
}