34#include <QRegularExpression>
54 if(!tmp_dir.isEmpty())
66 QObject::tr(
"ERROR: unable to create temporary directory %1\n Please "
67 "check file system permissions")
94 m_tandemBinary = settings.value(
"path/tandem_binary",
"/usr/bin/tandem").toString();
109 QFileInfo tandem_exe(tandem_bin_path);
110 if(!tandem_exe.exists())
114 QObject::tr(
"X!Tandem software not found at %1.\nPlease check the X!Tandem "
115 "installation on your computer and set tandem.exe path.")
116 .arg(tandem_exe.absoluteFilePath()));
118 if(!tandem_exe.isReadable())
122 QObject::tr(
"Please check permissions on X!Tandem software found at %1 "
123 "(file not readable).")
124 .arg(tandem_exe.absoluteFilePath()));
126 if(!tandem_exe.isExecutable())
130 QObject::tr(
"Please check permissions on X!Tandem software found at %1 "
131 "(file not executable).")
132 .arg(tandem_exe.absoluteFilePath()));
136 QString version_return;
137 QStringList arguments;
141 QProcess *xt_process =
new QProcess();
144 xt_process->start(tandem_bin_path, arguments);
146 if(!xt_process->waitForStarted())
149 QObject::tr(
"X!Tandem %1 process failed to start").arg(
m_tandemVersion));
152 while(xt_process->waitForReadyRead(1000))
161 QByteArray result = xt_process->readAll();
164 qDebug() << result.constData();
168 QRegularExpression parse_version(
"(.*) TANDEM ([A-Z,a-z, ]+) \\(([^ ,^\\)]*)(.*)");
169 qDebug() << parse_version;
172 QRegularExpressionMatch match_parse_version = parse_version.match(result.constData());
173 if(match_parse_version.hasMatch())
175 version_return = QString(
"X!Tandem %1 %2")
176 .arg(match_parse_version.captured(2))
177 .arg(match_parse_version.captured(3));
182 QObject::tr(
"This executable %1 may not be a valid X!Tandem software. "
183 "Please check your X!Tandem installation.")
184 .arg(tandem_bin_path));
187 QProcess::ExitStatus Status = xt_process->exitStatus();
193 .arg(tandem_bin_path)
194 .arg(arguments.join(
" ").arg(result.data())));
197 return version_return;
203 QString message(
m_xtProcess->readAllStandardOutput());
206 if(message.toLower().contains(
"error"))
235 const QString &final_tandem_output,
236 const QString &original_msdata_file_name)
238 mp_monitor->setStatus(QObject::tr(
"Rewriting X!Tandem XML result file"));
259 if(wrap_output.
readFile(tmp_tandem_output))
265 .arg(tmp_tandem_output)
278 if(preset_handler.
readFile(tandem_preset_file))
281 int ideal_number_of_thread = QThread::idealThreadCount();
283 qDebug() <<
" cpu_number=" << cpu_number;
285 if(cpu_number > ideal_number_of_thread)
287 cpu_number = ideal_number_of_thread;
293 QThreadPool::globalInstance()->setMaxThreadCount(cpu_number);
295 qDebug() <<
" maxThreadCount=" << QThreadPool::globalInstance()->maxThreadCount();
300 if(!ms2_filters_str.isEmpty())
307 "chargeDeconvolution|0.02dalton mzExclusion|0.01dalton");
313 .arg(tandem_preset_file)
333 mzxml_data_file_name, wrapped_tandem_input, wrapped_tandem_output);
336 if(wrap_tandem_input.
readFile(tandem_input_file))
342 .arg(tandem_input_file)
400 original_msdata_file_name);
432 mp_monitor->setStatus(QObject::tr(
"Converting %1 to mzXML %2").arg(origin).arg(target));
438 if(tims2_reader !=
nullptr)
452 QFile output_file(target);
455 if(output_file.open(QIODevice::WriteOnly))
466 p_mzxml_output->
write(p_reader.get());
468 p_mzxml_output->
close();
470 delete p_mzxml_output;
474 QObject::tr(
"Conversion finished in %1 seconds").arg(
m_conversionTime / 1000));
479 QObject::tr(
"unable to write into %1 mzXML output file").arg(target));
506 QObject::tr(
"X!Tandem stopped by the user processing on file %1").arg(tandem_input_file));
509 QStringList arguments;
513 arguments << tandem_input_file;
520 &QProcess::readyReadStandardOutput,
524 &QProcess::readyReadStandardError,
531 mp_monitor->setStatus(QObject::tr(
"Running X!Tandem"));
549 QObject::tr(
"X!Tandem stopped by the user processing on file %1")
550 .arg(tandem_input_file));
554 QProcess::ExitStatus Status =
m_xtProcess->exitStatus();
557 if(Status != QProcess::ExitStatus::NormalExit)
561 QObject::tr(
"error executing X!Tandem Status != 0 : %1").arg(
m_tandemBinary));
MsRunReaderSPtr msRunReaderSPtr(MsRunIdCstSPtr ms_run_id)
void setPreferredFileReaderType(Enums::MsDataFormat format, Enums::FileReaderType reader_type)
given an mz format, explicitly set the preferred reader
Enums::MsDataFormat getFileFormat() const
get the raw format of mz data
std::vector< MsRunIdCstSPtr > getMsRunIds()
void setReadAhead(bool read_ahead)
void write(MsRunReader *p_msrunreader)
void maskMs1(bool mask_ms1)
QTemporaryDir * mpa_temporaryDirectory
void run(UiMonitorInterface &monitor, const QString &tandem_input_file)
run a tandem job
void setTandemBinaryPath(const QString &tandem_binary_path)
void readyReadStandardError()
bool m_convertMzDataUsingSpectrumIndex
UiMonitorInterface * mp_monitor
void readyReadStandardOutput()
bool convertOrginalMsData2mzXmlData(const QString &origin, const QString &target)
void readTandemPresetFile(const QString &tandem_preset_file)
std::shared_ptr< FilterSuiteString > msp_ms2FilterSuiteString
void wrapTandemInputFile(const QString &tandem_input_file)
void writeFinalTandemOutput(const QString &tmp_tandem_output, const QString &final_tandem_output, const QString &original_msdata_file_name)
tandem output modification tandem output is modified to contain the Bruker's file as input and centro...
TandemWrapperRun(const QString &tandem_binary, const QString &tmp_dir)
prepare a tandem run
QString getMs2FilterSuiteString() const
gets the list of filters used on MS2 spectrum
void runTandem(const QString &tandem_input_file)
run a tandem job
Enums::MsDataFormat m_mzFormat
const QString checkXtandemVersion(const QString &tandem_bin_path)
void setMs2FilterCstSPtr(pappso::FilterInterfaceCstSPtr filter)
void setMs2BuiltinCentroid(bool centroid)
enable or disable simple centroid filter on raw tims data for MS2
void setInputParameters(const QString &label_name_attribute, const QString &input_value)
QString errorString() const
virtual bool readFile(const QString &fileName)
const QString getMs2FiltersOptions() const
int getNumberOfThreads() const
tries to keep as much as possible monoisotopes, removing any possible C13 peaks and changes multichar...
std::shared_ptr< MsRunReader > MsRunReaderSPtr