libpappsomspp
Library for mass spectrometry
pappso::TandemWrapperRun Class Reference

#include <tandemwrapperrun.h>

Inheritance diagram for pappso::TandemWrapperRun:

Public Member Functions

 TandemWrapperRun (const QString &tandem_binary, const QString &tmp_dir, const QString &centroid_options)
 prepare a tandem run More...
 
void run (const QString &tandem_input_file, QTextStream &output_stream, QTextStream &error_stream)
 run a tandem job More...
 
void readTandemPresetFile (const QString &tandem_preset_file)
 
 ~TandemWrapperRun ()
 

Private Slots

void readyReadStandardOutput ()
 
void readyReadStandardError ()
 

Private Member Functions

void setTandemBinaryPath (const QString &tandem_binary_path)
 
bool shouldIstop ()
 
const QString checkXtandemVersion (const QString &tandem_bin_path)
 
void wrapTandemInputFile (const QString &tandem_input_file)
 
void convertOrginalMsData2mzXmlData (const QString &origin, const QString &target) const
 
void runTandem (const QString &tandem_input_file)
 run a tandem job More...
 
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 centroidization parameters More...
 

Private Attributes

QString m_tandemBinary
 
QString m_tandemVersion
 
QString m_tmpDir
 
QString m_centroidOptions
 
int m_maxTandemRunTimeMs = (60000 * 60 * 24)
 
QProcess * m_xtProcess = nullptr
 
QTextStream * mp_outputStream = nullptr
 
QTextStream * mp_errorStream = nullptr
 
QTemporaryDir * mpa_temporaryDirectory = nullptr
 

Detailed Description

Definition at line 59 of file tandemwrapperrun.h.

Constructor & Destructor Documentation

◆ TandemWrapperRun()

pappso::TandemWrapperRun::TandemWrapperRun ( const QString &  tandem_binary,
const QString &  tmp_dir,
const QString &  centroid_options 
)

prepare a tandem run

Parameters
tandem_binaryfile path to tandem.exe if not set, a default value is given in QSettings
tmp_dirtemporary directory, where to write mzXML file conversion if not set, a default value is given in QSettings
centroid_optionscontrols the way MS2 spectrum are centroided from raw bruker's data if not set, a default value is given in QSettings

Definition at line 64 of file tandemwrapperrun.cpp.

69 {
70  if(mpa_temporaryDirectory != nullptr)
71  {
73  }
74 }
75 
76 void
77 TandemWrapperRun::setTandemBinaryPath(const QString &tandem_binary_path)
78 {
79 
80 
81  m_tandemBinary = tandem_binary_path;
82  QSettings settings;
83  if(m_tandemBinary.isEmpty())
84  {

◆ ~TandemWrapperRun()

pappso::TandemWrapperRun::~TandemWrapperRun ( )

Destructor

Definition at line 86 of file tandemwrapperrun.cpp.

Member Function Documentation

◆ checkXtandemVersion()

const QString pappso::TandemWrapperRun::checkXtandemVersion ( const QString &  tandem_bin_path)
private

Definition at line 115 of file tandemwrapperrun.cpp.

120  {
121  // dir.path() returns the unique directory path
123  QObject::tr("Please check permissions on X!Tandem software found at %1 "
124  "(file not executable).")
125  .arg(tandem_exe.absoluteFilePath()));
126  }
127 
128 
129  QString version_return;
130  QStringList arguments;
131 
132  arguments << "-v";
133 
134  QProcess *xt_process = new QProcess();
135  // hk_process->setWorkingDirectory(QFileInfo(_hardklor_exe).absolutePath());
136 
137  xt_process->start(tandem_bin_path, arguments);
138 
139  if(!xt_process->waitForStarted())
140  {
142  QObject::tr("X!Tandem %1 process failed to start")
143  .arg(m_tandemVersion));
144  }
145 
146  while(xt_process->waitForReadyRead(1000))
147  {
148  }
149  /*
150  if (!xt_process->waitForFinished(_max_xt_time_ms)) {
151  throw pappso::PappsoException(QObject::tr("can't wait for X!Tandem process
152  to finish : timeout at %1").arg(_max_xt_time_ms));
153  }
154  */
155  QByteArray result = xt_process->readAll();
156 
157 
158  qDebug() << result.constData();
159 
160  // X! TANDEM Jackhammer TPP (2013.06.15.1 - LabKey, Insilicos, ISB)
161 
162  QRegExp parse_version("(.*) TANDEM ([A-Z,a-z, ]+) \\(([^ ,^\\)]*)(.*)");
163  qDebug() << parse_version;
164  // Pattern patt = Pattern.compile("X! TANDEM [A-Z]+ \\((.*)\\)",
165  // Pattern.CASE_INSENSITIVE);
166 
167  if(parse_version.exactMatch(result.constData()))
168  {
169  version_return = QString("X!Tandem %1 %2")
170  .arg(parse_version.capturedTexts()[2])
171  .arg(parse_version.capturedTexts()[3]); //.join(" ");
172  }
173  else
174  {
176  QObject::tr("This executable %1 may not be a valid X!Tandem software. "
177  "Please check your X!Tandem installation.")
178  .arg(tandem_bin_path));
179  }
180 
181  QProcess::ExitStatus Status = xt_process->exitStatus();
182  delete xt_process;
183  if(Status != 0)
184  {
185  // != QProcess::NormalExit
187  QObject::tr("error executing X!Tandem Status != 0 : %1 %2\n%3")
188  .arg(tandem_bin_path)
189  .arg(arguments.join(" ").arg(result.data())));
190  }
191  qDebug();
192  return version_return;
193 }
194 
195 
196 bool
198 {
199  return false;
200 }
201 
202 
203 void
205 {
206  *mp_outputStream << m_xtProcess->readAllStandardOutput();
207  mp_outputStream->flush();
208 }
209 
210 void

◆ convertOrginalMsData2mzXmlData()

void pappso::TandemWrapperRun::convertOrginalMsData2mzXmlData ( const QString &  origin,
const QString &  target 
) const
private

Definition at line 369 of file tandemwrapperrun.cpp.

397  {
398  p_mzxml_output =
399  new pappso::MzxmlOutput(QTextStream(&output_file).device());
400 
401  p_mzxml_output->maskMs1(true);
402 
403  p_mzxml_output->setReadAhead(true);
404 
405  p_mzxml_output->write(p_reader.get());
406 
407  p_mzxml_output->close();
408  }
409  else
410  {
412  tr("unable to write into %1 mzXML output file").arg(target));
413  }
414 
415  qDebug();
416 }
417 
418 void
419 TandemWrapperRun::run(const QString &tandem_input_file,
420  QTextStream &output_stream,
421  QTextStream &error_stream)
422 {
423  mp_outputStream = &output_stream;
424  mp_errorStream = &error_stream;
425 
426  wrapTandemInputFile(tandem_input_file);
427  mp_outputStream = nullptr;
428  mp_errorStream = nullptr;
429 }
430 
431 void
432 TandemWrapperRun::runTandem(const QString &tandem_input_file)
433 {
434 

◆ readTandemPresetFile()

void pappso::TandemWrapperRun::readTandemPresetFile ( const QString &  tandem_preset_file)

Definition at line 267 of file tandemwrapperrun.cpp.

269  {
270  cpu_number = ideal_number_of_thread;
271  }
272  else
273  {
274  if(cpu_number > 0)
275  {
276  QThreadPool::globalInstance()->setMaxThreadCount(cpu_number);
277 
278  qDebug() << " maxThreadCount="
279  << QThreadPool::globalInstance()->maxThreadCount();
280  }
281  }
282 
283  if(!preset_handler.getCentroidOptions().isEmpty())
284  {
285  m_centroidOptions = preset_handler.getCentroidOptions();
286  }
287  }
288  else
289  {
291  QObject::tr("Error reading %1 X!Tandem preset file :\n %2")
292  .arg(tandem_preset_file)
293  .arg(preset_handler.errorString()));
294  }
295 }
296 
297 
298 void
299 TandemWrapperRun::wrapTandemInputFile(const QString &tandem_input_file)
300 {
301  // read original tandem input file
302  // store original ms data file name
303  // create new mzXML data file in temporary directory
304  // create new tandem input file based on new mzXML file
305  QString mzxml_data_file_name =
306  mpa_temporaryDirectory->filePath("msdata.mzxml");
307  QString wrapped_tandem_input =
308  mpa_temporaryDirectory->filePath("input_tandem.xml");
309  QString wrapped_tandem_output =
310  mpa_temporaryDirectory->filePath("output_tandem.xml");
311  XtandemInputSaxHandler wrap_input(
312  mzxml_data_file_name, wrapped_tandem_input, wrapped_tandem_output);
313 

◆ readyReadStandardError

void pappso::TandemWrapperRun::readyReadStandardError ( )
privateslot

Definition at line 229 of file tandemwrapperrun.cpp.

237  {

◆ readyReadStandardOutput

void pappso::TandemWrapperRun::readyReadStandardOutput ( )
privateslot

Definition at line 222 of file tandemwrapperrun.cpp.

222 {
223 
224  XtandemOutputSaxHandler wrap_output(final_tandem_output,
225  original_msdata_file_name);
226 

References m_centroidOptions, and pappso::XtandemOutputSaxHandler::setInputParameters().

◆ run()

void pappso::TandemWrapperRun::run ( const QString &  tandem_input_file,
QTextStream &  output_stream,
QTextStream &  error_stream 
)

run a tandem job

Parameters
tandem_input_filetandem xml input file
output_streamstandard output where to write tandem stdout
error_streamstandard error where to write tandem stderr

Definition at line 437 of file tandemwrapperrun.cpp.

◆ runTandem()

void pappso::TandemWrapperRun::runTandem ( const QString &  tandem_input_file)
private

run a tandem job

Parameters
tandem_input_filetandem xml input file

Definition at line 450 of file tandemwrapperrun.cpp.

459  {
461  QObject::tr("X!Tandem process failed to start"));
462  }
463 
464  qDebug() << m_tandemBinary << " " << m_xtProcess->arguments();
465 
466  while(m_xtProcess->waitForFinished(m_maxTandemRunTimeMs))
467  {
468  //_p_monitor->appendText(xt_process->readAll().data());
469  // data.append(xt_process->readAll());
470  if(shouldIstop())
471  {
472  m_xtProcess->kill();
473  delete m_xtProcess;
475  QObject::tr("X!Tandem stopped by the user processing on file %1")
476  .arg(tandem_input_file));
477  }
478  }
479 
480  QProcess::ExitStatus Status = m_xtProcess->exitStatus();
481 
482  delete m_xtProcess;
483  if(Status != 0)
484  {
485  // != QProcess::NormalExit
487  QObject::tr("error executing X!Tandem Status != 0 : %1")
488  .arg(m_tandemBinary));
489  }
490  m_xtProcess = nullptr;
491 }
492 } // namespace pappso

◆ setTandemBinaryPath()

void pappso::TandemWrapperRun::setTandemBinaryPath ( const QString &  tandem_binary_path)
private

Definition at line 95 of file tandemwrapperrun.cpp.

98 {
99  qDebug();
100  // check tandem path
101  QFileInfo tandem_exe(tandem_bin_path);
102  if(!tandem_exe.exists())
103  {
104  // dir.path() returns the unique directory path
106  QObject::tr(
107  "X!Tandem software not found at %1.\nPlease check the X!Tandem "
108  "installation on your computer and set tandem.exe path.")
109  .arg(tandem_exe.absoluteFilePath()));
110  }
111  if(!tandem_exe.isReadable())

◆ shouldIstop()

bool pappso::TandemWrapperRun::shouldIstop ( )
private

Definition at line 215 of file tandemwrapperrun.cpp.

222 {

◆ wrapTandemInputFile()

void pappso::TandemWrapperRun::wrapTandemInputFile ( const QString &  tandem_input_file)
private

Definition at line 317 of file tandemwrapperrun.cpp.

321  {
322  }
323  else
324  {
326  QObject::tr("Error reading %1 X!Tandem input file :\n %2")
327  .arg(tandem_input_file)
328  .arg(wrap_input.errorString()));
329  }
330 
331  // get number of threads and centroid parameters from tandem preset
332  readTandemPresetFile(wrap_input.getOriginalTandemPresetFileName());
333 
334 
335  // convert to mzXML
336  QString original_msdata_file_name = wrap_input.getOriginalMsDataFileName();
337  convertOrginalMsData2mzXmlData(original_msdata_file_name,
338  mzxml_data_file_name);
339 
340 
341  // launch tandem
342  runTandem(wrapped_tandem_input);
343 
344  // rewrite tandem result file
345  writeFinalTandemOutput(wrapped_tandem_output,
346  wrap_input.getOriginalTandemOutputFileName(),
347  original_msdata_file_name);
348 }
349 
350 void
352  const QString &target) const
353 {
354  qDebug();
355  pappso::MsFileAccessor origin_access(origin, "runa1");
356  origin_access.setPreferedFileReaderType(pappso::MzFormat::brukerTims,
358  origin_access.getMsRunIds();
359 
360  pappso::MsRunReaderSPtr p_reader;
361  p_reader = origin_access.msRunReaderSp(origin_access.getMsRunIds().front());
362  // if(!m_centroidOptions.isEmpty())
363  // {
364  pappso::TimsMsRunReaderMs2 *tims2_reader =
365  dynamic_cast<pappso::TimsMsRunReaderMs2 *>(p_reader.get());
366  if(tims2_reader != nullptr)

◆ writeFinalTandemOutput()

void pappso::TandemWrapperRun::writeFinalTandemOutput ( const QString &  tmp_tandem_output,
const QString &  final_tandem_output,
const QString &  original_msdata_file_name 
)
private

tandem output modification tandem output is modified to contain the Bruker's file as input and centroidization parameters

Parameters
tmp_tandem_outputraw tandem output filename
final_tandem_outputfinal destination file for modified tandem output

Definition at line 236 of file tandemwrapperrun.cpp.

237  {
238  }
239  else
240  {
242  QObject::tr("Error reading %1 X!Tandem output file :\n %2")
243  .arg(tmp_tandem_output)
244  .arg(wrap_output.errorString()));
245  }
246 }
247 
248 void
249 TandemWrapperRun::readTandemPresetFile(const QString &tandem_preset_file)
250 {
251  // get number of threads and centroid parameters from tandem preset
252 
253  XtandemPresetSaxHandler preset_handler;
254 
255  QFile qfile(tandem_preset_file);
256  QXmlInputSource xmlInputSource(&qfile);
257  QXmlSimpleReader simplereader;
258  simplereader.setContentHandler(&preset_handler);
259  simplereader.setErrorHandler(&preset_handler);
260 
261  if(simplereader.parse(xmlInputSource))
262  {
263 
264  int ideal_number_of_thread = QThread::idealThreadCount();

Member Data Documentation

◆ m_centroidOptions

QString pappso::TandemWrapperRun::m_centroidOptions
private

Definition at line 143 of file tandemwrapperrun.h.

Referenced by readyReadStandardOutput().

◆ m_maxTandemRunTimeMs

int pappso::TandemWrapperRun::m_maxTandemRunTimeMs = (60000 * 60 * 24)
private

Definition at line 144 of file tandemwrapperrun.h.

◆ m_tandemBinary

QString pappso::TandemWrapperRun::m_tandemBinary
private

Definition at line 140 of file tandemwrapperrun.h.

◆ m_tandemVersion

QString pappso::TandemWrapperRun::m_tandemVersion
private

Definition at line 141 of file tandemwrapperrun.h.

◆ m_tmpDir

QString pappso::TandemWrapperRun::m_tmpDir
private

Definition at line 142 of file tandemwrapperrun.h.

◆ m_xtProcess

QProcess* pappso::TandemWrapperRun::m_xtProcess = nullptr
private

Definition at line 145 of file tandemwrapperrun.h.

◆ mp_errorStream

QTextStream* pappso::TandemWrapperRun::mp_errorStream = nullptr
private

Definition at line 148 of file tandemwrapperrun.h.

◆ mp_outputStream

QTextStream* pappso::TandemWrapperRun::mp_outputStream = nullptr
private

Definition at line 147 of file tandemwrapperrun.h.

◆ mpa_temporaryDirectory

QTemporaryDir* pappso::TandemWrapperRun::mpa_temporaryDirectory = nullptr
private

Definition at line 150 of file tandemwrapperrun.h.


The documentation for this class was generated from the following files:
pappso::TandemWrapperRun::shouldIstop
bool shouldIstop()
Definition: tandemwrapperrun.cpp:215
pappso::TandemWrapperRun::m_maxTandemRunTimeMs
int m_maxTandemRunTimeMs
Definition: tandemwrapperrun.h:144
pappso::MzFormat::brukerTims
@ brukerTims
pappso::MzxmlOutput
Definition: mzxmloutput.h:63
pappso::MsRunReaderSPtr
std::shared_ptr< MsRunReader > MsRunReaderSPtr
Definition: msrunreader.h:172
pappso::TandemWrapperRun::m_tandemVersion
QString m_tandemVersion
Definition: tandemwrapperrun.h:141
pappso::TandemWrapperRun::setTandemBinaryPath
void setTandemBinaryPath(const QString &tandem_binary_path)
Definition: tandemwrapperrun.cpp:95
pappso::TandemWrapperRun::writeFinalTandemOutput
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...
Definition: tandemwrapperrun.cpp:236
pappso::TandemWrapperRun::m_centroidOptions
QString m_centroidOptions
Definition: tandemwrapperrun.h:143
pappso::TandemWrapperRun::readyReadStandardOutput
void readyReadStandardOutput()
Definition: tandemwrapperrun.cpp:222
pappso::TandemWrapperRun::runTandem
void runTandem(const QString &tandem_input_file)
run a tandem job
Definition: tandemwrapperrun.cpp:450
pappso::MsFileAccessor
Definition: msfileaccessor.h:34
pappso::TandemWrapperRun::mp_errorStream
QTextStream * mp_errorStream
Definition: tandemwrapperrun.h:148
pappso::TandemWrapperRun::mpa_temporaryDirectory
QTemporaryDir * mpa_temporaryDirectory
Definition: tandemwrapperrun.h:150
pappso::TandemWrapperRun::readyReadStandardError
void readyReadStandardError()
Definition: tandemwrapperrun.cpp:229
pappso::FileReaderType::tims_ms2
@ tims_ms2
pappso::TandemWrapperRun::m_xtProcess
QProcess * m_xtProcess
Definition: tandemwrapperrun.h:145
pappso::TimsMsRunReaderMs2
Definition: timsmsrunreaderms2.h:58
pappso::TandemWrapperRun::m_tandemBinary
QString m_tandemBinary
Definition: tandemwrapperrun.h:140
pappso::TandemWrapperRun::readTandemPresetFile
void readTandemPresetFile(const QString &tandem_preset_file)
Definition: tandemwrapperrun.cpp:267
pappso::TandemWrapperRun::run
void run(const QString &tandem_input_file, QTextStream &output_stream, QTextStream &error_stream)
run a tandem job
Definition: tandemwrapperrun.cpp:437
pappso::TandemWrapperRun::mp_outputStream
QTextStream * mp_outputStream
Definition: tandemwrapperrun.h:147
pappso::TandemWrapperRun::convertOrginalMsData2mzXmlData
void convertOrginalMsData2mzXmlData(const QString &origin, const QString &target) const
Definition: tandemwrapperrun.cpp:369
pappso::TandemWrapperRun::wrapTandemInputFile
void wrapTandemInputFile(const QString &tandem_input_file)
Definition: tandemwrapperrun.cpp:317
pappso::PappsoException
Definition: pappsoexception.h:62