33 #include "../../pappsoexception.h"
34 #include "../../massspectrum/massspectrum.h"
40 const QDir &temporary_dir)
41 :
pappso::MsRunXicExtractor(msrun_reader)
43 mpa_temporaryDirectory =
nullptr;
44 m_temporaryDirectory = temporary_dir.absolutePath();
48 :
pappso::MsRunXicExtractor(other)
51 m_temporaryDirectory = other.m_temporaryDirectory;
52 mpa_temporaryDirectory =
new QTemporaryDir(
53 QString(
"%1/msrun_%2_")
54 .arg(m_temporaryDirectory)
70 qDebug() << __FILE__ <<
" " << __FUNCTION__ <<
" " << __LINE__ <<
" "
74 QByteArray byte_array = filename.toUtf8();
76 for(
char c : byte_array)
85 qDebug() << __FILE__ <<
" " << __FUNCTION__ <<
" " << __LINE__;
90 catch(std::exception &error)
92 qDebug() << __FILE__ <<
" " << __FUNCTION__ <<
" " << __LINE__;
94 QObject::tr(
"Error reading file (%1) using : %2")
105 std::shared_ptr<Xic> msrunxic_sp = std::make_shared<Xic>(Xic());
107 std::vector<MsRunSliceSPtr> slice_list;
110 if(slice_list.size() == 0)
113 QObject::tr(
"Error getMsRunXicSp slice_list.size() == 0"));
119 DataPoint xic_element;
122 if((xic_element.x < rt_begin) || (xic_element.x > rt_end))
125 for(
auto &&msrun_slice : slice_list)
127 const MassSpectrum &spectrum = msrun_slice.get()->getSpectrum(i);
128 for(
auto &&peak : spectrum)
130 if(mz_range.contains(peak.x))
134 xic_element.y += peak.y;
138 if(xic_element.y < peak.y)
140 xic_element.y = peak.y;
146 msrunxic_sp.get()->push_back(xic_element);
149 return (msrunxic_sp);
152 std::vector<XicCstSPtr>
154 const std::vector<MzRange> &mz_range_list)
157 std::vector<XicCstSPtr> xic_list_return;
158 for(
auto &range : mz_range_list)
160 xic_list_return.push_back(
getXicCstSPtr(range, 0, 40000000));
162 return xic_list_return;
168 qDebug() << __FILE__ <<
" " << __FUNCTION__ <<
" " << __LINE__;
172 unsigned int slice_number;
173 std::map<unsigned int, MassSpectrum> spectrum_map;
190 spectrum_map.clear();
198 if(p_spectrum->size() > 0)
200 if(p_spectrum->begin()->x <
m_minMz)
202 m_minMz = p_spectrum->begin()->x;
206 if(p_spectrum->back().x >
m_maxMz)
208 m_maxMz = p_spectrum->back().x;
211 for(
auto &peak : *p_spectrum)
214 slice_number = peak.x;
216 std::pair<std::map<unsigned int, MassSpectrum>::iterator,
bool>
217 ret = spectrum_map.insert(std::pair<unsigned int, MassSpectrum>(
220 ret.first->second.push_back(peak);
232 qDebug() << __FILE__ <<
" " << __FUNCTION__ <<
" " << __LINE__;
238 std::map<unsigned int, MassSpectrum> &spectrum_map, std::size_t ipos)
242 for(
auto &&spectrum_pair : spectrum_map)
252 MassSpectrum &spectrum,
258 bool new_file =
false;
259 if(!slice_file.exists())
263 if(!slice_file.open(QIODevice::WriteOnly | QIODevice::Append))
266 QObject::tr(
"unable to open file %1").arg(slice_file.fileName()));
268 QDataStream stream(&slice_file);
272 stream << (quint32)slice_number;
276 stream << (quint32)ipos;
287 qDebug() << __FILE__ <<
" " << __FUNCTION__ <<
" " << __LINE__;
290 std::shared_ptr<MsRunSlice> msrun_slice_sp =
291 std::make_shared<MsRunSlice>(MsRunSlice());
295 if(!slice_file.exists())
297 msrun_slice_sp.get()->setSize(
m_rtSize);
298 msrun_slice_sp.get()->setSliceNumber(slice_number);
299 return msrun_slice_sp;
301 if(!slice_file.open(QIODevice::ReadOnly))
304 QObject::tr(
"unable to open file %1 in readonly")
305 .arg(slice_file.fileName()));
307 QDataStream stream(&slice_file);
309 stream >> *(msrun_slice_sp.get());
313 return msrun_slice_sp;
318 QObject::tr(
"error unserializing slice %1:\n%2")
320 .arg(error.
qwhat()));
322 qDebug() << __FILE__ <<
" " << __FUNCTION__ <<
" " << __LINE__;
325 std::vector<MsRunSliceSPtr>
329 std::vector<MsRunSliceSPtr> slice_list;
330 for(
unsigned int i = mz_range.lower(); i <= mz_range.upper(); i++)
335 return slice_sp.get()->getSliceNumber() == i;
339 slice_list.push_back(*it);
345 slice_list.push_back(slice_sp);