32 #include <QThreadPool>
33 #include <QtConcurrent>
34 #include "../processing/uimonitor/uimonitorvoid.h"
42 : msp_msrun_reader(msrun_reader)
49 : msp_msrun_reader(other.msp_msrun_reader)
66 double range_in_seconds)
97 int number_of_threads = QThreadPool::globalInstance()->maxThreadCount();
99 if(number_of_threads == 1)
105 monitor.
setStatus(QObject::tr(
"parallelized extraction of %1 XICs")
106 .arg(xic_coord_list.size()));
108 std::size_t chunck_size = xic_coord_list.size() / number_of_threads;
110 if(chunck_size < 1000)
113 struct parallelExtractChunck
115 std::vector<XicCoordSPtr>::iterator it_xic_coord_begin;
116 std::vector<XicCoordSPtr>::iterator it_xic_coord_end;
119 std::vector<parallelExtractChunck> chunck_list;
121 for(
auto it = xic_coord_list.begin(); it != xic_coord_list.end();)
123 qDebug() <<
"chunck_size=" << chunck_size;
124 parallelExtractChunck chunck;
125 chunck.it_xic_coord_begin = it;
126 for(std::size_t i = 0; i < chunck_size && it != xic_coord_list.end();
131 chunck.it_xic_coord_end = it;
132 chunck_list.push_back(chunck);
138 std::function<std::size_t(
const parallelExtractChunck &)> extractChunck =
139 [
self](
const parallelExtractChunck &extract_chunck) {
142 self->protectedExtractXicCoordSPtrList(
144 extract_chunck.it_xic_coord_begin,
145 extract_chunck.it_xic_coord_end);
146 self->postExtractionProcess(monitor,
147 extract_chunck.it_xic_coord_begin,
148 extract_chunck.it_xic_coord_end);
155 std::function<void(std::size_t & result,
const std::size_t &value)>
157 [monitorRef](std::size_t &result [[maybe_unused]],
158 const std::size_t &value
159 [[maybe_unused]]) { monitorRef->
count(); };
162 QFuture<std::size_t>
res =
163 QtConcurrent::mappedReduced<std::size_t>(chunck_list.begin(),
167 QtConcurrent::UnorderedReduce);
175 res.waitForFinished();
186 QObject::tr(
"extracting %1 XICs").arg(xic_coord_list.size()));
189 monitor, xic_coord_list.begin(), xic_coord_list.end());
197 std::vector<XicCoordSPtr>::iterator it_xic_coord_list_begin,
198 std::vector<XicCoordSPtr>::iterator it_xic_coord_list_end)
204 QObject::tr(
"filtering %1 XICs")
205 .arg(std::distance(it_xic_coord_list_begin, it_xic_coord_list_end)));
206 for(
auto it = it_xic_coord_list_begin; it != it_xic_coord_list_end; it++)
209 *(it->get()->xicSptr.get()));
virtual void setStatus(const QString &status)=0
current status of the process
virtual void setTotalSteps(std::size_t total_number_of_steps)
use it if the number of steps is known in an algorithm the total number of steps is usefull to report...
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 MsRunId > MsRunIdCstSPtr
std::shared_ptr< const FilterInterface > FilterInterfaceCstSPtr