40 const QDir &temporary_dir)
53 new QTemporaryDir(QString(
"%1/msrun_%2_")
80 .arg(errora.
qwhat()));
82 catch(std::exception &error)
95 std::vector<XicCoordSPtr>::iterator it_xic_coord_list_begin,
96 std::vector<XicCoordSPtr>::iterator it_xic_coord_list_end)
100 return a.get()->mzRange.getMz() <
b.get()->mzRange.getMz();
103 for(
auto it = it_xic_coord_list_begin; it != it_xic_coord_list_end; it++)
113 std::shared_ptr<Xic> msrunxic_sp = xic_coord.
xicSptr;
119 std::vector<MsRunSliceSPtr> slice_list;
122 if(slice_list.size() == 0)
133 if((xic_element.
x < rt_begin) || (xic_element.
x > rt_end))
136 for(
auto &&msrun_slice : slice_list)
138 const MassSpectrum &spectrum = msrun_slice.get()->getSpectrum(i);
139 for(
auto &&peak : spectrum)
145 xic_element.
y += peak.y;
149 if(xic_element.
y < peak.y)
151 xic_element.
y = peak.y;
157 msrunxic_sp.get()->push_back(xic_element);
168 unsigned int slice_number;
169 std::map<unsigned int, MassSpectrum> spectrum_map;
186 spectrum_map.clear();
190 spectrum =
msp_msrun_reader.get()->massSpectrumCstSPtr(msrun_point.spectrum_index);
193 if(p_spectrum->size() > 0)
195 if(p_spectrum->begin()->x <
m_minMz)
197 m_minMz = p_spectrum->begin()->x;
201 if(p_spectrum->back().x >
m_maxMz)
203 m_maxMz = p_spectrum->back().x;
206 for(
auto &peak : *p_spectrum)
209 slice_number = peak.x;
211 std::pair<std::map<unsigned int, MassSpectrum>::iterator,
bool> ret =
213 std::pair<unsigned int, MassSpectrum>(slice_number,
MassSpectrum()));
215 ret.first->second.push_back(peak);
237 for(
auto &&spectrum_pair : spectrum_map)
252 bool new_file =
false;
253 if(!slice_file.exists())
257 if(!slice_file.open(QIODevice::WriteOnly | QIODevice::Append))
260 QObject::tr(
"unable to open file %1").arg(slice_file.fileName()));
262 QDataStream stream(&slice_file);
266 stream << (quint32)slice_number;
270 stream << (quint32)ipos;
284 std::shared_ptr<MsRunSlice> msrun_slice_sp = std::make_shared<MsRunSlice>(
MsRunSlice());
287 if(!slice_file.exists())
289 msrun_slice_sp.get()->setSize(
m_rtSize);
290 msrun_slice_sp.get()->setSliceNumber(slice_number);
291 return msrun_slice_sp;
293 if(!slice_file.open(QIODevice::ReadOnly))
296 QObject::tr(
"unable to open file %1 in readonly").arg(slice_file.fileName()));
298 QDataStream stream(&slice_file);
300 stream >> *(msrun_slice_sp.get());
304 return msrun_slice_sp;
309 QObject::tr(
"error unserializing slice %1:\n%2").arg(slice_number).arg(error.
qwhat()));
314std::vector<MsRunSliceSPtr>
318 std::vector<MsRunSliceSPtr> slice_list;
319 for(
unsigned int i = mz_range.
lower(); i <= mz_range.
upper(); i++)
321 auto it = std::find_if(
324 [i](
const MsRunSliceSPtr &slice_sp) { return slice_sp.get()->getSliceNumber() == i; });
327 slice_list.push_back(*it);
333 slice_list.push_back(slice_sp);
Class to represent a mass spectrum.
pappso_double lower() const
pappso_double upper() const
bool contains(pappso_double) const
virtual const QString & qwhat() const
virtual void count()=0
count steps report when a step is computed in an algorithm
tries to keep as much as possible monoisotopes, removing any possible C13 peaks and changes multichar...
std::shared_ptr< MsRunReader > MsRunReaderSPtr
std::shared_ptr< const MsRunSlice > MsRunSliceSPtr
std::shared_ptr< const MassSpectrum > MassSpectrumCstSPtr
std::shared_ptr< XicCoord > XicCoordSPtr
coordinates of the XIC to extract and the resulting XIC after extraction
XicSPtr xicSptr
extracted xic
double rtTarget
the targeted retention time to extract around intended in seconds, and related to one msrun....
MzRange mzRange
the mass to extract