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