diff --git a/tools/qcxms/.shed.yml b/tools/qcxms/.shed.yml new file mode 100644 index 00000000..8da2fe48 --- /dev/null +++ b/tools/qcxms/.shed.yml @@ -0,0 +1,22 @@ +name: QCxMS +owner: recetox +remote_repository_url: "https://github.com/RECETOX/galaxytools/tree/master/tools/qcxms" +homepage_url: "https://github.com/grimme-lab/QCxMS" +categories: + - Computational chemistry + - Molecular Dynamics +description: "QCxMS is a quantum chemical (QC) based program that enables users to calculate mass spectra (MS) using Born-Oppenheimer Molecular Dynamics (MD)." +long_description: | + "QCxMS is a quantum chemical (QC) based program that enables users to calculate mass spectra (MS) using Born-Oppenheimer Molecular Dynamics (MD). + It is the successor of the QCEIMS program, in which the EI part is exchanged to x (x=EI, CID) to account for the greater general applicability of the program. + The program was originally developed to calculate Electron Ionization (EI) mass spectra, + in which a (typically 70 eV) electron beam is focused on a molecule in order to create an open-shell radical ion (uneven number of valence electrons). + This process not only ionizes the molecule, but simultaneously increases the internal energy of the species, which in turn leads to bond breaking, + fragmentation, rearrangement, etc of the ion." +auto_tool_repositories: + name_template: "{{ tool_id }}" + description_template: "{{ tool_name }} tool from the QCxMS package" +suite: + name: suite_qcxms + description: tools from QCxMS are used for molecular geometry optimization and in silico calculation of mass spectra using quantum chemistry + type: repository_suite_definition diff --git a/tools/qcxms/macros.xml b/tools/qcxms/macros.xml new file mode 100644 index 00000000..fc4f5b2c --- /dev/null +++ b/tools/qcxms/macros.xml @@ -0,0 +1,26 @@ + + 5.2.1 + + + recetox/qcxms-docker:@TOOL_VERSION@ + + + + + topic_3332 + + + operation_0297 + + + + + + + + + + diff --git a/tools/qcxms/msp_out.sh b/tools/qcxms/msp_out.sh new file mode 100644 index 00000000..09fc9361 --- /dev/null +++ b/tools/qcxms/msp_out.sh @@ -0,0 +1,11 @@ +#!/bin/sh + +molname=`sed -n '2{p;q}' TMPQCXMS/TMP.1/start.xyz` +kword=$(grep 'NPOINTS' result.jdx) +num_peaks=$(echo "$kword" | sed 's/^[^=]*=//') +echo `pwd` +sed -n '/PEAK/,/END/{/PEAK/!{/END/!p}}' result.jdx > temp.dat +awk '{print $1, $2}' temp.dat > tempa.dat +sed "1s/^/NAME: $molname\nNum Peaks: $num_peaks\n/" tempa.dat >> simulated_spectra.msp +sed -i '$a\ ' simulated_spectra.msp +rm temp.dat tempa.dat \ No newline at end of file diff --git a/tools/qcxms/qcxms_neutral_run.xml b/tools/qcxms/qcxms_neutral_run.xml new file mode 100644 index 00000000..0c324d84 --- /dev/null +++ b/tools/qcxms/qcxms_neutral_run.xml @@ -0,0 +1,140 @@ + + required as first step to prepare for the production runs + + + macros.xml + + + + + + + > '$log' && + /qcxms_bin/qcxms -i molecule.xyz >> '$log' && + python3 rename.py + + ]]> + + + 1,2,1 + + + + + + +import os + +def rename_files_with_folder_name(folder_path): + if not os.path.exists(folder_path): + print(f"The folder '{folder_path}' does not exist.") + return + + for root, _, files in os.walk(folder_path): + for filename in files: + folder_name = os.path.basename(root) + new_filename = f"{folder_name}_{filename}" + + old_path = os.path.join(root, filename) + new_path = os.path.join(root, new_filename) + + os.rename(old_path, new_path) + +path = os.getcwd() + "/TMPQCXMS" +rename_files_with_folder_name(path) + + + + + + + + + +
+ + + + +
+ +
+ + + + store_extended_output + + + store_extended_output + + + store_extended_output + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + +
+
+ + + + + + 10.1002/anie.201300158 + 10.1039/C4OB01668H + 10.1021/jp5096618 + 10.1255/ejms.1313 + 10.1021/acs.jpca.6b02907 + +
\ No newline at end of file diff --git a/tools/qcxms/qcxms_prod_run.xml b/tools/qcxms/qcxms_prod_run.xml new file mode 100644 index 00000000..3501bcd2 --- /dev/null +++ b/tools/qcxms/qcxms_prod_run.xml @@ -0,0 +1,87 @@ + + Production run to obtain a QCxMS simulated mass spectrum + + + macros.xml + + + + + + > $log' && + /qcxms_bin/getres && + /plotms_bin/PlotMS.v.6.2.0/plotms && + sh ${__tool_directory__}/msp_out.sh + ]]> + + + 1,2,1 + + + + +import os +import shutil + +#set in_collection = str("', '").join([str($f) for $f in $in_files]) +#set start_collection = str("', '").join([str($f) for $f in $start_files]) +#set xyz_collection = str("', '").join([str($f) for $f in $xyz_files]) + +#set names = str("', '").join([str($f.name) for $f in $xyz_files]) +names = '$names' +folder_names = [x.split("_")[0] for x in names] + +in_collection = '$in_collection' +start_collection = '$start_collection' +xyz_collection = '$xyz_collection' + +# Create a new output folder to store the result +output_path = 'TMPQCXMS' +os.makedirs(output_path, exist_ok=True) + +for folder_name, in_file, start_file, xyz_file in zip(folder_names, in_collection, start_collection, xyz_collection): + new_folder_path = os.path.join(output_path, folder_name) + os.makedirs(new_folder_path, exist_ok=True) + + shutil.copy2(os.path.join(os.path.dirname(in_collection[0]), in_file), os.path.join(new_folder_path, 'qcxms.in')) + shutil.copy2(os.path.join(os.path.dirname(start_collection[0]), start_file), os.path.join(new_folder_path, 'qcxms.start')) + shutil.copy2(os.path.join(os.path.dirname(xyz_collection[0]), xyz_file), os.path.join(new_folder_path, 'start.xyz')) + + + + + + + + + + + + + + + store_extended_output + + + + + + + + + + + + 10.1002/anie.201300158 + 10.1039/C4OB01668H + 10.1021/jp5096618 + 10.1255/ejms.1313 + 10.1021/acs.jpca.6b02907 + + \ No newline at end of file diff --git a/tools/qcxms/test-data/mol.xyz b/tools/qcxms/test-data/mol.xyz new file mode 100644 index 00000000..92335cf7 --- /dev/null +++ b/tools/qcxms/test-data/mol.xyz @@ -0,0 +1,20 @@ +18 +Lindane +CL -2.3574740887 0.2795224786 1.4453580379 +C -1.5060254335 -0.0564753152 -0.1808833480 +C -0.7409992814 1.1908990145 -0.6060928106 +C -0.6154388189 -1.2913844585 -0.1359211653 +CL -0.4997346103 1.0723730326 -2.4801609516 +C 0.6426193118 1.3751488924 0.0051864041 +CL -1.5938731432 -2.7512128353 0.4462303221 +C 0.6645445824 -1.0841370821 0.6675278544 +CL 0.4618762434 2.1580321789 1.6895099878 +C 1.4344482422 0.0744384378 0.0415960811 +CL 1.6999230385 -2.6236054897 0.5561774969 +CL 3.0750505924 0.3596521318 0.8505522013 +H -2.3252866268 -0.2277424186 -0.8540474772 +H -1.3395941257 2.0737268925 -0.4863004684 +H -0.3587814867 -1.5482350588 -1.1510624886 +H 1.1898183823 2.1143426895 -0.5496439934 +H 0.4745289683 -0.9351251125 1.7152343988 +H 1.6943985224 -0.1802178770 -0.9732601047