From: <ch...@us...> - 2008-11-25 16:34:20
|
Revision: 487 http://proteowizard.svn.sourceforge.net/proteowizard/?rev=487&view=rev Author: chambm Date: 2008-11-25 16:34:15 +0000 (Tue, 25 Nov 2008) Log Message: ----------- - fixed CVInfo properties returning unowned lists - fixed property setting from CLI to native shared_ptrs - added SpectrumList::dataProcessing() - added SpectrumList_Thresholder and SpectrumList_ChargeStateCalculator Modified Paths: -------------- trunk/pwiz/pwiz/utility/bindings/CLI/MSData.cpp trunk/pwiz/pwiz/utility/bindings/CLI/MSData.hpp trunk/pwiz/pwiz/utility/bindings/CLI/SharedCLI.hpp trunk/pwiz/pwiz/utility/bindings/CLI/cv.hpp trunk/pwiz/pwiz/utility/bindings/CLI/spectrum_processing.hpp Modified: trunk/pwiz/pwiz/utility/bindings/CLI/MSData.cpp =================================================================== --- trunk/pwiz/pwiz/utility/bindings/CLI/MSData.cpp 2008-11-25 16:33:26 UTC (rev 486) +++ trunk/pwiz/pwiz/utility/bindings/CLI/MSData.cpp 2008-11-25 16:34:15 UTC (rev 487) @@ -24,12 +24,17 @@ #include "MSData.hpp" //#include "../../../data/msdata/MSData.hpp" #include "pwiz/utility/misc/Exception.hpp" +#include "comdef.h" // for _com_error + + using System::Exception; using System::String; +using boost::shared_ptr; namespace b = pwiz::msdata; + namespace pwiz { namespace CLI { namespace msdata { @@ -311,7 +316,7 @@ System::String^ Software::id::get() {return gcnew System::String((*base_)->id.c_str());} void Software::id::set(System::String^ value) {(*base_)->id = ToStdString(value);} -CVParam^ Software::softwareParam::get() {return gcnew CVParam(&(*base_)->softwareParam);} +CVParam^ Software::softwareParam::get() {return gcnew CVParam(&(*base_)->softwareParam, this);} void Software::softwareParam::set(CVParam^ value) {(*base_)->softwareParam = **value->base_;} System::String^ Software::softwareParamVersion::get() {return gcnew System::String((*base_)->softwareParamVersion.c_str());} @@ -392,8 +397,8 @@ System::String^ AcquisitionSettings::id::get() {return gcnew System::String((*base_)->id.c_str());} void AcquisitionSettings::id::set(System::String^ value) {(*base_)->id = ToStdString(value);} -InstrumentConfiguration^ AcquisitionSettings::instrumentConfiguration::get() {return NATIVE_SHARED_PTR_TO_CLI(pwiz::msdata::InstrumentConfigurationPtr, InstrumentConfiguration, (*base_)->instrumentConfigurationPtr);} -void AcquisitionSettings::instrumentConfiguration::set(InstrumentConfiguration^ value) {(*base_)->instrumentConfigurationPtr = *value->base_;} +InstrumentConfiguration^ AcquisitionSettings::instrumentConfiguration::get() {return NATIVE_SHARED_PTR_TO_CLI(b::InstrumentConfigurationPtr, InstrumentConfiguration, (*base_)->instrumentConfigurationPtr);} +void AcquisitionSettings::instrumentConfiguration::set(InstrumentConfiguration^ value) {(*base_)->instrumentConfigurationPtr = CLI_TO_NATIVE_SHARED_PTR(b::InstrumentConfigurationPtr, value);} SourceFileList^ AcquisitionSettings::sourceFiles::get() {return gcnew SourceFileList(&(*base_)->sourceFilePtrs, this);} @@ -412,8 +417,8 @@ int Acquisition::number::get() {return base_->number;} void Acquisition::number::set(int value) {base_->number = value;} -SourceFile^ Acquisition::sourceFile::get() {return NATIVE_SHARED_PTR_TO_CLI(pwiz::msdata::SourceFilePtr, SourceFile, base_->sourceFilePtr);} -void Acquisition::sourceFile::set(SourceFile^ value) {base_->sourceFilePtr = *value->base_;} +SourceFile^ Acquisition::sourceFile::get() {return NATIVE_SHARED_PTR_TO_CLI(b::SourceFilePtr, SourceFile, base_->sourceFilePtr);} +void Acquisition::sourceFile::set(SourceFile^ value) {base_->sourceFilePtr = CLI_TO_NATIVE_SHARED_PTR(b::SourceFilePtr, value);} System::String^ Acquisition::spectrumID::get() {return gcnew System::String(base_->spectrumID.c_str());} void Acquisition::spectrumID::set(System::String^ value) {base_->spectrumID = ToStdString(value);} @@ -461,8 +466,8 @@ : ParamContainer(new b::Precursor()) {owner_ = nullptr; base_ = static_cast<b::Precursor*>(ParamContainer::base_);} -SourceFile^ Precursor::sourceFile::get() {return NATIVE_SHARED_PTR_TO_CLI(pwiz::msdata::SourceFilePtr, SourceFile, base_->sourceFilePtr);} -void Precursor::sourceFile::set(SourceFile^ value) {base_->sourceFilePtr = *value->base_;} +SourceFile^ Precursor::sourceFile::get() {return NATIVE_SHARED_PTR_TO_CLI(b::SourceFilePtr, SourceFile, base_->sourceFilePtr);} +void Precursor::sourceFile::set(SourceFile^ value) {base_->sourceFilePtr = CLI_TO_NATIVE_SHARED_PTR(b::SourceFilePtr, value);} System::String^ Precursor::spectrumID::get() {return gcnew System::String(base_->spectrumID.c_str());} void Precursor::spectrumID::set(System::String^ value) {base_->spectrumID = ToStdString(value);} @@ -492,7 +497,7 @@ {owner_ = nullptr; base_ = static_cast<b::Scan*>(ParamContainer::base_);} InstrumentConfiguration^ Scan::instrumentConfiguration::get() {return NATIVE_SHARED_PTR_TO_CLI(pwiz::msdata::InstrumentConfigurationPtr, InstrumentConfiguration, base_->instrumentConfigurationPtr);} -void Scan::instrumentConfiguration::set(InstrumentConfiguration^ value) {base_->instrumentConfigurationPtr = *value->base_;} +void Scan::instrumentConfiguration::set(InstrumentConfiguration^ value) {base_->instrumentConfigurationPtr = CLI_TO_NATIVE_SHARED_PTR(b::InstrumentConfigurationPtr, value);} bool Scan::empty() { @@ -531,8 +536,8 @@ : ParamContainer(new b::BinaryDataArray()) {base_ = new boost::shared_ptr<b::BinaryDataArray>(static_cast<b::BinaryDataArray*>(ParamContainer::base_));} -DataProcessing^ BinaryDataArray::dataProcessing::get() {return NATIVE_SHARED_PTR_TO_CLI(pwiz::msdata::DataProcessingPtr, DataProcessing, (*base_)->dataProcessingPtr);} -void BinaryDataArray::dataProcessing::set(DataProcessing^ value) {(*base_)->dataProcessingPtr = *value->base_;} +DataProcessing^ BinaryDataArray::dataProcessing::get() {return NATIVE_SHARED_PTR_TO_CLI(b::DataProcessingPtr, DataProcessing, (*base_)->dataProcessingPtr);} +void BinaryDataArray::dataProcessing::set(DataProcessing^ value) {(*base_)->dataProcessingPtr = CLI_TO_NATIVE_SHARED_PTR(b::DataProcessingPtr, value);} BinaryData^ BinaryDataArray::data::get() {return gcnew BinaryData(&(*base_)->data, this);} void BinaryDataArray::data::set(BinaryData^ value) {(*base_)->data = *value->base_;} @@ -626,11 +631,11 @@ System::UInt64 Spectrum::defaultArrayLength::get() {return (System::UInt64) (*base_)->defaultArrayLength;} void Spectrum::defaultArrayLength::set(System::UInt64 value) {(*base_)->defaultArrayLength = (size_t) value;} -DataProcessing^ Spectrum::dataProcessing::get() {return NATIVE_SHARED_PTR_TO_CLI(pwiz::msdata::DataProcessingPtr, DataProcessing, (*base_)->dataProcessingPtr);} -void Spectrum::dataProcessing::set(DataProcessing^ value) {(*base_)->dataProcessingPtr = *value->base_;} +DataProcessing^ Spectrum::dataProcessing::get() {return NATIVE_SHARED_PTR_TO_CLI(b::DataProcessingPtr, DataProcessing, (*base_)->dataProcessingPtr);} +void Spectrum::dataProcessing::set(DataProcessing^ value) {(*base_)->dataProcessingPtr = CLI_TO_NATIVE_SHARED_PTR(b::DataProcessingPtr, value);} -SourceFile^ Spectrum::sourceFile::get() {return NATIVE_SHARED_PTR_TO_CLI(pwiz::msdata::SourceFilePtr, SourceFile, (*base_)->sourceFilePtr);} -void Spectrum::sourceFile::set(SourceFile^ value) {(*base_)->sourceFilePtr = *value->base_;} +SourceFile^ Spectrum::sourceFile::get() {return NATIVE_SHARED_PTR_TO_CLI(b::SourceFilePtr, SourceFile, (*base_)->sourceFilePtr);} +void Spectrum::sourceFile::set(SourceFile^ value) {(*base_)->sourceFilePtr = CLI_TO_NATIVE_SHARED_PTR(b::SourceFilePtr, value);} SpectrumDescription^ Spectrum::spectrumDescription::get() {return gcnew SpectrumDescription(&(*base_)->spectrumDescription, this);} void Spectrum::spectrumDescription::set(SpectrumDescription^ value) {(*base_)->spectrumDescription = *value->base_;} @@ -778,10 +783,21 @@ Spectrum^ SpectrumList::spectrum(int index, bool getBinaryData) { try { return gcnew Spectrum(new b::SpectrumPtr((*base_)->spectrum((size_t) index, getBinaryData))); } - catch (exception& e) { throw gcnew Exception(gcnew String(e.what())); } + catch (exception& e) { throw gcnew Exception("[SpectrumList::spectrum()] " + gcnew String(e.what())); } + catch (_com_error& e) { throw gcnew Exception("[SpectrumList::spectrum()] COM error: " + gcnew String(e.ErrorMessage())); } + catch (...) { throw gcnew Exception("[SpectrumList::spectrum()] Unhandled exception"); } } +DataProcessing^ SpectrumList::dataProcessing() +{ + const shared_ptr<const b::DataProcessing> cdp = (*base_)->dataProcessingPtr(); + if (!cdp.get()) + return nullptr; + b::DataProcessingPtr dp = boost::const_pointer_cast<b::DataProcessing>(cdp); + return NATIVE_SHARED_PTR_TO_CLI(b::DataProcessingPtr, DataProcessing, dp); +} + SpectrumListSimple::SpectrumListSimple() : SpectrumList(new boost::shared_ptr<b::SpectrumList>(new b::SpectrumListSimple())) {base_ = reinterpret_cast<boost::shared_ptr<b::SpectrumListSimple>*>(SpectrumList::base_);} @@ -842,12 +858,15 @@ Chromatogram^ ChromatogramList::chromatogram(int index) { - return gcnew Chromatogram(new b::ChromatogramPtr((*base_)->chromatogram((size_t) index, false))); + return chromatogram(index, false); } Chromatogram^ ChromatogramList::chromatogram(int index, bool getBinaryData) { - return gcnew Chromatogram(new b::ChromatogramPtr((*base_)->chromatogram((size_t) index, getBinaryData))); + try { return gcnew Chromatogram(new b::ChromatogramPtr((*base_)->chromatogram((size_t) index, getBinaryData))); } + catch (exception& e) { throw gcnew Exception("[ChromatogramList::chromatogram()] " + gcnew String(e.what())); } + catch (_com_error& e) { throw gcnew Exception("[ChromatogramList::chromatogram()] COM error: " + gcnew String(e.ErrorMessage())); } + catch (...) { throw gcnew Exception("[ChromatogramList::chromatogram()] Unhandled exception"); } } @@ -891,11 +910,11 @@ System::String^ Run::id::get() {return gcnew System::String(base_->id.c_str());} void Run::id::set(System::String^ value) {base_->id = ToStdString(value);} -InstrumentConfiguration^ Run::defaultInstrumentConfiguration::get() {return NATIVE_SHARED_PTR_TO_CLI(pwiz::msdata::InstrumentConfigurationPtr, InstrumentConfiguration, base_->defaultInstrumentConfigurationPtr);} -void Run::defaultInstrumentConfiguration::set(InstrumentConfiguration^ value) {base_->defaultInstrumentConfigurationPtr = *value->base_;} +InstrumentConfiguration^ Run::defaultInstrumentConfiguration::get() {return NATIVE_SHARED_PTR_TO_CLI(b::InstrumentConfigurationPtr, InstrumentConfiguration, base_->defaultInstrumentConfigurationPtr);} +void Run::defaultInstrumentConfiguration::set(InstrumentConfiguration^ value) {base_->defaultInstrumentConfigurationPtr = CLI_TO_NATIVE_SHARED_PTR(b::InstrumentConfigurationPtr, value);} -Sample^ Run::sample::get() {return NATIVE_SHARED_PTR_TO_CLI(pwiz::msdata::SamplePtr, Sample, base_->samplePtr);} -void Run::sample::set(Sample^ value) {base_->samplePtr = *value->base_;} +Sample^ Run::sample::get() {return NATIVE_SHARED_PTR_TO_CLI(b::SamplePtr, Sample, base_->samplePtr);} +void Run::sample::set(Sample^ value) {base_->samplePtr = CLI_TO_NATIVE_SHARED_PTR(b::SamplePtr, value);} System::String^ Run::startTimeStamp::get() {return gcnew System::String(base_->startTimeStamp.c_str());} void Run::startTimeStamp::set(System::String^ value) {base_->startTimeStamp = ToStdString(value);} @@ -903,10 +922,10 @@ SourceFileList^ Run::sourceFiles::get() {return gcnew SourceFileList(&base_->sourceFilePtrs, this);} void Run::sourceFiles::set(SourceFileList^ value) {base_->sourceFilePtrs = *value->base_;} -SpectrumList^ Run::spectrumList::get() {return NATIVE_OWNED_SHARED_PTR_TO_CLI(pwiz::msdata::SpectrumListPtr, SpectrumList, base_->spectrumListPtr, this);} +SpectrumList^ Run::spectrumList::get() {return NATIVE_OWNED_SHARED_PTR_TO_CLI(b::SpectrumListPtr, SpectrumList, base_->spectrumListPtr, this);} void Run::spectrumList::set(SpectrumList^ value) {base_->spectrumListPtr = *value->base_;} -ChromatogramList^ Run::chromatogramList::get() {return NATIVE_OWNED_SHARED_PTR_TO_CLI(pwiz::msdata::ChromatogramListPtr, ChromatogramList, base_->chromatogramListPtr, this);} +ChromatogramList^ Run::chromatogramList::get() {return NATIVE_OWNED_SHARED_PTR_TO_CLI(b::ChromatogramListPtr, ChromatogramList, base_->chromatogramListPtr, this);} void Run::chromatogramList::set(ChromatogramList^ value) {base_->chromatogramListPtr = *value->base_;} bool Run::empty() Modified: trunk/pwiz/pwiz/utility/bindings/CLI/MSData.hpp =================================================================== --- trunk/pwiz/pwiz/utility/bindings/CLI/MSData.hpp 2008-11-25 16:33:26 UTC (rev 486) +++ trunk/pwiz/pwiz/utility/bindings/CLI/MSData.hpp 2008-11-25 16:34:15 UTC (rev 487) @@ -1782,6 +1782,12 @@ /// <para>- client may assume the underlying Spectrum^ is valid</para> /// </summary> virtual Spectrum^ spectrum(int index, bool getBinaryData); + + /// <summary> + /// returns the data processing affecting spectra retrieved through this interface + /// <para>- may return a null shared pointer</para> + /// </summary> + virtual DataProcessing^ dataProcessing(); }; Modified: trunk/pwiz/pwiz/utility/bindings/CLI/SharedCLI.hpp =================================================================== --- trunk/pwiz/pwiz/utility/bindings/CLI/SharedCLI.hpp 2008-11-25 16:33:26 UTC (rev 486) +++ trunk/pwiz/pwiz/utility/bindings/CLI/SharedCLI.hpp 2008-11-25 16:34:15 UTC (rev 487) @@ -70,7 +70,7 @@ #define NATIVE_VALUE_TO_CLI(NativeType, CLIType, NativeValue) ((CLIType) NativeValue) #define STD_STRING_TO_CLI_STRING(NativeType, CLIType, StdString) gcnew CLIType((StdString).c_str()) -#define CLI_TO_NATIVE_SHARED_PTR(NativeType, CLIObject) NativeType(*(CLIObject)->base_) +#define CLI_TO_NATIVE_SHARED_PTR(NativeType, CLIObject) (CLIObject == nullptr ? NativeType() : NativeType(*(CLIObject)->base_)) #define CLI_TO_NATIVE_REFERENCE(NativeType, CLIObject) NativeType(*(CLIObject)->base_) #define CLI_SHARED_PTR_TO_NATIVE_REFERENCE(NativeType, CLIObject) NativeType(**(CLIObject)->base_) #define CLI_VALUE_TO_NATIVE_VALUE(NativeType, CLIObject) ((NativeType) CLIObject) Modified: trunk/pwiz/pwiz/utility/bindings/CLI/cv.hpp =================================================================== --- trunk/pwiz/pwiz/utility/bindings/CLI/cv.hpp 2008-11-25 16:33:26 UTC (rev 486) +++ trunk/pwiz/pwiz/utility/bindings/CLI/cv.hpp 2008-11-25 16:34:15 UTC (rev 487) @@ -3421,17 +3421,17 @@ /// <summary> /// returns a list of terms which this term has an IS_A relationship with /// </summary> - property CVIDList^ parentsIsA { CVIDList^ get() {return gcnew CVIDList(&base_->parentsIsA);} } + property CVIDList^ parentsIsA { CVIDList^ get() {return gcnew CVIDList(&base_->parentsIsA, this);} } /// <summary> /// returns a list of terms which this term has a PART_OF relationship with /// </summary> - property CVIDList^ parentsPartOf { CVIDList^ get() {return gcnew CVIDList(&base_->parentsPartOf);} } + property CVIDList^ parentsPartOf { CVIDList^ get() {return gcnew CVIDList(&base_->parentsPartOf, this);} } /// <summary> /// returns a list of term names synonymous with this term /// </summary> - property StringList^ exactSynonyms { StringList^ get() {return gcnew StringList(&base_->exactSynonyms);} } + property StringList^ exactSynonyms { StringList^ get() {return gcnew StringList(&base_->exactSynonyms, this);} } CVInfo() : base_(new pwiz::msdata::CVInfo()) {} Modified: trunk/pwiz/pwiz/utility/bindings/CLI/spectrum_processing.hpp =================================================================== --- trunk/pwiz/pwiz/utility/bindings/CLI/spectrum_processing.hpp 2008-11-25 16:33:26 UTC (rev 486) +++ trunk/pwiz/pwiz/utility/bindings/CLI/spectrum_processing.hpp 2008-11-25 16:34:15 UTC (rev 487) @@ -10,6 +10,8 @@ #include "pwiz/analysis/spectrum_processing/SpectrumList_Sorter.hpp" #include "pwiz/analysis/spectrum_processing/SpectrumList_NativeCentroider.hpp" #include "pwiz/analysis/spectrum_processing/SpectrumList_SavitzkyGolaySmoother.hpp" +#include "pwiz/analysis/spectrum_processing/SpectrumList_Thresholder.hpp" +#include "pwiz/analysis/spectrum_processing/SpectrumList_ChargeStateCalculator.hpp" #include "pwiz/utility/misc/IntegerSet.hpp" #include <boost/shared_ptr.hpp> #include <boost/logic/tribool.hpp> @@ -254,6 +256,149 @@ }; +/// <summary> +/// determines the method of thresholding and the meaning of the threshold value +/// </summary> +public enum class ThresholdingBy_Type +{ + /// <summary> + /// keep the {threshold} [most|least] intense data points + /// - {threshold} is rounded to the nearest integer + /// - if the {threshold} falls within equally intense data points, all data points with that intensity are removed + /// </summary> + ThresholdingBy_Count, + + /// <summary> + /// keep the {threshold} [most|least] intense data points + /// - {threshold} is rounded to the nearest integer + /// - if the {threshold} falls within equally intense data points, all data points with that intensity are kept + /// </summary> + ThresholdingBy_CountAfterTies, + + /// keep data points ranked [better|worse] than {threshold} + /// - {threshold} is rounded to the nearest integer + /// - rank 1 is the most intense + // TODO: By_CompetitionRank, + + /// keep data points ranked [better|worse] than {threshold} + /// - rank 1 is the most intense + // TODO: By_FractionalRank, + + /// <summary> + /// keep data points [more|less] absolutely intense than {threshold} + /// </summary> + ThresholdingBy_AbsoluteIntensity, + + /// <summary> + /// keep data points [more|less] relatively intense than {threshold} + /// - {threshold} is each data point's fraction of the base peak intensity (in the range [0,1]) + /// </summary> + ThresholdingBy_FractionOfBasePeakIntensity, + + /// <summary> + /// keep data points [more|less] relatively intense than {threshold} + /// - {threshold} is each data point's fraction of the total intensity, aka total ion current (in the range [0,1]) + /// </summary> + ThresholdingBy_FractionOfTotalIntensity, + + /// <summary> + /// keep data points that are part of the {threshold} [most|least] intense fraction + /// - {threshold} is the fraction of TIC to keep, i.e. the TIC of the kept data points is {threshold} * original TIC + /// </summary> + ThresholdingBy_FractionOfTotalIntensityCutoff +}; + + +/// <summary> +/// determines the orientation of the thresholding +/// </summary> +public enum class ThresholdingOrientation +{ + Orientation_MostIntense, /// <summary>thresholder removes the least intense data points</summary> + Orientation_LeastIntense /// <summary>thresholder removes the most intense data points</summary> +}; + + +/// <summary> +/// SpectrumList implementation that returns spectra with low or high intensity data points removed (depending on the configuration) +/// </summary> +public ref class SpectrumList_Thresholder : public msdata::SpectrumList +{ + internal: virtual ~SpectrumList_Thresholder() + { + // base class destructor will delete the shared pointer + } + pwiz::analysis::SpectrumList_Thresholder* base_; + + public: + + SpectrumList_Thresholder(msdata::SpectrumList^ inner, + ThresholdingBy_Type byType, + double threshold) + : msdata::SpectrumList(0) + { + base_ = new pwiz::analysis::SpectrumList_Thresholder( + *inner->base_, + (pwiz::analysis::ThresholdingBy_Type) byType, + threshold); + msdata::SpectrumList::base_ = new boost::shared_ptr<pwiz::msdata::SpectrumList>(base_); + } + + SpectrumList_Thresholder(msdata::SpectrumList^ inner, + ThresholdingBy_Type byType, + double threshold, + ThresholdingOrientation orientation) + : msdata::SpectrumList(0) + { + base_ = new pwiz::analysis::SpectrumList_Thresholder( + *inner->base_, + (pwiz::analysis::ThresholdingBy_Type) byType, + threshold, + (pwiz::analysis::ThresholdingOrientation) orientation); + msdata::SpectrumList::base_ = new boost::shared_ptr<pwiz::msdata::SpectrumList>(base_); + } + + /// thresholding works on any SpectrumList + static bool accept(msdata::SpectrumList^ inner) + {return pwiz::analysis::SpectrumList_Thresholder::accept(*inner->base_);} +}; + + +/// <summary> +/// SpectrumList implementation that assigns (probable) charge states to tandem mass spectra +/// </summary> +public ref class SpectrumList_ChargeStateCalculator : public msdata::SpectrumList +{ + internal: virtual ~SpectrumList_ChargeStateCalculator() + { + // base class destructor will delete the shared pointer + } + pwiz::analysis::SpectrumList_ChargeStateCalculator* base_; + + public: + + SpectrumList_ChargeStateCalculator(msdata::SpectrumList^ inner, + bool overrideExistingChargeState, + int maxMultipleCharge, + int minMultipleCharge, + double intensityFractionBelowPrecursorForSinglyCharged) + : msdata::SpectrumList(0) + { + base_ = new pwiz::analysis::SpectrumList_ChargeStateCalculator( + *inner->base_, + overrideExistingChargeState, + maxMultipleCharge, + minMultipleCharge, + intensityFractionBelowPrecursorForSinglyCharged); + msdata::SpectrumList::base_ = new boost::shared_ptr<pwiz::msdata::SpectrumList>(base_); + } + + /// charge calculation works on any SpectrumList + static bool accept(msdata::SpectrumList^ inner) + {return pwiz::analysis::SpectrumList_ChargeStateCalculator::accept(*inner->base_);} +}; + + } // namespace analysis } // namespace CLI } // namespace pwiz This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |