Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035 #ifndef OPENMS_FORMAT_MASCOTGENERICFILE_H
00036 #define OPENMS_FORMAT_MASCOTGENERICFILE_H
00037
00038 #include <OpenMS/DATASTRUCTURES/String.h>
00039 #include <OpenMS/SYSTEM/File.h>
00040 #include <OpenMS/CONCEPT/ProgressLogger.h>
00041 #include <OpenMS/DATASTRUCTURES/DefaultParamHandler.h>
00042 #include <OpenMS/KERNEL/StandardTypes.h>
00043
00044 #include <vector>
00045 #include <fstream>
00046
00047 namespace OpenMS
00048 {
00058 class OPENMS_DLLAPI MascotGenericFile :
00059 public ProgressLogger,
00060 public DefaultParamHandler
00061 {
00062 public:
00063
00065 MascotGenericFile();
00066
00068 virtual ~MascotGenericFile();
00069
00071 void store(const String & filename, const PeakMap & experiment);
00072
00074 void store(std::ostream & os, const String & filename, const PeakMap & experiment);
00075
00082 template <typename MapType>
00083 void load(const String & filename, MapType & exp)
00084 {
00085 if (!File::exists(filename))
00086 {
00087 throw Exception::FileNotFound(__FILE__, __LINE__, __PRETTY_FUNCTION__, filename);
00088 }
00089
00090 exp.reset();
00091
00092 std::ifstream is(filename.c_str());
00093 std::vector<std::pair<double, double> > spec;
00094 UInt charge(0);
00095 double pre_mz(0), pre_int(0), rt(-1);
00096 String title;
00097 UInt spectrum_number = 0;
00098 Size line_number = 0;
00099 while (getNextSpectrum_(is, spec, charge, pre_mz, pre_int, rt, title, line_number))
00100 {
00101 typename MapType::SpectrumType spectrum;
00102 for (std::vector<std::pair<double, double> >::const_iterator it = spec.begin(); it != spec.end(); ++it)
00103 {
00104 typename MapType::PeakType p;
00105 p.setPosition(it->first);
00106 p.setIntensity(it->second);
00107 spectrum.push_back(p);
00108 }
00109 spectrum.setMSLevel(2);
00110 spectrum.getPrecursors().resize(1);
00111 spectrum.getPrecursors()[0].setMZ(pre_mz);
00112 spectrum.getPrecursors()[0].setIntensity(pre_int);
00113 spectrum.getPrecursors()[0].setCharge(charge);
00114 spectrum.setRT(rt);
00115 if (title != "")
00116 {
00117 spectrum.setMetaValue("TITLE", title);
00118 title = "";
00119 }
00120
00121 spectrum.setNativeID(String("index=") + (spectrum_number++));
00122 exp.push_back(spectrum);
00123
00124
00125 spec.clear();
00126 charge = 0;
00127 pre_mz = 0;
00128 pre_int = 0;
00129 }
00130 }
00131
00139 std::pair<String, String> getHTTPPeakListEnclosure(const String & filename) const;
00140
00141 protected:
00142
00144 void writeParameterHeader_(const String & name, std::ostream & os);
00145
00147 void writeHeader_(std::ostream & os);
00148
00150 void writeSpectrum_(std::ostream & os, const PeakSpectrum & spec, const String & filename);
00151
00153 void writeMSExperiment_(std::ostream & os, const String & filename, const PeakMap & experiment);
00154
00156 bool getNextSpectrum_(std::istream & is, std::vector<std::pair<double, double> > & spectrum, UInt & charge, double & precursor_mz, double & precursor_int, double & rt, String & title, Size & line_number);
00157 };
00158
00159 }
00160
00161 #endif // OPENMS_FORMAT_MASCOTGENERICFILE_H